PageTemplate 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Changes +20 -0
- data/Rakefile +6 -1
- data/lib/PageTemplate.rb +1 -1
- data/lib/PageTemplate/case.rb +21 -18
- data/lib/PageTemplate/commands.rb +131 -131
- data/lib/PageTemplate/htglossary.rb +70 -0
- data/lib/PageTemplate/parser.rb +228 -80
- data/test.rb +175 -113
- metadata +3 -2
data/test.rb
CHANGED
@@ -23,8 +23,8 @@
|
|
23
23
|
|
24
24
|
require 'test/unit' unless defined? $ZENTEST and $ZENTEST
|
25
25
|
|
26
|
-
require 'PageTemplate/commands.rb'
|
27
26
|
require 'PageTemplate/parser.rb'
|
27
|
+
require 'PageTemplate/commands.rb'
|
28
28
|
require 'PageTemplate/case.rb'
|
29
29
|
|
30
30
|
module TestPageTemplate
|
@@ -68,11 +68,11 @@ module TestPageTemplate
|
|
68
68
|
|
69
69
|
class TestCaseCommand < Test::Unit::TestCase
|
70
70
|
def setup
|
71
|
-
@@cc = PageTemplate::CaseCommand.new('
|
71
|
+
@@cc = PageTemplate::CaseCommand.new('foo')
|
72
72
|
end
|
73
73
|
|
74
74
|
def test_initialize
|
75
|
-
assert(PageTemplate::CaseCommand.new('
|
75
|
+
assert(PageTemplate::CaseCommand.new('foo'))
|
76
76
|
end
|
77
77
|
|
78
78
|
def test_add
|
@@ -82,24 +82,24 @@ module TestPageTemplate
|
|
82
82
|
def test_current_case
|
83
83
|
# Shouldn't I be failing? I don't see an accessor for CaseCommand.current_case
|
84
84
|
assert_equal(nil, @@cc.current_case)
|
85
|
-
@@cc.
|
85
|
+
@@cc.when("1")
|
86
86
|
assert_equal("1", @@cc.current_case)
|
87
87
|
end
|
88
88
|
|
89
89
|
def test_modifies_eh
|
90
|
-
assert(@@cc.
|
91
|
-
assert(@@cc.
|
92
|
-
assert_equal(false, @@cc.modifies?("unless"))
|
90
|
+
assert(@@cc.when("1"))
|
91
|
+
assert(@@cc.else)
|
93
92
|
end
|
94
93
|
|
95
94
|
def test_output
|
95
|
+
p = PageTemplate::Parser.new
|
96
96
|
c_1 = PageTemplate::TextCommand.new("I am 1")
|
97
97
|
c_2 = PageTemplate::TextCommand.new("I am 2")
|
98
98
|
c_3 = PageTemplate::TextCommand.new("I don't know what I am")
|
99
99
|
@@cc.add(c_3)
|
100
|
-
@@cc.
|
100
|
+
@@cc.when("1")
|
101
101
|
@@cc.add(c_1)
|
102
|
-
@@cc.
|
102
|
+
@@cc.when("2")
|
103
103
|
@@cc.add(c_2)
|
104
104
|
ns = PageTemplate::Namespace.new()
|
105
105
|
ns["foo"] = nil
|
@@ -161,14 +161,18 @@ module TestPageTemplate
|
|
161
161
|
|
162
162
|
class TestFileSource < Test::Unit::TestCase
|
163
163
|
def setup
|
164
|
-
|
165
|
-
@@fs = PageTemplate::FileSource.new(
|
164
|
+
@@args = {}
|
165
|
+
@@fs = PageTemplate::FileSource.new(@@args)
|
166
|
+
@@filename = 'tdata/dummy.txt'
|
167
|
+
@@location = File.join(Dir.getwd, @@filename)
|
168
|
+
@@text = IO.read(@@location)
|
166
169
|
end
|
167
170
|
|
168
171
|
def test_get
|
169
|
-
|
170
|
-
|
171
|
-
assert_equal(
|
172
|
+
assert_equal(@@text, @@fs.get(@@filename),
|
173
|
+
"Dir.getwd is a path by default")
|
174
|
+
assert_equal(@@text, @@fs.get(@@location),
|
175
|
+
"Full path is allowed by default")
|
172
176
|
end
|
173
177
|
|
174
178
|
def test_get_filename
|
@@ -178,22 +182,48 @@ module TestPageTemplate
|
|
178
182
|
end
|
179
183
|
|
180
184
|
def test_paths
|
181
|
-
assert_equal([Dir.getwd], @@fs.paths)
|
185
|
+
assert_equal([Dir.getwd,'/'], @@fs.paths)
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_include_path
|
189
|
+
fs = PageTemplate::FileSource.new(
|
190
|
+
'include_path'=>File.join(Dir.getwd,'tdata')
|
191
|
+
)
|
192
|
+
assert_equal([File.join(Dir.getwd,'tdata')],fs.paths,
|
193
|
+
"Explicit set include_path should only include the one element")
|
194
|
+
assert_equal(@@text,fs.get('dummy.txt'),
|
195
|
+
"Just a filename of something in an include path works")
|
196
|
+
end
|
197
|
+
def test_include_paths
|
198
|
+
location = File.dirname(@@location)
|
199
|
+
ptlocation = File.join(Dir.getwd,'lib')
|
200
|
+
pt = IO.read(File.join(ptlocation,'PageTemplate.rb'))
|
201
|
+
fs = PageTemplate::FileSource.new(
|
202
|
+
'include_paths'=>[location,ptlocation]
|
203
|
+
)
|
204
|
+
assert_equal([location,ptlocation],fs.paths,
|
205
|
+
"Explicit set include_paths should include all set elements")
|
206
|
+
assert_equal(@@text,fs.get('dummy.txt'),
|
207
|
+
"Just a filename of something in an include path works")
|
208
|
+
assert_equal(pt,fs.get('PageTemplate.rb'),
|
209
|
+
"Just a filename of something in an include path works")
|
182
210
|
end
|
183
211
|
end
|
184
212
|
|
185
213
|
class TestIfCommand < Test::Unit::TestCase
|
186
214
|
def setup
|
187
|
-
|
188
|
-
@@
|
215
|
+
parser = PageTemplate::Parser.new()
|
216
|
+
@@if = PageTemplate::IfCommand.new("if", "flag")
|
217
|
+
@@unless = PageTemplate::IfCommand.new("unless", "flag")
|
189
218
|
end
|
190
219
|
|
191
220
|
def test_initialize
|
221
|
+
parser = PageTemplate::Parser.new
|
192
222
|
good_1 = "if flag"
|
193
223
|
good_2 = "unless flag"
|
194
224
|
bad_1 = "heck no"
|
195
|
-
assert(PageTemplate::IfCommand.new(
|
196
|
-
assert(PageTemplate::IfCommand.new(
|
225
|
+
assert(PageTemplate::IfCommand.new("if", "flag"))
|
226
|
+
assert(PageTemplate::IfCommand.new("unless", "flag"))
|
197
227
|
assert_raises(ArgumentError,
|
198
228
|
"IfCommand will not initialize without a command declaring 'if/unless'") {
|
199
229
|
PageTemplate::IfCommand.new(bad_1)
|
@@ -208,32 +238,30 @@ module TestPageTemplate
|
|
208
238
|
"IfCommand#add adds a command to the block to be executed when false")
|
209
239
|
end
|
210
240
|
|
211
|
-
def
|
212
|
-
|
213
|
-
|
214
|
-
[ "/if", 0, nil ],
|
215
|
-
[ "end if", 0, nil ],
|
216
|
-
[ "/ if", 0, nil ],
|
217
|
-
[ "endunless", nil, 0 ],
|
218
|
-
[ "/unless", nil, 0 ],
|
219
|
-
[ "end unless", nil, 0 ],
|
220
|
-
[ "/ unless", nil, 0 ]
|
221
|
-
]
|
222
|
-
|
223
|
-
closers.each do |x|
|
224
|
-
assert_equal(x[1], @@if.closes?(x[0]))
|
225
|
-
assert_equal(x[2], @@unless.closes?(x[0]))
|
226
|
-
end
|
227
|
-
|
241
|
+
def test_else
|
242
|
+
assert(@@if.else)
|
243
|
+
assert(@@unless.else)
|
228
244
|
end
|
229
245
|
|
230
|
-
def
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
246
|
+
def test_elsif
|
247
|
+
ns = PageTemplate::Namespace.new
|
248
|
+
parser = PageTemplate::Parser.new
|
249
|
+
tester = PageTemplate::IfCommand.new('if','redflag')
|
250
|
+
tester.add(PageTemplate::TextCommand.new('Red Flag'))
|
251
|
+
tester.elsif('blueflag')
|
252
|
+
tester.add(PageTemplate::TextCommand.new('Blue Flag'))
|
253
|
+
tester.elsif('greenflag')
|
254
|
+
tester.add(PageTemplate::TextCommand.new('Green Flag'))
|
255
|
+
tester.else
|
256
|
+
tester.add(PageTemplate::TextCommand.new('No Flag'))
|
257
|
+
|
258
|
+
assert_equal('No Flag',tester.output(ns))
|
259
|
+
ns['greenflag'] = true
|
260
|
+
assert_equal('Green Flag',tester.output(ns))
|
261
|
+
ns['blueflag'] = true
|
262
|
+
assert_equal('Blue Flag',tester.output(ns))
|
263
|
+
ns['redflag'] = true
|
264
|
+
assert_equal('Red Flag',tester.output(ns))
|
237
265
|
end
|
238
266
|
|
239
267
|
def test_output
|
@@ -248,8 +276,8 @@ module TestPageTemplate
|
|
248
276
|
ns["flag"] = false
|
249
277
|
assert_equal("", @@if.output(ns))
|
250
278
|
assert_equal("dude!", @@unless.output(ns))
|
251
|
-
@@if.
|
252
|
-
@@unless.
|
279
|
+
@@if.else
|
280
|
+
@@unless.else
|
253
281
|
c2 = PageTemplate::TextCommand.new("sweet!")
|
254
282
|
@@if.add(c2)
|
255
283
|
@@unless.add(c2)
|
@@ -260,35 +288,36 @@ module TestPageTemplate
|
|
260
288
|
assert_equal("sweet!", @@if.output(ns))
|
261
289
|
assert_equal("dude!", @@unless.output(ns))
|
262
290
|
end
|
291
|
+
def test_empty_false
|
292
|
+
parser = PageTemplate::Parser.new('empty_is_true' => false)
|
293
|
+
template = parser.parse('[%if foo%]Foo[%else%]Bar[%end%]')
|
294
|
+
template['foo'] = []
|
295
|
+
assert_equal(template.output,'Bar')
|
296
|
+
parser.args['empty_is_true'] = true
|
297
|
+
assert_equal(template.output,'Foo')
|
298
|
+
end
|
263
299
|
end
|
264
300
|
|
265
301
|
class TestIncludeCommand < Test::Unit::TestCase
|
266
302
|
def test_output
|
267
|
-
|
268
|
-
|
269
|
-
i = PageTemplate::IncludeCommand.new('
|
270
|
-
|
271
|
-
assert_equal(
|
303
|
+
parser = PageTemplate::Parser.new()
|
304
|
+
parser['dummy'] = '/tdata/dummy.txt'
|
305
|
+
i = PageTemplate::IncludeCommand.new('dummy')
|
306
|
+
parser.load('tdata/dummy.txt')
|
307
|
+
assert_equal(parser.output, i.output(parser))
|
272
308
|
end
|
273
309
|
end
|
274
310
|
|
275
311
|
class TestLoopCommand < Test::Unit::TestCase
|
276
312
|
def setup
|
277
|
-
@@in = PageTemplate::LoopCommand.new("in list")
|
278
|
-
@@loop = PageTemplate::LoopCommand.new("loop list")
|
313
|
+
@@in = PageTemplate::LoopCommand.new("in", "list", "")
|
314
|
+
@@loop = PageTemplate::LoopCommand.new("loop", "list", "")
|
279
315
|
end
|
280
316
|
|
281
317
|
def test_initialize
|
282
|
-
|
283
|
-
assert(PageTemplate::LoopCommand.new(
|
284
|
-
|
285
|
-
assert(PageTemplate::LoopCommand.new(good_2))
|
286
|
-
good_3 = "in list: item"
|
287
|
-
assert(PageTemplate::LoopCommand.new(good_3))
|
288
|
-
bad_1 = "bad list"
|
289
|
-
assert_raises(ArgumentError) { PageTemplate::LoopCommand.new(bad_1) }
|
290
|
-
bad_2 = "loop"
|
291
|
-
assert_raises(ArgumentError) { PageTemplate::LoopCommand.new(bad_2) }
|
318
|
+
assert(PageTemplate::LoopCommand.new("in", "list", ""))
|
319
|
+
assert(PageTemplate::LoopCommand.new("in", "loop", ""))
|
320
|
+
assert(PageTemplate::LoopCommand.new("in", "list", "item"))
|
292
321
|
end
|
293
322
|
|
294
323
|
def test_add
|
@@ -297,39 +326,19 @@ module TestPageTemplate
|
|
297
326
|
"LoopCommand#add adds a command to the block to be executed in the loop")
|
298
327
|
end
|
299
328
|
|
300
|
-
def
|
301
|
-
|
302
|
-
[ "endin", 0, nil],
|
303
|
-
[ "/in", 0, nil],
|
304
|
-
[ "end in", 0, nil],
|
305
|
-
[ "/ in", 0, nil],
|
306
|
-
[ "endloop", nil, 0],
|
307
|
-
[ "/loop", nil, 0],
|
308
|
-
[ "end loop", nil, 0],
|
309
|
-
[ "/ loop", nil, 0]
|
310
|
-
]
|
311
|
-
|
312
|
-
closers.each do |x|
|
313
|
-
assert_equal(x[1], @@in.closes?(x[0]),
|
314
|
-
"#{x[0]} on 'in' is expected to be #{x[1]}")
|
315
|
-
assert_equal(x[2], @@loop.closes?(x[0]),
|
316
|
-
"#{x[0]} on 'loop' is expected to be #{x[2]}")
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
def test_modifies_eh
|
321
|
-
assert_equal(false, @@loop.modifies?("otherwise"))
|
322
|
-
assert(@@loop.modifies?("else"))
|
323
|
-
assert_raises(ArgumentError) { @@loop.modifies?("else") }
|
329
|
+
def test_else
|
330
|
+
assert(@@loop.else)
|
324
331
|
end
|
325
332
|
|
326
333
|
def test_output
|
334
|
+
parser = PageTemplate::Parser.new()
|
327
335
|
ns = PageTemplate::Namespace.new()
|
336
|
+
ns.parent = parser
|
328
337
|
ns["list"] = [1, 2, 3]
|
329
338
|
|
330
339
|
# Simple TextCommands in a Loop
|
331
340
|
c = PageTemplate::TextCommand.new("Dude!")
|
332
|
-
loop_1 = PageTemplate::LoopCommand.new("loop list")
|
341
|
+
loop_1 = PageTemplate::LoopCommand.new("loop", "list", "")
|
333
342
|
loop_1.add(c)
|
334
343
|
assert_equal("Dude!Dude!Dude!", loop_1.output(ns))
|
335
344
|
c_1 = PageTemplate::TextCommand.new("Sweet!")
|
@@ -341,9 +350,9 @@ module TestPageTemplate
|
|
341
350
|
# Simple TextCommands in a Loop with an Else block
|
342
351
|
c_1 = PageTemplate::TextCommand.new("Sweet!")
|
343
352
|
c_2 = PageTemplate::TextCommand.new("Dude?")
|
344
|
-
loop_2 = PageTemplate::LoopCommand.new("loop list")
|
353
|
+
loop_2 = PageTemplate::LoopCommand.new("loop", "list", "")
|
345
354
|
loop_2.add(c_1)
|
346
|
-
loop_2.
|
355
|
+
loop_2.else
|
347
356
|
loop_2.add(c_2)
|
348
357
|
ns["list"] = nil
|
349
358
|
assert_equal("Dude?", loop_2.output(ns))
|
@@ -355,15 +364,15 @@ module TestPageTemplate
|
|
355
364
|
c_2 = PageTemplate::TextCommand.new("I know kung fu.")
|
356
365
|
c_3 = PageTemplate::TextCommand.new("Prove it.")
|
357
366
|
c_4 = PageTemplate::TextCommand.new("Last Post!")
|
358
|
-
if_1 = PageTemplate::IfCommand.new("if __FIRST__")
|
367
|
+
if_1 = PageTemplate::IfCommand.new("if", "__FIRST__")
|
359
368
|
if_1.add(c_1)
|
360
|
-
if_2 = PageTemplate::IfCommand.new("if __ODD__")
|
369
|
+
if_2 = PageTemplate::IfCommand.new("if", "__ODD__")
|
361
370
|
if_2.add(c_2)
|
362
|
-
if_2.
|
371
|
+
if_2.else
|
363
372
|
if_2.add(c_3)
|
364
|
-
if_3 = PageTemplate::IfCommand.new("if __LAST__")
|
373
|
+
if_3 = PageTemplate::IfCommand.new("if", "__LAST__")
|
365
374
|
if_3.add(c_4)
|
366
|
-
loop_1 = PageTemplate::LoopCommand.new("in cliches")
|
375
|
+
loop_1 = PageTemplate::LoopCommand.new("in", "cliches", "")
|
367
376
|
loop_1.add(if_1)
|
368
377
|
loop_1.add(if_2)
|
369
378
|
loop_1.add(if_3)
|
@@ -372,14 +381,26 @@ module TestPageTemplate
|
|
372
381
|
assert_equal(expected, loop_1.output(ns))
|
373
382
|
|
374
383
|
# A Loop with a named iterator over the items in its list
|
375
|
-
loop_1 = PageTemplate::LoopCommand.new("in list
|
376
|
-
c_1 = PageTemplate::ValueCommand.new("item",
|
384
|
+
loop_1 = PageTemplate::LoopCommand.new("in", "list", "item")
|
385
|
+
c_1 = PageTemplate::ValueCommand.new("item", nil)
|
377
386
|
c_2 = PageTemplate::TextCommand.new(" ")
|
378
387
|
loop_1.add(c_1)
|
379
388
|
loop_1.add(c_2)
|
380
389
|
ns["list"] = [0, -1, 2, -3, 4]
|
381
390
|
expected = ns["list"].join(" ") + " "
|
382
391
|
assert_equal(expected, loop_1.output(ns))
|
392
|
+
|
393
|
+
# A loop with multiple iterators
|
394
|
+
loop_1 = PageTemplate::LoopCommand.new("in", "names", "key val")
|
395
|
+
c1 = PageTemplate::ValueCommand.new("key",nil)
|
396
|
+
c2 = PageTemplate::ValueCommand.new("val",nil)
|
397
|
+
tc = PageTemplate::TextCommand.new(": ")
|
398
|
+
loop_1.add c1
|
399
|
+
loop_1.add tc
|
400
|
+
loop_1.add c2
|
401
|
+
ns["names"] = { 'Brian' => 'Wisti', 'Greg' => 'Millam' }
|
402
|
+
out = ns["names"].map { |fn,ln| "#{fn}: #{ln}" }.join('')
|
403
|
+
assert_equal(out,loop_1.output(ns))
|
383
404
|
end
|
384
405
|
end
|
385
406
|
|
@@ -411,6 +432,17 @@ module TestPageTemplate
|
|
411
432
|
@@ns.object = -5
|
412
433
|
assert_equal(5, @@ns.get("abs"),
|
413
434
|
"Namespace#get will send get requests to a contained object if it is available")
|
435
|
+
|
436
|
+
assert_equal(3,@@ns.get("succ.succ.abs"),
|
437
|
+
"Namespace#get will send get requests subsequently to accessors if available")
|
438
|
+
|
439
|
+
@@ns.set("list", ['one','two','three'])
|
440
|
+
assert_equal('two',@@ns.get('list.1'),
|
441
|
+
"If an accessor looks like an integer, it's an array index")
|
442
|
+
|
443
|
+
@@ns.set('fruits',{'a'=>'apple','b'=>'banana'})
|
444
|
+
assert_equal('banana',@@ns.get('fruits.b'),
|
445
|
+
"If an object has_key?(b), it checks get object['b'] rather than send(:b)")
|
414
446
|
end
|
415
447
|
|
416
448
|
def test_index
|
@@ -540,29 +572,38 @@ module TestPageTemplate
|
|
540
572
|
end
|
541
573
|
|
542
574
|
class TestSyntaxGlossary < Test::Unit::TestCase
|
575
|
+
# Test modifications by gmillam
|
543
576
|
def setup
|
544
|
-
@@g = PageTemplate::SyntaxGlossary
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
577
|
+
@@g = Class.new(PageTemplate::SyntaxGlossary)
|
578
|
+
@@g.directive = /<(.+?)>/
|
579
|
+
@@g.define(/^--(.*)/) { |match|
|
580
|
+
PageTemplate::CommentCommand.new(match[1])
|
581
|
+
}
|
582
|
+
@@g.default { |command|
|
583
|
+
PageTemplate::UnknownCommand.new(command)
|
584
|
+
}
|
549
585
|
end
|
550
586
|
|
551
587
|
def test_define
|
552
|
-
|
588
|
+
# lookup() now returns instances, not classes
|
589
|
+
# assert_equal(PageTemplate::UnknownCommand, @@g.lookup("foo"))
|
590
|
+
assert_raises(ArgumentError,
|
591
|
+
"SyntaxGlossary#define requires a Regexp for its argument") {
|
592
|
+
@@g.define("foo") {}
|
593
|
+
}
|
553
594
|
assert_raises(ArgumentError,
|
554
|
-
"SyntaxGlossary#define requires a
|
555
|
-
|
595
|
+
"SyntaxGlossary#define requires a block to be passed") {
|
596
|
+
@@g.define("foo")
|
556
597
|
}
|
557
|
-
assert(@@g.define(/^foo
|
598
|
+
assert(@@g.define(/^foo/) {|m,p|},
|
558
599
|
"Use SyntaxGlossary#define to add or change SyntaxGlossary entries")
|
559
600
|
end
|
560
601
|
|
561
602
|
def test_define_global_var
|
562
|
-
assert_equal(
|
603
|
+
assert_equal(true, @@g.lookup("d").is_a?(PageTemplate::UnknownCommand))
|
563
604
|
assert(@@g.define_global_var(/d/),
|
564
605
|
"Use SyntaxGlossary#define_global_var to create explicit ValueCommands")
|
565
|
-
assert_equal(
|
606
|
+
assert_equal(true, @@g.lookup("d").is_a?(PageTemplate::ValueCommand))
|
566
607
|
end
|
567
608
|
|
568
609
|
def test_directive
|
@@ -574,11 +615,12 @@ module TestPageTemplate
|
|
574
615
|
directive = /\[.+?\]/
|
575
616
|
assert(@@g.directive = directive)
|
576
617
|
assert_equal(directive, @@g.directive)
|
618
|
+
@@g.directive = /<(.+?)>/
|
577
619
|
end
|
578
620
|
|
579
621
|
def test_lookup
|
580
|
-
assert_equal(
|
581
|
-
assert_equal(
|
622
|
+
assert_equal(true, @@g.lookup("--").is_a?(PageTemplate::CommentCommand))
|
623
|
+
assert_equal(true, @@g.lookup("++").is_a?(PageTemplate::UnknownCommand))
|
582
624
|
end
|
583
625
|
end
|
584
626
|
|
@@ -593,7 +635,7 @@ module TestPageTemplate
|
|
593
635
|
class TestUnknownCommand < Test::Unit::TestCase
|
594
636
|
def test_output
|
595
637
|
parser = PageTemplate::Parser.new()
|
596
|
-
uc = PageTemplate::UnknownCommand.new("waffle olive mango"
|
638
|
+
uc = PageTemplate::UnknownCommand.new("waffle olive mango")
|
597
639
|
assert_equal("[ Unknown Command: waffle olive mango ]", uc.output(parser.namespace))
|
598
640
|
end
|
599
641
|
end
|
@@ -602,15 +644,35 @@ module TestPageTemplate
|
|
602
644
|
def test_output
|
603
645
|
p = PageTemplate::Parser.new()
|
604
646
|
p['x'] = 'y'
|
605
|
-
v = PageTemplate::ValueCommand.new('
|
647
|
+
v = PageTemplate::ValueCommand.new('x',nil)
|
606
648
|
assert_equal('y', v.output())
|
607
649
|
assert_equal('y', v.output(p.namespace))
|
608
650
|
p['x'] = 1
|
609
|
-
v = PageTemplate::ValueCommand.new('
|
610
|
-
w = PageTemplate::ValueCommand.new('
|
651
|
+
v = PageTemplate::ValueCommand.new('x.succ.foo', nil)
|
652
|
+
w = PageTemplate::ValueCommand.new('x.succ.succ.succ', nil)
|
611
653
|
assert_equal('4',w.output(p.namespace))
|
612
654
|
assert_equal('',v.output(p.namespace))
|
613
655
|
end
|
656
|
+
def test_raise_on_error
|
657
|
+
p = PageTemplate::Parser.new
|
658
|
+
template = p.parse("[% var foo.bar %]")
|
659
|
+
foo = "hello"
|
660
|
+
def foo.bar
|
661
|
+
asdf # method unknown error
|
662
|
+
end
|
663
|
+
template["foo"] = foo
|
664
|
+
assert_equal(
|
665
|
+
template.output,
|
666
|
+
"[ Error: undefined local variable or method `asdf' for \"hello\":String ]",
|
667
|
+
"With raise_on_error not set, we get error strings")
|
668
|
+
p.args['raise_on_error'] = true
|
669
|
+
assert_raises(NameError,
|
670
|
+
"With raise on error set, user has to catch errors") {
|
671
|
+
template.output
|
672
|
+
}
|
673
|
+
rescue Exception => er
|
674
|
+
puts "error: #{er.class}"
|
675
|
+
end
|
614
676
|
end
|
615
677
|
end
|
616
678
|
|