blob: 266a7014c233ac82ec3e6c8699b1056ee95c5663 [file] [log] [blame] [raw]
# vi:filetype=
use lib 'lib';
use Test::Nginx::Socket;
repeat_each(2);
plan tests => repeat_each() * 2 * blocks();
#$Test::Nginx::LWP::LogLevel = 'debug';
run_tests();
__DATA__
=== TEST 1: sanity
--- config
location /main {
echo_foreach_split '&' $query_string;
echo_location_async $echo_it;
echo '/* end */';
echo_end;
}
location /sub/1.css {
echo "body { font-size: 12pt; }";
}
location /sub/2.css {
echo "table { color: 'red'; }";
}
--- request
GET /main?/sub/1.css&/sub/2.css
--- response_body
body { font-size: 12pt; }
/* end */
table { color: 'red'; }
/* end */
=== TEST 2: split in a url argument (echo_location_async)
--- config
location /main_async {
echo_foreach_split ',' $arg_cssfiles;
echo_location_async $echo_it;
echo_end;
}
location /foo.css {
echo foo;
}
location /bar.css {
echo bar;
}
location /baz.css {
echo baz;
}
--- request
GET /main_async?cssfiles=/foo.css,/bar.css,/baz.css
--- response_body
foo
bar
baz
=== TEST 3: split in a url argument (echo_location)
--- config
location /main_sync {
echo_foreach_split ',' $arg_cssfiles;
echo_location $echo_it;
echo_end;
}
location /foo.css {
echo foo;
}
location /bar.css {
echo bar;
}
location /baz.css {
echo baz;
}
--- request
GET /main_sync?cssfiles=/foo.css,/bar.css,/baz.css
--- response_body
foo
bar
baz
--- SKIP
=== TEST 4: empty loop
--- config
location /main {
echo "start";
echo_foreach_split ',' $arg_cssfiles;
echo_end;
echo "end";
}
--- request
GET /main?cssfiles=/foo.css,/bar.css,/baz.css
--- response_body
start
end
=== TEST 5: trailing delimiter
--- config
location /main_t {
echo_foreach_split ',' $arg_cssfiles;
echo_location_async $echo_it;
echo_end;
}
location /foo.css {
echo foo;
}
--- request
GET /main_t?cssfiles=/foo.css,
--- response_body
foo
=== TEST 6: multi-char delimiter
--- config
location /main_sleep {
echo_foreach_split '-a-' $arg_list;
echo $echo_it;
echo_end;
}
--- request
GET /main_sleep?list=foo-a-bar-a-baz
--- error_code: 500
--- response_body_like: 500 Internal Server Error
=== TEST 7: multi-char delimiter (the right way)
--- config
location /main_sleep {
echo_foreach_split -- '-a-' $arg_list;
echo $echo_it;
echo_end;
}
--- request
GET /main_sleep?list=foo-a-bar-a-baz
--- response_body
foo
bar
baz
=== TEST 8: loop with sleep
--- config
location /main_sleep {
echo_foreach_split '-' $arg_list;
echo_sleep 0.001;
echo $echo_it;
echo_end;
}
--- request
GET /main_sleep?list=foo-a-bar-A-baz
--- response_body
foo
a
bar
A
baz
=== TEST 9: empty
--- config
location /merge {
default_type 'text/javascript';
echo_foreach_split '&' $query_string;
echo "/* JS File $echo_it */";
echo_location_async $echo_it;
echo;
echo_end;
}
--- request
GET /merge
--- response_body
=== TEST 10: single &
--- config
location /merge {
default_type 'text/javascript';
echo_foreach_split '&' $query_string;
echo "/* JS File $echo_it */";
echo_location_async $echo_it;
echo;
echo_end;
}
--- request
GET /merge?&
--- response_body
=== TEST 11: pure &'s
--- config
location /merge {
default_type 'text/javascript';
echo_foreach_split '&' $query_string;
echo "/* JS File $echo_it */";
echo_location_async $echo_it;
echo;
echo_end;
}
--- request
GET /merge?&&&
--- response_body
=== TEST 12: pure & and spaces
TODO: needs to uri_decode $echo_it...
--- config
location /merge {
default_type 'text/javascript';
echo_foreach_split '&' $query_string;
echo "/* JS File $echo_it */";
echo_location_async $echo_it;
echo;
echo_end;
}
--- request
GET /merge?&%20&%20&
--- response_body
--- SKIP
=== TEST 13: multiple foreach_split
--- config
location /multi {
echo_foreach_split '&' $query_string;
echo [$echo_it];
echo_end;
echo '...';
echo_foreach_split '-' $query_string;
echo [$echo_it];
echo_end;
}
--- request
GET /multi?a-b&c-d
--- response_body
[a-b]
[c-d]
...
[a]
[b&c]
[d]
=== TEST 14: github issue #2: setting a variable from $echo_it results to crashing
--- config
location = /getFile {
set $filelist "a,b,c";
echo_foreach_split ',' $filelist;
set $file $echo_it;
echo_subrequest GET '/getFile2' -q 'sha256=$file';
echo_end;
}
location = /getFile2 {
echo "sha256: $arg_sha256";
}
--- request
GET /getFile
--- response_body
sha256:
sha256:
sha256: