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,2 +0,0 @@
1
- load_paths: a
2
- config_paths: recurse_b.yml
@@ -1,2 +0,0 @@
1
- load_paths: b
2
- config_paths: recurse_a.yml
@@ -1,23 +0,0 @@
1
- ######################################################
2
- # App Configurations:
3
- ######################################################
4
-
5
- directories:
6
- rel: dir
7
-
8
- options:
9
- quiet: true
10
-
11
- ######################################################
12
- # Env Configurations:
13
- ######################################################
14
-
15
- load_paths: [lib, rel]
16
-
17
- command_paths:
18
- - cmd
19
-
20
- config_paths: recurse_a.yml
21
-
22
- before: |
23
- before
@@ -1,3 +0,0 @@
1
- load_paths: [lib, nested/lib]
2
- command_paths: [cmd, nested/cmd]
3
- load_once_paths: [lop.rb, nested/lop.rb]
@@ -1,2 +0,0 @@
1
- config_paths: recurse_b.yml
2
- load_paths: lib
@@ -1,2 +0,0 @@
1
- config_paths: recurse_a.yml
2
- load_paths: nested/lib
@@ -1,3 +0,0 @@
1
- load_paths: [lib, nested/lib]
2
- command_paths: [cmd, nested/cmd]
3
- load_once_paths: [lop.rb, nested/lop.rb]
data/test/env_test.rb DELETED
@@ -1,198 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'tap_test_helper')
2
- require 'tap/env'
3
-
4
- class ConfigurationTest < Test::Unit::TestCase
5
- include Tap::Env::Configuration
6
-
7
- acts_as_file_test
8
-
9
- #
10
- # read_config test
11
- #
12
-
13
- def test_read_config_templates_then_loads_config
14
- config_file = output_tempfile
15
-
16
- File.open(config_file, "wb") {|f| f << "sum: <%= 1 + 2 %>" }
17
- assert_equal({'sum' => 3}, read_config(config_file))
18
- end
19
-
20
- def test_read_config_returns_empty_hash_for_non_existant_nil_and_false_files
21
- config_file = output_tempfile
22
-
23
- assert !File.exists?(config_file)
24
- assert_equal({}, read_config(config_file))
25
-
26
- FileUtils.touch(config_file)
27
- assert_equal({}, read_config(config_file))
28
-
29
- File.open(config_file, "wb") {|f| f << nil.to_yaml }
30
- assert_equal(nil, YAML.load_file(config_file))
31
- assert_equal({}, read_config(config_file))
32
-
33
- File.open(config_file, "wb") {|f| f << false.to_yaml }
34
- assert_equal(false, YAML.load_file(config_file))
35
- assert_equal({}, read_config(config_file))
36
- end
37
-
38
- def test_read_config_raises_error_for_non_hash_result
39
- config_file = output_tempfile
40
- File.open(config_file, "wb") {|f| f << [].to_yaml }
41
-
42
- assert_raise(RuntimeError) { read_config(config_file) }
43
- end
44
-
45
- #
46
- # partition_configs test
47
- #
48
-
49
- def test_partition_configs
50
- config = {'before' => :b, 'gems' => :g, 'root' => :r, 'another' => :a}
51
-
52
- env, app, other = partition_configs(config, ['gems'], ['root', 'another'])
53
- assert_equal({'gems' => :g}, env)
54
- assert_equal({'root' => :r, 'another' => :a}, app)
55
- assert_equal({'before' => :b}, other)
56
- end
57
-
58
- #
59
- # join_configs test
60
- #
61
-
62
- def test_join_configs
63
- a = {:a => 1, :b => [1]}
64
- b = {:a => [2], :b => [1]}
65
- c = {:c => 1}
66
-
67
- assert_equal({:a => [1, 2], :b => [1], :c => [1]}, join_configs(a,b,c))
68
- assert_equal({:a => [2, 1], :b => [1], :c => [1]}, join_configs(c,b,a))
69
- end
70
- end
71
-
72
- class EnvTest < Test::Unit::TestCase
73
-
74
- acts_as_file_test
75
- attr_accessor :e
76
-
77
- def setup
78
- super
79
- @e = Tap::Env.instance
80
- e.reset
81
- end
82
-
83
- def teardown
84
- super
85
- e.reset
86
- end
87
-
88
- #
89
- # load_env_config test
90
- #
91
-
92
- def test_load_env_config
93
- empty_config = {
94
- "load_paths" => [],
95
- "load_once_paths" => [],
96
- "config_paths" => [],
97
- "command_paths" => [],
98
- "gems" => [],
99
- "generator_paths" => []
100
- }
101
- starting_load_paths = $:.uniq
102
-
103
- assert_equal(empty_config, e.config)
104
- assert Dependencies.load_paths.empty?
105
- assert Dependencies.load_once_paths.empty?
106
-
107
- # test specifying a file
108
- assert File.exists?(method_filepath('tap.yml'))
109
- e.load_config(method_filepath('tap.yml'))
110
-
111
- assert_equal({
112
- "load_paths" => [method_filepath('lib'), method_filepath('nested/lib')],
113
- "load_once_paths" => [method_filepath('lop.rb'), method_filepath('nested/lop.rb')],
114
- "config_paths" => [method_filepath('tap.yml')],
115
- "command_paths" => [method_filepath('cmd'), method_filepath('nested/cmd')],
116
- "gems" => [],
117
- "generator_paths" => [method_filepath('lib/generators')]
118
- }, e.config)
119
-
120
- assert_equal [], e.config['load_paths'] - $:
121
- assert_equal e.config['load_paths'], Dependencies.load_paths
122
- assert_equal e.config['load_once_paths'], Dependencies.load_once_paths
123
-
124
- # test specifying a dir
125
- assert File.exists?(method_filepath('dir', 'tap.yml'))
126
- e.load_config(method_filepath('dir'))
127
-
128
- assert_equal({
129
- "load_paths" => [method_filepath('dir/lib'), method_filepath('dir/nested/lib'), method_filepath('lib'), method_filepath('nested/lib')],
130
- "load_once_paths" => [ method_filepath('dir/lop.rb'), method_filepath('dir/nested/lop.rb'), method_filepath('lop.rb'), method_filepath('nested/lop.rb')],
131
- "config_paths" => [method_filepath('tap.yml'), method_filepath('dir', 'tap.yml')],
132
- "command_paths" => [method_filepath('dir/cmd'), method_filepath('dir/nested/cmd'), method_filepath('cmd'), method_filepath('nested/cmd')],
133
- "gems" => [],
134
- "generator_paths" => [method_filepath('dir/lib/generators'), method_filepath('lib/generators')]
135
- }, e.config)
136
-
137
- assert_equal [], e.config['load_paths'] - $:
138
- assert_equal e.config['load_paths'], Dependencies.load_paths
139
- assert_equal e.config['load_once_paths'], Dependencies.load_once_paths
140
-
141
- # add extra Dependencies load paths to be sure ONLY the ENV load paths are cleared
142
- Dependencies.load_paths << 'extra'
143
- Dependencies.load_once_paths << 'extra'
144
-
145
- # test reset
146
- e.reset
147
- assert_equal(empty_config, e.config)
148
- assert_equal ['extra'], Dependencies.load_paths
149
- assert_equal ['extra'], Dependencies.load_once_paths
150
- assert_equal starting_load_paths, $:
151
-
152
- # test recursion/config_path loading
153
- pwd = Dir.pwd
154
- begin
155
- Dir.chdir(method_root)
156
- e.load_config('recurse_a.yml')
157
- ensure
158
- Dir.chdir(pwd)
159
- end
160
-
161
- assert_equal [method_filepath('lib'), method_filepath('nested/lib')], e.config['load_paths']
162
- assert_equal [method_filepath('recurse_a.yml'), method_filepath('recurse_b.yml')], e.config['config_paths']
163
- end
164
-
165
- #
166
- # configure test
167
- #
168
-
169
- # def test_configure
170
- # assert e.load_paths.empty?
171
- # assert e.command_paths.empty?
172
- # assert e.load_once_paths.empty?
173
- # assert e.config_paths.empty?
174
- # assert_nil e.before
175
- # assert_nil e.after
176
- # assert_equal Tap::App.instance, e.app
177
- #
178
- # pwd = Dir.pwd
179
- # begin
180
- # Dir.chdir(method_root)
181
- # e.configure
182
- # ensure
183
- # Dir.chdir(pwd)
184
- # end
185
- #
186
- # app = e.app
187
- #
188
- # assert_equal [method_filepath('lib'), method_filepath('dir'), method_filepath('a'), method_filepath('b')], e.load_paths
189
- # assert_equal [method_filepath('cmd')], e.command_paths
190
- # assert_equal [], e.load_once_paths
191
- # assert_equal [method_filepath('tap.yml'), method_filepath('recurse_a.yml'), method_filepath('recurse_b.yml')], e.config_paths
192
- # assert_equal "before\n", e.before
193
- # assert_equal nil, e.after
194
- #
195
- # assert_equal({'rel' => 'dir'}, app.directories)
196
- # assert app.options.quiet
197
- # end
198
- end
@@ -1,2 +0,0 @@
1
- - one: one
2
- - two: two
@@ -1 +0,0 @@
1
- config: value
File without changes
File without changes
@@ -1,1291 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'tap_test_helper')
2
- require 'tap/file_task'
3
-
4
- class FileTaskTest < Test::Unit::TestCase
5
- acts_as_tap_test
6
-
7
- attr_reader :t
8
-
9
- def setup
10
- super
11
- @t = Tap::FileTask.new
12
- app.root = trs.root
13
- end
14
-
15
- def touch_file(path, content=nil)
16
- FileUtils.mkdir_p(File.dirname(path))
17
- if content
18
- File.open(path, "w") {|f| f << content}
19
- else
20
- FileUtils.touch(path)
21
- end
22
- end
23
-
24
- def test_touch_file
25
- non_existant_file = method_filepath(:output, "non_existant_file.txt")
26
- assert !File.exists?(non_existant_file)
27
- touch_file(non_existant_file)
28
- assert File.exists?(non_existant_file)
29
- assert File.file?(non_existant_file)
30
- assert_equal "", File.read(non_existant_file)
31
-
32
- non_existant_file = method_filepath(:output, "non_existant_file2.txt")
33
- assert !File.exists?(non_existant_file)
34
- touch_file(non_existant_file, "content")
35
- assert File.exists?(non_existant_file)
36
- assert File.file?(non_existant_file)
37
- assert_equal "content", File.read(non_existant_file)
38
- end
39
-
40
- #
41
- # doc tests
42
- #
43
-
44
- def test_documentation
45
- file_one = method_filepath(:output, "file.txt")
46
- file_two = method_filepath(:output, "path/to/file.txt")
47
- dir = method_filepath(:output, "some/dir")
48
- FileUtils.mkdir_p( method_filepath(:output) )
49
-
50
- File.open(file_one, "w") {|f| f << "original content"}
51
- t = Tap::FileTask.new do |task|
52
- task.mkdir(dir)
53
- task.prepare([file_one, file_two])
54
-
55
- File.open(file_one, "w") {|f| f << "new content"}
56
- FileUtils.touch(file_two)
57
-
58
- raise "error!"
59
- end
60
-
61
- begin
62
- assert !File.exists?(dir)
63
- assert !File.exists?(file_two)
64
- t.execute
65
- flunk "no error raised"
66
- rescue
67
- assert_equal "error!", $!.message
68
- assert !File.exists?(dir)
69
- assert !File.exists?(file_two)
70
- assert_equal "original content", File.read(file_one)
71
- end
72
- end
73
-
74
- #
75
- # dirname tests
76
- #
77
-
78
- def test_dirname_returns_default_dirname_by_default
79
- assert_equal "tap/file_task", t.dirname
80
-
81
- t = Tap::FileTask.new "batch"
82
- assert_equal 2, t.batch.size
83
- t1, t2 = t.batch
84
- assert_equal "batch_0", t1.dirname
85
- assert_equal "batch_1", t2.dirname
86
- end
87
-
88
- def test_dirname_returns_dirname_if_set
89
- t.dirname = "name"
90
- assert_equal "name", t.dirname
91
- end
92
-
93
- #
94
- # open tests
95
- #
96
-
97
- def test_open_doc
98
- FileUtils.mkdir_p(method_filepath(:output))
99
- one_filepath = method_filepath(:output, "one.txt")
100
- two_filepath = method_filepath(:output, "two.txt")
101
-
102
- t.open([one_filepath, two_filepath], "w") do |one, two|
103
- one << "one"
104
- two << "two"
105
- end
106
-
107
- assert_equal "one", File.read(one_filepath)
108
- assert_equal "two", File.read(two_filepath)
109
-
110
- #
111
- filepath = method_filepath(:output, "file.txt")
112
- t.open(filepath, "w") do |array|
113
- array.first << "content"
114
- end
115
-
116
- assert_equal "content", File.read(filepath)
117
- end
118
-
119
- def test_open_opens_each_file
120
- FileUtils.mkdir_p(method_filepath(:output))
121
-
122
- list = [0, 1].collect do |n|
123
- path = method_filepath(:output, "#{n}.txt")
124
- File.open(path, "w") {|f| f << n.to_s}
125
- path
126
- end
127
-
128
- t.open(list) do |files|
129
- files.each_with_index do |file, n|
130
- assert_equal File, file.class
131
- assert_equal n.to_s, file.read
132
- end
133
- end
134
- end
135
-
136
- def test_open_opens_with_input_mode
137
- FileUtils.mkdir_p(method_filepath(:output))
138
-
139
- list = [0, 1].collect do |n|
140
- path = method_filepath(:output, "#{n}.txt")
141
- path
142
- end
143
-
144
- t.open(list, "w") do |files|
145
- files.each_with_index do |file, n|
146
- assert_equal File, file.class
147
- file << n.to_s
148
- end
149
- end
150
-
151
- list.each_with_index do |file, n|
152
- assert_equal n.to_s, File.read(file)
153
- end
154
- end
155
-
156
- def test_open_returns_open_files_if_no_block_is_given
157
- FileUtils.mkdir_p(method_filepath(:output))
158
-
159
- list = [0, 1].collect do |n|
160
- path = method_filepath(:output, "#{n}.txt")
161
- File.open(path, "w") {|f| f << n.to_s}
162
- path
163
- end
164
-
165
- t.open(list).each_with_index do |file, n|
166
- assert_equal File, file.class
167
- assert_equal n.to_s, file.read
168
- file.close
169
- end
170
- end
171
-
172
- #
173
- # basename test
174
- #
175
-
176
- def test_basename_doc
177
- assert_equal 'file.txt', t.basename('path/to/file.txt')
178
- assert_equal 'file.html', t.basename('path/to/file.txt', '.html')
179
- end
180
-
181
- #
182
- # inference tests
183
- #
184
-
185
- def test_inference_sets_inference_block
186
- block = lambda {}
187
- t.inference(&block)
188
- assert_equal block, t.inference_block
189
- end
190
-
191
- def test_inference_can_only_be_set_once
192
- t.inference {}
193
- assert_raise(RuntimeError) { t.inference {} }
194
- assert_raise(RuntimeError) { t.inference }
195
- end
196
-
197
- #
198
- # filepath tests
199
- #
200
-
201
- def test_filepath_passes_app_dir_dirname_and_path_to_block
202
- t.inference do |root, dir, path|
203
- [root, dir, path]
204
- end
205
-
206
- assert_equal "tap/file_task", t.dirname
207
- assert_equal [app[:dir], "tap/file_task", "path"], t.filepath(:dir, "path")
208
- end
209
-
210
- def test_filepath_with_multiple_paths
211
- t.inference do |root, dir, *paths|
212
- [root, dir, paths]
213
- end
214
- assert_equal [app[:dir], "tap/file_task", ["path", "to", "file"]], t.filepath(:dir, "path", "to", "file")
215
- end
216
-
217
- def test_filepath_with_multiple_paths_but_single_path_given
218
- t.inference do |root, dir, *paths|
219
- [root, dir, paths]
220
- end
221
- assert_equal [app[:dir], "tap/file_task", ["path"]], t.filepath(:dir, "path")
222
-
223
- t.inference(true) do |root, dir, path_a, path_b|
224
- [root, dir, path_a, path_b]
225
- end
226
- assert_equal [app[:dir], "tap/file_task", "path", nil], t.filepath(:dir, "path")
227
- end
228
-
229
- def test_filepath_with_single_path_but_multiple_paths_given
230
- t.inference do |root, dir, path|
231
- [root, dir, path]
232
- end
233
- assert_equal [app[:dir], "tap/file_task", "path"], t.filepath(:dir, "path", "to", "file")
234
- end
235
-
236
- def test_filepath_constructs_path_using_app_filepath_when_inference_block_is_not_set
237
- assert_nil t.inference_block
238
- assert_equal(
239
- app.filepath(:dir, "tap/file_task", "path", "to", "file"),
240
- t.filepath(:dir, "path", "to", "file"))
241
- end
242
-
243
- #
244
- # backup_filepath test
245
- #
246
-
247
- def test_backup_filepath_documentation
248
- t = Tap::FileTask.new("dir/name", :backup_dir => :backup, :backup_timestamp => "%Y%m%d")
249
- t.app[:backup] # => "/backup"
250
- Date.today.to_s # => "2007-08-08"
251
-
252
- t.backup_filepath("path/to/folder/file.txt") # => "/backup/file_20070808.txt"
253
- t.backup_filepath("dir/name/folder/file.txt") # => "/backup/folder/file_20070808.txt"
254
- end
255
-
256
- def prepare_backup_filepath_with_output_and_timestamp
257
- timestamp_format = "%Y%m%d"
258
- timestamp = Time.now.strftime(timestamp_format)
259
-
260
- t.backup_dir = :output
261
- t.backup_timestamp = timestamp_format
262
-
263
- timestamp
264
- end
265
-
266
- def test_backup_filepath_infers_filepath_using_backup_dir_and_timestamp
267
- timestamp = prepare_backup_filepath_with_output_and_timestamp
268
-
269
- assert_equal(
270
- app.filepath(:output, t.name, "file_#{timestamp}.txt"),
271
- t.backup_filepath("file.txt"))
272
- end
273
-
274
- def test_backup_dir_can_be_full_path
275
- timestamp = prepare_backup_filepath_with_output_and_timestamp
276
-
277
- t.backup_dir = File.expand_path('path/to/backup', Dir.pwd)
278
-
279
- expected_path = File.join('path/to/backup', t.name,"file_#{timestamp}.txt")
280
- assert_equal(File.expand_path(expected_path, Dir.pwd), t.backup_filepath("file.txt"))
281
- end
282
-
283
- def test_backup_filepath_uses_inference_block
284
- timestamp = prepare_backup_filepath_with_output_and_timestamp
285
-
286
- t.inference do |root, dir, path|
287
- [root, dir, path]
288
- end
289
-
290
- assert_equal(
291
- [app[:output], "tap/file_task", "file_#{timestamp}.txt"],
292
- t.backup_filepath("file.txt"))
293
- end
294
-
295
- def test_backup_filepath_uses_path_relative_to_dirname_if_input_is_relative_to_dirname
296
- timestamp = prepare_backup_filepath_with_output_and_timestamp
297
-
298
- t.inference do |root, dir, path|
299
- [root, dir, path]
300
- end
301
-
302
- assert_equal("tap/file_task", t.dirname)
303
- assert_equal(
304
- [app[:output], t.name, "path/to/file_#{timestamp}.txt"],
305
- t.backup_filepath("folder/tap/file_task/path/to/file.txt"))
306
- end
307
-
308
- def test_backup_filepath_uses_the_input_basename_if_input_is_not_relative_to_dirname
309
- timestamp = prepare_backup_filepath_with_output_and_timestamp
310
-
311
- t.inference do |root, dir, path|
312
- [root, dir, path]
313
- end
314
-
315
- assert_equal(
316
- [app[:output], t.name, "file_#{timestamp}.txt"],
317
- t.backup_filepath("path/to/file.txt"))
318
- end
319
-
320
- # the SciTE text editor whines and fails for 'words' this long... hence the last part of the test name is commented out
321
- def test_backup_filepath_does_not_mistake_files_as_folders#_when_checking_if_input_is_relative_to_dirname
322
- timestamp = prepare_backup_filepath_with_output_and_timestamp
323
-
324
- t.inference do |root, dir, path|
325
- [root, dir, path]
326
- end
327
-
328
- assert_equal(
329
- [app[:output], t.name, "file_task_#{timestamp}.txt"],
330
- t.backup_filepath("folder/tap/file_task.txt"))
331
- end
332
-
333
- #
334
- # uptodate tests
335
- #
336
-
337
- def uptodate_test_setup(output_str='')
338
- of1 = trs.filepath(:root, 'old_file_one.txt')
339
- of2 = trs.filepath(:root, 'old_file_two.txt')
340
-
341
- nf1 = output_tempfile('new_file_one.txt')
342
- File.open(nf1, "w") {|file| file << output_str}
343
-
344
- nf2 = output_tempfile('new_file_two.txt')
345
- File.open(nf2, "w") {|file| file << output_str}
346
-
347
- [of1, of2, nf1, nf2]
348
- end
349
-
350
- def test_uptodate_test_setup
351
- files = uptodate_test_setup
352
- files.each { |file| assert File.exists?(file), file }
353
-
354
- of1, of2, nf1, nf2 = files
355
- assert FileUtils.uptodate?(nf1, [of1])
356
- assert FileUtils.uptodate?(nf2, [of1])
357
- assert FileUtils.uptodate?(nf1, [of2])
358
- assert FileUtils.uptodate?(nf2, [of2])
359
- end
360
-
361
- def test_uptodate
362
- of1, of2, nf1, nf2 = uptodate_test_setup
363
-
364
- non = trs.filepath(:output, "non_existant_file.txt")
365
- assert !File.exists?(non)
366
-
367
- assert t.uptodate?(nf1)
368
- assert t.uptodate?(nf1, of1)
369
- assert t.uptodate?(nf1, [of1, of2])
370
- assert t.uptodate?(nf1, [of1, of2, non])
371
- assert t.uptodate?([nf1, nf2], of1)
372
- assert t.uptodate?([nf1, nf2], [of1, of2])
373
-
374
- assert !t.uptodate?(of1, nf1)
375
- assert !t.uptodate?(of1, [nf1, nf2])
376
- assert !t.uptodate?(non, nf1)
377
- assert !t.uptodate?(non, of1)
378
- assert !t.uptodate?([nf1, non], of1)
379
- assert !t.uptodate?([nf1, non], [of1, of2])
380
- end
381
-
382
- def test_uptodate_with_up_to_date_config_file
383
- t = Tap::FileTask.new "configured"
384
-
385
- of1, of2, nf1, nf2 = uptodate_test_setup
386
-
387
- non = trs.filepath(:output, "non_existant_file.txt")
388
- assert !File.exists?(non)
389
-
390
- assert t.uptodate?(nf1)
391
- assert t.uptodate?(nf1, of1)
392
- assert t.uptodate?(nf1, [of1, of2])
393
- assert t.uptodate?(nf1, [of1, of2, non])
394
- assert t.uptodate?([nf1, nf2], of1)
395
- assert t.uptodate?([nf1, nf2], [of1, of2])
396
-
397
- assert !t.uptodate?(of1, nf1)
398
- assert !t.uptodate?(of1, [nf1, nf2])
399
- assert !t.uptodate?(non, nf1)
400
- assert !t.uptodate?(non, of1)
401
- assert !t.uptodate?([nf1, non], of1)
402
- assert !t.uptodate?([nf1, non], [of1, of2])
403
- end
404
-
405
- def test_uptodate_with_out_of_date_config_file
406
- filepath = trs.filepath(:config, "configured-0.1.yml")
407
- assert !File.exists?(filepath)
408
- begin
409
- of1, of2, nf1, nf2 = uptodate_test_setup
410
- FileUtils.touch(filepath)
411
- t = Tap::FileTask.new "configured-0.1"
412
-
413
- assert !t.uptodate?(nf1)
414
- assert !t.uptodate?(nf1, of1)
415
- assert !t.uptodate?([nf1, nf2], [of1, of2])
416
- rescue
417
- raise $!
418
- ensure
419
- FileUtils.rm(filepath) if File.exists?(filepath)
420
- end
421
- end
422
-
423
- def test_uptodate_returns_false_when_force
424
- of1, of2, nf1, nf2 = uptodate_test_setup
425
-
426
- assert t.uptodate?(nf1, of1)
427
- with_options :force => true, :quiet => true do
428
- assert app.options.force
429
- assert !t.uptodate?(nf1, of1)
430
- end
431
- end
432
-
433
- #
434
- # backup tests
435
- #
436
-
437
- def test_backup_restore_doc
438
- FileUtils.mkdir_p(method_filepath(:output))
439
- FileUtils.mkdir_p(method_filepath(:output))
440
-
441
- file = method_filepath(:output, "file.txt")
442
- File.open(file, "w") {|f| f << "file content"}
443
-
444
- t = Tap::FileTask.new
445
- t.app[:backup, true] = method_filepath(:backup)
446
- backed_up_file = t.backup(file).first
447
-
448
- assert !File.exists?(file)
449
- assert File.exists?(backed_up_file)
450
- assert_equal "file content", File.read(backed_up_file)
451
-
452
- File.open(file, "w") {|f| f << "new content"}
453
- t.restore(file)
454
-
455
- assert File.exists?(file)
456
- assert !File.exists?(backed_up_file)
457
- assert_equal "file content", File.read(file)
458
- end
459
-
460
- def backup_test_setup
461
- existing_file = method_filepath(:output, "file.txt")
462
- backup_file = method_filepath(:output, "backup.txt")
463
-
464
- touch_file(existing_file, "existing content")
465
- # assure backup_filepath will return backup_file
466
- t.inference {|root, dir, path| backup_file}
467
-
468
- [existing_file, backup_file]
469
- end
470
-
471
- def test_backup_test_setup
472
- existing_file, backup_file = backup_test_setup
473
-
474
- assert File.exists?(existing_file)
475
- assert !File.exists?(backup_file)
476
-
477
- assert_equal "existing content", File.read(existing_file)
478
- assert_equal backup_file, t.backup_filepath(existing_file)
479
- end
480
-
481
- def test_backup_moves_filepath_to_backup_filepath
482
- existing_file, backup_file = backup_test_setup
483
-
484
- t.backup(existing_file)
485
-
486
- assert !File.exists?(existing_file)
487
- assert File.exists?(backup_file)
488
- assert_equal "existing content", File.read(backup_file)
489
- end
490
-
491
- def test_backup_copies_filepath_to_backup_filepath_if_backup_using_copy_is_true
492
- existing_file, backup_file = backup_test_setup
493
-
494
- t.backup(existing_file, true)
495
-
496
- assert File.exists?(existing_file)
497
- assert File.exists?(backup_file)
498
- assert FileUtils.compare_file(existing_file, backup_file)
499
- end
500
-
501
- def test_backup_registers_expanded_filepath_and_backup_filepath_in_backed_up_files
502
- existing_file, backup_file = backup_test_setup
503
-
504
- relative_filepath = Tap::Root.relative_filepath(Dir.pwd, existing_file)
505
- assert_not_equal existing_file, relative_filepath
506
-
507
- assert_equal existing_file, File.expand_path(existing_file)
508
- assert_equal existing_file, File.expand_path(relative_filepath)
509
- assert_equal backup_file, File.expand_path(backup_file)
510
-
511
- assert_equal({}, t.backed_up_files)
512
- t.backup(relative_filepath)
513
- assert_equal({existing_file => backup_file}, t.backed_up_files)
514
- end
515
-
516
- def test_backup_does_nothing_if_filepath_does_not_exist
517
- existing_file, backup_file = backup_test_setup
518
- FileUtils.rm(existing_file)
519
-
520
- assert !File.exists?(existing_file)
521
- assert !File.exists?(backup_file)
522
- assert_equal({}, t.backed_up_files)
523
-
524
- t.backup(existing_file)
525
-
526
- assert !File.exists?(existing_file)
527
- assert !File.exists?(backup_file)
528
- assert_equal({}, t.backed_up_files)
529
- end
530
-
531
- def test_backup_acts_on_list_and_returns_backup_files
532
- existing_file0 = method_filepath(:output, "file0.txt")
533
- existing_file1 = method_filepath(:output, "file1.txt")
534
- backup_file0 = method_filepath(:output, "backup0.txt")
535
- backup_file1 = method_filepath(:output, "backup1.txt")
536
-
537
- touch_file(existing_file0)
538
- touch_file(existing_file1)
539
- t.inference do |root, dir, path|
540
- path =~ /file0/ ? backup_file0 : backup_file1
541
- end
542
-
543
- assert !File.exists?(backup_file0)
544
- assert !File.exists?(backup_file1)
545
-
546
- assert_equal [File.expand_path(backup_file0), File.expand_path(backup_file1)], t.backup([existing_file0, existing_file1])
547
-
548
- assert File.exists?(backup_file0)
549
- assert File.exists?(backup_file1)
550
- end
551
-
552
- def test_backup_raises_error_if_backup_for_file_already_exists
553
- existing_file, backup_file = backup_test_setup
554
- t.backup(existing_file, true)
555
-
556
- assert_raise(RuntimeError) { t.backup(existing_file) }
557
- end
558
-
559
- #
560
- # restore tests
561
- #
562
-
563
- def test_restore_restores_backed_up_file_to_original_location_as_listed_in_backed_up_files
564
- original_file = File.expand_path(method_filepath(:output, 'original/file.txt'))
565
- backup_file = File.expand_path(method_filepath(:output, 'backup/file.txt'))
566
-
567
- FileUtils.mkdir_p( File.dirname(original_file) )
568
- touch_file(backup_file)
569
-
570
- assert File.exists?(File.dirname(original_file))
571
- assert !File.exists?(original_file)
572
- assert File.exists?(backup_file)
573
-
574
- t.backed_up_files[original_file] = backup_file
575
- t.restore(original_file)
576
-
577
- assert File.exists?(original_file)
578
- assert !File.exists?(backup_file)
579
- end
580
-
581
- def test_restore_creates_dirs_as_needed_to_restore_file
582
- original_file = File.expand_path(method_filepath(:output, 'original/file.txt'))
583
- backup_file = File.expand_path(method_filepath(:output, 'backup/file.txt'))
584
-
585
- touch_file(backup_file)
586
-
587
- assert !File.exists?(File.dirname(original_file))
588
- assert !File.exists?(original_file)
589
- assert File.exists?(backup_file)
590
-
591
- t.backed_up_files[original_file] = backup_file
592
- t.restore(original_file)
593
-
594
- assert File.exists?(original_file)
595
- assert !File.exists?(backup_file)
596
- end
597
-
598
- def test_restore_does_nothing_if_the_input_file_is_not_backed_up
599
- assert !File.exists?("original_file")
600
- assert t.backed_up_files.empty?
601
- assert_equal [], t.restore("original_file")
602
- assert !File.exists?("original_file")
603
- end
604
-
605
- def test_restore_removes_backup_dir_using_rmdir
606
- original_file = File.expand_path(method_filepath(:output, 'original/file.txt'))
607
- backup_file = File.expand_path(method_filepath(:output, 'backup/file.txt'))
608
- backup_dir = File.dirname(backup_file)
609
-
610
- t.mkdir(backup_file)
611
- assert File.exists?(backup_dir)
612
-
613
- touch_file(backup_file)
614
-
615
- t.backed_up_files[original_file] = backup_file
616
- t.restore(original_file)
617
-
618
- assert !File.exists?(backup_dir)
619
- end
620
-
621
- def test_restore_acts_on_list_and_returns_restored_files
622
- existing_file0 = File.expand_path(method_filepath(:output, "file0.txt"))
623
- existing_file1 = File.expand_path(method_filepath(:output, "file1.txt"))
624
- backup_file0 = File.expand_path(method_filepath(:output, "backup0.txt"))
625
- backup_file1 = File.expand_path(method_filepath(:output, "backup1.txt"))
626
-
627
- touch_file(backup_file0)
628
- touch_file(backup_file1)
629
-
630
- t.backed_up_files[existing_file0] = backup_file0
631
- t.backed_up_files[existing_file1] = backup_file1
632
-
633
- assert !File.exists?(existing_file0)
634
- assert !File.exists?(existing_file1)
635
-
636
- assert_equal [existing_file0, existing_file1], t.restore([existing_file0, existing_file1])
637
-
638
- assert File.exists?(existing_file0)
639
- assert File.exists?(existing_file1)
640
- end
641
-
642
- #
643
- # mkdir tests
644
- #
645
-
646
- def test_mkdir_documentation
647
- dir_one = method_filepath(:output, "path/to/dir")
648
- dir_two = method_filepath(:output, "path/to/another")
649
-
650
- t = Tap::FileTask.new do |task, inputs|
651
- assert !File.exists?(method_filepath(:output, "path"))
652
-
653
- task.mkdir(dir_one)
654
- assert File.exists?(dir_one)
655
-
656
- FileUtils.mkdir(dir_two)
657
- assert File.exists?(dir_two)
658
-
659
- raise "error!"
660
- end
661
-
662
- begin
663
- t.execute(nil)
664
- flunk "no error raised"
665
- rescue
666
- assert_equal "error!", $!.message
667
- assert !File.exists?(dir_one)
668
- assert File.exists?(dir_two)
669
- end
670
- end
671
-
672
- def test_mkdir_creates_dir_if_it_does_not_exist
673
- dir = method_filepath(:output, 'path/to/non_existant_folder')
674
- FileUtils.mkdir_p(File.dirname(dir))
675
- assert !File.exists?(dir)
676
-
677
- t.mkdir(dir)
678
- assert File.exists?(dir)
679
- end
680
-
681
- def test_mkdir_creates_parent_dirs_if_they_do_not_exist
682
- dir = method_filepath(:output, 'path/to/non_existant_folder')
683
- assert !File.exists?(method_filepath(:output))
684
-
685
- t.mkdir(dir)
686
- assert File.exists?(dir)
687
- end
688
-
689
- def test_mkdir_registers_expanded_dir_and_all_non_existing_parent_dirs_in_added_files
690
- dir = method_filepath(:output, 'path/to/non_existant_folder')
691
- assert_equal [], t.added_files
692
-
693
- relative_dir = Tap::Root.relative_filepath(Dir.pwd, dir)
694
- assert_not_equal dir, relative_dir
695
- assert_equal dir, File.expand_path(relative_dir)
696
-
697
- t.mkdir(relative_dir)
698
-
699
- expected = [
700
- method_root,
701
- method_filepath(:output),
702
- method_filepath(:output, 'path'),
703
- method_filepath(:output, 'path/to'),
704
- method_filepath(:output, 'path/to/non_existant_folder')
705
- ]
706
-
707
- assert_equal expected, t.added_files
708
- end
709
-
710
- def test_mkdir_acts_on_and_returns_list
711
- dir = method_filepath(:output, 'path')
712
- another = method_filepath(:output, 'another')
713
-
714
- assert !File.exists?(dir)
715
- assert !File.exists?(another)
716
-
717
- assert_equal [dir, another], t.mkdir([dir, another])
718
-
719
- assert File.exists?(dir)
720
- assert File.exists?(another)
721
- end
722
-
723
- #
724
- # rmdir tests
725
- #
726
-
727
- def test_rmdir_documentation
728
- dir_one = method_filepath(:output, 'path')
729
- dir_two = method_filepath(:output, 'path/to/dir')
730
- FileUtils.mkdir_p( method_filepath(:output) )
731
-
732
- t = Tap::FileTask.new
733
- assert !File.exists?(dir_one)
734
- FileUtils.mkdir(dir_one)
735
-
736
- t.mkdir(dir_two)
737
- assert File.exists?(dir_two)
738
-
739
- t.rmdir(dir_two)
740
- assert File.exists?(dir_one)
741
- assert !File.exists?(method_filepath(:output, 'path/to'))
742
- end
743
-
744
- def test_rmdir_removes_dir_if_made_by_the_task
745
- dir = method_filepath(:output, 'path/to/non_existant_folder')
746
- existing_dir = method_filepath(:output, 'path/to')
747
-
748
- FileUtils.mkdir_p(existing_dir)
749
- assert File.exists?(existing_dir)
750
- assert !File.exists?(dir)
751
-
752
- t.mkdir(dir)
753
- assert File.exists?(dir)
754
-
755
- t.rmdir(dir)
756
- assert File.exists?(existing_dir)
757
- assert !File.exists?(dir)
758
- end
759
-
760
- def test_rmdir_removes_parent_dirs_if_made_by_the_task
761
- dir = method_filepath(:output, 'path/to/non/existant/folder')
762
- root_parent_dir = method_filepath(:output, 'path/to')
763
- existing_dir = method_filepath(:output, 'path')
764
-
765
- FileUtils.mkdir_p(existing_dir)
766
- assert File.exists?(existing_dir)
767
- assert !File.exists?(root_parent_dir)
768
-
769
- t.mkdir(dir)
770
- assert File.exists?(dir)
771
-
772
- t.rmdir(dir)
773
- assert File.exists?(existing_dir)
774
- assert !File.exists?(root_parent_dir)
775
- end
776
-
777
- def test_rmdir_does_not_remove_if_dir_was_not_made_by_task
778
- dir = method_filepath(:output, 'path/to/non_existant_folder')
779
-
780
- FileUtils.mkdir_p(dir)
781
- assert File.exists?(dir)
782
-
783
- t.rmdir(dir)
784
- assert File.exists?(dir)
785
- end
786
-
787
- def test_rmdir_does_not_remove_if_folder_is_not_empty
788
- dir = method_filepath(:output, 'path/to/folder')
789
- not_empty_dir = method_filepath(:output, 'path/to')
790
-
791
- t.mkdir(dir)
792
- assert File.exists?(dir)
793
-
794
- touch_file File.join(not_empty_dir, "file.txt")
795
-
796
- t.rmdir(dir)
797
- assert File.exists?(not_empty_dir)
798
- assert !File.exists?(dir)
799
- end
800
-
801
- def test_rmdir_checks_for_hidden_files_as_well_as_regular_files
802
- dir = method_filepath(:output, 'path/to/folder')
803
- not_empty_dir = method_filepath(:output, 'path/to')
804
-
805
- t.mkdir(dir)
806
- assert File.exists?(dir)
807
-
808
- touch_file File.join(not_empty_dir, ".hidden_file")
809
-
810
- t.rmdir(dir)
811
- assert File.exists?(not_empty_dir)
812
- assert !File.exists?(dir)
813
- end
814
-
815
- def test_rmdir_clears_added_files_of_removed_dirs
816
- dir = method_filepath(:output, 'path/to/folder')
817
-
818
- FileUtils.mkdir_p(method_filepath(:output))
819
- assert_equal [], t.added_files
820
-
821
- t.mkdir(dir)
822
- assert_equal [
823
- File.expand_path(method_filepath(:output, 'path')),
824
- File.expand_path(method_filepath(:output, 'path/to')),
825
- File.expand_path(method_filepath(:output, 'path/to/folder'))], t.added_files
826
-
827
- # touch a file so the 'path' folder isn't removed
828
- touch_file method_filepath(:output, 'path/file.txt')
829
-
830
- t.rmdir(dir)
831
- assert_equal [
832
- File.expand_path(method_filepath(:output, 'path'))], t.added_files
833
- end
834
-
835
- def test_rmdir_acts_on_and_returns_expanded_list_of_removed_dirs
836
- dir = method_filepath(:output, 'path')
837
- another = method_filepath(:output, 'another')
838
- not_removed = method_filepath(:output, 'not')
839
- removed = method_filepath(:output, 'not/removed')
840
-
841
- t.mkdir([dir, another, not_removed, removed])
842
- # touch a file so the not_removed folder isn't removed
843
- touch_file method_filepath(:output, 'not/file.txt')
844
-
845
- expected = [dir, another, removed].collect {|d| File.expand_path(d)}
846
- assert_equal expected, t.rmdir([dir, another, not_removed, removed])
847
- end
848
-
849
- #
850
- # prepare tests
851
- #
852
-
853
- def test_prepare_documentation
854
- file_one = method_filepath(:output, "file.txt")
855
- file_two = method_filepath(:output, "path/to/file.txt")
856
- FileUtils.mkdir_p( method_filepath(:output) )
857
-
858
- File.open(file_one, "w") {|f| f << "original content"}
859
- t = Tap::FileTask.new do |task, inputs|
860
- assert !File.exists?(method_filepath(:output, "path"))
861
-
862
- # backup... prepare parent dirs... prepare for restore
863
- task.prepare([file_one, file_two])
864
-
865
- File.open(file_one, "w") {|f| f << "new content"}
866
- FileUtils.touch(file_two)
867
-
868
- raise "error!"
869
- end
870
-
871
- begin
872
- t.execute(nil)
873
- flunk "no error raised"
874
- rescue
875
- assert_equal "error!", $!.message
876
- assert File.exists?(file_one)
877
- assert_equal "original content", File.read(file_one)
878
- assert !File.exists?(method_filepath(:output, "path"))
879
- end
880
- end
881
-
882
- def test_prepare_acts_on_and_returns_list
883
- filepath = "file.txt"
884
- another = "another.txt"
885
- assert_equal [filepath, another], t.prepare([filepath, another])
886
- end
887
-
888
- def test_prepare_backs_up_existing_files_and_creates_non_existant_dirs
889
- existing_file = method_filepath(:output, "path/to/existing/file.txt")
890
- non_existant_file = method_filepath(:output, "path/to/non/existant/file.txt")
891
- touch_file(existing_file, "existing content")
892
-
893
- # be sure inference leads files to an output dir, for cleanup
894
- removal_path = method_filepath(:output, 'removal')
895
- t.inference {|root, dir, path| removal_path}
896
-
897
- assert File.exists?(existing_file)
898
- assert !File.exists?(non_existant_file)
899
-
900
- files = [existing_file, non_existant_file]
901
- t.prepare(files)
902
-
903
- # check neither of the files exist at this point
904
- # and the parent dirs all exist
905
- files.each do |file|
906
- assert !File.exists?(file)
907
- assert File.exists?(File.dirname(file))
908
- end
909
-
910
- # check the existing file was backed up
911
- assert_equal({File.expand_path(existing_file) => File.expand_path(removal_path)}, t.backed_up_files)
912
- assert_equal "existing content", File.read(removal_path)
913
- end
914
-
915
- def test_prepare_adds_list_to_added_files
916
- existing_file = method_filepath(:output, "path/to/existing/file.txt")
917
- non_existant_file = method_filepath(:output, "path/to/non/existant/file.txt")
918
- touch_file(existing_file)
919
-
920
- # be sure inference leads files to an output dir, for cleanup
921
- removal_path = method_filepath(:output, 'removal')
922
- t.inference {|root, dir, path| File.join(removal_path, path) }
923
-
924
- assert_equal([], t.added_files)
925
- assert File.exists?(existing_file)
926
- assert !File.exists?(non_existant_file)
927
- assert !File.exists?(removal_path)
928
-
929
- files = [existing_file, non_existant_file]
930
- t.prepare(files)
931
-
932
- expected = [
933
- removal_path, # added by backup of existing_file
934
- method_filepath(:output, 'path/to/non'), # added by mkdir
935
- method_filepath(:output, 'path/to/non/existant'), # added by mkdir
936
- existing_file, # added by prepare
937
- non_existant_file # added by prepare
938
- ].collect do |dir|
939
- File.expand_path(dir)
940
- end
941
-
942
- assert_equal expected, t.added_files
943
- end
944
-
945
- #
946
- # rm tests
947
- #
948
-
949
- def test_rm_documentation
950
- dir = method_filepath(:output, 'path')
951
- file = method_filepath(:output, 'path/to/file.txt')
952
- FileUtils.mkdir_p( method_filepath(:output) )
953
-
954
- t = Tap::FileTask.new
955
- assert !File.exists?(dir)
956
- FileUtils.mkdir(dir)
957
-
958
- t.prepare(file)
959
- FileUtils.touch(file)
960
- assert File.exists?(file)
961
-
962
- t.rm(file)
963
- assert File.exists?(dir)
964
- assert !File.exists?(method_filepath(:output, 'path/to'))
965
- end
966
-
967
- def test_rm_removes_file_and_parent_dirs_if_made_by_the_task
968
- file = method_filepath(:output, 'path/to/file.txt')
969
- parent_dir = method_filepath(:output, 'path/to')
970
- existing_dir = method_filepath(:output, 'path')
971
- FileUtils.mkdir_p existing_dir
972
-
973
- assert File.exists?(existing_dir)
974
- assert !File.exists?(file)
975
-
976
- t.prepare file
977
- touch_file(file)
978
- assert File.exists?(file)
979
-
980
- t.rm(file)
981
- assert File.exists?(existing_dir)
982
- assert !File.exists?(parent_dir)
983
- assert !File.exists?(file)
984
- end
985
-
986
- def test_rm_removes_parent_dirs_even_if_file_does_not_exist
987
- file = method_filepath(:output, 'path/to/file.txt')
988
- parent_dir = method_filepath(:output, 'path/to')
989
- existing_dir = method_filepath(:output, 'path')
990
- FileUtils.mkdir_p existing_dir
991
-
992
- assert File.exists?(existing_dir)
993
- assert !File.exists?(file)
994
-
995
- t.prepare file
996
- assert !File.exists?(file)
997
-
998
- t.rm(file)
999
- assert File.exists?(existing_dir)
1000
- assert !File.exists?(parent_dir)
1001
- end
1002
-
1003
- def test_rm_does_not_remove_file_if_not_made_by_the_task
1004
- file = method_filepath(:output, 'path/to/file.txt')
1005
-
1006
- touch_file(file)
1007
- assert File.exists?(file)
1008
-
1009
- t.rm(file)
1010
- assert File.exists?(file)
1011
- end
1012
-
1013
- def test_rm_clears_added_files_of_removed_files
1014
- file0 = method_filepath(:output, 'file0.txt')
1015
- file1 = method_filepath(:output, 'file1.txt')
1016
-
1017
- FileUtils.mkdir_p(method_filepath(:output))
1018
- assert_equal [], t.added_files
1019
-
1020
- t.prepare([file0,file1])
1021
- assert_equal [
1022
- File.expand_path(method_filepath(:output, 'file0.txt')),
1023
- File.expand_path(method_filepath(:output, 'file1.txt'))], t.added_files
1024
-
1025
- t.rm(file0)
1026
- assert_equal [
1027
- File.expand_path(method_filepath(:output, 'file1.txt'))], t.added_files
1028
- end
1029
-
1030
- def test_rm_acts_on_and_returns_expanded_list_of_removed_files_and_dirs
1031
- file = method_filepath(:output, 'file.txt')
1032
- another = method_filepath(:output, 'another.txt')
1033
- not_removed = method_filepath(:output, 'not')
1034
- removed = method_filepath(:output, 'not/removed.txt')
1035
-
1036
- t.prepare([file, another, removed])
1037
- # touch a file so the not_removed folder isn't removed
1038
- touch_file method_filepath(:output, 'not/file.txt')
1039
-
1040
- expected = [file, another, removed].collect {|f| File.expand_path(f)}
1041
- assert_equal expected, t.rm([file, another, removed])
1042
- end
1043
-
1044
- #
1045
- # execute tests
1046
- #
1047
-
1048
- def setup_execute_test(&block)
1049
- existing_file = method_filepath(:output, "path/to/existing/file.txt")
1050
- non_existant_dir = method_filepath(:output, "path/to/non/existing")
1051
- non_existant_file = File.join(non_existant_dir, "file.txt")
1052
- backup_file = method_filepath(:output, "backup/file.txt")
1053
-
1054
- touch_file(existing_file, "original content")
1055
- @t = Tap::FileTask.new do |task, input|
1056
- task.prepare([existing_file, non_existant_file])
1057
-
1058
- block.call if block_given?
1059
- end
1060
- # inference leads to the backup_file
1061
- @t.inference do |root, dir, path|
1062
- backup_file
1063
- end
1064
-
1065
- [existing_file, backup_file, non_existant_dir, non_existant_file]
1066
- end
1067
-
1068
- def test_setup_execute_test
1069
- existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
1070
- assert !File.exists?(non_existant_file)
1071
- assert File.exists?(non_existant_dir)
1072
- assert File.exists?(backup_file)
1073
- assert_equal "original content", File.read(backup_file)
1074
- end
1075
- t.execute(nil)
1076
- end
1077
-
1078
- def test_execute_restores_backups_and_removes_added_files_on_error
1079
- was_in_execute = false
1080
- existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
1081
- was_in_execute = true
1082
- raise "error"
1083
- end
1084
-
1085
- assert_raise(RuntimeError) { t.execute(nil) }
1086
-
1087
- # check the existing file was restored
1088
- assert was_in_execute
1089
- assert File.exists?(existing_file)
1090
- assert !File.exists?(non_existant_dir)
1091
- assert !File.exists?(backup_file)
1092
- assert_equal "original content", File.read(existing_file)
1093
- assert t.added_files.empty?
1094
- assert t.backed_up_files.empty?
1095
- end
1096
-
1097
- def test_execute_does_not_restore_backups_if_rollback_on_error_is_false
1098
- was_in_execute = false
1099
- existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
1100
- was_in_execute = true
1101
- raise "error"
1102
- end
1103
-
1104
- t.rollback_on_error = false
1105
- assert_raise(RuntimeError) { t.execute(nil) }
1106
-
1107
- # check the existing file was NOT restored
1108
- assert was_in_execute
1109
- assert !File.exists?(existing_file)
1110
- assert File.exists?(non_existant_dir)
1111
- assert File.exists?(backup_file)
1112
- assert_equal "original content", File.read(backup_file)
1113
- assert !t.added_files.empty?
1114
- assert !t.backed_up_files.empty?
1115
- end
1116
-
1117
- # def test_execute_removes_backed_up_files_if_cleanup_after_execute_is_true
1118
- # was_in_execute = false
1119
- # existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
1120
- # was_in_execute = true
1121
- # touch_file(existing_file, "new content")
1122
- # end
1123
- #
1124
- # t.cleanup_after_execute = true
1125
- # t.execute(nil)
1126
- #
1127
- # # check the backup file was removed and that
1128
- # # there was no restore (no error was raised)
1129
- # assert was_in_execute
1130
- # assert File.exists?(existing_file)
1131
- # assert_equal "new content", File.read(existing_file)
1132
- # assert !File.exists?(backup_file)
1133
- # assert !File.exists?(File.dirname(backup_file))
1134
- # assert !t.added_files.empty?
1135
- # assert !t.added_files.include?(backup_file)
1136
- # assert t.backed_up_files.empty?
1137
- # end
1138
-
1139
- # def test_execute_restores_backups_on_error_even_if_cleanup_after_execute_is_true
1140
- # was_in_execute = false
1141
- # existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
1142
- # was_in_execute = true
1143
- # touch_file(existing_file, "new content")
1144
- # raise "error"
1145
- # end
1146
- #
1147
- # t.cleanup_after_execute = true
1148
- # assert_raise(RuntimeError) { t.execute(nil) }
1149
- #
1150
- # # check the existing file was restored and
1151
- # # backup file was removed
1152
- # assert was_in_execute
1153
- # assert File.exists?(existing_file)
1154
- # assert_equal "original content", File.read(existing_file)
1155
- # assert !File.exists?(backup_file)
1156
- # assert !File.exists?(File.dirname(backup_file))
1157
- # assert t.added_files.empty?
1158
- # assert t.backed_up_files.empty?
1159
- # end
1160
-
1161
- def test_execute_does_not_rollback_results_from_prior_successful_executions
1162
- existing_file = method_filepath(:output, "path/to/existing/file.txt")
1163
- non_existant_dir = method_filepath(:output, "path/to/non/existing")
1164
- non_existant_file = File.join(non_existant_dir, "file.txt")
1165
- backup_file = method_filepath(:output, "backup/file.txt")
1166
-
1167
- touch_file(existing_file, "original content")
1168
- count = 0
1169
- @t = Tap::FileTask.new do |task, input|
1170
- if count > 0
1171
- count = 2
1172
- raise "error"
1173
- else
1174
- count = 1
1175
- task.prepare([existing_file, non_existant_file])
1176
- touch_file(existing_file, "new content")
1177
- end
1178
- end
1179
-
1180
- # inference leads to the backup_file
1181
- @t.inference do |root, dir, path|
1182
- backup_file
1183
- end
1184
-
1185
- # assert !t.cleanup_after_execute
1186
-
1187
- assert_nothing_raised { t.execute(nil) }
1188
- assert_equal 1, count
1189
- assert File.exists?(existing_file)
1190
- assert_equal "new content", File.read(existing_file)
1191
- assert File.exists?(non_existant_dir)
1192
- assert File.exists?(backup_file)
1193
- assert_equal "original content", File.read(backup_file)
1194
-
1195
- assert_raise(RuntimeError) { t.execute(nil) }
1196
-
1197
- # check the existing file was NOT restored
1198
- assert_equal 2, count
1199
- assert File.exists?(existing_file)
1200
- assert_equal "new content", File.read(existing_file)
1201
- assert File.exists?(non_existant_dir)
1202
- assert File.exists?(backup_file)
1203
- assert_equal "original content", File.read(backup_file)
1204
- end
1205
-
1206
- #
1207
- # test execute with multiple files
1208
- #
1209
-
1210
- def setup_multiple_file_execute_test(&block)
1211
- existing_files = [0,1].collect do |n|
1212
- path = method_filepath(:output, "path/to/existing/file#{n}.txt")
1213
- touch_file path, n.to_s
1214
- path
1215
- end
1216
-
1217
- non_existant_files = [0,1].collect do |n|
1218
- method_filepath(:output, "path/to/non/existing/file#{n}.txt")
1219
- end
1220
-
1221
- @t = Tap::FileTask.new do |task, input|
1222
- task.prepare(existing_files + non_existant_files)
1223
- block.call if block_given?
1224
- end
1225
- # inference leads to an output_dir
1226
- @t.inference do |root, dir, path|
1227
- method_filepath(:output, 'backup', path)
1228
- end
1229
-
1230
- [existing_files, non_existant_files]
1231
- end
1232
-
1233
- def test_setup_multiple_file_execute_test
1234
- existing_files, non_existant_files = setup_multiple_file_execute_test do
1235
- (existing_files + existing_files).each do |file|
1236
- assert !File.exists?(file)
1237
- assert File.exists?(File.dirname(file))
1238
- end
1239
- end
1240
- t.execute(nil)
1241
- end
1242
-
1243
- def test_execute_restore_and_removal_with_multiple_files
1244
- was_in_execute = false
1245
- existing_files, non_existant_files = setup_multiple_file_execute_test do
1246
- was_in_execute = true
1247
- (existing_files + non_existant_files) .each do |file|
1248
- touch_file file, "new content"
1249
- end
1250
- raise "error"
1251
- end
1252
-
1253
- assert !File.exists?(method_filepath(:output, 'backup'))
1254
- assert_raise(RuntimeError) { t.execute(nil) }
1255
-
1256
- # check existing files were restored, made files and backups removed.
1257
- assert was_in_execute
1258
- existing_files.each_with_index do |existing_file, n|
1259
- assert File.exists?(existing_file)
1260
- assert_equal n.to_s, File.read(existing_file)
1261
- end
1262
- non_existant_files.each do |non_existing_file|
1263
- assert !File.exists?(non_existing_file)
1264
- end
1265
- assert !File.exists?(method_filepath(:output, 'backup'))
1266
- end
1267
-
1268
- # def test_execute_cleanup_after_execute_with_multiple_files
1269
- # was_in_execute = false
1270
- # existing_files, non_existant_files = setup_multiple_file_execute_test do
1271
- # was_in_execute = true
1272
- # (existing_files + non_existant_files) .each do |file|
1273
- # touch_file file, "new content"
1274
- # end
1275
- # end
1276
- #
1277
- # assert !File.exists?(method_filepath(:output, 'backup'))
1278
- #
1279
- # t.cleanup_after_execute = true
1280
- # t.execute(nil)
1281
- #
1282
- # # check existing files were restored, made files and backups removed.
1283
- # assert was_in_execute
1284
- # (existing_files + non_existant_files).each do |file|
1285
- # assert File.exists?(file)
1286
- # assert_equal "new content", File.read(file)
1287
- # end
1288
- # assert !File.exists?(method_filepath(:output, 'backup'))
1289
- # end
1290
-
1291
- end