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,194 @@
1
+ require File.join(File.dirname(__FILE__), 'tap_test_helper')
2
+ require 'tap/script'
3
+
4
+ class ScriptConfigTest < Test::Unit::TestCase
5
+ include Tap
6
+
7
+ acts_as_tap_test
8
+
9
+ #
10
+ # class default tests
11
+ #
12
+
13
+ def test_defaults
14
+ assert_equal({
15
+ :gems => [],
16
+ :load_once_paths => [],
17
+ :load_paths => ["lib"],
18
+ :script_paths => ["script"]},
19
+ ScriptConfig.defaults)
20
+ end
21
+
22
+ #
23
+ # class spec_filepath test
24
+ #
25
+
26
+ def test_spec_filepath
27
+ assert_equal "tapspec.yml", ScriptConfig.spec_filepath
28
+ assert_equal "path/to/dir/tapspec.yml", ScriptConfig.spec_filepath("path/to/dir")
29
+ end
30
+
31
+ #
32
+ # default script config
33
+ #
34
+
35
+ def test_default_script_config
36
+ config = ScriptConfig.new
37
+ assert config.kind_of?(OpenStruct)
38
+ assert_equal({
39
+ :gems => [],
40
+ :gemspecs => [],
41
+ :load_once_paths => [],
42
+ :load_paths => [app["lib"]],
43
+ :script_paths => [app["script"]]},
44
+ config.marshal_dump)
45
+ end
46
+
47
+ def test_script_config_with_inputs
48
+ config = ScriptConfig.new :key => 'value', :load_paths => ['lib', 'test']
49
+
50
+ assert_equal({
51
+ :gems => [],
52
+ :gemspecs => [],
53
+ :load_once_paths => [],
54
+ :load_paths => [app["lib"], app['test']],
55
+ :script_paths => [app["script"]],
56
+ :key => 'value'},
57
+ config.marshal_dump)
58
+ end
59
+
60
+ def test_single_arguments_are_allowed
61
+ config = ScriptConfig.new(
62
+ :load_paths => "alt",
63
+ :load_once_paths => "once")
64
+
65
+ assert_equal({
66
+ :gems => [],
67
+ :gemspecs => [],
68
+ :load_once_paths => [app["once"]],
69
+ :load_paths => [app["alt"]],
70
+ :script_paths => [app["script"]]},
71
+ config.marshal_dump)
72
+ end
73
+
74
+ def test_gemspecs_and_paths_are_collected_for_the_specified_gem
75
+ config = ScriptConfig.new :gems => 'activesupport'
76
+ spec = Gem.loaded_specs["activesupport"]
77
+
78
+ assert_equal 'activesupport', config.gems
79
+ assert_equal [spec], config.gemspecs
80
+ assert_equal [app['lib'], File.join(spec.full_gem_path, 'lib')], config.load_paths
81
+ assert_equal [app['script'], File.join(spec.full_gem_path, 'script')], config.script_paths
82
+ end
83
+
84
+ #
85
+ # TODO -- find a way to test the gem loading behavior,
86
+ # especially when the tapspec contains nested gems
87
+ # and when the tapspec contains unsafe filepaths
88
+ #
89
+
90
+ #
91
+ # TODO -- test scripts
92
+ #
93
+ end
94
+
95
+ class ScriptTest < Test::Unit::TestCase
96
+
97
+ acts_as_tap_test
98
+
99
+ def setup
100
+ super
101
+ @load_path_hold = $LOAD_PATH.dup
102
+ Dependencies.load_paths.clear
103
+ Dependencies.load_once_paths.clear
104
+
105
+ script.reset
106
+ end
107
+
108
+ def teardown
109
+ super
110
+ $LOAD_PATH.clear
111
+ $LOAD_PATH.concat @load_path_hold
112
+ Dependencies.load_paths.clear
113
+ Dependencies.load_once_paths.clear
114
+ end
115
+
116
+ def script
117
+ Tap::Script.instance
118
+ end
119
+
120
+ def tap_lib_dir
121
+ File.expand_path(File.dirname(__FILE__) + "/../lib")
122
+ end
123
+
124
+ #
125
+ # configure_app tests
126
+ #
127
+
128
+ def test_configure_returns_an_appropriate_script_config
129
+ config = script.configure_app
130
+
131
+ assert_equal [], config.gemspecs
132
+ assert_equal [], config.load_once_paths
133
+ assert_equal [tap_lib_dir, app['lib']], config.load_paths
134
+ assert_equal [app['script']], config.script_paths
135
+
136
+ config = script.configure_app :load_paths => ['alt'], :key => 'value'
137
+
138
+ assert_equal [], config.gemspecs
139
+ assert_equal [], config.load_once_paths
140
+ assert_equal [tap_lib_dir, app['alt']], config.load_paths
141
+ assert_equal [app['script']], config.script_paths
142
+ assert_equal 'value', config.key
143
+ end
144
+
145
+ def test_configure_app_sets_default_load_and_script_paths
146
+ assert !$LOAD_PATH.include?( app['lib'] )
147
+ assert_equal [], Dependencies.load_paths
148
+ assert_equal [], Dependencies.load_once_paths
149
+
150
+ script.configure_app
151
+
152
+ assert $LOAD_PATH.include?( app['lib'] )
153
+
154
+ assert_equal [tap_lib_dir, app['lib']], Dependencies.load_paths
155
+ assert_equal [], Dependencies.load_once_paths
156
+ end
157
+
158
+ def test_configure_app_resolves_aliases_and_sets_paths
159
+ app['lib'] = "alt_lib"
160
+ app['script'] = "alt_script"
161
+ app['load_once'] = "load/once/lib"
162
+
163
+ assert !$LOAD_PATH.include?( app['lib'] )
164
+ assert_equal [], Dependencies.load_paths
165
+ assert_equal [], Dependencies.load_once_paths
166
+
167
+ script.configure_app(
168
+ :load_paths => ["lib", "load_once"],
169
+ :load_once_paths => ["load_once"],
170
+ :script_paths => ['script'])
171
+
172
+ assert $LOAD_PATH.include?( app['lib'] )
173
+ assert $LOAD_PATH.include?( app['load_once'] )
174
+
175
+ assert_equal [tap_lib_dir, app['lib'], app['load_once']], Dependencies.load_paths
176
+ assert_equal [app['load_once']], Dependencies.load_once_paths
177
+ end
178
+
179
+ def test_configure_app_raises_error_if_load_once_path_is_not_a_load_path
180
+ assert_raise(RuntimeError) do
181
+ script.configure_app(
182
+ :load_paths => [],
183
+ :load_once_paths => ["lib"])
184
+ end
185
+ end
186
+
187
+ #
188
+ # split_to_length test
189
+ #
190
+
191
+ # def test_split_to_length
192
+ # assert_equal ["a a a a", "aaa aa ","a "], Tap::Script.split_to_length("a a a a aaa aa \na", 7)
193
+ # end
194
+ end
@@ -394,6 +394,9 @@ class AuditTest < Test::Unit::TestCase
394
394
  #
