コード例 #1
0
bool TestExtNetwork::test_inet_ntop() {
  String packed = f_chr(127) + f_chr(0) + f_chr(0) + f_chr(1);
  VS(f_inet_ntop(packed), "127.0.0.1");

  packed = f_str_repeat(f_chr(0), 15) + f_chr(1);
  VS(f_inet_ntop(packed), "::1");
  return Count(true);
}
コード例 #2
0
bool TestExtNetwork::test_inet_pton() {
  String packed = f_chr(127) + f_chr(0) + f_chr(0) + f_chr(1);
  VS(f_inet_pton("127.0.0.1"), packed);

  packed = f_str_repeat(f_chr(0), 15) + f_chr(1);
  VS(f_inet_pton("::1"), packed);
  VS(f_inet_pton("::1"), f_hex2bin("00000000000000000000000000000001"));
  return Count(true);
}
コード例 #3
0
bool TestExtMailparse::test_mailparse_msg_create() {
  const char *files[] = { "mime", "phpcvs1", "qp", "uue" };

  for (unsigned int i = 0; i < sizeof(files)/sizeof(files[0]); i++) {
    string file = files[i];
    string testname = "test/ext/test_ext_mailparse." + file + ".txt";
    string expname = "test/ext/test_ext_mailparse." + file + ".exp";

    Variant mime = f_mailparse_msg_create();
    PlainFile input;
    input.open(testname, "r");
    while (!input.eof()) {
      String data = input.read(1024);
      if (!data.isNull()) {
        f_mailparse_msg_parse(mime, data);
      }
    }
    input.close();

    Array arr = f_mailparse_msg_get_structure(mime);
    f_ob_start();
    echo("Message: "); echo(file.c_str()); echo("\n");
    for (ArrayIter iter(arr); iter; ++iter) {
      Variant partname = iter.second();
      int depth = f_count(f_explode(".", partname)) - 1;
      String indent = f_str_repeat("  ", depth * 2);

      Variant subpart = f_mailparse_msg_get_part(mime, partname);
      if (subpart.isNull()) {
        f_var_dump(partname); echo("\n");
        f_var_dump(arr);
        break;
      }

      Variant data = f_mailparse_msg_get_part_data(subpart);
      echo("\n"); echo(indent); echo("Part "); echo(partname); echo("\n");
      f_ksort(ref(data));
      for (ArrayIter iter(data); iter; ++iter) {
        String key = iter.first().toString();
        if (key != "headers" && key != "ending-pos-body") {
          echo(indent); echo(key); echo(" => ");
          f_var_dump(iter.second());
        }
      }
    }
    String output = f_ob_get_contents();

    Variant expect = f_file_get_contents(expname.c_str());
    VS(output, expect);
    f_ob_end_clean();
  }

  return Count(true);
}
コード例 #4
0
bool TestExtMisc::test_unpack() {
  // Also covered in TestCodeRun::TestExtMisc

  String iFF = f_str_repeat("\xFF", sizeof(int));
  String le32_FF("\xFF\x00\x00\x00", 4, AttachLiteral);
  String be32_FF("\x00\x00\x00\xFF", 4, AttachLiteral);
  String le16_FF("\xFF\x00", 2, AttachLiteral);
  String be16_FF("\x00\xFF", 2, AttachLiteral);

  uint32_t endian_check = 1;
  bool le = ((char*)&endian_check)[0];

  // HPHP, unlike PHP, truncates overflowing ints
  if (sizeof(int) == 8) {
    VUNPACK("I", iFF, 0x7FFFFFFFFFFFFFFF);
  } else if (sizeof(int) == 4) {
    VUNPACK("I", iFF, 0xFFFFFFFF);
  } else {
    // Panic
    VS(true, false);
  }

  VUNPACK("i", iFF, -1);

  // LlNV test 32-bit ints specifically
  VUNPACK("L", iFF, 0xFFFFFFFF);
  VUNPACK("l", iFF, -1);

  VUNPACK("N", be32_FF, 0xFF);
  VUNPACK("V", le32_FF, 0xFF);
  VUNPACK("V", be32_FF, 0xFF000000);

  VUNPACK("L", le ? le32_FF : be32_FF, 0xFF);

  // Ssnv test 16-bit shorts
  VUNPACK("S", iFF, 0xFFFF);
  VUNPACK("s", iFF, -1);

  VUNPACK("n", be16_FF, 0xFF);
  VUNPACK("v", le16_FF, 0xFF);
  VUNPACK("v", be16_FF, 0xFF00);

  VUNPACK("S", le ? le16_FF : be16_FF, 0xFF);

  return Count(true);
}
コード例 #5
0
bool TestExtString::test_str_repeat() {
  VS(f_str_repeat("-=", 10), "-=-=-=-=-=-=-=-=-=-=");
  return Count(true);
}