PageTemplate 1.1.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. data/CVS/Entries +10 -0
  2. data/CVS/Repository +1 -0
  3. data/CVS/Root +1 -0
  4. data/Changes +13 -0
  5. data/Changes~ +7 -0
  6. data/InstalledFiles +7 -0
  7. data/README.txt +1 -1
  8. data/Rakefile +1 -1
  9. data/Rakefile~ +54 -0
  10. data/TC_PageTemplate.rb +137 -19
  11. data/TC_PageTemplate.rb~ +965 -0
  12. data/doc/classes/BlockCommand.html +1 -1
  13. data/doc/classes/BlockCommand.src/M000004.html +1 -1
  14. data/doc/classes/BlockCommand.src/M000005.html +1 -1
  15. data/doc/classes/BlockCommand.src/M000006.html +1 -1
  16. data/doc/classes/BlockCommand.src/M000007.html +1 -1
  17. data/doc/classes/BlockCommand.src/M000008.html +1 -1
  18. data/doc/classes/Command.html +10 -10
  19. data/doc/classes/Command.src/{M000029.html → M000032.html} +0 -0
  20. data/doc/classes/Command.src/{M000030.html → M000033.html} +0 -0
  21. data/doc/classes/CommentCommand.html +146 -0
  22. data/doc/classes/CommentCommand.src/M000009.html +18 -0
  23. data/doc/classes/IfCommand.html +15 -15
  24. data/doc/classes/IfCommand.src/{M000039.html → M000042.html} +1 -1
  25. data/doc/classes/IfCommand.src/{M000040.html → M000043.html} +1 -1
  26. data/doc/classes/IfCommand.src/{M000041.html → M000044.html} +1 -1
  27. data/doc/classes/IfElseCommand.html +15 -15
  28. data/doc/classes/IfElseCommand.src/M000025.html +5 -6
  29. data/doc/classes/IfElseCommand.src/{M000024.html → M000026.html} +1 -1
  30. data/doc/classes/IfElseCommand.src/M000027.html +20 -0
  31. data/doc/classes/IncludeCommand.html +16 -23
  32. data/doc/classes/IncludeCommand.src/M000019.html +12 -4
  33. data/doc/classes/IncludeCommand.src/{M000018.html → M000020.html} +10 -5
  34. data/doc/classes/IncludeCommand.src/M000021.html +18 -0
  35. data/doc/classes/IncludeCommandError.html +118 -0
  36. data/doc/classes/LoopCommand.src/M000001.html +1 -1
  37. data/doc/classes/LoopCommand.src/M000002.html +11 -2
  38. data/doc/classes/LoopCommand.src/M000003.html +1 -1
  39. data/doc/classes/LoopElseCommand.html +15 -15
  40. data/doc/classes/LoopElseCommand.src/M000022.html +5 -6
  41. data/doc/classes/LoopElseCommand.src/{M000021.html → M000023.html} +1 -1
  42. data/doc/classes/LoopElseCommand.src/M000024.html +20 -0
  43. data/doc/classes/Namespace.html +42 -42
  44. data/doc/classes/Namespace.src/M000034.html +5 -5
  45. data/doc/classes/Namespace.src/M000035.html +4 -22
  46. data/doc/classes/Namespace.src/M000036.html +4 -7
  47. data/doc/classes/Namespace.src/M000037.html +5 -4
  48. data/doc/classes/Namespace.src/M000038.html +22 -4
  49. data/doc/classes/Namespace.src/M000039.html +21 -0
  50. data/doc/classes/Namespace.src/M000040.html +18 -0
  51. data/doc/classes/Namespace.src/{M000031.html → M000041.html} +4 -5
  52. data/doc/classes/PageTemplate.html +72 -44
  53. data/doc/classes/PageTemplate.src/M000010.html +31 -11
  54. data/doc/classes/PageTemplate.src/M000011.html +4 -4
  55. data/doc/classes/PageTemplate.src/M000012.html +15 -4
  56. data/doc/classes/PageTemplate.src/M000013.html +4 -4
  57. data/doc/classes/PageTemplate.src/M000014.html +4 -4
  58. data/doc/classes/PageTemplate.src/M000015.html +4 -4
  59. data/doc/classes/PageTemplate.src/M000016.html +4 -5
  60. data/doc/classes/PageTemplate.src/M000017.html +18 -0
  61. data/doc/classes/PageTemplate.src/M000018.html +19 -0
  62. data/doc/classes/Syntax/CachedParser.html +10 -10
  63. data/doc/classes/Syntax/CachedParser.src/{M000045.html → M000048.html} +1 -1
  64. data/doc/classes/Syntax/CachedParser.src/{M000046.html → M000049.html} +2 -1
  65. data/doc/classes/Syntax/Glossary.html +16 -10
  66. data/doc/classes/Syntax/Glossary.src/{M000047.html → M000050.html} +1 -1
  67. data/doc/classes/Syntax/Glossary.src/{M000048.html → M000051.html} +1 -1
  68. data/doc/classes/Syntax/Parser.html +31 -31
  69. data/doc/classes/Syntax/Parser.src/M000052.html +6 -5
  70. data/doc/classes/Syntax/Parser.src/M000053.html +20 -37
  71. data/doc/classes/Syntax/Parser.src/M000054.html +4 -93
  72. data/doc/classes/Syntax/Parser.src/{M000049.html → M000055.html} +5 -6
  73. data/doc/classes/Syntax/Parser.src/M000056.html +53 -0
  74. data/doc/classes/Syntax/Parser.src/M000057.html +111 -0
  75. data/doc/classes/Syntax.html +1 -1
  76. data/doc/classes/TextCommand.html +15 -15
  77. data/doc/classes/TextCommand.src/{M000042.html → M000045.html} +1 -1
  78. data/doc/classes/TextCommand.src/{M000043.html → M000046.html} +1 -1
  79. data/doc/classes/TextCommand.src/{M000044.html → M000047.html} +1 -1
  80. data/doc/classes/UnlessCommand.html +151 -0
  81. data/doc/classes/UnlessCommand.src/M000028.html +20 -0
  82. data/doc/classes/ValueCommand.html +15 -15
  83. data/doc/classes/ValueCommand.src/{M000026.html → M000029.html} +1 -1
  84. data/doc/classes/ValueCommand.src/{M000027.html → M000030.html} +1 -1
  85. data/doc/classes/ValueCommand.src/{M000028.html → M000031.html} +1 -1
  86. data/doc/created.rid +1 -1
  87. data/doc/files/README_txt.html +2 -2
  88. data/doc/files/lib/PageTemplate_rb.html +1 -1
  89. data/doc/fr_class_index.html +3 -0
  90. data/doc/fr_method_index.html +52 -49
  91. data/lib/CVS/Entries +2 -0
  92. data/lib/CVS/Repository +1 -0
  93. data/lib/CVS/Root +1 -0
  94. data/lib/PageTemplate.rb +103 -26
  95. data/lib/PageTemplate.rb~ +1004 -0
  96. data/pkg/PageTemplate-1.2.0.gem +0 -0
  97. data/tdata/CVS/Entries +28 -0
  98. data/tdata/CVS/Repository +1 -0
  99. data/tdata/CVS/Root +1 -0
  100. data/tdata/cm.txt +3 -0
  101. data/tdata/include.4.nf.out.txt +2 -0
  102. data/tdata/metadata.1.txt +5 -0
  103. data/tdata/metadata.2.txt +5 -0
  104. data/tdata/metadata.3.txt +5 -0
  105. data/tdata/metadata.4.txt +5 -0
  106. data/tdata/p/CVS/Entries +5 -0
  107. data/tdata/p/CVS/Repository +1 -0
  108. data/tdata/p/CVS/Root +1 -0
  109. data/tdata/p/CVS/b2.txt,t +0 -0
  110. data/tdata/p/b2.txt +4 -0
  111. data/tdata/p/b2.txt~ +4 -0
  112. metadata +70 -32
  113. data/doc/classes/IfElseCommand.src/M000023.html +0 -19
  114. data/doc/classes/IncludeCommand.src/M000017.html +0 -21
  115. data/doc/classes/LoopElseCommand.src/M000020.html +0 -19
  116. data/doc/classes/Namespace.src/M000032.html +0 -18
  117. data/doc/classes/Namespace.src/M000033.html +0 -18
  118. data/doc/classes/PageTemplate.src/M000009.html +0 -46
  119. data/doc/classes/Syntax/Parser.src/M000050.html +0 -35
  120. data/doc/classes/Syntax/Parser.src/M000051.html +0 -18
  121. data/lib/MANIFEST +0 -2
  122. data/pkg/PageTemplate-1.1.2.gem +0 -0
