Permalink
Fetching contributors…
Cannot retrieve contributors at this time
126 lines (97 sloc) 2.78 KB
require File.expand_path('../helper', __FILE__)
class RepeatTest < Test::Unit::TestCase
def test_terminal?
rule = Repeat.new
assert_equal(false, rule.terminal?)
end
def test_exec_zero_or_one
abc = Rule.for('abc')
rule = Repeat.new(abc, 0, 1)
events = rule.exec(Input.new(''))
assert_equal([rule, CLOSE, 0], events)
events = rule.exec(Input.new('abc'))
assert_equal([rule, abc, CLOSE, 3, CLOSE, 3], events)
events = rule.exec(Input.new('abc' * 3))
assert_equal([rule, abc, CLOSE, 3, CLOSE, 3], events)
end
def test_exec_zero_or_more
abc = Rule.for('abc')
rule = Repeat.new(abc, 0, Infinity)
events = rule.exec(Input.new(''))
assert_equal([rule, CLOSE, 0], events)
events = rule.exec(Input.new('abc'))
assert_equal([rule, abc, CLOSE, 3, CLOSE, 3], events)
expected_events = [
rule,
abc, CLOSE, 3,
abc, CLOSE, 3,
abc, CLOSE, 3,
CLOSE, 9
]
events = rule.exec(Input.new('abc' * 3))
assert_equal(expected_events, events)
end
def test_exec_one_or_more
abc = Rule.for('abc')
rule = Repeat.new(abc, 1, Infinity)
events = rule.exec(Input.new(''))
assert_equal([], events)
events = rule.exec(Input.new('abc'))
assert_equal([rule, abc, CLOSE, 3, CLOSE, 3], events)
expected_events = [
rule,
abc, CLOSE, 3,
abc, CLOSE, 3,
abc, CLOSE, 3,
CLOSE, 9
]
events = rule.exec(Input.new('abc' * 3))
assert_equal(expected_events, events)
end
def test_exec_one
abc = Rule.for('abc')
rule = Repeat.new(abc, 1, 1)
events = rule.exec(Input.new(''))
assert_equal([], events)
events = rule.exec(Input.new('abc'))
assert_equal([rule, abc, CLOSE, 3, CLOSE, 3], events)
events = rule.exec(Input.new('abc' * 3))
assert_equal([rule, abc, CLOSE, 3, CLOSE, 3], events)
end
def test_operator
rule = Repeat.new('', 1, 2)
assert_equal('1*2', rule.operator)
end
def test_operator_empty
rule = Repeat.new('', 0, 0)
assert_equal('', rule.operator)
end
def test_operator_asterisk
rule = Repeat.new('', 0, Infinity)
assert_equal('*', rule.operator)
end
def test_operator_question_mark
rule = Repeat.new('', 0, 1)
assert_equal('?', rule.operator)
end
def test_operator_plus
rule = Repeat.new('', 1, Infinity)
assert_equal('+', rule.operator)
end
def test_to_s
rule = Repeat.new(/a/, 1, 2)
assert_equal('/a/1*2', rule.to_s)
end
def test_to_s_asterisk
rule = Repeat.new('a', 0, Infinity)
assert_equal('"a"*', rule.to_s)
end
def test_to_s_question_mark
rule = Repeat.new('a', 0, 1)
assert_equal('"a"?', rule.to_s)
end
def test_to_s_plus
rule = Repeat.new('a', 1, Infinity)
assert_equal('"a"+', rule.to_s)
end
end