require "abstract_unit" module ActionDispatch module Journey module Definition class TestParser < ActiveSupport::TestCase def setup @parser = Parser.new end def test_slash assert_equal :SLASH, @parser.parse("/").type assert_round_trip "/" end def test_segment assert_round_trip "/foo" end def test_segments assert_round_trip "/foo/bar" end def test_segment_symbol assert_round_trip "/foo/:id" end def test_symbol assert_round_trip "/:foo" end def test_group assert_round_trip "(/:foo)" end def test_groups assert_round_trip "(/:foo)(/:bar)" end def test_nested_groups assert_round_trip "(/:foo(/:bar))" end def test_dot_symbol assert_round_trip(".:format") end def test_dot_literal assert_round_trip(".xml") end def test_segment_dot assert_round_trip("/foo.:bar") end def test_segment_group_dot assert_round_trip("/foo(.:bar)") end def test_segment_group assert_round_trip("/foo(/:action)") end def test_segment_groups assert_round_trip("/foo(/:action)(/:bar)") end def test_segment_nested_groups assert_round_trip("/foo(/:action(/:bar))") end def test_group_followed_by_path assert_round_trip("/foo(/:action)/:bar") end def test_star assert_round_trip("*foo") assert_round_trip("/*foo") assert_round_trip("/bar/*foo") assert_round_trip("/bar/(*foo)") end def test_or assert_round_trip("a|b") assert_round_trip("a|b|c") assert_round_trip("(a|b)|c") assert_round_trip("a|(b|c)") assert_round_trip("*a|(b|c)") assert_round_trip("*a|:b|c") end def test_arbitrary assert_round_trip("/bar/*foo#") end def test_literal_dot_paren assert_round_trip "/sprockets.js(.:format)" end def test_groups_with_dot assert_round_trip "/(:locale)(.:format)" end def assert_round_trip(str) assert_equal str, @parser.parse(str).to_s end end end end end