tagged release 0.6.4
[parrot.git] / languages / lua / t / test_lex.t
blob35f10ddd414efa5cda147095315b28636d886c52
1 #! perl
2 # Copyright (C) 2007, The Perl Foundation.
3 # $Id$
5 =head1 NAME
7 t/test_lex.t - Lua lexicography test
9 =head1 SYNOPSIS
11     % perl -I../lib -Ilua/t lua/t/test_lex.t
13 =head1 DESCRIPTION
15 Tests Lua lexicograaphy
16 (implemented in F<languages/lua/test_lex.pir>).
18 See "Lua 5.1 Reference Manual", section 2.1 "Lexical Conventions",
19 L<http://www.lua.org/manual/5.1/manual.html#2.1>.
21 =cut
23 use strict;
24 use warnings;
25 use FindBin;
26 use lib "$FindBin::Bin";
28 use Parrot::Test tests => 23;
29 use Test::More;
31 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'hello' );
32 print("hello")
33 CODE
34 Name:   print
35 punct:  (
36 String: hello
37 punct:  )
38 OUT
40 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'name' );
41 i       j       i10     _ij     _
42 aSomewhatLongName       _INPUT
43 CODE
44 Name:   i
45 Name:   j
46 Name:   i10
47 Name:   _ij
48 Name:   _
49 Name:   aSomewhatLongName
50 Name:   _INPUT
51 OUT
53 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'keyword' );
54 and
55 break
57 else
58 elseif
59 end
60 false
61 for
62 function
65 local
66 nil
67 not
69 repeat
70 return
71 then
72 true
73 until
74 while
75 CODE
76 keyword:        and
77 keyword:        break
78 keyword:        do
79 keyword:        else
80 keyword:        elseif
81 keyword:        end
82 keyword:        false
83 keyword:        for
84 keyword:        function
85 keyword:        if
86 keyword:        in
87 keyword:        local
88 keyword:        nil
89 keyword:        not
90 keyword:        or
91 keyword:        repeat
92 keyword:        return
93 keyword:        then
94 keyword:        true
95 keyword:        until
96 keyword:        while
97 OUT
99 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'not keyword' );
100 format      -- not for
101 doit        -- not do
102 CODE
103 Name:   format
104 Name:   doit
107 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'string' );
108 'alo\n123"'
109 "alo\n123\""
110 '\97lo\10\04923"'
111 CODE
112 String: alo
113 123"
114 String: alo
115 123"
116 String: alo
117 123"
120 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'unfinished string' );
121 print "unfinished string
122 CODE
123 /^[^:]+:1: unfinished string near '"?unfinished string'/
126 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'string with escape sequence too large' );
127 print "escape\333sequence"
128 CODE
129 /^[^:]+:1: escape sequence too large near '"?escape/
132 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'long string' );
133 [[alo
134 123"]]
135 [==[
137 123"]==]
138 CODE
139 LongString:     alo
140 123"
141 LongString:     alo
142 123"
145 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'invalid long string delimiter' );
146 print [===+ string ]===]
147 CODE
148 /^[^:]+:1: invalid long string delimiter near '\[==='/
151 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'unfinished string' );
152 print [[unfinished long string
154 CODE
155 /^[^:]+:1: unfinished long string/
158 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'nested long string' );
159 print [[ long string [[ nested ]] ]]
161 CODE
162 /^[^:]+:1: nesting of \[\[\.\.\.\]\] is deprecated near '\[\[ long string \[\['/
165 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'number' );
168 3.1416
169 314.16e-2
170 0.31416E1
171 .31416E+1
172 0xff
173 0x56
174 CODE
175 Number: 3
176 Number: 3.0
177 Number: 3.1416
178 Number: 314.16e-2
179 Number: 0.31416E1
180 Number: .31416E+1
181 Number: 0xff
182 Number: 0x56
185 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'malformed number' );
186 0x1Bh
187 CODE
188 /^[^:]+:1: malformed number near '0x1Bh'/
191 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'malformed number' );
192 1.2.34
193 CODE
194 /^[^:]+:1: malformed number near '1.2.34'/
197 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'malformed number' );
199 CODE
200 /^[^:]+:1: malformed number near '.2A'/
203 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'comment' );
204 -- comment
205 1   -- comment
207 CODE
208 Number: 1
209 Number: 2
212 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'long comment' );
213 --[[
214     long comment
217 --[===[
218     long comment
219 ]===]
220 CODE
221 Number: 1
224 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'not long comment' );
225 --[[
226     no action (comment)
227 --]]
229 ---[[
230     active
231 --]]
232 CODE
233 Number: 1
234 Name:   active
237 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'unfinished long comment' );
238  --[[unfinished long comment
240 CODE
241 /^[^:]+:1: unfinished long comment/
244 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'nested long comment' );
245 --[[ long comment [[ nested ]] ]]
247 CODE
248 /^[^:]+:1: nesting of \[\[\.\.\.\]\] is deprecated near '\[\[ long comment \[\['/
251 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'syntax error' );
253 CODE
254 /^[^:]+:1: syntax error/
257 language_output_is( 'Lua_lex', <<'CODE', <<'OUT', 'shebang' );
258 #!/usr/bin/env lua
260 CODE
261 Number: 1
264 language_output_like( 'Lua_lex', <<'CODE', <<'OUT', 'shebang misplaced' );
266 #!/usr/bin/env lua
268 CODE
269 /^[^:]+:1: syntax error/
273 # Local Variables:
274 #   mode: cperl
275 #   cperl-indent-level: 4
276 #   fill-column: 100
277 # End:
278 # vim: expandtab shiftwidth=4: