tap 0.9.1 → 0.10.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 (244) hide show
  1. data/History +37 -30
  2. data/MIT-LICENSE +1 -1
  3. data/README +92 -44
  4. data/bin/tap +62 -75
  5. data/cmd/console.rb +42 -0
  6. data/cmd/destroy.rb +16 -0
  7. data/cmd/generate.rb +16 -0
  8. data/cmd/run.rb +126 -0
  9. data/doc/Class Reference +362 -0
  10. data/doc/Command Reference +153 -0
  11. data/doc/Tutorial +237 -0
  12. data/lib/tap.rb +6 -45
  13. data/lib/tap/app.rb +126 -500
  14. data/lib/tap/constants.rb +2 -29
  15. data/lib/tap/env.rb +555 -250
  16. data/lib/tap/file_task.rb +60 -103
  17. data/lib/tap/generator/base.rb +109 -0
  18. data/lib/tap/generator/destroy.rb +37 -0
  19. data/lib/tap/generator/generate.rb +61 -0
  20. data/lib/tap/generator/generators/command/command_generator.rb +16 -12
  21. data/lib/tap/generator/generators/command/templates/command.erb +13 -19
  22. data/lib/tap/generator/generators/config/config_generator.rb +18 -27
  23. data/lib/tap/generator/generators/config/templates/doc.erb +12 -0
  24. data/lib/tap/generator/generators/config/templates/nodoc.erb +8 -0
  25. data/lib/tap/generator/generators/file_task/file_task_generator.rb +16 -11
  26. data/lib/tap/generator/generators/file_task/templates/file.txt +11 -2
  27. data/lib/tap/generator/generators/file_task/templates/result.yml +6 -0
  28. data/lib/tap/generator/generators/file_task/templates/task.erb +24 -31
  29. data/lib/tap/generator/generators/file_task/templates/test.erb +18 -22
  30. data/lib/tap/generator/generators/root/root_generator.rb +45 -31
  31. data/lib/tap/generator/generators/root/templates/Rakefile +64 -41
  32. data/lib/tap/generator/generators/root/templates/gemspec +27 -0
  33. data/lib/tap/generator/generators/root/templates/tapfile +8 -0
  34. data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +0 -0
  35. data/lib/tap/generator/generators/root/templates/test/tap_test_suite.rb +1 -1
  36. data/lib/tap/generator/generators/root/templates/test/tapfile_test.rb +15 -0
  37. data/lib/tap/generator/generators/task/task_generator.rb +21 -28
  38. data/lib/tap/generator/generators/task/templates/task.erb +13 -23
  39. data/lib/tap/generator/generators/task/templates/test.erb +15 -18
  40. data/lib/tap/generator/manifest.rb +14 -0
  41. data/lib/tap/patches/rake/rake_test_loader.rb +0 -0
  42. data/lib/tap/patches/rake/testtask.rb +0 -0
  43. data/lib/tap/patches/ruby19/backtrace_filter.rb +0 -0
  44. data/lib/tap/patches/ruby19/parsedate.rb +0 -0
  45. data/lib/tap/root.rb +260 -21
  46. data/lib/tap/support/aggregator.rb +11 -11
  47. data/lib/tap/support/assignments.rb +172 -0
  48. data/lib/tap/support/audit.rb +20 -18
  49. data/lib/tap/support/batchable.rb +21 -10
  50. data/lib/tap/support/batchable_class.rb +107 -0
  51. data/lib/tap/support/class_configuration.rb +154 -239
  52. data/lib/tap/support/command_line.rb +97 -102
  53. data/lib/tap/support/comment.rb +270 -0
  54. data/lib/tap/support/configurable.rb +86 -65
  55. data/lib/tap/support/configurable_class.rb +296 -0
  56. data/lib/tap/support/configuration.rb +122 -0
  57. data/lib/tap/support/constant.rb +70 -0
  58. data/lib/tap/support/constant_utils.rb +127 -0
  59. data/lib/tap/support/declarations.rb +111 -0
  60. data/lib/tap/support/executable.rb +30 -17
  61. data/lib/tap/support/executable_queue.rb +0 -0
  62. data/lib/tap/support/framework.rb +71 -0
  63. data/lib/tap/support/framework_class.rb +199 -0
  64. data/lib/tap/support/instance_configuration.rb +147 -0
  65. data/lib/tap/support/lazydoc.rb +428 -0
  66. data/lib/tap/support/manifest.rb +89 -0
  67. data/lib/tap/support/run_error.rb +0 -0
  68. data/lib/tap/support/shell_utils.rb +33 -9
  69. data/lib/tap/support/summary.rb +30 -0
  70. data/lib/tap/support/tdoc.rb +339 -134
  71. data/lib/tap/support/tdoc/tdoc_html_generator.rb +0 -0
  72. data/lib/tap/support/tdoc/tdoc_html_template.rb +0 -0
  73. data/lib/tap/support/templater.rb +180 -0
  74. data/lib/tap/support/validation.rb +409 -76
  75. data/lib/tap/support/versions.rb +5 -3
  76. data/lib/tap/task.rb +78 -174
  77. data/lib/tap/tasks/dump.rb +56 -0
  78. data/lib/tap/tasks/rake.rb +93 -0
  79. data/lib/tap/test.rb +3 -3
  80. data/lib/tap/test/env_vars.rb +2 -2
  81. data/lib/tap/test/file_methods.rb +19 -20
  82. data/lib/tap/test/script_methods.rb +144 -0
  83. data/lib/tap/test/subset_methods.rb +1 -1
  84. data/lib/tap/test/tap_methods.rb +28 -62
  85. data/lib/tap/workflow.rb +22 -39
  86. metadata +48 -179
  87. data/Basic Overview +0 -151
  88. data/Command Reference +0 -99
  89. data/Rakefile +0 -127
  90. data/Tutorial +0 -287
  91. data/lib/tap/cmd/console.rb +0 -31
  92. data/lib/tap/cmd/destroy.rb +0 -20
  93. data/lib/tap/cmd/generate.rb +0 -20
  94. data/lib/tap/cmd/run.rb +0 -151
  95. data/lib/tap/dump.rb +0 -57
  96. data/lib/tap/generator.rb +0 -91
  97. data/lib/tap/generator/generators/command/USAGE +0 -6
  98. data/lib/tap/generator/generators/config/USAGE +0 -21
  99. data/lib/tap/generator/generators/config/templates/config.erb +0 -1
  100. data/lib/tap/generator/generators/file_task/USAGE +0 -3
  101. data/lib/tap/generator/generators/file_task/templates/file.yml +0 -3
  102. data/lib/tap/generator/generators/generator/USAGE +0 -0
  103. data/lib/tap/generator/generators/generator/generator_generator.rb +0 -21
  104. data/lib/tap/generator/generators/generator/templates/generator.erb +0 -32
  105. data/lib/tap/generator/generators/generator/templates/usage.erb +0 -1
  106. data/lib/tap/generator/generators/root/USAGE +0 -0
  107. data/lib/tap/generator/generators/root/templates/ReadMe.txt +0 -0
  108. data/lib/tap/generator/generators/root/templates/tap.yml +0 -80
  109. data/lib/tap/generator/generators/task/USAGE +0 -3
  110. data/lib/tap/generator/generators/workflow/USAGE +0 -0
  111. data/lib/tap/generator/generators/workflow/templates/task.erb +0 -16
  112. data/lib/tap/generator/generators/workflow/templates/test.erb +0 -7
  113. data/lib/tap/generator/generators/workflow/workflow_generator.rb +0 -6
  114. data/lib/tap/generator/options.rb +0 -26
  115. data/lib/tap/generator/usage.rb +0 -26
  116. data/lib/tap/support/batchable_methods.rb +0 -34
  117. data/lib/tap/support/command_line_methods.rb +0 -76
  118. data/lib/tap/support/configurable_methods.rb +0 -224
  119. data/lib/tap/support/logger.rb +0 -88
  120. data/lib/tap/support/rake.rb +0 -43
  121. data/lib/tap/support/tdoc/config_attr.rb +0 -362
  122. data/test/app/config/another/task.yml +0 -1
  123. data/test/app/config/batch.yml +0 -2
  124. data/test/app/config/empty.yml +0 -0
  125. data/test/app/config/erb.yml +0 -2
  126. data/test/app/config/some/task.yml +0 -1
  127. data/test/app/config/template.yml +0 -2
  128. data/test/app/config/version-0.1.yml +0 -1
  129. data/test/app/config/version.yml +0 -1
  130. data/test/app/lib/app_test_task.rb +0 -3
  131. data/test/app_test.rb +0 -1849
  132. data/test/env/test_configure/recurse_a.yml +0 -2
  133. data/test/env/test_configure/recurse_b.yml +0 -2
  134. data/test/env/test_configure/tap.yml +0 -23
  135. data/test/env/test_load_env_config/dir/tap.yml +0 -3
  136. data/test/env/test_load_env_config/recurse_a.yml +0 -2
  137. data/test/env/test_load_env_config/recurse_b.yml +0 -2
  138. data/test/env/test_load_env_config/tap.yml +0 -3
  139. data/test/env_test.rb +0 -198
  140. data/test/file_task/config/batch.yml +0 -2
  141. data/test/file_task/config/configured.yml +0 -1
  142. data/test/file_task/old_file_one.txt +0 -0
  143. data/test/file_task/old_file_two.txt +0 -0
  144. data/test/file_task_test.rb +0 -1291
  145. data/test/root/alt_lib/alt_module.rb +0 -4
  146. data/test/root/file.txt +0 -0
  147. data/test/root/glob/one.txt +0 -0
  148. data/test/root/glob/two.txt +0 -0
  149. data/test/root/lib/absolute_alt_filepath.rb +0 -2
  150. data/test/root/lib/alternative_filepath.rb +0 -2
  151. data/test/root/lib/another_module.rb +0 -2
  152. data/test/root/lib/nested/some_module.rb +0 -4
  153. data/test/root/lib/no_module_included.rb +0 -0
  154. data/test/root/lib/some/module.rb +0 -4
  155. data/test/root/lib/some_class.rb +0 -2
  156. data/test/root/lib/some_module.rb +0 -3
  157. data/test/root/load_path/load_path_module.rb +0 -2
  158. data/test/root/load_path/skip_module.rb +0 -2
  159. data/test/root/mtime/older.txt +0 -0
  160. data/test/root/unload/full_path.rb +0 -2
  161. data/test/root/unload/loaded_by_nested.rb +0 -2
  162. data/test/root/unload/nested/nested_load.rb +0 -6
  163. data/test/root/unload/nested/nested_with_ext.rb +0 -4
  164. data/test/root/unload/nested/relative_path.rb +0 -4
  165. data/test/root/unload/older.rb +0 -2
  166. data/test/root/unload/unload_base.rb +0 -9
  167. data/test/root/versions/another.yml +0 -0
  168. data/test/root/versions/file-0.1.2.yml +0 -0
  169. data/test/root/versions/file-0.1.yml +0 -0
  170. data/test/root/versions/file.yml +0 -0
  171. data/test/root_test.rb +0 -718
  172. data/test/support/aggregator_test.rb +0 -99
  173. data/test/support/audit_test.rb +0 -445
  174. data/test/support/batchable_test.rb +0 -74
  175. data/test/support/class_configuration_test.rb +0 -331
  176. data/test/support/command_line_test.rb +0 -58
  177. data/test/support/configurable/config/configured.yml +0 -2
  178. data/test/support/configurable_test.rb +0 -295
  179. data/test/support/executable_queue_test.rb +0 -103
  180. data/test/support/executable_test.rb +0 -38
  181. data/test/support/logger_test.rb +0 -31
  182. data/test/support/rake_test.rb +0 -37
  183. data/test/support/shell_utils_test.rb +0 -24
  184. data/test/support/tdoc_test.rb +0 -370
  185. data/test/support/validation_test.rb +0 -54
  186. data/test/support/versions_test.rb +0 -103
  187. data/test/tap_test_helper.rb +0 -57
  188. data/test/tap_test_suite.rb +0 -7
  189. data/test/task/config/batch.yml +0 -2
  190. data/test/task/config/batched.yml +0 -2
  191. data/test/task/config/configured.yml +0 -1
  192. data/test/task/config/example.yml +0 -1
  193. data/test/task_base_test.rb +0 -24
  194. data/test/task_syntax_test.rb +0 -300
  195. data/test/task_test.rb +0 -320
  196. data/test/test/env_vars_test.rb +0 -48
  197. data/test/test/file_methods/test_assert_files/expected/one.txt +0 -1
  198. data/test/test/file_methods/test_assert_files/expected/two.txt +0 -1
  199. data/test/test/file_methods/test_assert_files/input/one.txt +0 -1
  200. data/test/test/file_methods/test_assert_files/input/two.txt +0 -1
  201. data/test/test/file_methods/test_assert_files_can_have_no_expected_files_if_specified/input/one.txt +0 -1
  202. data/test/test/file_methods/test_assert_files_can_have_no_expected_files_if_specified/input/two.txt +0 -1
  203. data/test/test/file_methods/test_assert_files_fails_for_different_content/expected/one.txt +0 -1
  204. data/test/test/file_methods/test_assert_files_fails_for_different_content/expected/two.txt +0 -1
  205. data/test/test/file_methods/test_assert_files_fails_for_different_content/input/one.txt +0 -1
  206. data/test/test/file_methods/test_assert_files_fails_for_different_content/input/two.txt +0 -1
  207. data/test/test/file_methods/test_assert_files_fails_for_missing_expected_file/expected/one.txt +0 -1
  208. data/test/test/file_methods/test_assert_files_fails_for_missing_expected_file/input/one.txt +0 -1
  209. data/test/test/file_methods/test_assert_files_fails_for_missing_expected_file/input/two.txt +0 -1
  210. data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/expected/one.txt +0 -1
  211. data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/expected/two.txt +0 -1
  212. data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/input/one.txt +0 -1
  213. data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/input/two.txt +0 -1
  214. data/test/test/file_methods/test_assert_files_fails_for_no_expected_files/input/one.txt +0 -1
  215. data/test/test/file_methods/test_assert_files_fails_for_no_expected_files/input/two.txt +0 -1
  216. data/test/test/file_methods/test_method_glob/expected/file.yml +0 -0
  217. data/test/test/file_methods/test_method_glob/expected/file_1.txt +0 -0
  218. data/test/test/file_methods/test_method_glob/expected/file_2.txt +0 -0
  219. data/test/test/file_methods_doc/test_sub/expected/one.txt +0 -1
  220. data/test/test/file_methods_doc/test_sub/expected/two.txt +0 -1
  221. data/test/test/file_methods_doc/test_sub/input/one.txt +0 -1
  222. data/test/test/file_methods_doc/test_sub/input/two.txt +0 -1
  223. data/test/test/file_methods_doc_test.rb +0 -29
  224. data/test/test/file_methods_test.rb +0 -275
  225. data/test/test/subset_methods_test.rb +0 -171
  226. data/test/test/tap_methods/test_assert_files/expected/task/name/a.txt +0 -1
  227. data/test/test/tap_methods/test_assert_files/expected/task/name/b.txt +0 -1
  228. data/test/test/tap_methods/test_assert_files/input/a.txt +0 -1
  229. data/test/test/tap_methods/test_assert_files/input/b.txt +0 -1
  230. data/test/test/tap_methods_test.rb +0 -399
  231. data/test/workflow_test.rb +0 -120
  232. data/vendor/rails_generator.rb +0 -56
  233. data/vendor/rails_generator/base.rb +0 -263
  234. data/vendor/rails_generator/commands.rb +0 -581
  235. data/vendor/rails_generator/generated_attribute.rb +0 -42
  236. data/vendor/rails_generator/lookup.rb +0 -209
  237. data/vendor/rails_generator/manifest.rb +0 -53
  238. data/vendor/rails_generator/options.rb +0 -143
  239. data/vendor/rails_generator/scripts.rb +0 -83
  240. data/vendor/rails_generator/scripts/destroy.rb +0 -7
  241. data/vendor/rails_generator/scripts/generate.rb +0 -7
  242. data/vendor/rails_generator/scripts/update.rb +0 -12
  243. data/vendor/rails_generator/simple_logger.rb +0 -46
  244. data/vendor/rails_generator/spec.rb +0 -44
