diff options
Diffstat (limited to 'actionpack/test/journey/nfa/transition_table_test.rb')
-rw-r--r-- | actionpack/test/journey/nfa/transition_table_test.rb | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/actionpack/test/journey/nfa/transition_table_test.rb b/actionpack/test/journey/nfa/transition_table_test.rb new file mode 100644 index 0000000000..c23611e980 --- /dev/null +++ b/actionpack/test/journey/nfa/transition_table_test.rb @@ -0,0 +1,74 @@ +# frozen_string_literal: true + +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 |