tap 0.7.9 → 0.8.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 (149) hide show
  1. data/History +28 -0
  2. data/MIT-LICENSE +1 -1
  3. data/README +71 -43
  4. data/Rakefile +81 -64
  5. data/Tutorial +235 -0
  6. data/bin/tap +80 -44
  7. data/lib/tap.rb +41 -12
  8. data/lib/tap/app.rb +243 -246
  9. data/lib/tap/file_task.rb +357 -118
  10. data/lib/tap/generator.rb +88 -29
  11. data/lib/tap/generator/generators/config/config_generator.rb +4 -2
  12. data/lib/tap/generator/generators/config/templates/config.erb +1 -2
  13. data/lib/tap/generator/generators/file_task/file_task_generator.rb +3 -18
  14. data/lib/tap/generator/generators/file_task/templates/task.erb +22 -15
  15. data/lib/tap/generator/generators/file_task/templates/test.erb +13 -2
  16. data/{test/test/inference_methods/test_assert_files_exist/input/input_1.txt → lib/tap/generator/generators/generator/USAGE} +0 -0
  17. data/lib/tap/generator/generators/generator/generator_generator.rb +21 -0
  18. data/lib/tap/generator/generators/generator/templates/generator.erb +23 -0
  19. data/lib/tap/generator/generators/generator/templates/usage.erb +1 -0
  20. data/{test/test/inference_methods/test_assert_files_exist/input/input_2.txt → lib/tap/generator/generators/package/USAGE} +0 -0
  21. data/lib/tap/generator/generators/package/package_generator.rb +38 -0
  22. data/lib/tap/generator/generators/package/templates/package.erb +186 -0
  23. data/lib/tap/generator/generators/root/root_generator.rb +14 -9
  24. data/lib/tap/generator/generators/root/templates/Rakefile +20 -14
  25. data/{test/test/inference_methods/test_infer_glob/expected/file.yml → lib/tap/generator/generators/root/templates/ReadMe.txt} +0 -0
  26. data/lib/tap/generator/generators/root/templates/tap.yml +82 -0
  27. data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +0 -1
  28. data/lib/tap/generator/generators/root/templates/test/tap_test_suite.rb +2 -1
  29. data/{test/test/inference_methods/test_infer_glob/expected/file_1.txt → lib/tap/generator/generators/script/USAGE} +0 -0
  30. data/lib/tap/generator/generators/script/script_generator.rb +17 -0
  31. data/lib/tap/generator/generators/script/templates/script.erb +42 -0
  32. data/lib/tap/generator/generators/task/task_generator.rb +1 -1
  33. data/lib/tap/generator/generators/task/templates/task.erb +24 -16
  34. data/lib/tap/generator/generators/task/templates/test.erb +13 -17
  35. data/lib/tap/generator/generators/workflow/templates/task.erb +10 -10
  36. data/lib/tap/generator/generators/workflow/templates/test.erb +1 -1
  37. data/lib/tap/generator/generators/workflow/workflow_generator.rb +3 -18
  38. data/lib/tap/root.rb +108 -146
  39. data/lib/tap/script.rb +362 -0
  40. data/lib/tap/script/console.rb +28 -0
  41. data/lib/tap/script/destroy.rb +13 -1
  42. data/lib/tap/script/generate.rb +13 -1
  43. data/lib/tap/script/run.rb +100 -57
  44. data/lib/tap/support/batch_queue.rb +0 -3
  45. data/lib/tap/support/logger.rb +6 -3
  46. data/lib/tap/support/rake.rb +54 -0
  47. data/lib/tap/support/task_configuration.rb +169 -0
  48. data/lib/tap/support/tdoc.rb +198 -0
  49. data/lib/tap/support/tdoc/config_attr.rb +338 -0
  50. data/lib/tap/support/tdoc/tdoc_html_generator.rb +38 -0
  51. data/lib/tap/support/tdoc/tdoc_html_template.rb +42 -0
  52. data/lib/tap/support/versions.rb +33 -1
  53. data/lib/tap/task.rb +339 -227
  54. data/lib/tap/test.rb +86 -128
  55. data/lib/tap/test/env_vars.rb +16 -5
  56. data/lib/tap/test/file_methods.rb +373 -0
  57. data/lib/tap/test/subset_methods.rb +299 -180
  58. data/lib/tap/version.rb +2 -1
  59. data/lib/tap/workflow.rb +2 -0
  60. data/test/app/lib/app_test_task.rb +1 -0
  61. data/test/app_test.rb +327 -83
  62. data/test/check/binding_eval.rb +23 -0
  63. data/test/check/define_method_check.rb +22 -0
  64. data/test/check/dependencies_check.rb +175 -0
  65. data/test/check/inheritance_check.rb +22 -0
  66. data/test/file_task_test.rb +524 -291
  67. data/test/{test/inference_methods/test_infer_glob/expected/file_2.txt → root/glob/one.txt} +0 -0
  68. data/test/root/glob/two.txt +0 -0
  69. data/test/root_test.rb +330 -262
  70. data/test/script_test.rb +194 -0
  71. data/test/support/audit_test.rb +5 -2
  72. data/test/support/combinator_test.rb +10 -10
  73. data/test/support/rake_test.rb +35 -0
  74. data/test/support/task_configuration_test.rb +272 -0
  75. data/test/support/tdoc_test.rb +363 -0
  76. data/test/support/templater_test.rb +2 -2
  77. data/test/support/versions_test.rb +32 -0
  78. data/test/tap_test_helper.rb +39 -0
  79. data/test/task_base_test.rb +115 -0
  80. data/test/task_class_test.rb +56 -4
  81. data/test/task_execute_test.rb +29 -0
  82. data/test/task_test.rb +89 -70
  83. data/test/test/env_vars_test.rb +48 -0
  84. data/test/test/{inference_methods → file_methods}/test_assert_expected/expected/file.txt +0 -0
  85. data/test/test/{inference_methods → file_methods}/test_assert_expected/expected/folder/file.txt +0 -0
  86. data/test/test/{inference_methods → file_methods}/test_assert_expected/input/file.txt +0 -0
  87. data/test/test/{inference_methods → file_methods}/test_assert_expected/input/folder/file.txt +0 -0
  88. data/test/test/file_methods/test_assert_files_exist/input/input_1.txt +0 -0
  89. data/test/test/file_methods/test_assert_files_exist/input/input_2.txt +0 -0
  90. data/test/test/file_methods/test_assert_output_files_equal/expected/one.txt +1 -0
  91. data/test/test/file_methods/test_assert_output_files_equal/expected/two.txt +1 -0
  92. data/test/test/file_methods/test_assert_output_files_equal/input/one.txt +1 -0
  93. data/test/test/file_methods/test_assert_output_files_equal/input/two.txt +1 -0
  94. data/test/test/{inference_methods → file_methods}/test_file_compare/expected/output_1.txt +0 -0
  95. data/test/test/{inference_methods → file_methods}/test_file_compare/expected/output_2.txt +0 -0
  96. data/test/test/{inference_methods → file_methods}/test_file_compare/input/input_1.txt +0 -0
  97. data/test/test/{inference_methods → file_methods}/test_file_compare/input/input_2.txt +0 -0
  98. data/test/test/file_methods/test_infer_glob/expected/file.yml +0 -0
  99. data/test/test/file_methods/test_infer_glob/expected/file_1.txt +0 -0
  100. data/test/test/file_methods/test_infer_glob/expected/file_2.txt +0 -0
  101. data/test/test/file_methods/test_method_glob/expected/file.yml +0 -0
  102. data/test/test/file_methods/test_method_glob/expected/file_1.txt +0 -0
  103. data/test/test/file_methods/test_method_glob/expected/file_2.txt +0 -0
  104. data/test/test/{inference_methods → file_methods}/test_yml_compare/expected/output_1.yml +0 -0
  105. data/test/test/{inference_methods → file_methods}/test_yml_compare/expected/output_2.yml +0 -0
  106. data/test/test/{inference_methods → file_methods}/test_yml_compare/input/input_1.yml +0 -0
  107. data/test/test/{inference_methods → file_methods}/test_yml_compare/input/input_2.yml +0 -0
  108. data/test/test/file_methods_test.rb +204 -0
  109. data/test/test/subset_methods_test.rb +93 -33
  110. data/test/test/test_assert_expected_result_files/expected/task/name/a.txt +1 -0
  111. data/test/test/test_assert_expected_result_files/expected/task/name/b.txt +1 -0
  112. data/test/test/test_assert_expected_result_files/input/a.txt +1 -0
  113. data/test/test/test_assert_expected_result_files/input/b.txt +1 -0
  114. data/test/test/test_file_task_test/expected/one.txt +1 -0
  115. data/test/test/test_file_task_test/expected/two.txt +1 -0
  116. data/test/test/test_file_task_test/input/one.txt +1 -0
  117. data/test/test/test_file_task_test/input/two.txt +1 -0
  118. data/test/test_test.rb +143 -3
  119. data/test/workflow_test.rb +2 -0
  120. data/vendor/rails_generator.rb +56 -0
  121. data/vendor/rails_generator/base.rb +263 -0
  122. data/vendor/rails_generator/commands.rb +581 -0
  123. data/vendor/rails_generator/generated_attribute.rb +42 -0
  124. data/vendor/rails_generator/lookup.rb +209 -0
  125. data/vendor/rails_generator/manifest.rb +53 -0
  126. data/vendor/rails_generator/options.rb +143 -0
  127. data/vendor/rails_generator/scripts.rb +83 -0
  128. data/vendor/rails_generator/scripts/destroy.rb +7 -0
  129. data/vendor/rails_generator/scripts/generate.rb +7 -0
  130. data/vendor/rails_generator/scripts/update.rb +12 -0
  131. data/vendor/rails_generator/simple_logger.rb +46 -0
  132. data/vendor/rails_generator/spec.rb +44 -0
  133. metadata +180 -196
  134. data/lib/tap/generator/generators/root/templates/app.yml +0 -19
  135. data/lib/tap/generator/generators/root/templates/config/process_tap_request.yml +0 -4
  136. data/lib/tap/generator/generators/root/templates/lib/process_tap_request.rb +0 -26
  137. data/lib/tap/generator/generators/root/templates/public/images/nav.jpg +0 -0
  138. data/lib/tap/generator/generators/root/templates/public/stylesheets/color.css +0 -57
  139. data/lib/tap/generator/generators/root/templates/public/stylesheets/layout.css +0 -108
  140. data/lib/tap/generator/generators/root/templates/public/stylesheets/normalize.css +0 -40
  141. data/lib/tap/generator/generators/root/templates/public/stylesheets/typography.css +0 -21
  142. data/lib/tap/generator/generators/root/templates/server/config/environment.rb +0 -60
  143. data/lib/tap/generator/generators/root/templates/server/lib/tasks/clear_database_prerequisites.rake +0 -5
  144. data/lib/tap/generator/generators/root/templates/server/test/test_helper.rb +0 -53
  145. data/lib/tap/script/server.rb +0 -12
  146. data/lib/tap/support/rap.rb +0 -38
  147. data/lib/tap/test/inference_methods.rb +0 -298
  148. data/test/task/config/task_with_config.yml +0 -1
  149. data/test/test/inference_methods_test.rb +0 -311
