diff --git a/proxy/data_test.go b/proxy/data_test.go index 0a6ee81..8bb69eb 100644 --- a/proxy/data_test.go +++ b/proxy/data_test.go @@ -14,7 +14,10 @@ package proxy -import "testing" +import ( + "reflect" + "testing" +) func TestOptions_String(t *testing.T) { tests := []struct { @@ -34,3 +37,34 @@ func TestOptions_String(t *testing.T) { } } } + +func TestParseOptions(t *testing.T) { + tests := []struct { + Input string + Options *Options + }{ + {"", emptyOptions}, + {"x", emptyOptions}, + {"0", emptyOptions}, + + // size variations + {"1x", &Options{Width: 1}}, + {"x1", &Options{Height: 1}}, + {"1x2", &Options{Width: 1, Height: 2}}, + {"0.1x0.2", &Options{Width: 0.1, Height: 0.2}}, + + // additional flags + {",fit", &Options{Fit: true}}, + {",r90", &Options{Rotate: 90}}, + {",fv", &Options{FlipVertical: true}}, + {",fh", &Options{FlipHorizontal: true}}, + + {"1x2,fit,r90,fv,fh", &Options{1, 2, true, 90, true, true}}, + } + + for i, tt := range tests { + if got, want := ParseOptions(tt.Input), tt.Options; !reflect.DeepEqual(got, want) { + t.Errorf("%d. ParseOptions returned %#v, want %#v", i, got, want) + } + } +} diff --git a/proxy/proxy_test.go b/proxy/proxy_test.go index 22138ab..9290035 100644 --- a/proxy/proxy_test.go +++ b/proxy/proxy_test.go @@ -20,6 +20,10 @@ import ( "testing" ) +// Test that request URLs are properly parsed into Options and RemoteURL. This +// test verifies that invalid remote URLs throw errors, and that valid +// combinations of Options and URL are accept. This does not exhaustively test +// the various Options that can be specified; see TestParseOptions for that. func TestNewRequest(t *testing.T) { tests := []struct { URL string @@ -64,44 +68,14 @@ func TestNewRequest(t *testing.T) { "http://localhost//https://example.com/foo", "https://example.com/foo", emptyOptions, false, }, + { + "http://localhost/1x2/http://example.com/foo", + "http://example.com/foo", &Options{Width: 1, Height: 2}, false, + }, { "http://localhost//http://example.com/foo?bar", "http://example.com/foo?bar", emptyOptions, false, }, - - // size variations - { - "http://localhost/x/http://example.com/", - "http://example.com/", emptyOptions, false, - }, - { - "http://localhost/0/http://example.com/", - "http://example.com/", emptyOptions, false, - }, - { - "http://localhost/1x/http://example.com/", - "http://example.com/", &Options{1, 0, false, 0, false, false}, false, - }, - { - "http://localhost/x1/http://example.com/", - "http://example.com/", &Options{0, 1, false, 0, false, false}, false, - }, - { - "http://localhost/1x2/http://example.com/", - "http://example.com/", &Options{1, 2, false, 0, false, false}, false, - }, - { - "http://localhost/0.1x0.2/http://example.com/", - "http://example.com/", &Options{0.1, 0.2, false, 0, false, false}, false, - }, - { - "http://localhost/,fit/http://example.com/", - "http://example.com/", &Options{0, 0, true, 0, false, false}, false, - }, - { - "http://localhost/1x2,fit,r90,fv,fh/http://example.com/", - "http://example.com/", &Options{1, 2, true, 90, true, true}, false, - }, } for i, tt := range tests {