/** * Test characters that should be unchanged * Mostly a copy from URL encoding */ static char* testXmlDecodeUntouched(void) { const char* lower = "abcdefghijklmnopqrstuvwxyz"; const char* upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const char* digits = "0123456789"; const char* special = ".-_~!$()*,;:@/?"; char buf[1000]; size_t d = 0; memset(buf, 0, sizeof(buf)); d = modp_xml_decode(buf, lower, strlen(lower)); mu_assert_int_equals(d, strlen(lower)); mu_assert_str_equals(buf, lower); memset(buf, 0, sizeof(buf)); d = modp_xml_decode(buf, upper, strlen(upper)); mu_assert_int_equals(d, strlen(upper)); mu_assert_str_equals(buf, upper); memset(buf, 0, sizeof(buf)); d = modp_xml_decode(buf, digits, strlen(digits)); mu_assert_int_equals(d, strlen(digits)); mu_assert_str_equals(buf, digits); memset(buf, 0, sizeof(buf)); d = modp_xml_decode(buf, special, strlen(special)); mu_assert_int_equals(d, strlen(special)); mu_assert_str_equals(buf, special); return 0; }
static char* testEndian(void) { // this test that "0001" is "00000001" char buf[100]; char result[10]; char endian[] = {(char)0, (char)0, (char)0, (char)1}; size_t d = modp_b16_encode(buf, endian, (size_t)4); mu_assert_int_equals(8, d); mu_assert_str_equals("00000001", buf); mu_assert_int_equals('0', buf[0]); mu_assert_int_equals('0', buf[1]); mu_assert_int_equals('0', buf[2]); mu_assert_int_equals('0', buf[3]); mu_assert_int_equals('0', buf[4]); mu_assert_int_equals('0', buf[5]); mu_assert_int_equals('0', buf[6]); mu_assert_int_equals('1', buf[7]); memset(result, 255, sizeof(result)); d = modp_b16_decode(result, buf, (size_t)8); mu_assert_int_equals(4, d); mu_assert_int_equals(endian[0], result[0]); mu_assert_int_equals(endian[1], result[1]); mu_assert_int_equals(endian[2], result[2]); mu_assert_int_equals(endian[3], result[3]); return 0; }
static char* testSimpleEscape() { char buf[100]; const char* s1 = "\\this\nis a string\n"; const char* s2 = "\\\\this\\nis a string\\n"; const int len1 = strlen(s1); const int len2 = strlen(s2); int d = modp_bjavascript_encode(buf, s1, len1); mu_assert_int_equals(len2, d); mu_assert_str_equals(buf, s2); int sz = modp_bjavascript_encode_strlen(s1, len1); mu_assert_int_equals(sz, len2); /* * Test the Raw escape '\' --> '\\' */ char ibuf[] = {'\\', '\0'}; memset(buf, 0, sizeof(buf)); d = modp_bjavascript_encode(buf,ibuf, 1); mu_assert_int_equals(buf[0], '\\'); mu_assert_int_equals(buf[1], '\\'); mu_assert_int_equals(buf[2], 0); return 0; }
/** * Tests input where no escaping happens */ static char* testNoEscape() { char buf[100]; const char* s1 = "this is a string"; const int len1 = strlen(s1); int d = modp_bjavascript_encode(buf, s1, len1); mu_assert_int_equals(len1, d); mu_assert_str_equals(buf, s1); int sz = modp_bjavascript_encode_strlen(s1, len1); mu_assert_int_equals(sz, len1); return 0; }
/** * Bad entity name.. not existant */ static char* testXmlDecodeBadNames1(void) { const char* strin = "X&quo;X"; const char* strout = "X&quo;X"; char buf[1000]; size_t d = 0; memset(buf, 0, sizeof(buf)); d = modp_xml_decode(buf, strin, strlen(strin)); mu_assert_int_equals(d, strlen(strout)); mu_assert_str_equals(strout, buf); return 0; }
static char* testBinaryEscape() { char buf[100]; const char s1[] = {1,2,3,4,0}; const char* s2 = "\\x01\\x02\\x03\\x04"; const int len1 = strlen(s1); const int len2 = strlen(s2); int d = modp_bjavascript_encode(buf, s1, len1); mu_assert_int_equals(len2, d); mu_assert_str_equals(buf, s2); int sz = modp_bjavascript_encode_strlen(s1, len1); mu_assert_int_equals(sz, len2); return 0; }
/** * Test characters that should be unchanged * Mostly a copy from URL encoding */ static char* testXmlDecodeNames(void) { const char* strin = "X"X'X&X>X<X"; const char* strout = "X\"X'X&X>X<X"; char buf[1000]; size_t d = 0; memset(buf, 0, sizeof(buf)); d = modp_xml_decode(buf, strin, strlen(strin)); mu_assert_int_equals(d, strlen(strout)); mu_assert_str_equals(strout, buf); return 0; }
static char* testXmlUnicodeCharToUTF8(void) { char buf[1000]; size_t d = 0; int val = 0; d = modp_xml_unicode_char_to_utf8(buf, 0x41); mu_assert_int_equals(1, d); buf[d] = '\0'; mu_assert_str_equals(buf, "A"); // Cent symbol d = modp_xml_unicode_char_to_utf8(buf, 0x00A2); mu_assert_int_equals(2, d); val = (unsigned char) buf[0]; mu_assert_int_equals(val, 0xC2); val = (unsigned char) buf[1]; mu_assert_int_equals(val, 0xA2); // Euro symbol d = modp_xml_unicode_char_to_utf8(buf, 0x20AC); mu_assert_int_equals(3, d); val = (unsigned char) buf[0]; mu_assert_int_equals(val, 0xE2); val = (unsigned char) buf[1]; mu_assert_int_equals(val, 0x82); val = (unsigned char) buf[2]; mu_assert_int_equals(val, 0xAC); // Chinese Character d = modp_xml_unicode_char_to_utf8(buf, 0x24B62); mu_assert_int_equals(4, d); val = (unsigned char) buf[0]; mu_assert_int_equals(val, 0xF0); val = (unsigned char) buf[1]; mu_assert_int_equals(val, 0xA4); val = (unsigned char) buf[2]; mu_assert_int_equals(val, 0xAD); val = (unsigned char) buf[3]; mu_assert_int_equals(val, 0xA2); return 0; }
static char* testDQuoteEscape() { char buf[100]; const char* s1 = "this is a \"string\"\n"; const char* s2 = "this is a \\\"string\\\"\\n"; const int len1 = strlen(s1); const int len2 = strlen(s2); int d = modp_bjavascript_encode(buf, s1, len1); mu_assert_int_equals(len2, d); mu_assert_str_equals(buf, s2); int sz = modp_bjavascript_encode_strlen(s1, len1); mu_assert_int_equals(sz, len2); char ibuf[] = {'\"', '\0'}; memset(buf, 0, sizeof(buf)); d = modp_bjavascript_encode(buf, ibuf, 1); mu_assert_int_equals(buf[0], '\\'); mu_assert_int_equals(buf[1], '\"'); mu_assert_int_equals(buf[2], '\0'); return 0; }