require 'support' require 'mustermann/identity' describe Mustermann::Identity do extend Support::Pattern pattern '' do it { should match('') } it { should_not match('/') } it { should respond_to(:expand) } it { should respond_to(:to_templates) } it { should generate_template('') } it { should expand.to('') } it { should expand(:ignore, a: 10).to('') } it { should expand(:append, a: 10).to('?a=10') } it { should_not expand(:raise, a: 10) } it { should_not expand(a: 10) } example do pattern.match('').inspect.should be == '#' end end pattern '/' do it { should match('/') } it { should_not match('/foo') } example { pattern.params('/').should be == {} } example { pattern.params('').should be_nil } it { should generate_template('/') } it { should expand.to('/') } end pattern '/foo' do it { should match('/foo') } it { should_not match('/bar') } it { should_not match('/foo.bar') } end pattern '/foo/bar' do it { should match('/foo/bar') } it { should match('/foo%2Fbar') } it { should match('/foo%2fbar') } end pattern '/:foo' do it { should match('/:foo') } it { should match('/%3Afoo') } it { should_not match('/foo') } it { should_not match('/foo?') } it { should_not match('/foo/bar') } it { should_not match('/') } it { should_not match('/foo/') } it { should generate_template('/:foo') } it { should expand.to('/:foo') } end pattern '/föö' do it { should match("/f%C3%B6%C3%B6") } end pattern '/test$/' do it { should match('/test$/') } end pattern '/te+st/' do it { should match('/te+st/') } it { should_not match('/test/') } it { should_not match('/teest/') } end pattern "/path with spaces" do it { should match('/path%20with%20spaces') } it { should_not match('/path%2Bwith%2Bspaces') } it { should_not match('/path+with+spaces') } it { should generate_template('/path%20with%20spaces') } end pattern '/foo&bar' do it { should match('/foo&bar') } end pattern '/test.bar' do it { should match('/test.bar') } it { should_not match('/test0bar') } end pattern '/foo/bar', uri_decode: false do it { should match('/foo/bar') } it { should_not match('/foo%2Fbar') } it { should_not match('/foo%2fbar') } end pattern "/path with spaces", uri_decode: false do it { should_not match('/path%20with%20spaces') } it { should_not match('/path%2Bwith%2Bspaces') } it { should_not match('/path+with+spaces') } end context "peeking" do subject(:pattern) { Mustermann::Identity.new("foo bar") } describe :peek_size do example { pattern.peek_size("foo bar blah") .should be == "foo bar".size } example { pattern.peek_size("foo%20bar blah") .should be == "foo%20bar".size } example { pattern.peek_size("foobar") .should be_nil } end describe :peek_match do example { pattern.peek_match("foo bar blah").to_s .should be == "foo bar" } example { pattern.peek_match("foo%20bar blah").to_s .should be == "foo%20bar" } example { pattern.peek_match("foobar") .should be_nil } end describe :peek_params do example { pattern.peek_params("foo bar blah") .should be == [{}, "foo bar".size] } example { pattern.peek_params("foo%20bar blah") .should be == [{}, "foo%20bar".size] } example { pattern.peek_params("foobar") .should be_nil } end end end