data/CVS/Entries ADDED
@@ -0,0 +1,10 @@
1
+ /MANIFEST/1.1.1.1/Wed Mar 9 01:30:10 2005//
2
+ /config.save/1.1.1.1/Wed Mar 9 01:30:10 2005//
3
+ /install.rb/1.1.1.1/Wed Mar 9 01:30:10 2005//
4
+ /test-install.rb/1.1.1.1/Wed Mar 9 01:30:10 2005//
5
+ D/lib////
6
+ D/tdata////
7
+ /Changes/1.1/Fri Mar 11 08:56:02 2005//
8
+ /README.txt/1.2/Fri Mar 11 01:48:29 2005//
9
+ /Rakefile/1.2/Fri Mar 11 09:01:10 2005//
10
+ /TC_PageTemplate.rb/1.12/Fri Mar 11 19:04:51 2005//
data/CVS/Repository ADDED
@@ -0,0 +1 @@
1
+ PageTemplate
data/CVS/Root ADDED
@@ -0,0 +1 @@
1
+ /home/wisti/CVS
data/Changes ADDED
@@ -0,0 +1,13 @@
1
+ 1.2
2
+ - Added: UnlessCommand (including '[%unless foo %]' syntax)
3
+ - Added: Loop Metavariables __FIRST__, __LAST__, and __ODD__
4
+ - Added: CommentCommand (including '[%-- blah --%]' syntax)
5
+ - Added: IncludeCommands allow multiple include paths
6
+ - Changed: VariableCommands access via 'obj.respond_to?' rather than 'obj.class.has_method?'
7
+ - Fixed: Unhandled SecurityError when 'include' is called in a mod_ruby environment
8
+ - Fixed: MANIFEST file being installed to rubylib directory
9
+ - Fixed: Returns a failure string when include fails, rather than raising an exception.
10
+ 1.1
11
+ - Added: IncludeCommand
12
+ 1.0
13
+ - Moved to Rubyforge
data/Changes~ ADDED
@@ -0,0 +1,7 @@
1
+ 1.2
2
+ - Added: UnlessCommand
3
+ - Fixed:
4
+ 1.1
5
+ - Added: IncludeCommand
6
+ 1.0
7
+ - Moved to Rubyforge
data/InstalledFiles ADDED
@@ -0,0 +1,7 @@
1
+ /usr/local/lib/ruby/site_ruby/1.8/
2
+ /usr/local/lib/ruby/site_ruby/1.8/
3
+ /usr/local/lib/ruby/site_ruby/1.8/CVS
4
+ /usr/local/lib/ruby/site_ruby/1.8/CVS
5
+ /usr/local/lib/ruby/site_ruby/1.8/CVS
6
+ /usr/local/lib/ruby/site_ruby/1.8/
7
+ /usr/local/lib/ruby/site_ruby/1.8/
data/README.txt CHANGED
@@ -19,7 +19,7 @@ http://www.coolnamehere.com/products/pagetemplate/
19
19
  == Features