395
395
 
396
396
  def test_documentation
397
+ # reset the app, in case it is in an unexpected state
398
+ Tap::App.instance = nil
399
+
397
400
  # part 1
398
401
  audit = Audit.new(3)
399
402
  audit._record(:a, 4)
@@ -436,8 +439,8 @@ class AuditTest < Test::Unit::TestCase
436
439
 
437
440
  # part 4
438
441
  t = Tap::Task.new do |task, input|
439
- assert_equal Fixnum, input.class
440
- input += 1
442
+ assert_equal Fixnum, input.class
443
+ input += 1
441
444
  end
442
445
 
443
446
  results = t.execute(3)
@@ -26,11 +26,11 @@ class CombinatorTest < Test::Unit::TestCase
26
26
  assert_equal [], c.a
27
27
  assert_equal [], c.b
28
28
 
29
- case_test(
29
+ {
30
30
  [[1], [2,3], [3, [4]]] =>[[[1]], [[2], [3]], [[3],[[4]]]], # arrays have each element arrayified
31
31
  [nil, nil, nil] => [[], [], []], # nil returns an empty array
32
32
  [[], [{:one => 1},nil], nil] => [[], [[{:one => 1}],[nil]], []] # mixture
33
- ) do |sets, expected|
33
+ }.each_pair do |sets, expected|
34
34
  c = Combinator.new(*sets)
35
35
  assert_equal expected[0], c.a
36
36
  assert_equal Combinator, c.b.class
@@ -40,11 +40,11 @@ class CombinatorTest < Test::Unit::TestCase
40
40
  end
41
41
 
42
42
  def test_initialize_raises_error_unless_sets_are_all_arrays_combinators_or_nil
43
- acase_test(
43
+ [
44
44
  [1],
45
45
  [[], 1],
46
46
  [1,[]]
47
- ) do |sets|
47
+ ].each do |sets|
48
48
  assert_raise(ArgumentError) { Combinator.new(*sets) }
49
49
  end
50
50
  end
@@ -54,14 +54,14 @@ class CombinatorTest < Test::Unit::TestCase
54
54
  #
