wlang 0.10.2 → 2.0.0.beta

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 (269) hide show
  1. data/CHANGELOG.md +3 -121
  2. data/Gemfile +23 -1
  3. data/Gemfile.lock +32 -28
  4. data/LICENCE.md +18 -21
  5. data/Manifest.txt +4 -5
  6. data/README.md +100 -174
  7. data/Rakefile +1 -13
  8. data/bin/wlang +3 -29
  9. data/lib/wlang.rb +21 -394
  10. data/lib/wlang/command.rb +94 -0
  11. data/lib/wlang/compiler.rb +78 -0
  12. data/lib/wlang/compiler/autospacing.rb +60 -0
  13. data/lib/wlang/compiler/dialect_enforcer.rb +91 -0
  14. data/lib/wlang/compiler/filter.rb +32 -0
  15. data/lib/wlang/compiler/grammar.citrus +67 -0
  16. data/lib/wlang/compiler/parser.rb +26 -0
  17. data/lib/wlang/compiler/proc_call_removal.rb +15 -0
  18. data/lib/wlang/compiler/static_merger.rb +28 -0
  19. data/lib/wlang/compiler/strconcat_flattener.rb +25 -0
  20. data/lib/wlang/compiler/to_ruby_abstraction.rb +22 -0
  21. data/lib/wlang/compiler/to_ruby_code.rb +55 -0
  22. data/lib/wlang/dialect.rb +40 -237
  23. data/lib/wlang/dialect/dispatching.rb +51 -0
  24. data/lib/wlang/dialect/evaluation.rb +30 -0
  25. data/lib/wlang/dialect/tags.rb +50 -0
  26. data/lib/wlang/dummy.rb +32 -0
  27. data/lib/wlang/html.rb +106 -0
  28. data/lib/wlang/loader.rb +6 -0
  29. data/lib/wlang/mustang.rb +90 -0
  30. data/lib/wlang/scope.rb +57 -0
  31. data/lib/wlang/scope/binding_scope.rb +18 -0
  32. data/lib/wlang/scope/object_scope.rb +25 -0
  33. data/lib/wlang/scope/proxy_scope.rb +18 -0
  34. data/lib/wlang/scope/root_scope.rb +24 -0
  35. data/lib/wlang/template.rb +16 -86
  36. data/lib/wlang/version.rb +9 -8
  37. data/spec/fixtures/dialect/foobar.rb +31 -0
  38. data/spec/fixtures/dialect/upcasing.rb +13 -0
  39. data/spec/fixtures/templates/hello.tpl +1 -0
  40. data/spec/integration/examples/1-basics.txt +65 -0
  41. data/spec/integration/examples/2-imperative.txt +51 -0
  42. data/spec/integration/examples/3-partials.txt +76 -0
  43. data/spec/integration/examples/4-recursion.txt +16 -0
  44. data/spec/integration/html/test_ampersand.rb +15 -0
  45. data/spec/integration/html/test_bang.rb +38 -0
  46. data/spec/integration/html/test_caret.rb +33 -0
  47. data/spec/integration/html/test_dollar.rb +16 -0
  48. data/spec/integration/html/test_greater.rb +23 -0
  49. data/spec/integration/html/test_modulo.rb +16 -0
  50. data/spec/integration/html/test_plus.rb +48 -0
  51. data/spec/integration/html/test_question.rb +33 -0
  52. data/spec/integration/html/test_sharp.rb +21 -0
  53. data/spec/integration/html/test_slash.rb +16 -0
  54. data/spec/integration/html/test_star.rb +37 -0
  55. data/spec/integration/test_dummy.rb +51 -0
  56. data/spec/integration/test_examples.rb +29 -0
  57. data/spec/integration/test_mustang.rb +120 -0
  58. data/spec/integration/test_readme.rb +56 -0
  59. data/spec/integration/test_upcasing.rb +22 -0
  60. data/spec/spec_helper.rb +62 -1
  61. data/spec/test_wlang.rb +101 -0
  62. data/spec/unit/compiler/autospacing/test_right_strip.rb +30 -0
  63. data/spec/unit/compiler/autospacing/test_unindent.rb +30 -0
  64. data/spec/unit/compiler/test_dialect_enforcer.rb +168 -0
  65. data/spec/unit/compiler/test_grammar.rb +207 -0
  66. data/spec/unit/compiler/test_parser.rb +69 -0
  67. data/spec/unit/compiler/test_proc_call_removal.rb +24 -0
  68. data/spec/unit/compiler/test_static_merger.rb +29 -0
  69. data/spec/unit/compiler/test_strconcat_flattener.rb +30 -0
  70. data/spec/unit/compiler/test_to_ruby_abstraction.rb +59 -0
  71. data/spec/unit/compiler/test_to_ruby_code.rb +24 -0
  72. data/spec/unit/dialect/test_compile.rb +52 -0
  73. data/spec/unit/dialect/test_dispatching.rb +19 -0
  74. data/spec/unit/dialect/test_evaluate.rb +41 -0
  75. data/spec/unit/dialect/test_render.rb +33 -0
  76. data/spec/unit/dialect/test_tags.rb +32 -0
  77. data/spec/unit/dialect/test_with_scope.rb +18 -0
  78. data/spec/unit/scope/test_binding_scope.rb +27 -0
  79. data/spec/unit/scope/test_coerce.rb +22 -0
  80. data/spec/unit/scope/test_object_scope.rb +38 -0
  81. data/spec/unit/scope/test_proxy_scope.rb +22 -0
  82. data/spec/unit/scope/test_root_scope.rb +22 -0
  83. data/spec/unit/test_assumptions.rb +29 -0
  84. data/spec/unit/test_scope.rb +57 -0
  85. data/tasks/debug_mail.rake +42 -45
  86. data/tasks/gem.rake +22 -17
  87. data/tasks/spec_test.rake +9 -17
  88. data/tasks/unit_test.rake +11 -12
  89. data/tasks/yard.rake +13 -13
  90. data/wlang.gemspec +36 -32
  91. data/wlang.noespec +27 -35
  92. metadata +268 -451
  93. data/doc/specification/about.rdoc +0 -61
  94. data/doc/specification/analytics.wtpl +0 -13
  95. data/doc/specification/dialect.wtpl +0 -14
  96. data/doc/specification/dialects.wtpl +0 -3
  97. data/doc/specification/examples.rb +0 -3
  98. data/doc/specification/glossary.wtpl +0 -14
  99. data/doc/specification/hosting.rdoc +0 -0
  100. data/doc/specification/overview.rdoc +0 -116
  101. data/doc/specification/rulesets.wtpl +0 -87
  102. data/doc/specification/specification.css +0 -53
  103. data/doc/specification/specification.html +0 -1690
  104. data/doc/specification/specification.js +0 -8
  105. data/doc/specification/specification.wtpl +0 -42
  106. data/doc/specification/specification.yml +0 -432
  107. data/doc/specification/symbols.wtpl +0 -16
  108. data/lib/wlang/dialect_dsl.rb +0 -141
  109. data/lib/wlang/dialect_loader.rb +0 -74
  110. data/lib/wlang/dialects/bluecloth_dialect.rb +0 -16
  111. data/lib/wlang/dialects/coderay_dialect.rb +0 -45
  112. data/lib/wlang/dialects/hosted_dialect.rb +0 -50
  113. data/lib/wlang/dialects/plain_text_dialect.rb +0 -69
  114. data/lib/wlang/dialects/rdoc_dialect.rb +0 -33
  115. data/lib/wlang/dialects/redcloth_dialect.rb +0 -16
  116. data/lib/wlang/dialects/ruby_dialect.rb +0 -118
  117. data/lib/wlang/dialects/sql_dialect.rb +0 -38
  118. data/lib/wlang/dialects/standard_dialects.rb +0 -181
  119. data/lib/wlang/dialects/xhtml_dialect.rb +0 -63
  120. data/lib/wlang/dialects/yaml_dialect.rb +0 -30
  121. data/lib/wlang/encoder.rb +0 -62
  122. data/lib/wlang/encoder_set.rb +0 -122
  123. data/lib/wlang/errors.rb +0 -80
  124. data/lib/wlang/ext/hash_methodize.rb +0 -13
  125. data/lib/wlang/ext/string.rb +0 -44
  126. data/lib/wlang/hash_scope.rb +0 -89
  127. data/lib/wlang/hosted_language.rb +0 -146
  128. data/lib/wlang/intelligent_buffer.rb +0 -94
  129. data/lib/wlang/parser.rb +0 -332
  130. data/lib/wlang/parser_state.rb +0 -94
  131. data/lib/wlang/rule.rb +0 -66
  132. data/lib/wlang/rule_set.rb +0 -106
  133. data/lib/wlang/rulesets/basic_ruleset.rb +0 -83
  134. data/lib/wlang/rulesets/buffering_ruleset.rb +0 -115
  135. data/lib/wlang/rulesets/context_ruleset.rb +0 -111
  136. data/lib/wlang/rulesets/encoding_ruleset.rb +0 -73
  137. data/lib/wlang/rulesets/imperative_ruleset.rb +0 -132
  138. data/lib/wlang/rulesets/ruleset_utils.rb +0 -317
  139. data/lib/wlang/wlang_command.rb +0 -51
  140. data/lib/wlang/wlang_command_options.rb +0 -163
  141. data/spec/basic_object.spec +0 -40
  142. data/spec/coderay_dialect.spec +0 -8
  143. data/spec/dialect/apply_post_transform.spec +0 -16
  144. data/spec/global_extensions.rb +0 -2
  145. data/spec/hash_scope.spec +0 -76
  146. data/spec/redcloth_dialect.spec +0 -24
  147. data/spec/test_all.rb +0 -8
  148. data/spec/wlang.spec +0 -53
  149. data/spec/wlang_spec.rb +0 -8
  150. data/spec/xhtml_dialect.spec +0 -22
  151. data/tasks/genspec.rake +0 -5
  152. data/test/blackbox/basic/execution_1.exp +0 -1
  153. data/test/blackbox/basic/execution_1.tpl +0 -1
  154. data/test/blackbox/basic/execution_2.exp +0 -1
  155. data/test/blackbox/basic/execution_2.tpl +0 -1
  156. data/test/blackbox/basic/execution_3.exp +0 -1
  157. data/test/blackbox/basic/execution_3.tpl +0 -1
  158. data/test/blackbox/basic/execution_4.exp +0 -1
  159. data/test/blackbox/basic/execution_4.tpl +0 -1
  160. data/test/blackbox/basic/inclusion_1.exp +0 -1
  161. data/test/blackbox/basic/inclusion_1.tpl +0 -1
  162. data/test/blackbox/basic/inclusion_2.exp +0 -1
  163. data/test/blackbox/basic/inclusion_2.tpl +0 -1
  164. data/test/blackbox/basic/injection_1.exp +0 -1
  165. data/test/blackbox/basic/injection_1.tpl +0 -1
  166. data/test/blackbox/basic/injection_2.exp +0 -1
  167. data/test/blackbox/basic/injection_2.tpl +0 -1
  168. data/test/blackbox/basic/modulation_1.exp +0 -1
  169. data/test/blackbox/basic/modulation_1.tpl +0 -1
  170. data/test/blackbox/basic/modulation_2.exp +0 -1
  171. data/test/blackbox/basic/modulation_2.tpl +0 -1
  172. data/test/blackbox/basic/recursive_app_1.exp +0 -1
  173. data/test/blackbox/basic/recursive_app_1.tpl +0 -1
  174. data/test/blackbox/basic/recursive_app_2.exp +0 -1
  175. data/test/blackbox/basic/recursive_app_2.tpl +0 -1
  176. data/test/blackbox/buffering/data_1.rb +0 -1
  177. data/test/blackbox/buffering/data_assignment_1.exp +0 -1
  178. data/test/blackbox/buffering/data_assignment_1.tpl +0 -1
  179. data/test/blackbox/buffering/data_assignment_2.exp +0 -1
  180. data/test/blackbox/buffering/data_assignment_2.tpl +0 -1
  181. data/test/blackbox/buffering/data_assignment_3.exp +0 -1
  182. data/test/blackbox/buffering/data_assignment_3.tpl +0 -1
  183. data/test/blackbox/buffering/data_assignment_4.exp +0 -1
  184. data/test/blackbox/buffering/data_assignment_4.tpl +0 -1
  185. data/test/blackbox/buffering/input_1.exp +0 -1
  186. data/test/blackbox/buffering/input_1.tpl +0 -1
  187. data/test/blackbox/buffering/input_2.exp +0 -1
  188. data/test/blackbox/buffering/input_2.tpl +0 -1
  189. data/test/blackbox/buffering/input_3.exp +0 -1
  190. data/test/blackbox/buffering/input_3.tpl +0 -1
  191. data/test/blackbox/buffering/input_inclusion.exp +0 -1
  192. data/test/blackbox/buffering/input_inclusion.tpl +0 -1
  193. data/test/blackbox/buffering/input_inclusion_1.exp +0 -0
  194. data/test/blackbox/buffering/input_inclusion_1.tpl +0 -1
  195. data/test/blackbox/buffering/input_inclusion_2.exp +0 -1
  196. data/test/blackbox/buffering/input_inclusion_2.tpl +0 -1
  197. data/test/blackbox/buffering/input_inclusion_3.exp +0 -1
  198. data/test/blackbox/buffering/input_inclusion_3.tpl +0 -1
  199. data/test/blackbox/buffering/input_inclusion_4.exp +0 -0
  200. data/test/blackbox/buffering/input_inclusion_4.tpl +0 -1
  201. data/test/blackbox/buffering/input_inclusion_5.exp +0 -1
  202. data/test/blackbox/buffering/input_inclusion_5.tpl +0 -1
  203. data/test/blackbox/buffering/input_inclusion_6.exp +0 -1
  204. data/test/blackbox/buffering/input_inclusion_6.tpl +0 -1
  205. data/test/blackbox/buffering/input_inclusion_7.exp +0 -0
  206. data/test/blackbox/buffering/input_inclusion_7.tpl +0 -1
  207. data/test/blackbox/buffering/text_1.txt +0 -1
  208. data/test/blackbox/buffering/wlang.txt +0 -1
  209. data/test/blackbox/context/assignment_1.exp +0 -1
  210. data/test/blackbox/context/assignment_1.tpl +0 -1
  211. data/test/blackbox/context/assignment_2.exp +0 -1
  212. data/test/blackbox/context/assignment_2.tpl +0 -1
  213. data/test/blackbox/context/assignment_3.exp +0 -2
  214. data/test/blackbox/context/assignment_3.tpl +0 -2
  215. data/test/blackbox/context/assignment_4.exp +0 -1
  216. data/test/blackbox/context/assignment_4.tpl +0 -1
  217. data/test/blackbox/context/block_assignment_1.exp +0 -1
  218. data/test/blackbox/context/block_assignment_1.tpl +0 -1
  219. data/test/blackbox/context/block_assignment_2.exp +0 -1
  220. data/test/blackbox/context/block_assignment_2.tpl +0 -1
  221. data/test/blackbox/context/modulo_assignment_1.exp +0 -1
  222. data/test/blackbox/context/modulo_assignment_1.tpl +0 -1
  223. data/test/blackbox/context/modulo_assignment_2.exp +0 -1
  224. data/test/blackbox/context/modulo_assignment_2.tpl +0 -1
  225. data/test/blackbox/data_1.rb +0 -1
  226. data/test/blackbox/postblock/hello.exp +0 -1
  227. data/test/blackbox/postblock/hello.pre +0 -1
  228. data/test/blackbox/postblock/hello.tpl +0 -1
  229. data/test/blackbox/postblock/hello_input_inclusion.exp +0 -1
  230. data/test/blackbox/postblock/hello_input_inclusion.tpl +0 -1
  231. data/test/blackbox/postblock/hello_to_authors.exp +0 -1
  232. data/test/blackbox/postblock/hello_to_authors.tpl +0 -1
  233. data/test/blackbox/poststring/hello.exp +0 -1
  234. data/test/blackbox/poststring/hello.tpl +0 -1
  235. data/test/blackbox/test_all.rb +0 -70
  236. data/test/standard_dialects/ruby/data.rb +0 -7
  237. data/test/standard_dialects/ruby/inclusion.exp +0 -6
  238. data/test/standard_dialects/ruby/inclusion.tpl +0 -6
  239. data/test/standard_dialects/test_all.rb +0 -29
  240. data/test/standard_dialects/yaml/assumptions_test.rb +0 -13
  241. data/test/standard_dialects/yaml/data.rb +0 -3
  242. data/test/standard_dialects/yaml/inclusion_1.exp +0 -7
  243. data/test/standard_dialects/yaml/inclusion_1.tpl +0 -2
  244. data/test/standard_dialects/yaml/inclusion_2.exp +0 -5
  245. data/test/standard_dialects/yaml/inclusion_2.tpl +0 -3
  246. data/test/unit/test_all.rb +0 -9
  247. data/test/unit/wlang/anagram_bugs_test.rb +0 -111
  248. data/test/unit/wlang/basic_ruleset_test.rb +0 -52
  249. data/test/unit/wlang/buffering_ruleset_test.rb +0 -102
  250. data/test/unit/wlang/buffering_template1.wtpl +0 -1
  251. data/test/unit/wlang/buffering_template2.wtpl +0 -1
  252. data/test/unit/wlang/buffering_template3.wtpl +0 -1
  253. data/test/unit/wlang/buffering_template4.wtpl +0 -1
  254. data/test/unit/wlang/buffering_template5.wtpl +0 -1
  255. data/test/unit/wlang/context_ruleset_test.rb +0 -32
  256. data/test/unit/wlang/data.rb +0 -3
  257. data/test/unit/wlang/encoder_set_test.rb +0 -42
  258. data/test/unit/wlang/imperative_ruleset_test.rb +0 -107
  259. data/test/unit/wlang/intelligent_buffer_test.rb +0 -194
  260. data/test/unit/wlang/othersymbols_test.rb +0 -16
  261. data/test/unit/wlang/parser_test.rb +0 -88
  262. data/test/unit/wlang/plain_text_dialect_test.rb +0 -21
  263. data/test/unit/wlang/ruby_dialect_test.rb +0 -100
  264. data/test/unit/wlang/ruby_expected.rb +0 -3
  265. data/test/unit/wlang/ruby_template.wrb +0 -3
  266. data/test/unit/wlang/ruleset_utils_test.rb +0 -245
  267. data/test/unit/wlang/specification_examples_test.rb +0 -54
  268. data/test/unit/wlang/test_utils.rb +0 -25
  269. data/test/unit/wlang/wlang_test.rb +0 -80
