13 const test_st tests[] = {
15 "foo*", "", SILC_STRINGPREP_ERR_PROHIBITED},
17 "?foo", "", SILC_STRINGPREP_ERR_PROHIBITED},
19 "f,f", "", SILC_STRINGPREP_ERR_PROHIBITED},
21 "!", "", SILC_STRINGPREP_ERR_PROHIBITED},
23 "foo@faa", "", SILC_STRINGPREP_ERR_PROHIBITED},
25 "Foobbeli-BofJFlkJDF", "foobbeli-bofjflkjdf"},
27 "sauna.silcnet.org", "sauna.silcnet.org"},
31 "Päivää", "päivää", 0, SILC_STRING_LOCALE},
33 "#öäöö/&#\\#(&(&#(.äöäÄÖäÄÖÄÖ^'",
34 "#öäöö/&#\\#(&(&#(.äöääöääöäö^'", 0, SILC_STRING_LOCALE},
36 /* Some libidn tests */
38 "foo\xC2\xAD\xCD\x8F\xE1\xA0\x86\xE1\xA0\x8B"
39 "bar" "\xE2\x80\x8B\xE2\x81\xA0" "baz\xEF\xB8\x80\xEF\xB8\x88"
40 "\xEF\xB8\x8F\xEF\xBB\xBF", "foobarbaz"},
41 {"Case folding ASCII U+0043 U+0041 U+0046 U+0045", "CAFE", "cafe"},
42 {"Case folding 8bit U+00DF (german sharp s)", "\xC3\x9F", "ss"},
43 {"Case folding U+0130 (turkish capital I with dot)",
44 "\xC4\xB0", "i\xcc\x87"},
45 {"ASCII space character U+0020", "\x20", "\x20",
46 SILC_STRINGPREP_ERR_PROHIBITED},
47 {"ASCII control characters U+0010 U+007F", "\x10\x7F", "\x10\x7F",
48 SILC_STRINGPREP_ERR_PROHIBITED},
51 const test_st tests_norm[] = {
53 "Pekka Riikonen", "pekka riikonen"},
55 "PEKKA RIIKONEN", "pekka riikonen"},
57 "pekka riikonen", "pekka riikonen"},
59 "#ksPPPAA", "#kspppaa"},
61 "Foobbeli-BofJFlkJDF", "foobbeli-bofjflkjdf"},
63 "sauna.silcnet.org", "sauna.silcnet.org"},
65 "Päivää", "päivää", 0, SILC_STRING_LOCALE},
67 "#öäöö/&#\\#(&(&#(.äöäÄÖäÄÖÄÖ^'",
68 "#öäöö/&#\\#(&(&#(.äöääöääöäö^'", 0, SILC_STRING_LOCALE},
71 int main(int argc, char **argv)
73 SilcBool success = FALSE;
75 unsigned char *out = NULL;
77 SilcStringprepStatus ret;
79 if (argc > 1 && !strcmp(argv[1], "-d")) {
81 silc_log_debug_hexdump(TRUE);
83 silc_log_set_debug_string("*stringprep*,*utf8*");
86 SILC_LOG_DEBUG(("--- Identifier string tests"));
88 for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
89 SILC_LOG_DEBUG(("Test case %d", i));
90 SILC_LOG_DEBUG((" %d: %s", i, tests[i].comment));
91 SILC_LOG_DEBUG((" %d: in: %s", i, tests[i].in));
92 SILC_LOG_DEBUG((" %d: out: %s", i, tests[i].out));
93 SILC_LOG_DEBUG((" %d: ret: %d", i, tests[i].ret));
96 enc = SILC_STRING_UTF8;
99 ret = silc_stringprep(tests[i].in, strlen(tests[i].in),
100 enc, SILC_IDENTIFIER_PREP, 0,
101 &out, &out_len, enc);
102 if (ret != SILC_STRINGPREP_OK) {
103 if (tests[i].ret != SILC_STRINGPREP_OK) {
104 SILC_LOG_DEBUG((" %d: Expected ret %d", i, ret));
106 SILC_LOG_DEBUG(("%d: Error: %d", i, ret));
110 SILC_LOG_DEBUG((" %d: prepared out: %s", i, out));
111 SILC_LOG_HEXDUMP((" %d: prepared dump", i), out, out_len);
112 if (memcmp(out, tests[i].out, out_len)) {
113 SILC_LOG_DEBUG((" %d: Output mismatch", i));
117 SILC_LOG_DEBUG((" %d: Output match", i));
123 SILC_LOG_DEBUG(("--- Casefold tests"));
125 for (i = 0; i < sizeof(tests_norm) / sizeof(tests_norm[0]); i++) {
126 SILC_LOG_DEBUG(("Test case %d", i));
127 SILC_LOG_DEBUG((" %d: %s", i, tests_norm[i].comment));
128 SILC_LOG_DEBUG((" %d: in: %s", i, tests_norm[i].in));
129 SILC_LOG_DEBUG((" %d: out: %s", i, tests_norm[i].out));
130 SILC_LOG_DEBUG((" %d: ret: %d", i, tests_norm[i].ret));
132 if (!tests_norm[i].enc)
133 enc = SILC_STRING_UTF8;
135 enc = tests_norm[i].enc;
136 ret = silc_stringprep(tests_norm[i].in, strlen(tests_norm[i].in),
137 enc, SILC_CASEFOLD_PREP, 0,
138 &out, &out_len, enc);
139 if (ret != SILC_STRINGPREP_OK) {
140 if (tests_norm[i].ret != SILC_STRINGPREP_OK) {
141 SILC_LOG_DEBUG((" %d: Expected ret %d", i, ret));
143 SILC_LOG_DEBUG(("%d: Error: %d", i, ret));
147 SILC_LOG_DEBUG((" %d: prepared out: %s", i, out));
148 SILC_LOG_HEXDUMP((" %d: prepared dump", i), out, out_len);
149 if (memcmp(out, tests_norm[i].out, out_len)) {
150 SILC_LOG_DEBUG((" %d: Output mismatch", i));
154 SILC_LOG_DEBUG((" %d: Output match", i));
163 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
164 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");