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