1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
|
-module(tests).
-include_lib("eunit/include/eunit.hrl").
-compile(export_all).
application_start_test_() ->
[ ?_assertMatch({ok, _},
application:ensure_all_started(stringprep)),
?_assertEqual(ok, stringprep:start()) ].
application_start_stop_start_test_() ->
[ ?_assertEqual({ok, []},
application:ensure_all_started(stringprep)),
?_assertEqual(ok, application:stop(stringprep)),
?_assertEqual(ok, stringprep:start()) ].
badarg_test() ->
?assertError(badarg, stringprep:nodeprep(foo)),
?assertError(badarg, stringprep:nameprep(123)),
?assertError(badarg, stringprep:resourceprep({foo, bar})),
?assertError(badarg, stringprep:tolower(fun() -> ok end)).
empty_string_test() ->
?assertEqual(<<>>, stringprep:nodeprep(<<>>)),
?assertEqual(<<>>, stringprep:nameprep(<<>>)),
?assertEqual(<<>>, stringprep:resourceprep(<<>>)),
?assertEqual(<<>>, stringprep:tolower(<<>>)).
'@_nodeprep_test'() ->
?assertEqual(error, stringprep:nodeprep(<<"@">>)).
tolower_test() ->
?assertEqual(<<"abcd">>, stringprep:tolower(<<"AbCd">>)).
resourceprep_test() ->
?assertEqual(
<<95,194,183,194,176,226,137,136,88,46,209,130,208,189,206,
181,32,208,188,97,206,183,32,195,143,197,139,32,196,174,
209,143,207,131,206,174,32,208,188,97,115,208,186,46,88,
226,137,136,194,176,194,183,95>>,
stringprep:resourceprep(
<<95,194,183,194,176,226,137,136,88,46,209,130,208,189,
206,181,32,208,188,194,170,206,183,32,195,143,197,139,
32,196,174,209,143,207,131,206,174,32,208,188,194,170,
115,208,186,46,88,226,137,136,194,176,194,183,95>>)).
nameprep_fail_test() ->
?assertEqual(error,
stringprep:nameprep(<<217,173,65,112,107,97,119,97,217,173>>)).
vector_test() ->
Cases = [
{<<"foo", 16#C2, 16#AD, 16#CD, 16#8F, 16#E1, 16#A0, 16#86, 16#E1, 16#A0, 16#8B,
"bar", 16#E2, 16#80, 16#8B, 16#E2, 16#81, 16#A0, "baz", 16#EF, 16#B8, 16#80,
16#EF, 16#B8, 16#88, 16#EF, 16#B8, 16#8F, 16#EF, 16#BB, 16#BF>>,
<<"foobarbaz">>,
<<"foobarbaz">>,
<<"foobarbaz">>,
<<"foobarbaz">>},
{<<"CAFE">>,
<<"cafe">>,
<<"cafe">>,
<<"CAFE">>,
<<"cafe">>},
{<<16#C3, 16#9F>>,
<<"ss">>,
<<"ss">>,
<<16#C3, 16#9F>>,
<<"ss">>},
{<<16#C4, 16#B0>>,
<<"i", 16#CC, 16#87>>,
<<"i", 16#CC, 16#87>>,
<<16#C4, 16#B0>>,
<<"i", 16#CC, 16#87>>},
{<<16#C5, 16#83, 16#CD, 16#BA>>,
<<16#C5, 16#84, " ", 16#CE, 16#B9>>,
error,
<<16#C5, 16#83, " ", 16#CD, 16#85>>,
<<16#C5, 16#84, " ", 16#CE, 16#B9>>},
{<<16#E2, 16#84, 16#A1, 16#E3, 16#8F, 16#86, 16#F0, 16#9D, 16#9E, 16#BB>>,
<<"telC", 16#E2, 16#88, 16#95, "kg", 16#CF, 16#83>>,
<<"telC", 16#E2, 16#88, 16#95, "kg", 16#CF, 16#83>>,
<<"TELC", 16#E2, 16#88, 16#95, "kg", 16#CF, 16#82>>,
<<"telC", 16#E2, 16#88, 16#95, "kg", 16#CF, 16#83>>},
{<<"j", 16#CC, 16#8C, 16#C2, 16#A0, 16#C2, 16#AA>>,
<<16#C7, 16#B0, " a">>,
error,
<<16#C7, 16#B0, " a">>,
<<16#C7, 16#B0, " a">>},
{<<16#E1, 16#BE, 16#B7>>,
<<16#E1, 16#BE, 16#B6, 16#CE, 16#B9>>,
<<16#E1, 16#BE, 16#B6, 16#CE, 16#B9>>,
<<16#E1, 16#BE, 16#B7>>,
<<16#E1, 16#BE, 16#B6, 16#CE, 16#B9>>},
{<<16#C7, 16#F0>>,
error,
error,
error,
error},
{<<16#CE, 16#90>>,
<<16#CE, 16#90>>,
<<16#CE, 16#90>>,
<<16#CE, 16#90>>,
<<16#CE, 16#90>>},
{<<16#CE, 16#B0>>,
<<16#CE, 16#B0>>,
<<16#CE, 16#B0>>,
<<16#CE, 16#B0>>,
<<16#CE, 16#B0>>},
{<<16#E1, 16#BA, 16#96>>,
<<16#E1, 16#BA, 16#96>>,
<<16#E1, 16#BA, 16#96>>,
<<16#E1, 16#BA, 16#96>>,
<<16#E1, 16#BA, 16#96>>},
{<<16#E1, 16#BD, 16#96>>,
<<16#E1, 16#BD, 16#96>>,
<<16#E1, 16#BD, 16#96>>,
<<16#E1, 16#BD, 16#96>>,
<<16#E1, 16#BD, 16#96>>},
{<<" ">>,
<<" ">>,
error,
<<" ">>,
<<" ">>},
{<<16#C2, 16#A0>>,
<<" ">>,
error,
<<" ">>,
<<" ">>},
{<<16#E1, 16#9A, 16#80>>,
error,
error,
error,
error},
{<<16#E2, 16#80, 16#80>>,
<<" ">>,
error,
<<" ">>,
<<" ">>},
{<<16#E2, 16#80, 16#8B>>,
<<>>,
<<>>,
<<>>,
<<>>},
{<<16#E3, 16#80, 16#80>>,
<<" ">>,
error,
<<" ">>,
<<" ">>},
{<<16#10, 16#7f>>,
<<16#10, 16#7f>>,
error,
error,
<<16#10, 16#7f>>},
{<<16#C2, 16#85>>,
error,
error,
error,
error},
{<<16#E1, 16#A0, 16#8E>>,
error,
error,
error,
error},
{<<16#EF, 16#BB, 16#BF>>,
<<>>,
<<>>,
<<>>,
<<>>},
{<<16#F0, 16#9D, 16#85, 16#B5>>,
error,
error,
error,
error},
{<<16#EF, 16#84, 16#A3>>,
error,
error,
error,
error},
{<<16#F3, 16#B1, 16#88, 16#B4>>,
error,
error,
error,
error},
{<<16#F4, 16#8F, 16#88, 16#B4>>,
error,
error,
error,
error},
{<<16#F2, 16#8F, 16#BF, 16#BE>>,
error,
error,
error,
error},
{<<16#F4, 16#8F, 16#BF, 16#BF>>,
error,
error,
error,
error},
{<<16#ED, 16#BD, 16#82>>,
error,
error,
error,
error},
{<<16#EF, 16#BF, 16#BD>>,
error,
error,
error,
error},
{<<16#E2, 16#BF, 16#B5>>,
error,
error,
error,
error},
{<<16#CD, 16#81>>,
<<16#CC, 16#81>>,
<<16#CC, 16#81>>,
<<16#CC, 16#81>>,
<<16#CC, 16#81>>},
{<<16#E2, 16#80, 16#8E>>,
error,
error,
error,
error},
{<<16#E2, 16#80, 16#AA>>,
error,
error,
error,
error},
{<<16#F3, 16#A0, 16#80, 16#81>>,
error,
error,
error,
error},
{<<16#F3, 16#A0, 16#81, 16#82>>,
error,
error,
error,
error},
{<<"foo", 16#D6, 16#BE, "bar">>,
error,
error,
error,
error},
{<<"foo", 16#EF, 16#B5, 16#90, "bar">>,
error,
error,
error,
error},
{<<"foo", 16#EF, 16#B9, 16#B6, "bar">>,
<<"foo ", 16#D9, 16#8E, "bar">>,
error,
<<"foo ", 16#D9, 16#8E, "bar">>,
<<"foo ", 16#D9, 16#8E, "bar">>},
{<<16#D8, 16#A7, "1">>,
error,
error,
error,
error},
{<<16#D8, 16#A7, "1", 16#D8, 16#A8>>,
<<16#D8, 16#A7, "1", 16#D8, 16#A8>>,
<<16#D8, 16#A7, "1", 16#D8, 16#A8>>,
<<16#D8, 16#A7, "1", 16#D8, 16#A8>>,
<<16#D8, 16#A7, "1", 16#D8, 16#A8>>},
{<<16#F3, 16#A0, 16#80, 16#82>>,
error,
error,
error,
error},
{<<"X", 16#C2, 16#AD, 16#C3, 16#9F, 16#C4, 16#B0, 16#E2, 16#84, 16#A1, "j", 16#CC, 16#8C,
16#C2, 16#A0, 16#C2, 16#AA, 16#CE, 16#B0, 16#E2, 16#80, 16#80>>,
<<"xssi", 16#CC, 16#87, "tel", 16#C7, 16#B0, " a", 16#CE, 16#B0, " ">>,
error,
<<"X", 16#C3, 16#9F, 16#C4, 16#B0, "TEL", 16#C7, 16#B0, " a", 16#CE, 16#B0, " ">>,
<<"xssi", 16#CC, 16#87, "tel", 16#C7, 16#B0, " a", 16#CE, 16#B0, " ">>},
{<<"X", 16#C3, 16#9F, 16#E3, 16#8C, 16#96, 16#C4, 16#B0, 16#E2, 16#84, 16#A1, 16#E2, 16#92,
16#9F, 16#E3, 16#8C, 16#80>>,
<<"xss", 16#E3, 16#82, 16#AD, 16#E3, 16#83, 16#AD, 16#E3, 16#83, 16#A1, 16#E3, 16#83, 16#BC,
16#E3, 16#83, 16#88, 16#E3, 16#83, 16#AB, "i", 16#CC, 16#87, "tel(d)", 16#E3, 16#82, 16#A2,
16#E3, 16#83, 16#91, 16#E3, 16#83, 16#BC, 16#E3, 16#83, 16#88>>,
<<"xss", 16#E3, 16#82, 16#AD, 16#E3, 16#83, 16#AD, 16#E3, 16#83, 16#A1, 16#E3, 16#83, 16#BC,
16#E3, 16#83, 16#88, 16#E3, 16#83, 16#AB, "i", 16#CC, 16#87, "tel(d)", 16#E3, 16#82, 16#A2,
16#E3, 16#83, 16#91, 16#E3, 16#83, 16#BC, 16#E3, 16#83, 16#88>>,
<<"X", 16#C3, 16#9F, 16#E3, 16#82, 16#AD, 16#E3, 16#83, 16#AD, 16#E3, 16#83, 16#A1, 16#E3,
16#83, 16#BC, 16#E3, 16#83, 16#88, 16#E3, 16#83, 16#AB, 16#C4, 16#B0, "TEL(d)", 16#E3, 16#82,
16#A2, 16#E3, 16#83, 16#91, 16#E3, 16#83, 16#BC, 16#E3, 16#83, 16#88>>,
<<"xss", 16#E3, 16#82, 16#AD, 16#E3, 16#83, 16#AD, 16#E3, 16#83, 16#A1, 16#E3, 16#83, 16#BC,
16#E3, 16#83, 16#88, 16#E3, 16#83, 16#AB, "i", 16#CC, 16#87, "tel(d)", 16#E3, 16#82, 16#A2,
16#E3, 16#83, 16#91, 16#E3, 16#83, 16#BC, 16#E3, 16#83, 16#88>>}
],
lists:foreach(fun({Arg, Name, Node, Resource, Lower}) ->
?assertEqual(Name, stringprep:nameprep(Arg)),
?assertEqual(Node, stringprep:nodeprep(Arg)),
?assertEqual(Resource, stringprep:resourceprep(Arg)),
?assertEqual(Lower, stringprep:tolower(Arg))
end, Cases).
application_stop_test() ->
?assertEqual(ok, application:stop(stringprep)).
|