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