1169d92004-05-02Martin Nilsson START_MARKER
05dc762001-07-20Martin Stjernholm 
39a7012004-01-27Martin Nilsson test_eq(_Roxen.html_encode_string (0), "0") test_eq(_Roxen.html_encode_string (""), "") test_eq(_Roxen.html_encode_string (10), "10") test_eq(_Roxen.html_encode_string("a&b<c>d"), "a&amp;b&lt;c&gt;d") test_eq(_Roxen.http_decode_string(""), "") test_eq(_Roxen.http_decode_string("abc+d%20e%41"), "abc+d eA") test_eq(_Roxen.http_decode_string(""), "")
6af85a2012-09-13Martin Nilsson test_eq(_Roxen.http_decode_string("+"), "+")
6812792014-10-16Arne Goedeke 
d13a212016-03-02Henrik Grubbström (Grubba) test_eq(_Roxen.http_decode_string("%uD83D%uDE02"), "\U0001f602")
1837dd2014-10-16Arne Goedeke // the following inputs are all illegal
6812792014-10-16Arne Goedeke test_eval_error(_Roxen.http_decode_string("%")) test_eval_error(_Roxen.http_decode_string("%0")) test_eval_error(_Roxen.http_decode_string("%%")) test_eval_error(_Roxen.http_decode_string("%%%")) test_eval_error(_Roxen.http_decode_string("%41%")) test_eval_error(_Roxen.http_decode_string("%41%0")) test_eval_error(_Roxen.http_decode_string("%41%%")) test_eval_error(_Roxen.http_decode_string("%41%%%")) test_eval_error(_Roxen.http_decode_string("%u")) test_eval_error(_Roxen.http_decode_string("%u0")) test_eval_error(_Roxen.http_decode_string("%u00")) test_eval_error(_Roxen.http_decode_string("%u000")) test_eval_error(_Roxen.http_decode_string("%u000_")) test_eval_error(_Roxen.http_decode_string("%41%u")) test_eval_error(_Roxen.http_decode_string("%41%u0")) test_eval_error(_Roxen.http_decode_string("%41%u00")) test_eval_error(_Roxen.http_decode_string("%41%u000")) test_eval_error(_Roxen.http_decode_string("%41%u000_"))
d13a212016-03-02Henrik Grubbström (Grubba) dnl test_eval_error(_Roxen.http_decode_string("%uD83D")) dnl test_eval_error(_Roxen.http_decode_string("%uDE02")) dnl test_eval_error(_Roxen.http_decode_string("X%uD83DX")) dnl test_eval_error(_Roxen.http_decode_string("X%uDE02X"))
6812792014-10-16Arne Goedeke 
39a7012004-01-27Martin Nilsson test_eq(_Roxen.http_decode_string("%u12345"), "\x1234""5") test_eq(_Roxen.http_decode_string("%U12345"), "\x1234""5")
7113c02004-01-27Martin Nilsson  define(test_mkhttp,[[ test_any_equal([[ string x=_Roxen.make_http_headers($1); if(!has_suffix(x, "\r\n")) return -1; return sort(x/"\r\n"-({""})); ]],$2) ]]) test_eval_error(_Roxen.make_http_headers(0)) test_mkhttp( ([]), ({}) ) test_mkhttp( (["":""]), ({": "}) ) test_mkhttp( (["a":"1","b":"2"]), ({"a: 1","b: 2"}) ) test_mkhttp( (["a":"1","b":({"2","3"})]), ({"a: 1","b: 2","b: 3"}) ) test_mkhttp( (["a":"1","b":({"2","2"})]), ({"a: 1","b: 2","b: 2"}) )
f2225c2009-07-29Martin Nilsson 
936dd92016-06-29Henrik Grubbström (Grubba) test_eval_error(_Roxen.make_http_headers((["a:1": "1"]))) test_eval_error(_Roxen.make_http_headers((["a\rb": "1"]))) test_eval_error(_Roxen.make_http_headers((["a\nb": "1"]))) test_eval_error(_Roxen.make_http_headers(([" a:1": "1"]))) test_eval_error(_Roxen.make_http_headers((["a": "1\r"]))) test_eval_error(_Roxen.make_http_headers((["a": "1\n"]))) test_eval_error(_Roxen.make_http_headers((["a": ({ "1\r\nb:2", "2\r\nc:2" })))))
f2225c2009-07-29Martin Nilsson define(test_hp,[[
a979c32016-07-25Martin Nilsson  test_any_equal([[ object hp = _Roxen.HeaderParser();
935e742016-07-27Martin Nilsson  if( $2[0]=="" ) { // Only feed in increments when we are not testing trailing data. Stdio.Buffer data = Stdio.Buffer($1); while( sizeof(data) ) { mixed res = hp->feed(data->read(1)); if(res) return res; } return -1; } return hp->feed( $1 ); ]], $2) test_any_equal([[ object hp = _Roxen.HeaderParser(); if( $2[0]=="" ) { // Only feed in increments when we are not testing trailing data. Stdio.Buffer data = Stdio.Buffer($1); while( sizeof(data) ) { string s = data->read(random(3)); if(!s) s = data->read(1); mixed res = hp->feed(s); if(res) return res; } return -1; }
a979c32016-07-25Martin Nilsson  return hp->feed( $1 ); ]], $2)
f2225c2009-07-29Martin Nilsson ]])
a979c32016-07-25Martin Nilsson test_hp( "GET / HTTP/1.0\r\n\r\n", ({ "", "GET / HTTP/1.0", ([]) })) test_hp( "GET / HTTP/1.0\r\n\r\nDATA", ({ "DATA", "GET / HTTP/1.0", ([]) })) test_hp( "GET / HTTP/1.0\r\nhdr: 1\r\n\r\nDATA", ({ "DATA", "GET / HTTP/1.0", ([ "hdr":"1"]) })) test_hp( "GET / HTTP/1.0\r\nBlaha: foo\nbar\r\nzonk: 1\r\n\r\n",
f2225c2009-07-29Martin Nilsson ({ "", "GET / HTTP/1.0", ([ "blaha":"foo", "zonk":"1" ]) }) ) test_hp( "GET / HTTP/1.0\r\nblaha: foo\r\nzonk: 1\r\n\r\n", ({ "", "GET / HTTP/1.0", ([ "blaha":"foo", "zonk":"1" ]) }) )
a979c32016-07-25Martin Nilsson test_hp( "GET / HTTP/1.0\r\nblaha: foo\n\rBlaha: bar\r\n\r\n",
f2225c2009-07-29Martin Nilsson ({ "", "GET / HTTP/1.0", ([ "blaha":({ "foo", "bar" }) ]) }) )
1496722016-07-27Martin Nilsson test_hp( "GET / HTTP/1.0\r\nblaha: foo\r\n bar\r\nx:1\r\n\t2\r\n\r\n", ({ "", "GET / HTTP/1.0", ([ "blaha":"foo bar", "x":"1\t2" ]) }) )
a979c32016-07-25Martin Nilsson test_any_equal([[ object hp = _Roxen.HeaderParser(0, 1); return hp->feed( "GET / HTTP/1.0\r\nBlaha: foo\r\nblaha: foo\r\n\r\n" ); ]], [[ ({ "", "GET / HTTP/1.0", ([ "Blaha":"foo", "blaha":"foo"]) }) ]]) test_any_equal([[ object hp = _Roxen.HeaderParser(0, 0); return hp->feed( "GET / HTTP/1.0\r\nBlaha: foo\r\nblaha: foo\r\n\r\n", 1 ); ]], [[ ({ "", "GET / HTTP/1.0", ([ "Blaha":"foo", "blaha":"foo"]) }) ]])
38877f2016-07-27Martin Nilsson test_any_equal([[ object hp = _Roxen.HeaderParser(0, 0, 1); return hp->feed( "GET / HTTP/1.0\r\nblaha: foo\r\n bar\r\nx:1\r\n\t2\r\n\r\n" ); ]], [[ ({ "", "GET / HTTP/1.0", ([ "blaha":"foo", "x":"1"]) }) ]])
09738b2018-04-01Martin Nilsson test_any_equal([[ object hp = _Roxen.HeaderParser(1); return hp->feed( "GET / HTTP/1.0\r\nA: x\r\nblaha: foo\r\n\r\n" ); ]], [[ ({ "", "GET / HTTP/1.0", (["blaha":"foo","a":"x"]) }) ]])
2d6f1e2016-07-27Martin Nilsson test_any_equal([[ object hp = _Roxen.HeaderParser(); return hp->feed( "GET / HTTP/1.0\r\nA\r\nblaha: foo\r\n\r\n" ); ]], [[ ({ "", "GET / HTTP/1.0", (["blaha":"foo"]) }) ]]) test_eval_error([[ object hp = _Roxen.HeaderParser(1); return hp->feed( "GET / HTTP/1.0\r\nA\r\nblaha: foo\r\n\r\n" ); ]])
1169d92004-05-02Martin Nilsson END_MARKER