@@ -0,0 +1,115 @@
1
+ require File.join(File.dirname(__FILE__), 'tap_test_helper')
2
+ require 'tap/task'
3
+
4
+ class TaskBaseTest < Test::Unit::TestCase
5
+ include Tap
6
+ include Benchmark
7
+
8
+ acts_as_tap_test :root => File.dirname(__FILE__) + "/task"
9
+ attr_accessor :t
10
+
11
+ class ObjectWithProcess
12
+ def process(input)
13
+ input
14
+ end
15
+ end
16
+
17
+ def setup
18
+ super
19
+ @t = ObjectWithProcess.new
20
+ @t.extend Tap::Task::Base
21
+ end
22
+
23
+ #
24
+ # extend tests
25
+ #
26
+
27
+ def test_initialization_of_variables_on_extend
28
+ assert_equal [], t.results
29
+ assert_equal [t], t.batch
30
+ assert_nil t.condition_block
31
+ assert_nil t.on_complete_block
32
+ assert !t.multithread
33
+ assert !t.iterate
34
+ end
35
+
36
+ #
37
+ # multithread test
38
+ #
39
+
40
+ def test_multithread_returns_value_of_multithread
41
+ t.multithread = false
42
+ assert !t.multithread?
43
+ t.multithread = true
44
+ assert t.multithread?
45
+ end
46
+
47
+ #
48
+ # iterate test
49
+ #
50
+
51
+ def test_iterate_can_be_set
52
+ t.iterate = false
53
+ assert !t.iterate?
54
+ t.iterate = true
55
+ assert t.iterate?
56
+ end
57
+
58
+ #
59
+ # executable? test
60
+ #
61
+
62
+ def test_executable_evaluates_condition_block_with_inputs
63
+ t.condition do |task, inputs|
64
+ inputs == [1,2,3]
65
+ end
66
+
67
+ assert t.executable?([1,2,3])
68
+ assert !t.executable?(1)
69
+ end
70
+
71
+ def test_executable_returns_true_if_condition_block_is_nil
72
+ assert_nil t.condition_block
73
+ assert t.executable?(nil)
74
+ end
75
+
76
+ #
77
+ # on_complete block test
78
+ #
79
+
80
+ def test_on_complete_sets_on_complete_block
81
+ block = lambda {}
82
+ t.on_complete(&block)
83
+ assert_equal block, t.on_complete_block
84
+ end
85
+
86
+ def test_on_complete_can_only_be_set_once
87
+ t.on_complete {}
88
+ assert_raise(RuntimeError) { t.on_complete {} }
89
+ assert_raise(RuntimeError) { t.on_complete }
90
+ end
91
+
92
+ #
93
+ # condition block test
94
+ #
95
+
96
+ def test_condition_sets_condition_block
97
+ block = lambda {}
98
+ t.condition(&block)
99
+ assert_equal block, t.condition_block
100
+ end
101
+
102
+ def test_condition_can_only_be_set_once
103
+ t.condition {}
104
+ assert_raise(RuntimeError) { t.condition {} }
105
+ assert_raise(RuntimeError) { t.condition }
106
+ end
107
+
108
+ #
109
+ # process test
110
+ #
111
+
112
+ def test_process_returns_input
113
+ assert_equal 1, t.process(1)
114
+ end
115
+ end
@@ -8,11 +8,34 @@ class TaskClassTest < Test::Unit::TestCase
8
8
  #
