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); }
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); }
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); }
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); }
bool TestExtString::test_str_repeat() { VS(f_str_repeat("-=", 10), "-=-=-=-=-=-=-=-=-=-="); return Count(true); }