tap 0.7.9 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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