9
9
 
10
10
  class TaskWithDefaultConfig < Tap::Task
11
- set_default_config :one => 1, :two => 2, :three => 3
11
+ declare_config
12
+
13
+ config :one, 1
14
+ config :two, 2
15
+ config :three, 3
16
+
12
17
  config_accessor :one
13
18
  config_writer :two
14
19
  config_reader :three
15
20
  end
21
+
22
+ class SomeTask < Tap::Task
23
+ config :key, 'value' # a sample config
24
+ end
25
+
26
+ def test_class_configurations_doc
27
+ t = SomeTask.new
28
+ assert_equal 'value', t.key
29
+ t.key = 'another'
30
+ assert_equal({:key => 'another'}, t.config)
31
+ end
32
+
33
+ def test_task_class_configurations_and_default_config_set_by_class_configurations
34
+ assert_equal(
35
+ {TaskWithDefaultConfig => [0, :one, :two, :three]},
36
+ TaskWithDefaultConfig.configurations.declarations)
37
+ assert_equal({:one => 1, :two => 2, :three => 3}, TaskWithDefaultConfig.configurations.default)
38
+ end
16
39
 
17
40
  def test_task_default_config_set_by_default_config
18
41
  t = TaskWithDefaultConfig.new
@@ -54,12 +77,32 @@ class TaskClassTest < Test::Unit::TestCase
54
77
  assert_equal "two", t.config[:two]