@@ -1,99 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '../tap_test_helper')
2
- require 'tap/support/aggregator'
3
- require 'tap/support/audit'
4
-
5
- class AggregatorTest < Test::Unit::TestCase
6
- include Tap::Support
7
-
8
- attr_accessor :aggregator
9
-
10
- def setup
11
- @aggregator = Aggregator.new
12
- end
13
-
14
- #
15
- # store test
16
- #
17
-
18
- def test_store_appends_audit_to_array_keyed_by_current_source
19
- a = Audit.new
20
- a._record(:a, 1)
21
- assert_equal :a, a._current_source
22
-
23
- aggregator.store(a)
24
- assert_equal({:a => [a]}, aggregator.to_hash)
25
-
26
- aggregator.store(a)
27
- assert_equal({:a => [a, a]}, aggregator.to_hash)
28
-
29
- a._record(:b, 2)
30
- assert_equal :b, a._current_source
31
-
32
- aggregator.store(a)
33
- assert_equal({:a => [a, a], :b => [a]}, aggregator.to_hash)
34
- end
35
-
36
- #
37
- # clear test
38
- #
39
-
40
- def test_clear
41
- a = Audit.new
42
- a._record(:a, 1)
43
-
44
- aggregator.store(a)
45
- aggregator.store(a)
46
- assert_equal({:a => [a, a]}, aggregator.to_hash)
47
-
48
- aggregator.clear
49
- assert_equal({}, aggregator.to_hash)
50
- end
51
-
52
- #
53
- # retrieve test
54
- #
55
-
56
- def test_retrieve_returns_array_for_source
57
- a = Audit.new
58
- a._record(:a, 1)
59
-
60
- aggregator.store(a)
61
- aggregator.store(a)
62
- assert_equal({:a => [a, a]}, aggregator.to_hash)
63
-
64
- assert_equal [a,a], aggregator.retrieve(:a)
65
- end
66
-
67
- def test_retrieve_returns_nil_for_unknown_source
68
- assert_nil aggregator.retrieve(:unknown)
69
- end
70
-
71
- #
72
- # retrieve_all test
73
- #
74
-
75
- def test_retrieve_all_returns_concatenated_arrays_for_sources
76
- a = Audit.new
77
- a._record(:a, 1)
78
-
79
- aggregator.store(a)
80
- aggregator.store(a)
81
-
82
- b = Audit.new
83
- b._record(:b, 1)
84
- aggregator.store(b)
85
-
86
- assert_equal({:a => [a, a], :b => [b]}, aggregator.to_hash)
87
-
88
- assert_equal [a,a], aggregator.retrieve_all(:a)
89
- assert_equal [b], aggregator.retrieve_all(:b)
90
- assert_equal [a,a,b], aggregator.retrieve_all(:a, :b)
91
- assert_equal [b,a,a], aggregator.retrieve_all(:b, :a)
92
-
93
- assert_equal [a,a,b], aggregator.retrieve_all(:a, :unknown, :b)
94
- end
95
-
96
- def test_retrieve_all_returns_empty_array_for_all_unknown_sources
97
- assert_equal [], aggregator.retrieve_all(:a, :unknown, :b)
98
- end
99
- end
@@ -1,445 +0,0 @@
1
- require File.dirname(__FILE__) + '/../tap_test_helper'
2
- require 'tap/support/audit'
3
-
4
- class AuditTest < Test::Unit::TestCase
5
- include Tap::Support
6
-
7
- attr_reader :audit, :a, :b
8
-
9
- def setup
10
- @audit = Audit.new('original')
11
- @a = setup_audit(:a, :b, :c)
12
- @b = setup_audit(:x, :y, :z)
13
- end
14
-
15
- #
16
- # methods to setup audits for testing, and tests of the setup
17
- #
18
-
19
- def setup_audit(*sources)
20
- audit = Audit.new
21
- sources.each do |source|
22
- value = case source
23
- when Array
24
- source.collect {|s| s.to_s }
25
- else
26
- source.to_s
27
- end
28
-
29
- audit._record(source, value)
30
- end
31
- audit
32
- end
33
-
34
- def test_setup
35
- assert_equal [nil], audit._sources
36
- assert_equal ['original'], audit._values
37
- assert_equal 'original', audit._original
38
- assert_equal 'original', audit._current
39
-
40
- assert_equal [:a, :b, :c], a._sources
41
- assert_equal ['a', 'b', 'c'], a._values
42
- assert_equal 'c', a._current
43
- assert_equal 'a', a._original
44
-
45
- assert_equal [:x, :y, :z], b._sources
46
- assert_equal ['x', 'y', 'z'], b._values
47
- assert_equal 'z', b._current
48
- assert_equal 'x', b._original
49
-
50
- c = setup_audit([a, b, :c])
51
- assert_equal [[a, b, :c]], c._sources
52
- assert_equal [[a.to_s, b.to_s, 'c']], c._values
53
- end
54
-
55
- #
56
- # documentation tests
57
- #
58
-
59
- def test_documentation
60
- # initialize a new audit
61
- a = Audit.new(1, nil)
62
-
63
- # record some values
64
- a._record(:A, 2)
65
- a._record(:B, 3)
66
-
67
- assert_equal [nil, :A, :B], a._source_trail
68
- assert_equal [1, 2, 3], a._value_trail
69
- assert_equal 1, a._original
70
- assert_equal nil, a._original_source
71
- assert_equal 3, a._current
72
- assert_equal :B, a._current_source
73
-
74
- b = Audit.new(10, nil)
75
- b._record(:C, 11)
76
- b._record(:D, 12)
77
-
78
- c = Audit.merge(a, b)
79
- assert_equal [ [[nil, :A, :B], [nil, :C, :D]] ], c._source_trail
80
- assert_equal [ [[1,2,3], [10, 11, 12]] ], c._value_trail
81
- assert_equal [3, 12], c._current
82
-
83
- c._record(:E, "a string value")
84
- c._record(:F, {'a' => 'hash value'})
85
- c._record(:G, ['an', 'array', 'value'])
86
-
87
- assert_equal [ [[nil, :A, :B], [nil, :C, :D]], :E, :F, :G], c._source_trail
88
- assert_equal [ [[1,2,3], [10, 11, 12]], "a string value", {'a' => 'hash value'}, ['an', 'array', 'value']], c._value_trail
89
-
90
- a1 = a._fork
91
- a._record(:X, -1)
92
- a1._record(:Y, -2)
93
-
94
- assert_equal [nil, :A, :B, :X], a._source_trail
95
- assert_equal [nil, :A, :B, :Y], a1._source_trail
96
- assert_equal [ [[nil, :A, :B], [nil, :C, :D]], :E, :F, :G], c._source_trail
97
-
98
- expected = %Q{o-[] 1
99
- o-[A] 2
100
- o-[B] 3
101
- |
102
- | o-[] 10
103
- | o-[C] 11
104
- | o-[D] 12
105
- | |
106
- `-`-o-[E] "a string value"
107
- o-[F] {"a"=>"hash value"}
108
- o-[G] ["an", "array", "value"]
109
- }
110
-
111
- assert_equal expected, c._to_s
112
- end
113
-
114
- #
115
- # Audit merge tests
116
- #
117
-
118
- def test_merge_documentation
119
- a = Audit.new
120
- a._record(:a, 'a')
121
-
122
- b = Audit.new
123
- b._record(:b, 'b')
124
-
125
- c = Audit.merge(a, b, 1)
126
- c._record(:c, 'c')
127
-
128
- assert_equal [['a','b', 1], 'c'], c._values
129
- assert_equal [AuditMerge[a, b, Audit.new(1)], :c], c._sources
130
- end
131
-
132
- def test_merge
133
- c = Audit.merge(a, b, 'p')
134
- c._record(:q, 'q')
135
- c._record(:r, 'r')
136
-
137
- assert_equal [AuditMerge[a, b, Audit.new('p')], :q, :r], c._sources
138
- assert_equal [['c', 'z', 'p'], 'q', 'r'], c._values
139
-
140
- assert_equal [[[:a, :b, :c], [:x, :y, :z], [nil]], :q, :r], c._source_trail
141
- assert_equal [[['a', 'b', 'c'], ['x', 'y', 'z'], ['p']], 'q', 'r'], c._value_trail
142
- end
143
-
144
- def test_merge_with_one_input_returns_fork
145
- c = Audit.merge(a)
146
- assert_equal c, a
147
- end
148
-
149
- def test_merge_with_no_inputs_returns_new_audit
150
- a = Audit.merge
151
- assert_equal Audit.new, a
152
- end
153
-
154
- #
155
- # record tests
156
- #
157
-
158
- def test_record
159
- audit._record(:a, 'next')
160
- audit._record(:b, 'final')
161
-
162
- assert_equal [nil, :a, :b], audit._sources
163
- assert_equal ['original', 'next', 'final'], audit._values
164
- end
165
-
166
- def test_record_with_arrays_and_audits
167
- audit._record(:a, a)
168
- audit._record(:array, [a, b, 'str'])
169
-
170
- assert_equal [nil, :a, :array], audit._sources
171
- assert_equal ['original', a, [a, b, 'str']], audit._values
172
- end
173
-
174
- def test_record_returns_self
175
- assert audit, audit._record(:a, 'next')
176
- end
177
-
178
- #
179
- # original tests
180
- #
181
-
182
- def test_original_is_first_recorded_value
183
- a = Audit.new('a', :a)
184
- assert_equal 'a', a._original
185
-
186
- audit._record(:b, 'next')
187
- assert_equal 'a', a._original
188
- end
189
-
190
- def test_original_source_is_original_recorded_source
191
- a = Audit.new('a', :a)
192
- assert_equal :a, a._original_source
193
-
194
- audit._record(:b, 'next')
195
- assert_equal :a, a._original_source
196
- end
197
-
198
- #
199
- # current tests
200
- #
201
-
202
- def test_current_is_last_recorded_value
203
- audit._record(:a, 'next')
204
- assert_equal 'next', audit._current
205
-
206
- audit._record(:a, 'final')
207
- assert_equal 'final', audit._current
208
- end
209
-
210
- def test_current_source_is_last_recorded_source
211
- audit._record(:a, 'next')
212
- assert_equal :a, audit._current_source
213
-
214
- audit._record(:b, 'final')
215
- assert_equal :b, audit._current_source
216
- end
217
-
218
- #
219
- # source trail tests
220
- #
221
-
222
- def test_source_trail_helper_method_is_hidden
223
- assert !a.respond_to?(:source_trail)
224
- assert_raise(NoMethodError) { a.source_trail }
225
- end
226
-
227
- def test_source_trail_returns_all_sources
228
- a = setup_audit(:a, :b, :c)
229
-
230
- assert_equal [:a, :b, :c], a._source_trail
231
- end
232
-
233
- def test_source_trail_returns_source_trail_when_source_is_an_audit
234
- c = setup_audit(:p, a, :q)
235
-
236
- assert_equal [:p, a, :q], c._sources
237
- assert_equal [:p, [:a, :b, :c], :q], c._source_trail
238
- end
239
-
240
- def test_source_trail_resolves_each_member_in_an_audit_merge_source
241
- c = setup_audit(:p, AuditMerge[a, b, :q], [:r, :s], :t)
242
-
243
- assert_equal [:p, [[:a, :b, :c], [:x, :y, :z], :q],[:r, :s], :t], c._source_trail
244
- end
245
-
246
- #
247
- # value trail tests
248
- #
249
-
250
- def test_value_trail_helper_method_is_hidden
251
- assert !a.respond_to?(:value_trail)
252
- assert_raise(NoMethodError) { a.value_trail }
253
- end
254
-
255
- def test_value_trail_returns_all_values
256
- a = setup_audit(:a, :b, :c)
257
-
258
- assert_equal ['a', 'b', 'c'], a._value_trail
259
- end
260
-
261
- def test_value_trail_returns_value_trail_when_source_is_an_audit
262
- c = setup_audit(:p, a, :q)
263
-
264
- assert_equal [:p, a, :q], c._sources
265
- assert_equal ['p', ['a', 'b', 'c'], 'q'], c._value_trail
266
- end
267
-
268
- def test_value_trail_resolves_each_member_in_an_audit_merge_source
269
- c = setup_audit(:p, AuditMerge[a, b, :q], [:r, :s], :t)
270
-
271
- assert_equal ['p', [['a', 'b', 'c'], ['x', 'y', 'z'], 'q'],['r', 's'], 't'], c._value_trail
272
- end
273
-
274
- #
275
- # test fork
276
- #
277
-
278
- def test_fork_returns_audit_with_duplicates_of_sources_and_values
279
- a = setup_audit(:a, :b, :c)
280
- b = a._fork
281
-
282
- assert_equal b._sources, a._sources
283
- assert_not_equal b._sources.object_id, a._sources.object_id
284
- assert_equal b._values, a._values
285
- assert_not_equal b._values.object_id, a._values.object_id
286
- end
287
-
288
- def test_forks_can_be_developed_independently
289
- a = setup_audit(:a, :b)
290
- b = a._fork
291
-
292
- a._record(:c, 'c')
293
- b._record(:d, 'd')
294
-
295
- assert_equal([:a, :b, :c], a._sources)
296
- assert_equal([:a, :b, :d], b._sources)
297
- end
298
-
299
- #
300
- # split tests
301
- #
302
-
303
- def test_split_forks_and_records_result_yielding_to_current
304
- block = lambda { |current| current += 'ar' }
305
- c = a._split(&block)
306
-
307
- assert_equal [:a, :b, :c, AuditSplit.new(block)], c._sources
308
- assert_equal ['a', 'b', 'c', 'car'], c._values
309
- end
310
-
311
- def test_split_raises_error_if_no_block_given
312
- assert_raise(LocalJumpError) { a._split }
313
- end
314
-
315
- #
316
- # expand tests
317
- #
318
-
319
- def test_expand_forks_for_and_records_each_in_current
320
- a = Audit.new([1,2,3])
321
- e = a._expand
322
-
323
- assert_equal 3, e.length
324
-
325
- assert_equal [nil, AuditExpand.new(0)], e[0]._sources
326
- assert_equal [[1,2,3], 1], e[0]._values
327
-
328
- assert_equal [nil, AuditExpand.new(1)], e[1]._sources
329
- assert_equal [[1,2,3], 2], e[1]._values
330
-
331
- assert_equal [nil, AuditExpand.new(2)], e[2]._sources
332
- assert_equal [[1,2,3], 3], e[2]._values
333
- end
334
-
335
- def test_expand_raises_error_if_current_does_not_respond_to_each
336
- a = Audit.new(nil)
337
- assert_raise(NoMethodError) { a._expand }
338
- end
339
-
340
- #
341
- # _to_s test
342
- #
343
-
344
- def new_audit(letter, n=0)
345
- a = Tap::Support::Audit.new
346
- 1.upto(n) {|i| a._record(letter, "#{letter}#{i}")}
347
- a
348
- end
349
-
350
- def test_to_s_for_sequence
351
- a = Audit.new
352
- assert_equal %Q{\n}, a._to_s
353
-
354
- a = new_audit(:a, 3)
355
- assert_equal %Q{
356
- o-[a] "a1"
357
- o-[a] "a2"
358
- o-[a] "a3"
359
- }[1..-1], a._to_s
360
- end
361
-
362
- def test_to_s_for_fork_is_same_as_forked
363
- a = new_audit(:a)
364
- assert_equal a._to_s, a._fork._to_s
365
-
366
- a = new_audit(:a, 3)._fork
367
- assert_equal a._to_s, a._fork._to_s
368
- end
369
-
370
- def test_to_s_for_merge_without_additional_records
371
- a = new_audit(:a, 3)
372
- b = new_audit(:b, 3)
373
- c = Tap::Support::Audit.merge(a,b)
374
-
375
- assert_equal %Q{
376
- o-[a] "a1"
377
- o-[a] "a2"
378
- o-[a] "a3"
379
- |
380
- | o-[b] "b1"
381
- | o-[b] "b2"
382
- | o-[b] "b3"
383
- }[1..-1], c._to_s
384
- end
385
-
386
- def test_to_s_for_merge_with_additional_records
387
- a = new_audit(:a, 3)
388
- b = new_audit(:b, 3)
389
- c = Tap::Support::Audit.merge(a,b)
390
- 1.upto(3) {|i| c._record(:c, "c#{i}")}
391
-
392
- assert_equal %Q{
393
- o-[a] "a1"
394
- o-[a] "a2"
395
- o-[a] "a3"
396
- |
397
- | o-[b] "b1"
398
- | o-[b] "b2"
399
- | o-[b] "b3"
400
- | |
401
- `-`-o-[c] "c1"
402
- o-[c] "c2"
403
- o-[c] "c3"
404
- }[1..-1], c._to_s
405
- end
406
-
407
- def test_to_s_for_merge_with_multiple_input_audits
408
- a = new_audit(:a, 1)
409
- b = new_audit(:b, 1)
410
- c = Tap::Support::Audit.merge(a,b)
411
- 1.upto(1) {|i| c._record(:c, "c#{i}")}
412
-
413
- d = new_audit(:d, 1)
414
- e = new_audit(:e, 1)
415
- f = Tap::Support::Audit.merge(d, e, 'x1', 'y1', 'z1')
416
- 1.upto(1) {|i| f._record(:f, "f#{i}")}
417
-
418
- g = Tap::Support::Audit.merge(c, f)
419
- 1.upto(1) {|i| g._record(:g, "g#{i}")}
420
-
421
- assert_equal %Q{
422
- o-[a] "a1"
423
- |
424
- | o-[b] "b1"
425
- | |
426
- `-`-o-[c] "c1"
427
- |
428
- | o-[d] "d1"
429
- | |
430
- | | o-[e] "e1"
431
- | | |
432
- | | | o-[] "x1"
433
- | | | |
434
- | | | | o-[] "y1"
435
- | | | | |
436
- | | | | | o-[] "z1"
437
- | | | | | |
438
- | `-`-`-`-`-o-[f] "f1"
439
- | |
440
- `-----------`-o-[g] "g1"
441
- }[1..-1], g._to_s
442
- end
443
-
444
-
445
- end