20
20
 
21
21
  * Variable substitution
22
- * If and If/Else structures
22
+ * If, Unless, and If/Else structures
23
23
  * Loops and Loop/Else structures
24
24
  * Customizable Syntax
25
25
  * Include content from external files (new in 1.1)
data/Rakefile CHANGED
@@ -31,7 +31,7 @@ end
31
31
 
32
32
  spec = Gem::Specification.new do |s|
33
33
  s.name = "PageTemplate"
34
- s.version = "1.1.2"
34
+ s.version = "1.2.0"
35
35
  s.author = "Brian Wisti"
36
36
  s.email = "brian@coolnamehere.com"
37
37
  s.homepage = "http://coolnamehere.com/products/pagetemplate"
data/Rakefile~ ADDED
@@ -0,0 +1,54 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ Gem::manage_gems
5
+ require 'rake/gempackagetask'
6
+
7
+ task :default => [:all, :test]
8
+
9
+ task :all do
10
+ ruby %{-c lib/PageTemplate.rb}
11
+ ruby %{-c TC_PageTemplate.rb}
12
+ end
13
+
14
+ task :test do
15
+ ruby %{-w TC_PageTemplate.rb}
16
+ end
17
+
18
+ task :install do
19
+ ruby %{install.rb config}
20
+ ruby %{install.rb setup}
21
+ ruby %{install.rb install}
22
+ end
23
+
24
+ task :doc do
25
+ sh %{rdoc lib/PageTemplate.rb README.txt}
26
+ end
27
+
28
+ task :cnh_doc do
29
+ sh %{cp -R --remove-destination doc /home/wisti/Sites/coolnamehere/extras/doc/PageTemplate}
30
+ end
31
+
32
+ spec = Gem::Specification.new do |s|
33
+ s.name = "PageTemplate"
34
+ s.version = "1.1.2"
35
+ s.author = "Brian Wisti"
36
+ s.email = "brian@coolnamehere.com"
37
+ s.homepage = "http://coolnamehere.com/products/pagetemplate"
38
+ s.platform = Gem::Platform::RUBY
39
+ s.summary = "A simple templating system for Web sites."
40
+ s.files = Dir.glob("**/*")
41
+ s.require_path = "lib"
42
+ s.autorequire = "PageTemplate.rb"
43
+ s.test_file = "TC_PageTemplate.rb"
44
+ s.has_rdoc = true
45
+ s.extra_rdoc_files = ["README.txt"]
46
+ end
47
+
48
+ Rake::GemPackageTask.new(spec) do |pkg|
49
+ pkg.need_tar = true
50
+ end
51
+
52
+ task :gem do
53
+ sh %{rake pkg/PageTemplate-#{spec.version}.gem}
54
+ end
data/TC_PageTemplate.rb CHANGED
@@ -60,6 +60,16 @@ class TC_Command < Test::Unit::TestCase
60
60
 
61
61
  end
62
62
 
63
+ class TC_CommentCommand < Test::Unit::TestCase
64
+ @@command = CommentCommand.new()
65
+
66
+ def testCommentCommand
67
+ assert_equal(nil, @@command.output,
68
+ "CommentCommands don't have any output")
69
+ end
70
+
71
+ end
72
+
63
73
  class TC_BlockCommand < Test::Unit::TestCase
64
74
  @@command = BlockCommand.new()
65
75
 
@@ -125,6 +135,24 @@ class TC_IfCommand < Test::Unit::TestCase
125
135
  end
126
136
  end
127
137
 
138
+ class TC_UnlessCommand < Test::Unit::TestCase
139
+ def testOutput
140
+ aCommand = TextCommand.new("Dude!")
141
+ bCommand = TextCommand.new("Sweet!")
142
+ commandBlock = BlockCommand.new()
143
+ commandBlock.add(aCommand)
144
+ commandBlock.add(bCommand)
145
+ ns = Namespace.new()
146
+ ns["testing"] = false
147
+
148
+ # First test for output with false condition
149
+ unlessCommand = UnlessCommand.new("testing", commandBlock)
150
+ assert_equal("Dude!Sweet!", unlessCommand.output(ns))
151
+ ns["testing"] = true
152
+ assert_nil(unlessCommand.output(ns))
153
+ end
154
+ end
155
+
128
156
  class TC_IfElseCommand < Test::Unit::TestCase
129
157
 
130
158
  def testOutput
@@ -349,14 +377,17 @@ end
349
377
 
350
378
  class TC_SyntaxGlossary < Test::Unit::TestCase
351
379
  @@syntax = Syntax::Glossary.new( /\[%(.+?)%\]/,
352
- 'value' => /var (\w+)/,
353
- 'ifopen' => /if (\w+)/,
354
- 'ifclose' => /endif/,
355
- 'ifbranch' => /else/,
356
- 'loopopen' => /in (\w+)/,
357
- 'loopclose' => /endin/,
358
- 'loopbranch' => /no/,
359
- 'include' => /include (\w+)/
380
+ 'value' => /var (\w+)/,
381
+ 'ifopen' => /if (\w+)/,
382
+ 'ifclose' => /endif/,
383
+ 'unlessopen' => /unless (\w+)/,
384
+ 'unlessclose' => /endunless/,
385
+ 'ifbranch' => /else/,
386
+ 'loopopen' => /in (\w+)/,
387
+ 'loopclose' => /endin/,
388
+ 'loopbranch' => /no/,
389
+ 'include' => /include (\w+)/,
390
+ 'comment' => /--.+?--/
360
391
  )
361
392
 
362
393
  def testGlossary
@@ -380,6 +411,7 @@ class TC_SyntaxGlossary < Test::Unit::TestCase
380
411
  assert_equal(["loopclose", nil], @@syntax.lookup("endin"))
381
412
  assert_equal(["loopbranch", nil], @@syntax.lookup("no"))
382
413
  assert_equal(["include", "foo"], @@syntax.lookup("include foo"))
414
+ assert_equal(["comment", nil], @@syntax.lookup("-- blarg! --"))
383
415
  assert_nil(@@syntax.lookup("foo"))
384
416
  assert_nil(@@syntax.lookup("foo bar"))
385
417
  end
@@ -430,6 +462,29 @@ class TC_SyntaxParser < Test::Unit::TestCase
430
462
  ]