55
78
  end
56
79
 
80
+ # class ConfigFormats < Tap::Task
81
+ # config :a, [:b, 'b']
82
+ # config_accessor [:d, 'd'], :e
83
+ # end
84
+ #
85
+ # def test_config_formats_create_configs_as_expected
86
+ # assert_equal({:a => nil, :b => 'b', :d => 'd', :e => nil}, ConfigFormats.configurations.hash)
87
+ #
88
+ # t = ConfigFormats.new
89
+ # assert !t.respond_to?(:a)
90
+ # assert !t.respond_to?(:b)
91
+ # assert t.respond_to?(:d)
92
+ # assert t.respond_to?(:e)
93
+ # assert_nil t.config[:a]
94
+ # assert_equal 'b', t.config[:b]
95
+ # assert_equal 'd', t.d
96
+ # assert_nil t.e
97
+ # end
98
+
57
99
  #
58
100
  # test subclass behavior
59
101
  #
60
102
 
61
103
  class SubclassedTask < TaskWithDefaultConfig
62
- set_default_config :one => "one", :four => 4
104
+ config :one, "one"
105
+ config :four, 4
63
106
  end
64
107
 
65
108
  def test_config_accessors_are_inherited
@@ -72,10 +115,19 @@ class TaskClassTest < Test::Unit::TestCase
72
115
  assert t.respond_to?(:three)