@@ -1,194 +0,0 @@
1
- require 'test/unit'
2
- require 'wlang'
3
- module WLang
4
-
5
- # Tests the IntelligentBuffer class
6
- class IntelligentBufferTest < Test::Unit::TestCase
7
- include IntelligentBuffer::Methods
8
-
9
- # Creates a buffer instance
10
- def buffer(str)
11
- IntelligentBuffer.new(str)
12
- end
13
-
14
- def test_last_column
15
- assert_equal(4, last_column('abc'))
16
- assert_equal(4, last_column("\nabc"))
17
- assert_equal(6, last_column("\nabc\nab cd"))
18
- assert_equal(1, last_column("\n\n\n\n\n\n"))
19
- end
20
-
21
- def test_ismultiline?
22
- assert is_multiline?("\n")
23
- assert is_multiline?("\nabc")
24
- assert is_multiline?("\nabc\n")
25
- assert_equal false, is_multiline?("abc")
26
- assert_equal false, is_multiline?("abc\t")
27
- end
28
-
29
- def test_tabto
30
- template = <<-EOF
31
- def +{d}
32
- contents of the method here
33
- and also here
34
- end
35
- EOF
36
- template = tabto(template, 0).strip
37
- assert_equal("def +{d}\n contents of the method here\n and also here\nend", template)
38
- # check on normal multiline
39
- template = %Q{
40
- def +{d}
41
- contents of the method here
42
- and also here
43
- end
44
- }
45
- stripped = strip_block(template)
46
- expected = " def +{d}\n contents of the method here\n and also here\n end\n"
47
- assert_equal(expected, tabto(stripped, 4))
48
- end
49
-
50
- def test_strip_block
51
- # check on non multiline
52
- assert_equal 'abc', strip_block('abc')
53
-
54
- # check on normal multiline
55
- template = %Q{
56
- def +{d}
57
- contents of the method here
58
- and also here
59
- end
60
- }
61
- expected = " def +{d}\n contents of the method here\n and also here\n end\n"
62
- assert_equal(expected, strip_block(template))
63
-
64
- # check that explicit carriage return are recognized
65
- template = %Q{
66
-
67
- def +{d}
68
- contents of the method here
69
- and also here
70
- end
71
- }
72
- expected = "\n def +{d}\n contents of the method here\n and also here\n end\n"
73
- assert_equal(expected, strip_block(template))
74
-
75
- # check that no first carriage return is recognized as well
76
- template = %Q{def +{d}
77
- contents of the method here
78
- and also here
79
- end
80
- }
81
- expected = "def +{d}\n contents of the method here\n and also here\nend\n"
82
- assert_equal(expected, strip_block(template))
83
-
84
- # Check on push failure
85
- template = %Q{
86
-
87
- def hello()
88
- end
89
- }
90
- assert_equal("\n def hello()\n end\n", strip_block(template))
91
-
92
- # Tests on a missing end bug
93
- mod = "module MyModule\n 10\n 20\n 30\n\nend"
94
- assert_equal(mod, strip_block(mod))
95
- end
96
-
97
- def test_missing_end_bug_reason
98
- buf = IntelligentBuffer.new
99
- mod = "module MyModule\n 10\n 20\n 30\n\nend"
100
- assert_equal(mod, strip_block(mod))
101
- buf.<<(mod, true)
102
- assert_equal(mod, buf.to_s)
103
- end
104
-
105
- def test_push
106
- template = <<-EOF
107
- module +{name}
108
-
109
- *{defs as d}{
110
-
111
- def +{d}
112
- end
113
- }
114
-
115
- end
116
- EOF
117
- #puts template.gsub(/ {8}/, '').strip
118
- buf = buffer('')
119
- buf.<<("module ", false)
120
- buf.<<("MyModule", true)
121
- buf.<<("\n\n ", false)
122
- bufit = buffer('')
123
- buf2 = buffer('')
124
- buf2.<<("\n\n def ", false)
125
- buf3 = buffer('')
126
- buf3.<<('hello', true)
127
- buf2.<<(buf3.to_s, true)
128
- buf2.<<("()\n end\n ", false)
129
- #puts "\nAppending on bufit, first iteration"
130
- #puts "|#{buf2.to_s}|"
131
- bufit.<<(buf2.to_s, true)
132
- #puts "\nAfter append"
133
- #puts "|#{bufit.to_s}|"
134
- #puts "Last column is now #{last_column(bufit)}"
135
- buf2 = buffer('')
136
- buf2.<<("\n\n def ", false)
137
- buf3 = buffer('')
138
- buf3.<<('strip', true)
139
- buf2.<<(buf3.to_s, true)
140
- buf2.<<("()\n end\n ", false)
141
- #puts "\nAppending on bufit, second iteration"
142
- #puts "|#{buf2.to_s}|"
143
- bufit.<<(buf2.to_s, true)
144
- #puts "\nAfter append"
145
- #puts "|#{bufit.to_s}|"
146
- #puts "\nAppending bufit on buf"
147
- #puts "|#{buf.to_s}|"
148
- buf.<<(bufit.to_s, true)
149
- #puts "\nAfter append"
150
- #puts "|#{buf.to_s}|"
151
- buf.<<("\n\nend", false)
152
- #puts "\nNow, we've done"
153
- #puts buf
154
- expected = "module MyModule\n\n def hello()\n end\n \n def strip()\n end\n\n\nend"
155
- assert_equal(expected, buf.to_s)
156
- end
157
-
158
- def test_wlang_on_intelligent_buffer
159
- template = <<-EOF
160
- module +{name}
161
-
162
- *{defs as d}{
163
-
164
- def +{d}
165
- end
166
- }
167
-
168
- end
169
- EOF
170
- template = template.gsub(/ {8}/, '').strip
171
- #puts template
172
- context = {"name" => "MyModule", "defs" => ["hello", "strip", "toeol"]}
173
- #puts template.wlang_instantiate(context, "wlang/ruby")
174
- end
175
-
176
- def test_wlang_on_web_example
177
- template = %q{
178
- <table>
179
- *{rows as r}{
180
- <tr>
181
- *{r as d}{
182
- <td>+{d}</td>
183
- }
184
- </tr>
185
- }
186
- </table>
187
- }.gsub(/^ {8}/, '').strip
188
- #puts template
189
- context = {"rows" => [[10, 11, 12], [20, 21, 22], [30, 31, 32]]}
190
- #puts template.wlang_instantiate(context, "wlang/xhtml")
191
- end
192
-
193
- end # class IntelligentBufferTest
194
- end
@@ -1,16 +0,0 @@
1
- require 'wlang'
2
- require 'test/unit'
3
- module WLang
4
- class OtherSymbolsTest < Test::Unit::TestCase
5
-
6
- def test_on_parentheses
7
- template = "+{who}"
8
- assert_equal 'blambeau', WLang.instantiate(template, {'who' => 'blambeau'}, 'wlang/active-string', :braces).to_s
9
- template = "+(who)"
10
- assert_equal 'blambeau', WLang.instantiate(template, {'who' => 'blambeau'}, 'wlang/active-string', :parentheses).to_s
11
- template = "+[who]"
12
- assert_equal 'blambeau', WLang.instantiate(template, {'who' => 'blambeau'}, 'wlang/active-string', :brackets).to_s
13
- end
14
-
15
- end
16
- end
@@ -1,88 +0,0 @@
1
- require 'test/unit'
2
- require 'wlang'
3
- module WLang
4
-
5
- class ParserTest < Test::Unit::TestCase
6
-
7
- # Installs some dialects on wlang
8
- def setup
9
- # wlang dialect, empty by default
10
- WLang::dialect "example" do
11
- rule '+' do |parser,offset|
12
- parsed, reached = parser.parse(offset)
13
- [parsed.upcase, reached]
14
- end
15
- rule '-' do |parser,offset|
16
- parsed, reached = parser.parse(offset)
17
- [parsed.downcase, reached]
18
- end
19
- end
20
- end
21
-
22
- # Instantiate the given string as template
23
- def instantiate_str(str)
24
- WLang::template(str, "example").instantiate
25
- end
26
-
27
- # Asserts the result of an instanciation
28
- def assert_instantiation_equal(expected, template, msg=nil)
29
- template = WLang::template(template, "example")
30
- assert_equal(expected, template.instantiate)
31
- end
32
-
33
- def test_parser_accepts_whole_tag
34
- template, expected = "+{hello}", "HELLO"
35
- assert_instantiation_equal(expected, template)
36
- template, expected = " +{hello} ", " HELLO "
37
- assert_instantiation_equal(expected, template)
38
- end
39
-
40
- def test_parser_accepts_whole_block
41
- template, expected = "{hello}", "{hello}"
42
- assert_instantiation_equal(expected, template)
43
- end
44
-
45
- def test_parser_ignores_backslashed_tags
46
- template, expected = "\\+{hello\\}", "+{hello}"
47
- assert_instantiation_equal(expected, template)
48
- end
49
-
50
- def test_parser_ignores_backslashed_blocks
51
- template, expected = "\\{hello\\} world", "{hello} world"
52
- assert_instantiation_equal(expected, template)
53
- end
54
-
55
- def test_parser_on_a_complex_case
56
- template = "Hello \\\\} world! -{ITEMS AS I}{do +{something} \\{with \\} i} here is my name:+{name} and { that's not -{COMMON} text } !\\{"
57
- expected = "Hello \\} world! items as i{do SOMETHING {with } i} here is my name:NAME and { that's not common text } !\{"
58
- assert_instantiation_equal(expected, template)
59
- end
60
-
61
- def test_parser_raises_error
62
- # Unclosed tag
63
- assert_raise(ParseError){instantiate_str("-{unclosedtag")}
64
- end
65
-
66
- def assert_error_at_line_column(template, line, column)
67
- begin
68
- instantiate_str(template)
69
- assert(false)
70
- rescue ParseError => ex
71
- assert_equal ex.line, line, "Line matches"
72
- assert_equal ex.column, column, "Column matches"
73
- end
74
- end
75
-
76
- def test_parser_error_find_line_and_column
77
- assert_error_at_line_column("-{tag", 1, 5)
78
- assert_error_at_line_column("-{tag with spaces ", 1, 20)
79
- assert_error_at_line_column("-{tag as i}{\n", 2, 0)
80
- assert_error_at_line_column("-{tag as i}{\n\n", 3, 0)
81
- assert_error_at_line_column("-{tag as i}{\ntext\n", 3, 0)
82
- assert_error_at_line_column("-{tag as i}{\n\ntext\n", 4, 0)
83
- assert_error_at_line_column("-{tag as i}{\n\n\ntext\n", 5, 0)
84
- end
85
-
86
- end # ParserTest
87
-
88
- end # WLang
@@ -1,21 +0,0 @@
1
- require 'test/unit/testcase'
2
- require 'wlang'
3
- require 'wlang/dialects/plain_text_dialect'
4
-
5
- class WLang::PlainTestDialectTest < Test::Unit::TestCase
6
-
7
- # Tests the camel case function
8
- def test_camel_case
9
- tests = [
10
- ["blambeau", "Blambeau"],
11
- ["the world and the cat", "TheWorldAndTheCat"],
12
- ["\nthe\t world and-the_cat", "TheWorldAndTheCat"],
13
- #["l'éléphant", "LElephant"],
14
- ]
15
- tests.each do |t|
16
- src, expected = t
17
- assert_equal(expected, WLang::EncoderSet::PlainText.camel_case(src, nil))
18
- end
19
- end
20
-
21
- end
@@ -1,100 +0,0 @@
1
- require 'test/unit/testcase'
2
- require 'wlang'
3
- require 'wlang/dialects/standard_dialects'
4
- module WLang
5
-
6
- # Tests the ruby dialect
7
- class RubyDialectTest < Test::Unit::TestCase
8
-
9
- def get_file_contents(file)
10
- file = File.join(File.dirname(__FILE__), file)
11
- File.read(file)
12
- end
13
-
14
- # Tests on template in HERE documents above
15
- def test_on_template
16
- $context = {"name" => "O'Neil"}
17
- $template = get_file_contents('ruby_template.wrb')
18
- $expected = get_file_contents('ruby_expected.rb')
19
- result = $template.wlang($context, "wlang/ruby")
20
- # puts "\n--template--"
21
- # puts $template
22
- # puts "\n--expected--"
23
- # puts $expected
24
- # puts "\n--result--"
25
- # puts result
26
- assert_equal($expected,result)
27
- end
28
-
29
- # Tests single quoting
30
- def test_single_quoting
31
- context = {}
32
- tests = [
33
- ["Hello world!", "Hello world!"],
34
- ["Hello &'{world}!", "Hello world!"],
35
- ["Hello &'{men's world}!", "Hello men\\'s world!"],
36
- ["puts 'Hello &'{men's world}!'", "puts 'Hello men\\'s world!'"],
37
- ["Hello O\'Neil", "Hello O\'Neil"],
38
- ["Hello O\\'Neil", "Hello O\\'Neil"],
39
- ["Hello O\\\\'Neil", "Hello O\\\\'Neil"],
40
- ]
41
- tests.each do |test|
42
- expected = test[1]
43
- result = test[0].wlang(context, "wlang/ruby")
44
- assert_equal(expected, result)
45
- end
46
-
47
- context = {"name" => %q{O\'Neil}}
48
- template = %q{puts '{name}'}
49
- expected = %q{puts 'O\'Neil'}
50
- result = template.wlang(context, "wlang/ruby")
51
- assert_equal(expected, result)
52
- end
53
-
54
- # Tests double quoting
55
- def test_double_quoting
56
- context = {}
57
- tests = [
58
- ['Hello world!', 'Hello world!'],
59
- ['Hello &"{world}!', 'Hello world!'],
60
- ['Hello &"{men"s world}!', 'Hello men\\"s world!'],
61
- ['puts "Hello &"{men"s world}!"', 'puts "Hello men\\"s world!"']
62
- ]
63
- tests.each do |test|
64
- expected = test[1]
65
- result = test[0].wlang(context, "wlang/ruby")
66
- assert_equal(expected, result)
67
- end
68
- end
69
-
70
- # Tests single quoted
71
- def test_single_quoted
72
- context = {"name" => "blambeau", "mensworld" => "men's world"}
73
- tests = [
74
- ["puts '{name}'", "puts 'blambeau'"],
75
- ["puts '{mensworld}'", "puts 'men\\'s world'"],
76
- ]
77
- tests.each do |test|
78
- expected = test[1]
79
- result = test[0].wlang(context, "wlang/ruby")
80
- assert_equal(expected, result)
81
- end
82
- end
83
-
84
- # Tests double quoted
85
- def test_double_quoted
86
- context = {"name" => "blambeau", "mensworld" => 'men"s world'}
87
- tests = [
88
- ['puts "{name}"', 'puts "blambeau"'],
89
- ['puts "{mensworld}"', 'puts "men\\"s world"'],
90
- ]
91
- tests.each do |test|
92
- expected = test[1]
93
- result = test[0].wlang(context, "wlang/ruby")
94
- assert_equal(expected, result)
95
- end
96
- end
97
-
98
- end # class RubyDialectTest
99
-
100
- end # module WLang
@@ -1,3 +0,0 @@
1
- puts 'Hello world'
2
- puts 'Hello O\'Neil'
3
- puts 'O\'Neil'
@@ -1,3 +0,0 @@
1
- puts '&'{Hello world}'
2
- puts '&'{Hello O'Neil}'
3
- puts '{name}'
@@ -1,245 +0,0 @@
1
- require 'test/unit'
2
- require 'wlang'
3
- require 'wlang/rulesets/ruleset_utils'
4
-
5
- # Tests the ruleset utilities.
6
- class WLang::RuleSetUtilsTest < Test::Unit::TestCase
7
- include WLang::RuleSet::Utils
8
-
9
- # Tests decoding qdialects
10
- def test_decode_qdialect()
11
- tests = ["wlang", "xhtml", "\nxhtml ", "plain-text", "wlang/plain-text", " wlang/sql"]
12
- tests.each do |t|
13
- expected = {:qdialect => t.strip}
14
- result = WLang::RuleSet::Utils.expr(:qdialect).decode(t)
15
- assert_equal(expected, result)
16
- end
17
- end
18
-
19
- # Tests decoding qdialects
20
- def test_decode_qdialect_as()
21
- tests = ["wlang as var", "xhtml as var", "\nxhtml as var ",
22
- "plain-text as var", "wlang/plain-text\tas\tvar", " wlang/sql as var"]
23
- tests.each do |t|
24
- /^\s*([^\s]+)\s+as\s+([^\s]+)\s*$/ =~ t
25
- expected = {:qdialect => $1, :as => $2}
26
- result = WLang::RuleSet::Utils.expr(:qdialect, ["as", :var]).decode(t)
27
- assert_equal(expected, result)
28
- end
29
- end
30
-
31
- # Tests decoding qdialects
32
- def test_decode_qdialect_as_with_optional()
33
- tests = ["wlang", "xhtml", "\nxhtml ", "plain-text", "wlang/plain-text", " wlang/sql"]
34
- tests.each do |t|
35
- expected = {:qdialect => t.strip, :as => nil}
36
- result = WLang::RuleSet::Utils.expr(:qdialect, ["as", :var, false]).decode(t)
37
- assert_equal(expected, result)
38
- end
39
- end
40
-
41
- def test_decode_with_a_with
42
- source = "/hello with who: 'blambeau'"
43
- result = WLang::RuleSet::Utils.expr(:expr, ["using", :using, false], ["with", :with, false]).decode(source)
44
- assert_equal({:expr => '/hello', :with => {'who' => "'blambeau'"}, :using => nil}, result)
45
-
46
- source = "/hello using self with who: 'blambeau'"
47
- result = WLang::RuleSet::Utils.expr(:expr, ["using", :using, false], ["with", :with, false]).decode(source)
48
- assert_equal({:expr => '/hello', :with => {'who' => "'blambeau'"}, :using => ['self']}, result)
49
-
50
- source = "buffering_template5.wtpl using self with who2: who"
51
- result = WLang::RuleSet::Utils.expr(:uri, ["using", :using, false], ["with", :with, false]).decode(source)
52
- assert_equal({:uri => 'buffering_template5.wtpl', :with => {'who2' => "who"}, :using => ['self']}, result)
53
- end
54
-
55
- def test_DIALECT_regexp
56
- assert_not_nil(RG_DIALECT =~ "wlang")
57
- assert_not_nil(RG_DIALECT =~ "xhtml")
58
- assert_not_nil(RG_DIALECT =~ "\nxhtml ")
59
- assert_not_nil(RG_DIALECT =~ "plain-text")
60
- assert_nil(RG_DIALECT =~ "wlang/plain-text")
61
- assert_nil(RG_DIALECT =~ " wlang/sql ")
62
- assert_nil(RG_DIALECT =~ "WLang")
63
- end
64
-
65
- def test_ENCODER_regexp
66
- assert_not_nil(RG_ENCODER =~ "entities-encoding")
67
- assert_not_nil(RG_ENCODER =~ "quoting")
68
- assert_not_nil(RG_ENCODER =~ "\nquoting ")
69
- assert_nil(RG_ENCODER =~ "xhtml/entities-encoding")
70
- assert_nil(RG_ENCODER =~ " wlang/quoting ")
71
- assert_nil(RG_ENCODER =~ "ENCODING")
72
- end
73
-
74
- def test_QDIALECT_regexp
75
- assert_not_nil(RG_QDIALECT =~ "wlang")
76
- assert_not_nil(RG_QDIALECT =~ "wlang/plain-text")
77
- assert_not_nil(RG_QDIALECT =~ "wlang/xhtml")
78
- assert_not_nil(RG_QDIALECT =~ "wlang/sql")
79
- assert_not_nil(RG_QDIALECT =~ " wlang/sql ")
80
- assert_not_nil(RG_QDIALECT =~ "wlang/sql/sybase")
81
- assert_nil(RG_QDIALECT =~ "WLang")
82
- assert_nil(RG_QDIALECT =~ "wlang/ sql")
83
- assert_nil(RG_QDIALECT =~ "WLang/sql")
84
- assert_nil(RG_QDIALECT =~ "wlang/sql/ sybase")
85
- end
86
-
87
- def test_QENCODER_regexp
88
- assert_not_nil(RG_QENCODER =~ "entities-encoding")
89
- assert_not_nil(RG_QENCODER =~ "html/entities-encoding")
90
- assert_not_nil(RG_QENCODER =~ "sql/back-quoting")
91
- assert_not_nil(RG_QENCODER =~ "sql/back-quoting ")
92
- assert_not_nil(RG_QENCODER =~ "sql/sybase/back-quoting")
93
- assert_nil(RG_QENCODER =~ "sql/ sybase/back-quoting")
94
- end
95
-
96
- def test_VAR_regexp
97
- assert_not_nil(RG_VAR =~ "name")
98
- assert_not_nil(RG_VAR =~ "name_with_underscore")
99
- assert_not_nil(RG_VAR =~ "\nname_with_underscore \t")
100
- assert_nil(RG_VAR =~ "\nname _with_underscore \t")
101
- tests = [
102
- [{:variable =>"name"}, "name"],
103
- [{:variable =>"name_with_underscore"}, "\nname_with_underscore \t"],
104
- [nil, "\nname _with_underscore \t"],
105
- ]
106
- tests.each do |t|
107
- expected, src = t
108
- assert_equal(expected, WLang::RuleSet::Utils.decode_var(src))
109
- end
110
- end
111
-
112
- def test_EXPR_regexp
113
- assert_not_nil(RG_EXPR =~ "name")
114
- assert_not_nil(RG_EXPR =~ "[12, 13]")
115
- assert_not_nil(RG_EXPR =~ "Kernel.eval('some expression')")
116
- end
117
-
118
- def test_QDIALECT_AS_regexp
119
- assert_not_nil(RG_QDIALECT_AS =~ "wlang as x")
120
- assert_not_nil(RG_QDIALECT_AS =~ "wlang/xhtml as var")
121
- assert_not_nil(RG_QDIALECT_AS =~ " wlang/xhtml as var ")
122
- assert_nil(RG_QDIALECT_AS =~ "wlang/xhtml")
123
- assert_nil(RG_QDIALECT_AS =~ "wlang/xhtml as ")
124
- tests = [
125
- [{:dialect =>"wlang", :variable => "x"}, "wlang as x"],
126
- [{:dialect =>"wlang", :variable => "var"}, " wlang as var"],
127
- [{:dialect =>"wlang/xhtml", :variable => "var"}, " wlang/xhtml as var"],
128
- [nil, " wlang as "],
129
- ]
130
- tests.each do |t|
131
- expected, src = t
132
- assert_equal(expected, WLang::RuleSet::Utils.decode_qdialect_as(src))
133
- end
134
- end
135
-
136
- def test_QENCODER_AS_regexp
137
- assert_not_nil(RG_QENCODER_AS =~ "entities as x")
138
- assert_not_nil(RG_QENCODER_AS =~ "html/entities-encoding as var")
139
- assert_not_nil(RG_QENCODER_AS =~ " wlang/xhtml/entities-encoding as var ")
140
- assert_nil(RG_QENCODER_AS =~ "wlang/entities")
141
- assert_nil(RG_QENCODER_AS =~ "wlang/quoting as ")
142
- tests = [
143
- [{:encoder =>"entities", :variable => "x"}, "entities as x"],
144
- [{:encoder =>"entities", :variable => "var"}, " entities as var"],
145
- [{:encoder =>"xhtml/entities-encoding", :variable => "var"}, " xhtml/entities-encoding as var"],
146
- [nil, " wlang as "],
147
- ]
148
- tests.each do |t|
149
- expected, src = t
150
- assert_equal(expected, WLang::RuleSet::Utils.decode_qencoder_as(src))
151
- end
152
- end
153
-
154
- def test_EXPR_AS_regexp
155
- assert_not_nil(RG_EXPR_AS =~ "name as n")
156
- assert_not_nil(RG_EXPR_AS =~ "name.upcase as n")
157
- assert_not_nil(RG_EXPR_AS =~ "[12,13,15] as n")
158
- assert_not_nil(RG_EXPR_AS =~ "[12,13, 15] as n")
159
- assert_nil(RG_EXPR_AS =~ "name.upcase")
160
- tests = [
161
- [{:expr =>"name", :variable => "n"}, "name as n"],
162
- [{:expr =>"name.upcase", :variable => "n"}, "name.upcase as n"],
163
- [{:expr =>"name.upcase", :variable => "n"}, " name.upcase as n "],
164
- [{:expr =>"name/upcase", :variable => "n"}, " name/upcase as n "],
165
- [{:expr =>"[12, 15, 276, 'blamebau']", :variable => "n"}, " [12, 15, 276, 'blamebau'] as n "],
166
- [{:expr =>"'what if a as here'", :variable => "n"}, " 'what if a as here' as n "],
167
- ]
168
- tests.each do |t|
169
- expected, src = t
170
- assert_equal(expected, WLang::RuleSet::Utils.decode_expr_as(src))
171
- end
172
- end
173
-
174
- def test_URI_AS_regexp
175
- assert_not_nil(RG_URI_AS =~ "file as f")
176
- assert_not_nil(RG_URI_AS =~ "file.yaml as f")
177
- assert_not_nil(RG_URI_AS =~ "folder/folder/file.ext as data")
178
- assert_not_nil(RG_URI_AS =~ "http://folder/folder/file.ext as data")
179
- assert_not_nil(RG_URI_AS =~ "http://folder/folder/as/file.ext as data")
180
- assert_nil(RG_URI_AS =~ "name.upcase")
181
- tests = [
182
- [{:uri =>"file", :variable => "f"}, "file as f"],
183
- [{:uri =>"file.yaml", :variable => "f"}, "file.yaml as f"],
184
- [{:uri =>"folder/folder/file.ext", :variable => "data"}, "folder/folder/file.ext as data"],
185
- [{:uri =>"http://folder/folder/file.ext", :variable => "data"}, "http://folder/folder/file.ext as data"],
186
- [{:uri =>"http://folder/folder/as/file.ext", :variable => "data"}, "http://folder/folder/as/file.ext as data"],
187
- ]
188
- tests.each do |t|
189
- expected, src = t
190
- assert_equal(expected, WLang::RuleSet::Utils.decode_uri_as(src))
191
- end
192
- end
193
-
194
- def test_URI_WITH_regexp
195
- tests = [
196
- [{:uri =>"folder/file.yaml", :with => {"spec" => "spec"}}, "folder/file.yaml with spec: spec"],
197
- [{:uri =>"folder/file.yaml", :with => {"a" => "a", "b" => "b"}},
198
- "folder/file.yaml with a :a , b : b"],
199
- [{:uri =>"folder/file.yaml", :with => {"spec" => "spec.reverse"}}, "folder/file.yaml with spec: spec.reverse"],
200
- [{:uri =>"folder/file.yaml", :with => {"s" => "spec", "t" => "spec/rulesets", "xs" => "spec/uses"}},
201
- "folder/file.yaml with s:spec, t:spec/rulesets, xs:spec/uses"],
202
- ]
203
- tests.each do |t|
204
- expected, src = t
205
- assert_equal(expected, WLang::RuleSet::Utils.decode_uri_with(src,nil))
206
- end
207
- end
208
-
209
- def test_URI_WITH_regexp_with_optional
210
- tests = [
211
- [{:uri =>"file.yaml", :with => nil}, "file.yaml"],
212
- [{:uri =>"folder/file.yaml", :with => nil}, "folder/file.yaml"],
213
- [{:uri =>"folder/folder/file.ext", :with => nil}, "folder/folder/file.ext"],
214
- [{:uri =>"http://folder/folder/with/file.ext", :with => nil}, "http://folder/folder/with/file.ext"],
215
- ]
216
- tests.each do |t|
217
- expected, src = t
218
- assert_equal(expected, WLang::RuleSet::Utils.decode_uri_with(src,nil,true))
219
- end
220
- end
221
-
222
- def test_MULTI_AS
223
- rx = Regexp.new(WLang::RuleSet::Utils::MULTI_AS)
224
- assert_not_nil rx =~ "a"
225
- assert_not_nil rx =~ "a, b"
226
- assert_not_nil rx =~ "a , b"
227
- assert_not_nil rx =~ "a,b"
228
- assert_not_nil rx =~ "a,b,c"
229
- assert_not_nil rx =~ "a, b, c"
230
- assert_not_nil rx =~ "a , b , c"
231
- end
232
-
233
- def test_decode_multi_as
234
- tests = [
235
- [["a"], "a"],
236
- [["a", "b"], "a, b"],
237
- [["a", "b"], "a,b"],
238
- [["a", "b"], "a , b"],
239
- ]
240
- tests.each do |test|
241
- assert_equal(test[0], WLang::RuleSet::Utils.decode_multi_as(test[1], nil))
242
- end
243
- end
244
-
245
- end