tap 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. data/Basic Overview +151 -0
  2. data/Command Reference +99 -0
  3. data/History +24 -0
  4. data/MIT-LICENSE +1 -1
  5. data/README +29 -57
  6. data/Rakefile +30 -37
  7. data/Tutorial +243 -191
  8. data/bin/tap +66 -35
  9. data/lib/tap.rb +47 -29
  10. data/lib/tap/app.rb +700 -342
  11. data/lib/tap/{script → cmd}/console.rb +0 -0
  12. data/lib/tap/{script → cmd}/destroy.rb +0 -0
  13. data/lib/tap/{script → cmd}/generate.rb +0 -0
  14. data/lib/tap/cmd/run.rb +156 -0
  15. data/lib/tap/constants.rb +4 -0
  16. data/lib/tap/dump.rb +57 -0
  17. data/lib/tap/env.rb +316 -0
  18. data/lib/tap/file_task.rb +106 -109
  19. data/lib/tap/generator.rb +4 -1
  20. data/lib/tap/generator/generators/command/USAGE +6 -0
  21. data/lib/tap/generator/generators/command/command_generator.rb +17 -0
  22. data/lib/tap/generator/generators/{script/templates/script.erb → command/templates/command.erb} +10 -10
  23. data/lib/tap/generator/generators/config/USAGE +21 -0
  24. data/lib/tap/generator/generators/config/config_generator.rb +17 -7
  25. data/lib/tap/generator/generators/file_task/USAGE +3 -0
  26. data/lib/tap/generator/generators/file_task/file_task_generator.rb +16 -0
  27. data/lib/tap/generator/generators/file_task/templates/file.txt +2 -0
  28. data/lib/tap/generator/generators/file_task/templates/file.yml +3 -0
  29. data/lib/tap/generator/generators/file_task/templates/task.erb +26 -20
  30. data/lib/tap/generator/generators/file_task/templates/test.erb +20 -10
  31. data/lib/tap/generator/generators/generator/generator_generator.rb +1 -1
  32. data/lib/tap/generator/generators/generator/templates/generator.erb +21 -12
  33. data/lib/tap/generator/generators/root/templates/Rakefile +33 -24
  34. data/lib/tap/generator/generators/root/templates/tap.yml +28 -31
  35. data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +1 -0
  36. data/lib/tap/generator/generators/task/USAGE +3 -0
  37. data/lib/tap/generator/generators/task/task_generator.rb +18 -5
  38. data/lib/tap/generator/generators/task/templates/task.erb +7 -12
  39. data/lib/tap/generator/generators/task/templates/test.erb +10 -11
  40. data/lib/tap/generator/generators/workflow/templates/task.erb +1 -1
  41. data/lib/tap/generator/generators/workflow/templates/test.erb +1 -1
  42. data/lib/tap/patches/rake/rake_test_loader.rb +8 -0
  43. data/lib/tap/patches/rake/testtask.rb +55 -0
  44. data/lib/tap/patches/ruby19/backtrace_filter.rb +51 -0
  45. data/lib/tap/patches/ruby19/parsedate.rb +16 -0
  46. data/lib/tap/root.rb +172 -67
  47. data/lib/tap/script.rb +70 -336
  48. data/lib/tap/support/aggregator.rb +55 -0
  49. data/lib/tap/support/audit.rb +281 -280
  50. data/lib/tap/support/batchable.rb +59 -0
  51. data/lib/tap/support/class_configuration.rb +279 -0
  52. data/lib/tap/support/configurable.rb +92 -0
  53. data/lib/tap/support/configurable_methods.rb +296 -0
  54. data/lib/tap/support/executable.rb +98 -0
  55. data/lib/tap/support/executable_queue.rb +82 -0
  56. data/lib/tap/support/logger.rb +9 -15
  57. data/lib/tap/support/rake.rb +43 -54
  58. data/lib/tap/support/run_error.rb +32 -13
  59. data/lib/tap/support/shell_utils.rb +47 -0
  60. data/lib/tap/support/tdoc.rb +9 -8
  61. data/lib/tap/support/tdoc/config_attr.rb +40 -16
  62. data/lib/tap/support/validation.rb +77 -0
  63. data/lib/tap/support/versions.rb +36 -36
  64. data/lib/tap/task.rb +276 -482
  65. data/lib/tap/test.rb +20 -261
  66. data/lib/tap/test/env_vars.rb +7 -5
  67. data/lib/tap/test/file_methods.rb +126 -121
  68. data/lib/tap/test/subset_methods.rb +86 -45
  69. data/lib/tap/test/tap_methods.rb +271 -0
  70. data/lib/tap/workflow.rb +174 -46
  71. data/test/app/config/another/task.yml +1 -0
  72. data/test/app/config/erb.yml +2 -1
  73. data/test/app/config/some/task.yml +1 -0
  74. data/test/app/config/template.yml +2 -6
  75. data/test/app_test.rb +1241 -1008
  76. data/test/env/test_configure/recurse_a.yml +2 -0
  77. data/test/env/test_configure/recurse_b.yml +2 -0
  78. data/test/env/test_configure/tap.yml +23 -0
  79. data/test/env/test_load_env_config/dir/tap.yml +3 -0
  80. data/test/env/test_load_env_config/recurse_a.yml +2 -0
  81. data/test/env/test_load_env_config/recurse_b.yml +2 -0
  82. data/test/env/test_load_env_config/tap.yml +3 -0
  83. data/test/env_test.rb +198 -0
  84. data/test/file_task_test.rb +70 -53
  85. data/{lib/tap/generator/generators/package/USAGE → test/root/file.txt} +0 -0
  86. data/test/root_test.rb +621 -454
  87. data/test/script_test.rb +38 -174
  88. data/test/support/aggregator_test.rb +99 -0
  89. data/test/support/audit_test.rb +409 -416
  90. data/test/support/batchable_test.rb +74 -0
  91. data/test/support/{task_configuration_test.rb → class_configuration_test.rb} +106 -47
  92. data/test/{task/config/overriding.yml → support/configurable/config/configured.yml} +0 -0
  93. data/test/support/configurable_test.rb +295 -0
  94. data/test/support/executable_queue_test.rb +103 -0
  95. data/test/support/executable_test.rb +38 -0
  96. data/test/support/logger_test.rb +17 -17
  97. data/test/support/rake_test.rb +4 -2
  98. data/test/support/shell_utils_test.rb +24 -0
  99. data/test/support/tdoc_test.rb +265 -258
  100. data/test/support/validation_test.rb +54 -0
  101. data/test/support/versions_test.rb +38 -38
  102. data/test/tap_test_helper.rb +19 -5
  103. data/test/tap_test_suite.rb +5 -2
  104. data/test/task_base_test.rb +13 -104
  105. data/test/task_syntax_test.rb +300 -0
  106. data/test/task_test.rb +258 -381
  107. data/test/test/env_vars_test.rb +40 -40
  108. data/test/test/file_methods/{test_assert_output_files_equal → test_assert_files}/expected/one.txt +0 -0
  109. data/test/test/file_methods/{test_assert_output_files_equal → test_assert_files}/expected/two.txt +0 -0
  110. data/test/test/file_methods/{test_assert_output_files_equal → test_assert_files}/input/one.txt +0 -0
  111. data/test/test/file_methods/{test_assert_output_files_equal → test_assert_files}/input/two.txt +0 -0
  112. data/test/test/{test_file_task_test → file_methods/test_assert_files_can_have_no_expected_files_if_specified}/input/one.txt +0 -0
  113. data/test/test/{test_file_task_test → file_methods/test_assert_files_can_have_no_expected_files_if_specified}/input/two.txt +0 -0
  114. data/test/test/file_methods/test_assert_files_fails_for_different_content/expected/one.txt +1 -0
  115. data/test/test/{test_file_task_test → file_methods/test_assert_files_fails_for_different_content}/expected/two.txt +0 -0
  116. data/test/test/file_methods/test_assert_files_fails_for_different_content/input/one.txt +1 -0
  117. data/test/test/file_methods/test_assert_files_fails_for_different_content/input/two.txt +1 -0
  118. data/test/test/{test_file_task_test → file_methods/test_assert_files_fails_for_missing_expected_file}/expected/one.txt +0 -0
  119. data/test/test/file_methods/test_assert_files_fails_for_missing_expected_file/input/one.txt +1 -0
  120. data/test/test/file_methods/test_assert_files_fails_for_missing_expected_file/input/two.txt +1 -0
  121. data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/expected/one.txt +1 -0
  122. data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/expected/two.txt +1 -0
  123. data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/input/one.txt +1 -0
  124. data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/input/two.txt +1 -0
  125. data/test/test/file_methods/test_assert_files_fails_for_no_expected_files/input/one.txt +1 -0
  126. data/test/test/file_methods/test_assert_files_fails_for_no_expected_files/input/two.txt +1 -0
  127. data/test/test/file_methods_doc/test_sub/expected/one.txt +1 -0
  128. data/test/test/file_methods_doc/test_sub/expected/two.txt +1 -0
  129. data/test/test/file_methods_doc/test_sub/input/one.txt +1 -0
  130. data/test/test/file_methods_doc/test_sub/input/two.txt +1 -0
  131. data/test/test/file_methods_doc_test.rb +29 -0
  132. data/test/test/file_methods_test.rb +214 -143
  133. data/test/test/subset_methods_test.rb +111 -115
  134. data/test/test/{test_assert_expected_result_files → tap_methods/test_assert_files}/expected/task/name/a.txt +0 -0
  135. data/test/test/{test_assert_expected_result_files → tap_methods/test_assert_files}/expected/task/name/b.txt +0 -0
  136. data/test/test/{test_assert_expected_result_files → tap_methods/test_assert_files}/input/a.txt +0 -0
  137. data/test/test/{test_assert_expected_result_files → tap_methods/test_assert_files}/input/b.txt +0 -0
  138. data/test/test/tap_methods_test.rb +399 -0
  139. data/test/workflow_test.rb +101 -91
  140. metadata +86 -70
  141. data/lib/tap/generator/generators/package/package_generator.rb +0 -38
  142. data/lib/tap/generator/generators/package/templates/package.erb +0 -186
  143. data/lib/tap/generator/generators/script/USAGE +0 -0
  144. data/lib/tap/generator/generators/script/script_generator.rb +0 -17
  145. data/lib/tap/script/run.rb +0 -154
  146. data/lib/tap/support/batch_queue.rb +0 -162
  147. data/lib/tap/support/combinator.rb +0 -114
  148. data/lib/tap/support/task_configuration.rb +0 -169
  149. data/lib/tap/support/template.rb +0 -81
  150. data/lib/tap/support/templater.rb +0 -155
  151. data/lib/tap/version.rb +0 -4
  152. data/test/app/config/addition_template.yml +0 -6
  153. data/test/app_class_test.rb +0 -33
  154. data/test/check/binding_eval.rb +0 -23
  155. data/test/check/define_method_check.rb +0 -22
  156. data/test/check/dependencies_check.rb +0 -175
  157. data/test/check/inheritance_check.rb +0 -22
  158. data/test/support/batch_queue_test.rb +0 -320
  159. data/test/support/combinator_test.rb +0 -249
  160. data/test/support/template_test.rb +0 -122
  161. data/test/support/templater/erb.txt +0 -2
  162. data/test/support/templater/erb.yml +0 -2
  163. data/test/support/templater/somefile.txt +0 -2
  164. data/test/support/templater_test.rb +0 -192
  165. data/test/task/config/template.yml +0 -4
  166. data/test/task_class_test.rb +0 -170
  167. data/test/task_execute_test.rb +0 -262
  168. data/test/test/file_methods/test_assert_expected/expected/file.txt +0 -1
  169. data/test/test/file_methods/test_assert_expected/expected/folder/file.txt +0 -1
  170. data/test/test/file_methods/test_assert_expected/input/file.txt +0 -1
  171. data/test/test/file_methods/test_assert_expected/input/folder/file.txt +0 -1
  172. data/test/test/file_methods/test_assert_files_exist/input/input_1.txt +0 -0
  173. data/test/test/file_methods/test_assert_files_exist/input/input_2.txt +0 -0
  174. data/test/test/file_methods/test_file_compare/expected/output_1.txt +0 -3
  175. data/test/test/file_methods/test_file_compare/expected/output_2.txt +0 -1
  176. data/test/test/file_methods/test_file_compare/input/input_1.txt +0 -3
  177. data/test/test/file_methods/test_file_compare/input/input_2.txt +0 -3
  178. data/test/test/file_methods/test_infer_glob/expected/file.yml +0 -0
  179. data/test/test/file_methods/test_infer_glob/expected/file_1.txt +0 -0
  180. data/test/test/file_methods/test_infer_glob/expected/file_2.txt +0 -0
  181. data/test/test/file_methods/test_yml_compare/expected/output_1.yml +0 -6
  182. data/test/test/file_methods/test_yml_compare/expected/output_2.yml +0 -6
  183. data/test/test/file_methods/test_yml_compare/input/input_1.yml +0 -4
  184. data/test/test/file_methods/test_yml_compare/input/input_2.yml +0 -4
  185. data/test/test_test.rb +0 -373