73
116
  assert !t.respond_to?("three=")
74
117
 
75
- assert !t.respond_to?(:four)
76
- assert !t.respond_to?("four=")
118
+ assert t.respond_to?(:four)
119
+ assert t.respond_to?("four=")
77
120
  end
78
121
 
122
+ def test_class_configurations_are_inherited_but_can_be_overridden
123
+ assert_equal({
124
+ TaskWithDefaultConfig => [0, :one, :two, :three],
125
+ SubclassedTask => [1, :four]},
126
+ SubclassedTask.configurations.declarations)
127
+
128
+ assert_equal({:one => 1, :two => 2, :three => 3}, TaskWithDefaultConfig.configurations.default)
129
+ end
130
+
79
131
  def test_default_configs_are_inherited_but_can_be_overridden
80
132
  s = SubclassedTask.new
81
133
  assert_equal({:one => "one", :two => 2, :three => 3, :four => 4}, s.config)
@@ -3,6 +3,7 @@ require 'tap/task'
3
3
 
4
4
  class TaskExecuteTest < Test::Unit::TestCase
5
5
  include Tap
6
+ include TapTestMethods
6
7
 
7
8
  acts_as_tap_test
8
9
 
@@ -165,6 +166,34 @@ class TaskExecuteTest < Test::Unit::TestCase
165
166
  t.results,
166
167
  0 => [ [[nil, nil], [[1,2], 3]], [t, [[1,2], 3]] ])
167
168
  end
169
+
170
+ def test_non_iterative_execute_without_inputs
171
+ was_in_block = false
172
+ t = NonIterativeTask.new do |task, input|
173
+ assert_nil input
174
+ was_in_block = true
175
+ end
176
+
177
+ t.execute
178
+ assert was_in_block
179
+
180
+ was_in_block = false
181
+ t.app.run(t)
182
+ assert was_in_block
183
+
184
+ was_in_block = false
185
+ t = NonIterativeTask.new do
186
+ was_in_block = true
187
+ end
188
+
189
+ t.execute
190
+ assert was_in_block
191
+
192
+ was_in_block = false
193
+ t.app.run(t)
194
+ assert was_in_block
195
+ end
196
+
168
197
 
169
198
  #
170
199
  # non iterative audit tests
data/test/task_test.rb CHANGED
@@ -3,12 +3,14 @@ require 'tap/task'
3
3
 
4
4
  # used in documentation test
5
5
  class ConfiguredTask < Tap::Task
6
- set_default_config :one => 'one', :two => 'two'
6
+ config :one, 'one'
7
+ config :two, 'two'
7
8
  end
8
9
 
9
10
  class TaskTest < Test::Unit::TestCase
10
11
  include Tap
11
12
  include Benchmark
13
+ include TapTestMethods
12
14
 
13
15
  acts_as_tap_test
14
16
  attr_accessor :t