431
463
 
432
464
  assert_equal(mResult, @@parser.parse(multiline))
465
+
466
+ multiline = [
467
+ "Hello [%var world%\]",
468
+ "[%unless return%]",
469
+ "Welcome!",
470
+ "[%endunless%]"
471
+ ]
472
+
473
+ mResult = [
474
+ [1, "Hello "],
475
+ [1, ["value", "world"]],
476
+ [1, ""],
477
+ [2, ""],
478
+ [2, ["unlessopen", "return"]],
479
+ [2, ""],
480
+ [3, "Welcome!"],
481
+ [4, ""],
482
+ [4, ["unlessclose", nil]],
483
+ [4, ""]
484
+ ]
485
+
486
+ assert_equal(mResult, @@parser.parse(multiline))
487
+
433
488
  end
434
489
 
435
490
  def testCompile
@@ -440,12 +495,21 @@ class TC_SyntaxParser < Test::Unit::TestCase
440
495
  "[%endif%]"
441
496
  ]
442
497
  assert(@@parser.compile(@@parser.parse(directives)))
498
+
499
+ directives = [
500
+ "Hello [%var world%]",
501
+ "[%unless return%]",
502
+ "Welcome!",
503
+ "[%endunless%]"
504
+ ]
505
+ assert(@@parser.compile(@@parser.parse(directives)))
443
506
  end
