Chris@210
|
1 require 'test/unit'
|
Chris@210
|
2 require 'coderay'
|
Chris@210
|
3
|
Chris@210
|
4 class WordListTest < Test::Unit::TestCase
|
Chris@210
|
5
|
Chris@210
|
6 include CodeRay
|
Chris@210
|
7
|
Chris@210
|
8 # define word arrays
|
Chris@210
|
9 RESERVED_WORDS = %w[
|
Chris@210
|
10 asm break case continue default do else
|
Chris@210
|
11 ...
|
Chris@210
|
12 ]
|
Chris@210
|
13
|
Chris@210
|
14 PREDEFINED_TYPES = %w[
|
Chris@210
|
15 int long short char void
|
Chris@210
|
16 ...
|
Chris@210
|
17 ]
|
Chris@210
|
18
|
Chris@210
|
19 PREDEFINED_CONSTANTS = %w[
|
Chris@210
|
20 EOF NULL ...
|
Chris@210
|
21 ]
|
Chris@210
|
22
|
Chris@210
|
23 # make a WordList
|
Chris@210
|
24 IDENT_KIND = WordList.new(:ident).
|
Chris@210
|
25 add(RESERVED_WORDS, :reserved).
|
Chris@210
|
26 add(PREDEFINED_TYPES, :pre_type).
|
Chris@210
|
27 add(PREDEFINED_CONSTANTS, :pre_constant)
|
Chris@210
|
28
|
Chris@210
|
29 def test_word_list_example
|
Chris@210
|
30 assert_equal :pre_type, IDENT_KIND['void']
|
Chris@210
|
31 # assert_equal :pre_constant, IDENT_KIND['...'] # not specified
|
Chris@210
|
32 end
|
Chris@210
|
33
|
Chris@210
|
34 def test_word_list
|
Chris@210
|
35 list = WordList.new(:ident).add(['foobar'], :reserved)
|
Chris@210
|
36 assert_equal :reserved, list['foobar']
|
Chris@210
|
37 assert_equal :ident, list['FooBar']
|
Chris@210
|
38 end
|
Chris@210
|
39
|
Chris@210
|
40 def test_word_list_cached
|
Chris@210
|
41 list = WordList.new(:ident, true).add(['foobar'], :reserved)
|
Chris@210
|
42 assert_equal :reserved, list['foobar']
|
Chris@210
|
43 assert_equal :ident, list['FooBar']
|
Chris@210
|
44 end
|
Chris@210
|
45
|
Chris@210
|
46 def test_case_ignoring_word_list
|
Chris@210
|
47 list = CaseIgnoringWordList.new(:ident).add(['foobar'], :reserved)
|
Chris@210
|
48 assert_equal :ident, list['foo']
|
Chris@210
|
49 assert_equal :reserved, list['foobar']
|
Chris@210
|
50 assert_equal :reserved, list['FooBar']
|
Chris@210
|
51
|
Chris@210
|
52 list = CaseIgnoringWordList.new(:ident).add(['FooBar'], :reserved)
|
Chris@210
|
53 assert_equal :ident, list['foo']
|
Chris@210
|
54 assert_equal :reserved, list['foobar']
|
Chris@210
|
55 assert_equal :reserved, list['FooBar']
|
Chris@210
|
56 end
|
Chris@210
|
57
|
Chris@210
|
58 def test_case_ignoring_word_list_cached
|
Chris@210
|
59 list = CaseIgnoringWordList.new(:ident, true).add(['foobar'], :reserved)
|
Chris@210
|
60 assert_equal :ident, list['foo']
|
Chris@210
|
61 assert_equal :reserved, list['foobar']
|
Chris@210
|
62 assert_equal :reserved, list['FooBar']
|
Chris@210
|
63
|
Chris@210
|
64 list = CaseIgnoringWordList.new(:ident, true).add(['FooBar'], :reserved)
|
Chris@210
|
65 assert_equal :ident, list['foo']
|
Chris@210
|
66 assert_equal :reserved, list['foobar']
|
Chris@210
|
67 assert_equal :reserved, list['FooBar']
|
Chris@210
|
68 end
|
Chris@210
|
69
|
Chris@210
|
70 def test_dup
|
Chris@210
|
71 list = WordList.new(:ident).add(['foobar'], :reserved)
|
Chris@210
|
72 assert_equal :reserved, list['foobar']
|
Chris@210
|
73 list2 = list.dup
|
Chris@210
|
74 list2.add(%w[foobar], :keyword)
|
Chris@210
|
75 assert_equal :keyword, list2['foobar']
|
Chris@210
|
76 assert_equal :reserved, list['foobar']
|
Chris@210
|
77 end
|
Chris@210
|
78
|
Chris@210
|
79 end |