@@ -39,11 +41,18 @@ class TaskTest < Test::Unit::TestCase
39
41
  t1.enq 1
40
42
  t1.enq 2,3
41
43
  t1.app.run
42
-
43
44
  assert_equal([1,2,3], runlist)
44
45
 
46
+ runlist = []
47
+ t1.iterate = false
48
+ t1.enq 1
49
+ t1.enq 2,3
50
+ t1.app.run
51
+ assert_equal([[1,2,3]], runlist)
52
+
45
53
  ###
46
54
  runlist = []
55
+ t1 = Task.new {|task, input| runlist << input}
47
56
  assert_equal([t1], t1.batch)
48
57
  t2 = t1.create_batch_task
49
58
  assert_equal([t1, t2], t1.batch)
@@ -181,7 +190,7 @@ class TaskTest < Test::Unit::TestCase
181
190
 
182
191
  def test_create_batch_task_uses_input_template_and_overrides
183
192
  t = TaskWithDefaultConfig.new "overriding", :three => 3
184
- assert_equal({:one => 'one', :two => 'two', :three => 'three'}, t.class.default_config)
193
+ assert_equal({:one => 'one', :two => 'two', :three => 'three'}, t.class.configurations.default)
185
194
  assert_equal({:two => 'TWO', :three => 'THREE'}, t.config_template)
186
195
  assert_equal({:one => 'one', :two => 'TWO', :three => 3}, t.config)
187
196
 
@@ -228,17 +237,6 @@ class TaskTest < Test::Unit::TestCase
228
237
  assert_equal File.join(t.app['config'], t.name + ".yml"), t.config_file
229
238
  end
230
239
 
231
- #
232
- # multithread test
233
- #
234
-
235
- def test_multithread_returns_value_of_multithread
236
- t.multithread = false
237
- assert !t.multithread?
238
- t.multithread = true
239
- assert t.multithread?
240
- end
241
-
242
240
  #
243
241
  # iterate test
244
242
  #
@@ -247,20 +245,33 @@ class TaskTest < Test::Unit::TestCase
247
245
  assert Task.iterative
248
246
  assert t.iterate?
249
247
  end
250
-
251
- def test_iterate_can_be_set
252
- t.iterate = false
253
- assert !t.iterate?
254
- t.iterate = true
255
- assert t.iterate?
256
- end
257
248
 
258
249
  #
259
- # configuration tests
250
+ # config tests
260
251
  #
261
252
 
253
+ class ConfigDocSampleTask < Tap::Task
254
+ config :key, 'value'
255
+
256
+ config_reader
257
+ config :reader_only
258
+ end
259
+
260
+ def test_config_doc
261
+ t = ConfigDocSampleTask.new
262
+ assert t.respond_to?(:reader_only)
263
+ assert !t.respond_to?(:reader_only=)
264
+
265
+ assert_equal({:key => 'value', :reader_only => nil}, t.config)
266
+ assert_equal 'value', t.key
267
+ t.key = 'another'
268
+ assert_equal({:key => 'another', :reader_only => nil}, t.config)
269
+ end
270
+
262
271
  class TaskWithDefaultConfig < Task
263
- set_default_config :one => 'one', :two => 'two', :three => 'three'
272
+ config :one, 'one'
273
+ config :two, 'two'
274
+ config :three, 'three'
264
275
  end
265
276
 
266
277
  def test_config_sets_config
@@ -271,7 +282,7 @@ class TaskTest < Test::Unit::TestCase
271
282
 
272
283
  def test_config_merges_class_defaults_and_config_template_and_inputs_in_order
273
284
  t = TaskWithDefaultConfig.new "overriding"
274
- assert_equal({:one => 'one', :two => 'two', :three => 'three'}, t.class.default_config)
285
+ assert_equal({:one => 'one', :two => 'two', :three => 'three'}, t.class.configurations.default)
275
286
  assert_equal({:two => 'TWO', :three => 'THREE'}, t.config_template)
276
287
 
277
288
  t.config = {:three => 3}
@@ -280,7 +291,7 @@ class TaskTest < Test::Unit::TestCase
280
291
 