444
507
 
445
508
  def testBuild
446
509
  assert(@@parser.build("tdata/p/b1.txt"))
447
510
  # Make sure nothing panics if we ask for the commands again.
448
511
  assert(@@parser.build("tdata/p/b1.txt"))
512
+ assert(@@parser.build("tdata/p/b2.txt"))
449
513
  end
450
514
  end
451
515
 
@@ -513,6 +577,11 @@ class TC_PageTemplate < Test::Unit::TestCase
513
577
  cmpFile = File.open("tdata/nm.txt").read()
514
578
  assert_equal(cmpFile, @@template.output())
515
579
  end
580
+
581
+ def testOutputCommentMarkup
582
+ @@template.load("tdata/cm.txt")
583
+ assert(@@template.output !~ /\[%--/)
584
+ end
516
585
 
517
586
  def testOutputValueMarkup
518
587
 
@@ -530,6 +599,14 @@ class TC_PageTemplate < Test::Unit::TestCase
530
599
  assert(@@template.output =~ /<h1>title%\]<\/h1>/)
531
600
  end
532
601
 
602
+ def testOutputUnlessMarkup
603
+ @@template['return'] = true
604
+ @@template.load("tdata/p/b2.txt")
605
+ assert(@@template.output !~ /Welcome/)
606
+ @@template['return'] = false
607
+ assert(@@template.output =~ /Welcome/)
608
+ end
609
+
533
610
  def testOutputIfMarkup
534
611
  @@template['flag'] = true
535
612
  @@template.load("tdata/i1.txt")
@@ -621,6 +698,30 @@ class TC_PageTemplate < Test::Unit::TestCase
621
698
  assert(@@template.output !~ /<li>.*?<\/li>/)
622
699
  end
623
700
 
701
+ def testLoopMetavariables
702
+ @@template.load("tdata/metadata.1.txt")
703
+ myLoop = []
704
+ 1.upto(5) { |v| myLoop << {'v' => v} }
705
+
706
+ @@template['loop'] = myLoop
707
+ assert(@@template.output =~ /<li>--1--<\/li>/,
708
+ "__FIRST__ is set for the first iteration through a loop")
709
+ assert(@@template.output =~ /<li>5<\/li>/,
710
+ "__FIRST__ is unset after the first iteration through a loop")
711
+
712
+ @@template.load("tdata/metadata.2.txt")
713
+ assert(@@template.output =~ /<li>--5--<\/li>/,
714
+ "__LAST__ is set for the last iteration through a loop")
715
+ assert(@@template.output =~ /<li>1<\/li>/,
716
+ "__LAST__ is unset before the last iteration through a loop")
717
+
718
+ @@template.load("tdata/metadata.3.txt")
719
+ assert(@@template.output =~ /<li>--1--<\/li>/,
720
+ "__ODD__ is set for odd-numbered iterations through a loop (1st, 3rd, etc)")
721
+ assert(@@template.output =~ /<li>2<\/li>/,
722
+ "__ODD__ is unset for even-numbered iterations through a loop (2nd, 4th, etc)")
723
+ end
724
+
624
725
  def testOutputNestedLoopMarkup