55
55
 
56
56
  def test_sets_returns_input_sets_minus_nil_or_empty_arrays
57
- acase_test(
57
+ [
58
58
  [],
59
59
  [[1]],
60
60
  [[1], [2]],
61
61
  [[1], [2,3], [4,5,6]],
62
62
  [[1], [2,[3]], [4,5,6]],
63
63
  [[1], nil, [], [4,5,6], nil]
64
- ) do |sets|
64
+ ].each do |sets|
65
65
  expected = sets.reject {|s| s.nil? || s.empty? }
66
66
  assert_equal expected, Combinator.new(*sets).sets, PP.singleline_pp(sets, "")
67
67
  end
@@ -72,7 +72,7 @@ class CombinatorTest < Test::Unit::TestCase
72
72
  #
73
73
 
74
74
  def test_length
75
- case_test(
75
+ {
76
76
  [] => 0,
77
77
  [[1]] => 1,
78
78
  [[1], [2]] => 1,
@@ -84,7 +84,7 @@ class CombinatorTest < Test::Unit::TestCase
84
84
  [[1,2], [3,4]] => 4,
85
85
  [[1,2], [3,4], [5,6]] => 8,
86
86
  [[1,2], nil, [3,4], [], [5,6]] => 8
87
- ) do |sets, expected|
87
+ }.each_pair do |sets, expected|
88
88
  assert_equal expected, Combinator.new(*sets).length, PP.singleline_pp(sets, "")
89
89
  end
90
90
  end
@@ -94,7 +94,7 @@ class CombinatorTest < Test::Unit::TestCase
94
94
  #
95
95
 
96
96
  def test_each
97
- case_test(
97
+ {
98
98
  [[1]] => [[1]],
99
99
  [[1], [2]] => [[1,2]],
100
100
  [[1],[2],[3]] => [[1,2,3]],
@@ -105,7 +105,7 @@ class CombinatorTest < Test::Unit::TestCase
105
105
  [[1,2], [3,4]] => [[1,3],[1,4],[2,3],[2,4]],
106
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
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
- ) do |set, expected|
108
+ }.each_pair do |set, expected|
109
109
  comb = Combinator.new(*set)
110
110
 
111
111
  combinations = []
