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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
if __FILE__ == $0
$:.unshift '../../lib'
$:.unshift '../../../../library/trunk/lib/'
$:.unshift '../../../../library/trunk/test/'
$puppetbase = "../.."
end
require 'puppet'
require 'puppet/parser/lexer'
require 'test/unit'
require 'puppettest.rb'
# $Id$
#%q{service("telnet") = \{
# port => "23",
# protocol => "tcp",
# name => "telnet",
#\}
#} => [[:NAME, "service"], [:LPAREN, "("], [:DQUOTE, "\""], [:NAME, "telnet"], [:DQUOTE, "\""], [:RPAREN, ")"], [:EQUALS, "="], [:lbrace, "{"], [:NAME, "port"], [:FARROW, "=>"], [:DQUOTE, "\""], [:NAME, "23"], [:DQUOTE, "\""], [:COMMA, ","], [:NAME, "protocol"], [:FARROW, "=>"], [:DQUOTE, "\""], [:NAME, "tcp"], [:DQUOTE, "\""], [:COMMA, ","], [:NAME, "name"], [:FARROW, "=>"], [:DQUOTE, "\""], [:NAME, "telnet"], [:DQUOTE, "\""], [:COMMA, ","], [:RBRACE, "}"]]
class TestLexer < Test::Unit::TestCase
def setup
Puppet[:loglevel] = :debug if __FILE__ == $0
@lexer = Puppet::Parser::Lexer.new()
end
def test_simple_lex
strings = {
%q{\\} => [[:BACKSLASH,"\\"],[false,false]],
%q{simplest scanner test} => [[:NAME,"simplest"],[:NAME,"scanner"],[:NAME,"test"],[false,false]],
%q{returned scanner test
} => [[:NAME,"returned"],[:NAME,"scanner"],[:NAME,"test"],[false,false]]
}
strings.each { |str,ary|
@lexer.string = str
assert_equal(
ary,
@lexer.fullscan()
)
}
end
def test_quoted_strings
strings = {
%q{a simple "scanner" test
} => [[:NAME,"a"],[:NAME,"simple"],[:QTEXT,"scanner"],[:NAME,"test"],[false,false]],
%q{a harder "scanner test"
} => [[:NAME,"a"],[:NAME,"harder"],[:QTEXT,"scanner test"],[false,false]],
%q{a hardest "scanner \"test\""
} => [[:NAME,"a"],[:NAME,"hardest"],[:QTEXT,'scanner "test"'],[false,false]],
%q{function("call")} => [[:NAME,"function"],[:LPAREN,"("],[:QTEXT,'call'],[:RPAREN,")"],[false,false]]
}
strings.each { |str,array|
@lexer.string = str
assert_equal(
array,
@lexer.fullscan()
)
}
end
def test_errors
strings = %w{
^
@
}
strings.each { |str|
@lexer.string = str
assert_raise(RuntimeError) {
@lexer.fullscan()
}
}
end
def test_more_error
assert_raise(TypeError) {
@lexer.fullscan()
}
end
def test_files
textfiles() { |file|
@lexer.file = file
assert_nothing_raised() {
@lexer.fullscan()
}
Puppet::Type.allclear
}
end
def test_strings
names = %w{this is a bunch of names}
types = %w{Many Different Words A Word}
words = %w{differently Cased words A a}
names.each { |t|
@lexer.string = t
assert_equal(
[[:NAME,t],[false,false]],
@lexer.fullscan
)
}
types.each { |t|
@lexer.string = t
assert_equal(
[[:TYPE,t],[false,false]],
@lexer.fullscan
)
}
end
end
|