mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
72 lines
1.9 KiB
Ruby
72 lines
1.9 KiB
Ruby
require 'abstract_unit'
|
|
|
|
module ActionDispatch
|
|
module Journey
|
|
module NFA
|
|
class TestTransitionTable < ActiveSupport::TestCase
|
|
def setup
|
|
@parser = Journey::Parser.new
|
|
end
|
|
|
|
def test_eclosure
|
|
table = tt '/'
|
|
assert_equal [0], table.eclosure(0)
|
|
|
|
table = tt ':a|:b'
|
|
assert_equal 3, table.eclosure(0).length
|
|
|
|
table = tt '(:a|:b)'
|
|
assert_equal 5, table.eclosure(0).length
|
|
assert_equal 5, table.eclosure([0]).length
|
|
end
|
|
|
|
def test_following_states_one
|
|
table = tt '/'
|
|
|
|
assert_equal [1], table.following_states(0, '/')
|
|
assert_equal [1], table.following_states([0], '/')
|
|
end
|
|
|
|
def test_following_states_group
|
|
table = tt 'a|b'
|
|
states = table.eclosure 0
|
|
|
|
assert_equal 1, table.following_states(states, 'a').length
|
|
assert_equal 1, table.following_states(states, 'b').length
|
|
end
|
|
|
|
def test_following_states_multi
|
|
table = tt 'a|a'
|
|
states = table.eclosure 0
|
|
|
|
assert_equal 2, table.following_states(states, 'a').length
|
|
assert_equal 0, table.following_states(states, 'b').length
|
|
end
|
|
|
|
def test_following_states_regexp
|
|
table = tt 'a|:a'
|
|
states = table.eclosure 0
|
|
|
|
assert_equal 1, table.following_states(states, 'a').length
|
|
assert_equal 1, table.following_states(states, /[^\.\/\?]+/).length
|
|
assert_equal 0, table.following_states(states, 'b').length
|
|
end
|
|
|
|
def test_alphabet
|
|
table = tt 'a|:a'
|
|
assert_equal [/[^\.\/\?]+/, 'a'], table.alphabet
|
|
|
|
table = tt 'a|a'
|
|
assert_equal ['a'], table.alphabet
|
|
end
|
|
|
|
private
|
|
def tt string
|
|
ast = @parser.parse string
|
|
builder = Builder.new ast
|
|
builder.transition_table
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|