281
292
  def test_nil_is_treated_as_empty_hash
282
293
  t = TaskWithDefaultConfig.new "overriding"
283
- assert_equal({:one => 'one', :two => 'two', :three => 'three'}, t.class.default_config)
294
+ assert_equal({:one => 'one', :two => 'two', :three => 'three'}, t.class.configurations.default)
284
295
  assert_equal({:two => 'TWO', :three => 'THREE'}, t.config_template)
285
296
 
286
297
  t.config[:three] = 3
@@ -290,54 +301,61 @@ class TaskTest < Test::Unit::TestCase
290
301
  assert_equal({:one => 'one', :two => 'TWO', :three => 'THREE'}, t.config)
291
302
  end
292
303
 
293
- #
294
- # condition block test
295
- #
296
-
297
- def test_condition_sets_condition_block
298
- block = lambda {}
299
- t.condition(&block)
300
- assert_equal block, t.condition_block
301
- end
302
-
303
- def test_condition_can_only_be_set_once
304
- t.condition {}
305
- assert_raise(RuntimeError) { t.condition {} }
306
- assert_raise(RuntimeError) { t.condition }
307
- end
308
-
309
- #
310
- # executable? test
311
- #
312
-
313
- def test_executable_evaluates_condition_block_with_inputs
314
- t.condition do |task, inputs|
315
- inputs == [1,2,3]
316
- end
304
+ class TaskWithManyConfigs < Task
305
+ config :one, 'one'
317
306
 
318
- assert t.executable?([1,2,3])
319
- assert !t.executable?(1)
307
+ declare_config
308
+ config :two, 'two'
309
+
310
+ config_reader
311
+ config :three, 'three'
312
+
313
+ config_writer
314
+ config :four, 'four'
315
+
316
+ config_accessor
317
+ config :five, 'five'
318
+
319
+ declare_config :six
320
+ config_reader :seven
321
+ config_writer :eight
322
+ config_accessor :nine
320
323
  end
321
-
322
- def test_executable_returns_true_if_condition_block_is_nil
323
- assert_nil t.condition_block
324
- assert t.executable?(nil)
325
- end
326
-
327
- #
328
- # on_complete block test
329
- #
330
324
 
331
- def test_on_complete_sets_on_complete_block
332
- block = lambda {}
333
- t.on_complete(&block)
334
- assert_equal block, t.on_complete_block
335
- end
336
-
337
- def test_on_complete_can_only_be_set_once
338
- t.on_complete {}
339
- assert_raise(RuntimeError) { t.on_complete {} }
340
- assert_raise(RuntimeError) { t.on_complete }
325
+ def test_config_with_many_configs
326
+ t = TaskWithManyConfigs.new
327
+
328
+ assert_equal({
329
+ :one => 'one', :six => nil,
330
+ :two => 'two', :seven => nil,
331
+ :three => 'three', :eight => nil,
332
+ :four => 'four', :nine => nil,
333
+ :five => 'five'},
334
+ t.config)
335
+
336
+ # readers only
337
+ [:three, :seven].each do |config|
338
+ assert t.respond_to?(config)
339
+ assert !t.respond_to?("#{config}=")
340
+ end
341
+
342
+ # writers only
343
+ [:four, :eight].each do |config|
344
+ assert !t.respond_to?(config)
345
+ assert t.respond_to?("#{config}=")
346
+ end
347
+
348
+ # both
349
+ [:one, :five, :nine].each do |config|
350
+ assert t.respond_to?(config)
351
+ assert t.respond_to?("#{config}=")
352
+ end
353
+
354
+ # neither
355
+ [:two, :six].each do |config|
356
+ assert !t.respond_to?(config)
357
+ assert !t.respond_to?("#{config}=")
358
+ end
341
359
  end
342
360
 
343
361
  #
@@ -392,6 +410,7 @@ class TaskTest < Test::Unit::TestCase
392
410
  assert was_in_block
393
411
  end
394
412
 
413
+ # JRuby inconsistent test?
395
414
  def test_duplicate_tasks_are_monitored_separately
396
415
  extended_test do
397
416
  count = 0