File: parse_error_test.rb

package info (click to toggle)
ruby-citrus 3.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 420 kB
  • sloc: ruby: 3,417; makefile: 5
file content (56 lines) | stat: -rw-r--r-- 1,208 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# encoding: UTF-8

require File.expand_path('../helper', __FILE__)

class ParseErrorTest < Test::Unit::TestCase
  Sentence = Grammar.new do
    include Words

    rule :sentence do
      all(:capital_word, one_or_more([ :space, :word ]), :period)
    end

    rule :capital_word do
      all(/[A-Z]/, zero_or_more(:alpha))
    end

    rule :space do
      one_or_more(any(" ", "\n", "\r\n"))
    end

    rule :period, '.'
  end

  def test_basic
    begin
      TestGrammar.parse('#')
    rescue ParseError => e
      assert_equal(0, e.offset)
      assert_equal('#', e.line)
      assert_equal(1, e.line_number)
      assert_equal(0, e.line_offset)
    end
  end

  def test_single_line
    begin
      Sentence.parse('Once upon ä time.')
    rescue ParseError => e
      assert_equal(10, e.offset)
      assert_equal('Once upon ä time.', e.line)
      assert_equal(1, e.line_number)
      assert_equal(10, e.line_offset)
    end
  end

  def test_multi_line
    begin
      Sentence.parse("Once\nupon a\r\ntim3.")
    rescue ParseError => e
      assert_equal(16, e.offset)
      assert_equal('tim3.', e.line)
      assert_equal(3, e.line_number)
      assert_equal(3, e.line_offset)
    end
  end
end