tap 0.9.1 → 0.10.0

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