aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/journey/nfa/transition_table_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/test/journey/nfa/transition_table_test.rb')
-rw-r--r--actionpack/test/journey/nfa/transition_table_test.rb74
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