@@ -1,249 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '../tap_test_helper')
2
- require 'tap/support/combinator'
3
-
4
- class CombinatorTest < Test::Unit::TestCase
5
- include Tap::Support
6
- include Tap::Test::SubsetMethods
7
- include Benchmark
8
-
9
- def test_documentation
10
- c = Combinator.new [1,2], [3,4]
11
- assert_equal [[1,3], [1,4], [2,3], [2,4]], c.collect
12
-
13
- c = Combinator.new [1,2], [3,4], [5,6]
14
- assert_equal [[1],[2]], c.a
15
- assert_equal Combinator, c.b.class
16
- assert_equal [[3],[4]], c.b.a
17
- assert_equal [[5],[6]], c.b.b
18
- end
19
-
20
- #
21
- # initialize tests
22
- #
23
-
24
- def test_initialize
25
- c = Combinator.new
26
- assert_equal [], c.a
27
- assert_equal [], c.b
28
-
29
- {
30
- [[1], [2,3], [3, [4]]] =>[[[1]], [[2], [3]], [[3],[[4]]]], # arrays have each element arrayified
31
- [nil, nil, nil] => [[], [], []], # nil returns an empty array
32
- [[], [{:one => 1},nil], nil] => [[], [[{:one => 1}],[nil]], []] # mixture
33
- }.each_pair do |sets, expected|
34
- c = Combinator.new(*sets)
35
- assert_equal expected[0], c.a
36
- assert_equal Combinator, c.b.class
37
- assert_equal expected[1], c.b.a
38
- assert_equal expected[2], c.b.b
39
- end
40
- end
41
-
42
- def test_initialize_raises_error_unless_sets_are_all_arrays_combinators_or_nil
43
- [
44
- [1],
45
- [[], 1],
46
- [1,[]]
47
- ].each do |sets|
48
- assert_raise(ArgumentError) { Combinator.new(*sets) }
49
- end
50
- end
51
-
52
- #
53
- # sets test
54
- #
55
-
56
- def test_sets_returns_input_sets_minus_nil_or_empty_arrays
57
- [
58
- [],
59
- [[1]],
60
- [[1], [2]],
61
- [[1], [2,3], [4,5,6]],
62
- [[1], [2,[3]], [4,5,6]],
63
- [[1], nil, [], [4,5,6], nil]
64
- ].each do |sets|
65
- expected = sets.reject {|s| s.nil? || s.empty? }
66
- assert_equal expected, Combinator.new(*sets).sets, PP.singleline_pp(sets, "")
67
- end
68
- end
69
-
70
- #
71
- # length test
72
- #
73
-
74
- def test_length
75
- {
76
- [] => 0,
77
- [[1]] => 1,
78
- [[1], [2]] => 1,
79
- [[1],[2],[3]] => 1,
80
- [[1],[], nil,[3]] => 1,
81
-
82
- [[1,2]] => 2,
83
- [[1], [2,3]] => 2,
84
- [[1,2], [3,4]] => 4,
85
- [[1,2], [3,4], [5,6]] => 8,
86
- [[1,2], nil, [3,4], [], [5,6]] => 8
87
- }.each_pair do |sets, expected|
88
- assert_equal expected, Combinator.new(*sets).length, PP.singleline_pp(sets, "")
89
- end
90
- end
91
-
92
- #
93
- # each tests
94
- #
95
-
96
- def test_each
97
- {
98
- [[1]] => [[1]],
99
- [[1], [2]] => [[1,2]],
100
- [[1],[2],[3]] => [[1,2,3]],
101
- [[1],[], nil,[3]] => [[1,3]],
102
-
103
- [[1,2]] => [[1],[2]],
104
- [[1], [2,3]] => [[1,2], [1,3]],
105
- [[1,2], [3,4]] => [[1,3],[1,4],[2,3],[2,4]],
106
- [[1,2], [3,4], [5,6]] => [[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]],
107
- [[1,2], nil, [3,4], [], [5,6]] => [[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]
108
- }.each_pair do |set, expected|
109
- comb = Combinator.new(*set)
110
-
111
- combinations = []
112
- comb.each { |c| combinations << c }
113
- assert_equal expected, combinations, PP.singleline_pp(set, "")
114
- end
115
- end
116
-
117
- def test_each_with_deferencing
118
- comb = Combinator.new([1], [2,3])
119
- combinations = []
120
- comb.each { |a,b| combinations << [a,b] }
121
-
122
- assert_equal [[1,2], [1,3]], combinations
123
- end
124
-
125
- #
126
- # collect test
127
- #
128
-
129
- def test_collect
130
- comb = Combinator.new([0,1], [0,1])
131
- expected = [[0,0],[0,1],[1,0],[1,1]].collect { |c| c << 2 }
132
- assert_equal expected, comb.collect { |c| c << 2 }
133
- end
134
-
135
- def test_collect_returns_all_if_no_block_given
136
- comb = Combinator.new([0,1], [0,1])
137
- assert_equal [[0,0],[0,1],[1,0],[1,1]], comb.collect
138
- end
139
-
140
- #
141
- # additional tests
142
- #
143
-
144
- def test_combinator_3_by_3_by_3
145
- comb = Combinator.new([0,1,2], [0,1,2], [0,1,2])
146
- expected = [
147
- [0, 0, 0],
148
- [0, 0, 1],
149
- [0, 0, 2],
150
- [0, 1, 0],
151
- [0, 1, 1],
152
- [0, 1, 2],
153
- [0, 2, 0],
154
- [0, 2, 1],
155
- [0, 2, 2],
156
- [1, 0, 0],
157
- [1, 0, 1],
158
- [1, 0, 2],
159
- [1, 1, 0],
160
- [1, 1, 1],
161
- [1, 1, 2],
162
- [1, 2, 0],
163
- [1, 2, 1],
164
- [1, 2, 2],
165
- [2, 0, 0],
166
- [2, 0, 1],
167
- [2, 0, 2],
168
- [2, 1, 0],
169
- [2, 1, 1],
170
- [2, 1, 2],
171
- [2, 2, 0],
172
- [2, 2, 1],
173
- [2, 2, 2],
174
- ]
175
-
176
- assert_equal 3*3*3, comb.length
177
- assert_equal expected, comb.collect
178
- end
179
-
180
- def test_combinator_3_by_2_by_3
181
- comb = Combinator.new([0,1,2], [0,1], [0,1,2])
182
- expected = [
183
- [0, 0, 0],
184
- [0, 0, 1],
185
- [0, 0, 2],
186
- [0, 1, 0],
187
- [0, 1, 1],
188
- [0, 1, 2],
189
- [1, 0, 0],
190
- [1, 0, 1],
191
- [1, 0, 2],
192
- [1, 1, 0],
193
- [1, 1, 1],
194
- [1, 1, 2],
195
- [2, 0, 0],
196
- [2, 0, 1],
197
- [2, 0, 2],
198
- [2, 1, 0],
199
- [2, 1, 1],
200
- [2, 1, 2],
201
- ]
202
-
203
- assert_equal 3*2*3, comb.length
204
- assert_equal expected, comb.collect
205
- end
206
-
207
- def test_combinator_3_by_2_by_1
208
- comb = Combinator.new([0,1,2], [0,1], [0])
209
- expected = [
210
- [0, 0, 0],
211
- [0, 1, 0],
212
- [1, 0, 0],
213
- [1, 1, 0],
214
- [2, 0, 0],
215
- [2, 1, 0],
216
- ]
217
-
218
- assert_equal 3*2*1, comb.length
219
- assert_equal expected, comb.collect
220
- end
221
-
222
- # From these tests, it looks like (sensibly) the Combinator is more sensitive to the
223
- # number of sets than to the number of items in each set. ie for ten items:
224
- # Combinator.new([1,2],[1,2],[1,2],[1,2],[1,2])
225
- # runs slower than
226
- # Combinator.new([1,2,3,4,5], [1,2,3,4,5])
227
- #
228
- # Of course they generate different output too... like [1,1,1,1,1] vs [1,1]... so you
229
- # really do not have a choice in how you structure the combination.
230
- def test_combination_speed
231
- benchmark_test(15) do |x|
232
- [[3,10],[10,3],[10,4],[10,5]].each do |trial|
233
- items, fold = *trial
234
- set = []
235
- sets = []
236
- length = items ** fold
237
-
238
- 1.upto(items) {|i| set << i}
239
- fold.times { sets << set }
240
-
241
- c = Combinator.new(*sets)
242
- assert_equal length, c.length
243
-
244
- x.report("#{items}x#{fold} - #{length}") { assert_equal length, c.collect.length }
245
- end
246
- end
247
- end
248
-
249
- end
@@ -1,122 +0,0 @@
1
- require File.dirname(__FILE__) + '/../tap_test_helper'
2
- require 'tap/support/template'
3
-
4
- class TemplateTest < Test::Unit::TestCase
5
- include Tap::Support
6
- include Tap::Test::SubsetMethods
7
-
8
- class MockTemplater
9
- attr_reader :templates
10
-
11
- def initialize
12
- @templates = []
13
- end
14
-
15
- def <<(template)
16
- self.templates << template
17
- end
18
- end
19
-
20
- def new_template(hash)
21
- hash.extend Template
22
- hash.templater = MockTemplater.new
23
- hash
24
- end
25
-
26
- def test_new_template
27
- t = new_template({})
28
- assert_equal({}, t)
29
- assert_equal MockTemplater, t.templater.class
30
- assert_equal [], t.templater.templates
31
- end
32
-
33
- def test_documentation
34
- # variations
35
- t = {"default" => "default value"}.extend Template
36
- t.templater = []
37
- t.variations([
38
- {"default" => "non-default value"},
39
- {"another" => "value"}])
40
-
41
- expected = [{"default" => "non-default value"},
42
- {"default" => "default value", "another" => "value"}]
43
- assert_equal expected, t.templater
44
-
45
-
46
- # combinations
47
- t = {"default" => "default value"}.extend Template
48
- t.templater = []
49
- t.combinations(
50
- "letter" => ["a", "b"],
51
- "number" => [1, 2])
52
-
53
- expected = [{"default" => "default value", "letter" => "a", "number" => 1},
54
- {"default" => "default value", "letter" => "a", "number" => 2},
55
- {"default" => "default value", "letter" => "b", "number" => 1},
56
- {"default" => "default value", "letter" => "b", "number" => 2}]
57
- assert_equal expected.length, t.templater.length
58
- expected.each do |expectation|
59
- assert t.templater.include?(expectation)
60
- end
61
- end
62
-
63
- #
64
- # variations test
65
- #
66
-
67
- def test_variations_bang_pushes_merged_template_for_each_input_variation_to_templater_and_does_not_clear_self
68
- t = new_template(:key => 'default')
69
- t.variations!([{:key => 'non-default'}, {:another => 'value'}])
70
-
71
- assert_equal({:key => 'default'}, t)
72
- assert_equal([
73
- {:key => 'non-default'},
74
- {:key => 'default', :another => 'value'}],
75
- t.templater.templates)
76
- end
77
-
78
- def test_variations_is_variations_bang_but_clears_self
79
- t1 = new_template(:key => 'default')
80
- t1.variations([{:key => 'non-default'}, {:another => 'value'}])
81
-
82
- t2 = new_template(:key => 'default')
83
- t2.variations!([{:key => 'non-default'}, {:another => 'value'}])
84
-
85
- assert_equal({}, t1)
86
- assert_equal t1.templater.templates, t2.templater.templates
87
- end
88
-
89
- #
90
- # combinations tests
91
- #
92
-
93
- def test_combinations_bang_pushes_all_combinations_of_variables_to_templater_and_does_not_clear_self
94
- t = new_template(:default => 'value', :key => 'default')
95
- t.combinations!({:key => [0,1], :another => [2,3]})
96
-
97
- assert_equal({:default => 'value', :key => 'default'}, t)
98
-
99
- # a two-step check for the templates is necessary because the order of the
100
- # origninal sets is hash-order dependent
101
- expected = [
102
- {:default => 'value', :key => 0, :another => 2},
103
- {:default => 'value', :key => 0, :another => 3},
104
- {:default => 'value', :key => 1, :another => 2},
105
- {:default => 'value', :key => 1, :another => 3}]
106
-
107
- assert_equal expected.length, t.templater.templates.length
108
- expected.each { |expectation| assert t.templater.templates.include?(expectation) }
109
- end
110
-
111
- def test_combinations_is_combinations_bang_but_clears_self
112
- t1 = new_template(:default => 'value', :key => 'default')
113
- t1.combinations({:key => [0,1], :another => [2,3]})
114
-
115
- t2 = new_template(:default => 'value', :key => 'default')
116
- t2.combinations!({:key => [0,1], :another => [2,3]})
117
-
118
- assert_equal({}, t1)
119
- assert_equal t1.templater.templates, t2.templater.templates
120
- end
121
-
122
- end
@@ -1,2 +0,0 @@
1
- Line <%= 0 + 1 %>
2
- Line <%= 1 + 1 %>
@@ -1,2 +0,0 @@
1
- one: entry <%= 0 + 1 %>
2
- two: entry <%= 1 + 1 %>
@@ -1,2 +0,0 @@
1
- Line one
2
- Line two
@@ -1,192 +0,0 @@
1
- require File.dirname(__FILE__) + '/../tap_test_helper'
2
- require 'tap/support/templater'
3
-
4
- class TemplaterTest < Test::Unit::TestCase
5
- include Tap::Support
6
- include Tap::Test::SubsetMethods
7
-
8
- module ProcessModule
9
- def process(input)
10
- self.store(:processed, "#{input} was processed")
11
- end
12
-
13
- def bang_process!(input)
14
- self.store(:processed, "#{input} was bang processed")
15
- end
16
-
17
- def add_new_method_call(input)
18
- self.store(:add_new_method_call, "#{input} was processed")
19
- self.store("process!", "entry from new method call")
20
- end
21
- end
22
-
23
- module MethodModule
24
- def do_something(input)
25
- self["processed"] = "#{input} was processed"
26
- end
27
- end
28
-
29
- module DocMethods
30
- def method_call(input)
31
- self["result"] = "#{input} was processed"
32
- end
33
- end
34
-
35
- def test_documentation
36
- t = Templater.new(
37
- "key"=> "value",
38
- "method_call!" => "method input",
39
- "replacement=" => "replacement input")
40
- t.run_methods(DocMethods)
41
- t.run_replace do |input|
42
- "#{input} was replaced"
43
- end
44
-
45
- expected = [{"key" => "value",
46
- "result" => "method input was processed",
47
- "replacement" => "replacement input was replaced"}]
48
- assert_equal expected, t.templates
49
-
50
- # run methods
51
- t = Templater.new('method_call!' => 'input')
52
- t.run_methods(DocMethods)
53
- assert_equal [{"result" => "input was processed"}], t.templates
54
-
55
- # run_replace
56
- t = Templater.new('replacement=' => 'some value')
57
- t.run_replace {|value| "#{value} was replaced"}
58
- assert_equal [{"replacement" => "some value was replaced"}], t.templates
59
- end
60
-
61
- #
62
- # initialization test
63
- #
64
-
65
- def test_initialize
66
- t = Templater.new({'key' => 'value'})
67
- assert_equal([{'key' => 'value'}], t.templates)
68
- end
69
-
70
- #
71
- # push tests
72
- #
73
-
74
- def test_push_skips_empty_templates
75
- t = Templater.new({})
76
- t << {}
77
- assert_equal [], t.templates
78
- end
79
-
80
- #
81
- # run templater test
82
- #
83
-
84
- def test_run_templater_does_not_select_non_string_values
85
- t = Templater.new(:key => "value", 1 => "value")
86
- t.run_templater(/.*/) do |template, key, value|
87
- flunk "should not have run"
88
- end
89
-
90
- assert_equal([{:key => "value", 1 => "value"}], t.templates)
91
- end
92
-
93
- def test_run_templater_works_on_each_template
94
- t = Templater.new('key' => "value")
95
- t << {"another" => "another value"}
96
- t.run_templater(/.*/) do |template, key, value|
97
- template[key.to_sym] = "#{value} was templated"
98
- end
99
-
100
- assert_equal([
101
- {:key => "value was templated"},
102
- {:another => "another value was templated"}],
103
- t.templates)
104
- end
105
-
106
- def test_run_templater_extends_templates_with_Template_and_sets_input_templater
107
- t = Templater.new({'key' => 'value'})
108
- t << {'another' => 'value'}
109
- assert_equal [{'key' => 'value'}, {'another' => 'value'}], t.templates
110
-
111
- t.templates.each do |template|
112
- assert !template.respond_to?(:templater)
113
- end
114
-
115
- t.run_templater(/.*/) do |template, key, value|
116
- assert template.respond_to?(:templater)
117
- assert_equal t, template.templater
118
- end
119
- end
120
-
121
- def test_run_templater_removes_empty_templates
122
- t = Templater.new('key' => 'value')
123
- t.run_templater(/.*/) do |template, key, value|
124
- t << {}
125
- template.templater << {}
126
- end
127
-
128
- assert_equal([], t.templates)
129
- end
130
-
131
-
132
- #
133
- # run methods test
134
- #
135
-
136
- def test_run_methods_extends_templates_with_input_modules
137
- t = Templater.new('process!' => "entry")
138
- t.run_methods(ProcessModule)
139
-
140
- assert_equal([{:processed => 'entry was processed'}], t.templates)
141
- end
142
-
143
- def test_run_methods_runs_methods_added_during_processing
144
- t = Templater.new('add_new_method_call!' => "entry")
145
- t.run_methods(ProcessModule)
146
-
147
- assert_equal([{
148
- :add_new_method_call => 'entry was processed',
149
- :processed => 'entry from new method call was processed'}], t.templates)
150
- end
151
-
152
- def test_run_methods_raises_no_method_error_when_method_does_not_exist
153
- [
154
- 'non_existant!',
155
- 'non existant!'
156
- ].each do |key|
157
- t = Templater.new(key => 'entry')
158
- assert !t.templates.first.respond_to?(key)
159
- assert_raise(NoMethodError) { t.run_methods }
160
- end
161
- end
162
-
163
- def test_run_methods_works_recursively
164
- t = Templater.new(
165
- 'key' => 'default',
166
- "variations!!" => [
167
- {'key' => 'non-default'},
168
- {'key' => 'with variations',
169
- "variations!!" => [
170
- {'another' => 'value'}]}]
171
- )
172
- t.run_methods
173
-
174
- assert_equal([
175
- {'key' => 'default'},
176
- {'key' => 'non-default'},
177
- {'key' => 'with variations'},
178
- {'key' => 'with variations', 'another' => 'value'}],
179
- t.templates)
180
- end
181
-
182
- #
183
- # run_replace test
184
- #
185
-
186
- def test_run_replace_replaces_value_with_return_from_block
187
- t = Templater.new('replaced=' => "value")
188
- t.run_replace {|value| "#{value} was replaced" }
189
-
190
- assert_equal([{'replaced' => 'value was replaced'}], t.templates)
191
- end
192
- end