@@ -0,0 +1,35 @@
1
+ require File.join(File.dirname(__FILE__), '../tap_test_helper')
2
+
3
+ class RakeTest < Test::Unit::TestCase
4
+ acts_as_tap_test
5
+
6
+ def test_tap_with_rake
7
+ extended_test do
8
+ require 'tap/support/rake'
9
+ app.extend Tap::Support::Rake
10
+
11
+ runlist = []
12
+ t1 = task :task => [:prerequisite] do
13
+ runlist << :task
14
+ end
15
+ t2 = task :prerequisite do
16
+ runlist << :prerequisite
17
+ end
18
+
19
+ assert_equal [], runlist
20
+ app.run(:task)
21
+ assert_equal [:prerequisite, :task], runlist
22
+
23
+ # notice the tasks do not get re-run
24
+ app.run(:task)
25
+ assert_equal [:prerequisite, :task], runlist
26
+
27
+ # check that Rake still works natively
28
+ t1.instance_variable_set("@already_invoked", false)
29
+ t2.instance_variable_set("@already_invoked", false)
30
+
31
+ Rake.application.lookup(:task).invoke
32
+ assert_equal [:prerequisite, :task, :prerequisite, :task], runlist
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,272 @@
1
+ require File.join(File.dirname(__FILE__), '../tap_test_helper')
2
+ require 'tap/support/task_configuration'
3
+ require 'tap/task'
4
+
5
+ # for documentation test
6
+ class BaseTask < Tap::Task
7
+ config :one, 1
8
+ end
9
+ class SubTask < BaseTask
10
+ config :one, 'one'
11
+ config :two, 'two'
12
+ end
13
+
14
+ class TaskConfigurationTest < Test::Unit::TestCase
15
+ include Tap::Support
16
+
17
+ def test_initialization
18
+ c = TaskConfiguration.new
19
+ assert_equal({}, c.declarations)
20
+ assert_equal({}, c.default)
21
+ assert_equal({}, c.attributes)
22
+ end
23
+
24
+ #
25
+ # format_yaml tests
26
+ #
27
+
28
+ def test_format_yaml_with_single_class
29
+ cc = TaskConfiguration.new
30
+ cc.declare('one', TaskConfigurationTest)
31
+ cc.set('one', 1)
32
+
33
+ yaml = cc.format_yaml
34
+ expected = %Q{
35
+ # TaskConfigurationTest configuration
36
+ one: 1
37
+ }
38
+
39
+ assert_equal expected[1..-1], yaml
40
+ assert_equal({'one' => 1}, YAML.load(yaml))
41
+ end
42
+
43
+ def test_format_stringifies_keys
44
+ cc = TaskConfiguration.new
45
+ cc.declare(:one, TaskConfigurationTest)
46
+ cc.set(:one, 1)
47
+
48
+ yaml = cc.format_yaml
49
+ expected = %Q{
50
+ # TaskConfigurationTest configuration
51
+ one: 1
52
+ }
53
+
54
+ assert_equal expected[1..-1], yaml
55
+ assert_equal({'one' => 1}, YAML.load(yaml))
56
+ end
57
+ end
58
+ class Hold
59
+ def test_format_yaml_with_desc
60
+ cc = TaskConfiguration.new
61
+ cc.declare('one', TaskConfigurationTest)
62
+ cc.set('one', 1, :desc => "comment")
63
+
64
+ yaml = cc.format_yaml
65
+ expected = %Q{
66
+ # TaskConfigurationTest configuration
67
+ one: 1 # comment
68
+ }
69
+
70
+ assert_equal expected[1..-1], yaml
71
+ assert_equal({'one' => 1}, YAML.load(yaml))
72
+ end
73
+
74
+ def test_format_yaml_with_long_desc
75
+ cc = TaskConfiguration.new
76
+ cc.declare('one', TaskConfigurationTest)
77
+ cc.set('one', 1, :desc => 'comment longer than some twenty chars')
78
+
79
+ yaml = cc.format_yaml
80
+ expected = %Q{
81
+ # TaskConfigurationTest configuration
82
+ # comment longer than some twenty chars
83
+ one: 1
84
+ }
85
+
86
+ assert_equal expected[1..-1], yaml
87
+ assert_equal({'one' => 1}, YAML.load(yaml))
88
+ end
89
+
90
+ def test_format_yaml_with_long_value
91
+ cc = TaskConfiguration.new(['one', 'value longer than some twenty chars', 'comment', TaskConfigurationTest])
92
+ yaml = cc.format_yaml
93
+ expected = %Q{
94
+ # TaskConfigurationTest configuration
95
+ # comment
96
+ one: value longer than some twenty chars
97
+ }
98
+
99
+ assert_equal expected[1..-1], yaml
100
+ assert_equal({'one' => 'value longer than some twenty chars'}, YAML.load(yaml))
101
+ end
102
+
103
+ # def test_format_yaml_with_nil_value
104
+ # cc = TaskConfiguration.new(['one', nil, 'comment', TaskConfigurationTest])
105
+ # yaml = cc.format_yaml
106
+ # expected = %Q{
107
+ # # TaskConfigurationTest configuration
108
+ # #one: # comment
109
+ # }
110
+ #
111
+ # assert_equal expected[1..-1], yaml
112
+ # assert_equal(false, YAML.load(yaml))
113
+ # end
114
+
115
+ def test_format_yaml_with_multiline_comment
116
+ cc = TaskConfiguration.new(['one', 1, "multiline\ncomment", TaskConfigurationTest])
117
+ yaml = cc.format_yaml
118
+ expected = %Q{
119
+ # TaskConfigurationTest configuration
120
+ # multiline
121
+ # comment
122
+ one: 1
123
+ }
124
+
125
+ assert_equal expected[1..-1], yaml
126
+ assert_equal({'one' => 1}, YAML.load(yaml))
127
+ end
128
+
129
+ def test_format_yaml_with_multiline_value
130
+ cc = TaskConfiguration.new(['one', [1,2,3], "comment", TaskConfigurationTest])
131
+ yaml = cc.format_yaml
132
+ expected = %Q{
133
+ # TaskConfigurationTest configuration
134
+ # comment
135
+ one:
136
+ - 1
137
+ - 2
138
+ - 3
139
+ }
140
+
141
+ assert_equal expected[1..-1], yaml
142
+ assert_equal({'one' => [1,2,3]}, YAML.load(yaml))
143
+ end
144
+
145
+ def test_format_yaml_with_multiple_classes
146
+ cc = TaskConfiguration.new(
147
+ ['one', 1, '', TaskConfigurationTest],
148
+ ['one', 'one', 'integer', AnotherClass],
149
+ ['two', {'key' => 'value'}, 'hash', AnotherClass],
150
+ ['three', [1,2,3], "multiline\narray", AnotherClass])
151
+ yaml = cc.format_yaml
152
+ expected = %Q{
153
+ # TaskConfigurationTest configuration
154
+ one: one # integer
155
+
156
+ # TaskConfigurationTest::AnotherClass configurations
157
+ # hash
158
+ two:
159
+ key: value
160
+ # multiline
161
+ # array
162
+ three:
163
+ - 1
164
+ - 2
165
+ - 3
166
+ }
167
+
168
+ assert_equal expected[1..-1], yaml
169
+ assert_equal({'one' => 'one', 'two' => {'key' => 'value'}, 'three' => [1,2,3]}, YAML.load(yaml))
170
+ end
171
+ end
172
+
173
+ class Hold
174
+
175
+ # def test_documentation
176
+ # assert_equal({:one => 1}, BaseTask.configurations.hash)
177
+ # assert_equal({:one => 'one', :two => 'two'}, SubTask.configurations.hash)
178
+ #
179
+ # assert_equal "# BaseTask configuration\none: 1\n", BaseTask.configurations.format_yaml
180
+ #
181
+ # expected = %Q{
182
+ # # BaseTask configuration
183
+ # one: one # the first configuration
184
+ #
185
+ # # SubTask configuration
186
+ # two: two # the second configuration
187
+ # }
188
+ # assert_equal expected[1..-1], SubTask.configurations.format_yaml
189
+ # end
190
+
191
+ #
192
+ # add configurations
193
+ #
194
+
195
+ class AnotherClass
196
+ end
197
+
198
+ def test_add
199
+ cc = TaskConfiguration.new
200
+ cc.add(:key, 'value', TaskConfigurationTest)
201
+
202
+ assert_equal [[:key, 'value', TaskConfigurationTest]], cc.declarations
203
+ assert_equal({:key => 'value'}, cc.hash)
204
+
205
+ cc.add(:key, 'new value', AnotherClass)
206
+ assert_equal [
207
+ [:key, 'value', TaskConfigurationTest],
208
+ [:key, 'new value', AnotherClass]
209
+ ], cc.declarations
210
+ assert_equal({:key => 'new value'}, cc.hash)
211
+ end
212
+
213
+ def test_add_symbolizes_keys
214
+ cc = TaskConfiguration.new
215
+ cc.add('key', 'value', TaskConfigurationTest)
216
+
217
+ assert_equal [[:key, 'value', TaskConfigurationTest]], cc.declarations
218
+ assert_equal({:key => 'value'}, cc.hash)
219
+ end
220
+
221
+ # def test_add_raises_error_if_declarations_are_not_correct
222
+ # cc = TaskConfiguration.new
223
+ # assert_raise(ArgumentError) { cc.add(:key, 'value')}
224
+ # assert_raise(ArgumentError) { cc.add([:key, 'value'])}
225
+ # end
226
+
227
+ #
228
+ # remove configurations
229
+ #
230
+
231
+ def test_remove
232
+ cc = TaskConfiguration.new(
233
+ [:one, 1, TaskConfigurationTest],
234
+ [:one, 'one', AnotherClass],
235
+ [:two, 'two', AnotherClass],
236
+ [:three, 'three', AnotherClass])
237
+
238
+ assert_equal 4, cc.declarations.length
239
+ assert_equal({:one => 'one', :two => 'two', :three => 'three'}, cc.hash)
240
+
241
+ cc.remove(:one, :three)
242
+ assert_equal [[:two, 'two', AnotherClass]], cc.declarations
243
+ assert_equal({:two => 'two'}, cc.hash)
244
+ end
245
+
246
+ def test_remove_symbolizes_inputs
247
+ cc = TaskConfiguration.new([:key, 'value', TaskConfigurationTest])
248
+ cc.remove('key')
249
+ assert_equal [], cc.declarations
250
+ end
251
+
252
+ #
253
+ # merge test
254
+ #
255
+
256
+ # def test_merge
257
+ # c1 = TaskConfiguration.new([:one, 1, '', TaskConfigurationTest])
258
+ # c2 = c1.merge([
259
+ # [:one, 'one', '', AnotherClass],
260
+ # [:two, 'two', '', AnotherClass]])
261
+ #
262
+ # assert_not_equal c1.object_id, c2.object_id
263
+ #
264
+ # assert_equal [[:one, 1, '', TaskConfigurationTest]], c1.declarations
265
+ # assert_equal [
266
+ # [:one, 1, '', TaskConfigurationTest],
267
+ # [:one, 'one', '', AnotherClass],
268
+ # [:two, 'two', '', AnotherClass]], c2.declarations
269
+ # end
270
+
271
+
272
+ end