625
726
  @@template.load("tdata/l2.txt")
626
727
 
@@ -734,9 +835,7 @@ class TC_PageTemplate < Test::Unit::TestCase
734
835
  'creator'=> 'Tom Waits'}]}
735
836
  ]
736
837
 
737
- page = PageTemplate.new(
738
- 'filename' => "tdata/complex.txt"
739
- )
838
+ page = PageTemplate.new('filename' => "tdata/complex.txt")
740
839
  page.setParameter("title", title)
741
840
  page.setParameter("ifTest", 1)
742
841
  page.setParameter("languages", languages)
@@ -749,8 +848,7 @@ class TC_PageTemplate < Test::Unit::TestCase
749
848
  end
750
849
 
751
850
  def testCachedTemplate
752
- assert(ct = PageTemplate.new(
753
- 'filename' => "tdata/complex.txt",
851
+ assert(ct = PageTemplate.new('filename' => "tdata/complex.txt",
754
852
  'use_cache' => true
755
853
  ))
756
854
 
@@ -804,7 +902,6 @@ class TC_Include < Test::Unit::TestCase
804
902
  def testIncludeCommand()
805
903
  ns = Namespace.new()
806
904
 
807
-
808
905
  incCommand = IncludeCommand.new("tdata/include.1.txt")
809
906
  text = File.open("tdata/include.1.txt").read()
810
907
  assert_equal(text, incCommand.output(ns),
@@ -822,22 +919,43 @@ class TC_Include < Test::Unit::TestCase
822
919
  incCommand = IncludeCommand.new("tdata/include.3.txt")
823
920
  assert_equal(pt.output(), incCommand.output(ns),
824
921
  "Include Commands can parse standard Template markup")
825
-
826
922
  end
827
923
 
828
924
  def testIncludePath
829
- incCommand = IncludeCommand.new("include.4.txt", "tdata")
925
+ incCommand = IncludeCommand.new("include.4.txt", [ "tdata" ])
830
926
  text = File.open("tdata/include.4.out.txt").read()
831
927
  assert_equal(text, incCommand.output,
832
- "IncludeCommand accepts an include path as a second arg")
928
+ "IncludeCommand accepts an array of paths as a second arg")
929
+
930
+ incCommand = IncludeCommand.new("include.4.txt", [ "/etc", "tdata" ])
931
+ text = File.open("tdata/include.4.out.txt").read()
932
+ assert_equal(text, incCommand.output,
933
+ "IncludeCommand accepts an array of paths as a second arg")
833
934
 
834
935
  pt = PageTemplate.new('include_path' => "tdata")
835
- pt.load("tdata/include.4.txt")
836
- pt["file"] = "include.4b.txt"
936
+ pt.load("tdata/include.4b.txt")
937
+ pt["file"] = "include.4a.txt"
837
938
  text = File.open("tdata/include.4.out.txt").read()
838
939
  assert_equal(text, pt.output,
839
940
  "Include Commands can be given a variable name as an argument")
840
941
 
942
+ pt = PageTemplate.new('include_path' => "tdata")
943
+ pt.load("tdata/include.4b.txt")
944
+ pt["file"] = "secret-of-life.txt"
945
+ text = File.open("tdata/include.4.nf.out.txt").read()
946
+ assert_equal(text, pt.output,
947
+ "Include Commands will output a warning if file isn't found.")
948
+
949
+ # Support for multiple include paths.
950
+ pt = PageTemplate.new()
951
+ assert_equal([ Dir.getwd() ], pt.path)
952
+ assert(pt.add_path('tdata'),
953
+ "Use #add_path(path) to add an include path.")
954
+ assert_equal([ Dir.getwd(), 'tdata'], pt.path)
955
+ pt.add_path('tdata/inc-1')
956
+ assert_equal([ Dir.getwd, "tdata", "tdata/inc-1"], pt.path)
957
+ pt = PageTemplate.new('include_path' => %w{tdata tdata/inc-1})
958
+ assert_equal([ Dir.getwd, "tdata", "tdata/inc-1"], pt.path)
841
959
  end
842
960
 
843
961
  def testIncludeSyntax