35b3de8021
The current code base is not uniform. After some discussion, we have chosen to go with double quotes by default.
116 lines
3.0 KiB
Ruby
116 lines
3.0 KiB
Ruby
require "abstract_unit"
|
|
require "active_support/json/decoding"
|
|
|
|
module ActionDispatch
|
|
module Journey
|
|
module GTG
|
|
class TestGeneralizedTable < ActiveSupport::TestCase
|
|
def test_to_json
|
|
table = tt %w{
|
|
/articles(.:format)
|
|
/articles/new(.:format)
|
|
/articles/:id/edit(.:format)
|
|
/articles/:id(.:format)
|
|
}
|
|
|
|
json = ActiveSupport::JSON.decode table.to_json
|
|
assert json["regexp_states"]
|
|
assert json["string_states"]
|
|
assert json["accepting"]
|
|
end
|
|
|
|
if system("dot -V 2>/dev/null")
|
|
def test_to_svg
|
|
table = tt %w{
|
|
/articles(.:format)
|
|
/articles/new(.:format)
|
|
/articles/:id/edit(.:format)
|
|
/articles/:id(.:format)
|
|
}
|
|
svg = table.to_svg
|
|
assert svg
|
|
assert_no_match(/DOCTYPE/, svg)
|
|
end
|
|
end
|
|
|
|
def test_simulate_gt
|
|
sim = simulator_for ["/foo", "/bar"]
|
|
assert_match sim, "/foo"
|
|
end
|
|
|
|
def test_simulate_gt_regexp
|
|
sim = simulator_for [":foo"]
|
|
assert_match sim, "foo"
|
|
end
|
|
|
|
def test_simulate_gt_regexp_mix
|
|
sim = simulator_for ["/get", "/:method/foo"]
|
|
assert_match sim, "/get"
|
|
assert_match sim, "/get/foo"
|
|
end
|
|
|
|
def test_simulate_optional
|
|
sim = simulator_for ["/foo(/bar)"]
|
|
assert_match sim, "/foo"
|
|
assert_match sim, "/foo/bar"
|
|
assert_no_match sim, "/foo/"
|
|
end
|
|
|
|
def test_match_data
|
|
path_asts = asts %w{ /get /:method/foo }
|
|
paths = path_asts.dup
|
|
|
|
builder = GTG::Builder.new Nodes::Or.new path_asts
|
|
tt = builder.transition_table
|
|
|
|
sim = GTG::Simulator.new tt
|
|
|
|
match = sim.match "/get"
|
|
assert_equal [paths.first], match.memos
|
|
|
|
match = sim.match "/get/foo"
|
|
assert_equal [paths.last], match.memos
|
|
end
|
|
|
|
def test_match_data_ambiguous
|
|
path_asts = asts %w{
|
|
/articles(.:format)
|
|
/articles/new(.:format)
|
|
/articles/:id/edit(.:format)
|
|
/articles/:id(.:format)
|
|
}
|
|
|
|
paths = path_asts.dup
|
|
ast = Nodes::Or.new path_asts
|
|
|
|
builder = GTG::Builder.new ast
|
|
sim = GTG::Simulator.new builder.transition_table
|
|
|
|
match = sim.match "/articles/new"
|
|
assert_equal [paths[1], paths[3]], match.memos
|
|
end
|
|
|
|
private
|
|
def asts paths
|
|
parser = Journey::Parser.new
|
|
paths.map { |x|
|
|
ast = parser.parse x
|
|
ast.each { |n| n.memo = ast}
|
|
ast
|
|
}
|
|
end
|
|
|
|
def tt paths
|
|
x = asts paths
|
|
builder = GTG::Builder.new Nodes::Or.new x
|
|
builder.transition_table
|
|
end
|
|
|
|
def simulator_for paths
|
|
GTG::Simulator.new tt(paths)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|