require 'abstract_unit' module ActionDispatch module Journey module Definition class TestScanner < ActiveSupport::TestCase def setup @scanner = Scanner.new end # /page/:id(/:action)(.:format) def test_tokens [ ['/', [[:SLASH, '/']]], ['*omg', [[:STAR, '*omg']]], ['/page', [[:SLASH, '/'], [:LITERAL, 'page']]], ['/page!', [[:SLASH, '/'], [:LITERAL, 'page!']]], ['/page$', [[:SLASH, '/'], [:LITERAL, 'page$']]], ['/page&', [[:SLASH, '/'], [:LITERAL, 'page&']]], ["/page'", [[:SLASH, '/'], [:LITERAL, "page'"]]], ['/page*', [[:SLASH, '/'], [:LITERAL, 'page*']]], ['/page+', [[:SLASH, '/'], [:LITERAL, 'page+']]], ['/page,', [[:SLASH, '/'], [:LITERAL, 'page,']]], ['/page;', [[:SLASH, '/'], [:LITERAL, 'page;']]], ['/page=', [[:SLASH, '/'], [:LITERAL, 'page=']]], ['/page@', [[:SLASH, '/'], [:LITERAL, 'page@']]], ['/page\:', [[:SLASH, '/'], [:LITERAL, 'page:']]], ['/page\(', [[:SLASH, '/'], [:LITERAL, 'page(']]], ['/page\)', [[:SLASH, '/'], [:LITERAL, 'page)']]], ['/~page', [[:SLASH, '/'], [:LITERAL, '~page']]], ['/pa-ge', [[:SLASH, '/'], [:LITERAL, 'pa-ge']]], ['/:page', [[:SLASH, '/'], [:SYMBOL, ':page']]], ['/(:page)', [ [:SLASH, '/'], [:LPAREN, '('], [:SYMBOL, ':page'], [:RPAREN, ')'], ]], ['(/:action)', [ [:LPAREN, '('], [:SLASH, '/'], [:SYMBOL, ':action'], [:RPAREN, ')'], ]], ['(())', [[:LPAREN, '('], [:LPAREN, '('], [:RPAREN, ')'], [:RPAREN, ')']]], ['(.:format)', [ [:LPAREN, '('], [:DOT, '.'], [:SYMBOL, ':format'], [:RPAREN, ')'], ]], ].each do |str, expected| @scanner.scan_setup str assert_tokens expected, @scanner end end def assert_tokens tokens, scanner toks = [] while tok = scanner.next_token toks << tok end assert_equal tokens, toks end end end end end