tap 0.7.9 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History +28 -0
- data/MIT-LICENSE +1 -1
- data/README +71 -43
- data/Rakefile +81 -64
- data/Tutorial +235 -0
- data/bin/tap +80 -44
- data/lib/tap.rb +41 -12
- data/lib/tap/app.rb +243 -246
- data/lib/tap/file_task.rb +357 -118
- data/lib/tap/generator.rb +88 -29
- data/lib/tap/generator/generators/config/config_generator.rb +4 -2
- data/lib/tap/generator/generators/config/templates/config.erb +1 -2
- data/lib/tap/generator/generators/file_task/file_task_generator.rb +3 -18
- data/lib/tap/generator/generators/file_task/templates/task.erb +22 -15
- data/lib/tap/generator/generators/file_task/templates/test.erb +13 -2
- data/{test/test/inference_methods/test_assert_files_exist/input/input_1.txt → lib/tap/generator/generators/generator/USAGE} +0 -0
- data/lib/tap/generator/generators/generator/generator_generator.rb +21 -0
- data/lib/tap/generator/generators/generator/templates/generator.erb +23 -0
- data/lib/tap/generator/generators/generator/templates/usage.erb +1 -0
- data/{test/test/inference_methods/test_assert_files_exist/input/input_2.txt → lib/tap/generator/generators/package/USAGE} +0 -0
- data/lib/tap/generator/generators/package/package_generator.rb +38 -0
- data/lib/tap/generator/generators/package/templates/package.erb +186 -0
- data/lib/tap/generator/generators/root/root_generator.rb +14 -9
- data/lib/tap/generator/generators/root/templates/Rakefile +20 -14
- data/{test/test/inference_methods/test_infer_glob/expected/file.yml → lib/tap/generator/generators/root/templates/ReadMe.txt} +0 -0
- data/lib/tap/generator/generators/root/templates/tap.yml +82 -0
- data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +0 -1
- data/lib/tap/generator/generators/root/templates/test/tap_test_suite.rb +2 -1
- data/{test/test/inference_methods/test_infer_glob/expected/file_1.txt → lib/tap/generator/generators/script/USAGE} +0 -0
- data/lib/tap/generator/generators/script/script_generator.rb +17 -0
- data/lib/tap/generator/generators/script/templates/script.erb +42 -0
- data/lib/tap/generator/generators/task/task_generator.rb +1 -1
- data/lib/tap/generator/generators/task/templates/task.erb +24 -16
- data/lib/tap/generator/generators/task/templates/test.erb +13 -17
- data/lib/tap/generator/generators/workflow/templates/task.erb +10 -10
- data/lib/tap/generator/generators/workflow/templates/test.erb +1 -1
- data/lib/tap/generator/generators/workflow/workflow_generator.rb +3 -18
- data/lib/tap/root.rb +108 -146
- data/lib/tap/script.rb +362 -0
- data/lib/tap/script/console.rb +28 -0
- data/lib/tap/script/destroy.rb +13 -1
- data/lib/tap/script/generate.rb +13 -1
- data/lib/tap/script/run.rb +100 -57
- data/lib/tap/support/batch_queue.rb +0 -3
- data/lib/tap/support/logger.rb +6 -3
- data/lib/tap/support/rake.rb +54 -0
- data/lib/tap/support/task_configuration.rb +169 -0
- data/lib/tap/support/tdoc.rb +198 -0
- data/lib/tap/support/tdoc/config_attr.rb +338 -0
- data/lib/tap/support/tdoc/tdoc_html_generator.rb +38 -0
- data/lib/tap/support/tdoc/tdoc_html_template.rb +42 -0
- data/lib/tap/support/versions.rb +33 -1
- data/lib/tap/task.rb +339 -227
- data/lib/tap/test.rb +86 -128
- data/lib/tap/test/env_vars.rb +16 -5
- data/lib/tap/test/file_methods.rb +373 -0
- data/lib/tap/test/subset_methods.rb +299 -180
- data/lib/tap/version.rb +2 -1
- data/lib/tap/workflow.rb +2 -0
- data/test/app/lib/app_test_task.rb +1 -0
- data/test/app_test.rb +327 -83
- data/test/check/binding_eval.rb +23 -0
- data/test/check/define_method_check.rb +22 -0
- data/test/check/dependencies_check.rb +175 -0
- data/test/check/inheritance_check.rb +22 -0
- data/test/file_task_test.rb +524 -291
- data/test/{test/inference_methods/test_infer_glob/expected/file_2.txt → root/glob/one.txt} +0 -0
- data/test/root/glob/two.txt +0 -0
- data/test/root_test.rb +330 -262
- data/test/script_test.rb +194 -0
- data/test/support/audit_test.rb +5 -2
- data/test/support/combinator_test.rb +10 -10
- data/test/support/rake_test.rb +35 -0
- data/test/support/task_configuration_test.rb +272 -0
- data/test/support/tdoc_test.rb +363 -0
- data/test/support/templater_test.rb +2 -2
- data/test/support/versions_test.rb +32 -0
- data/test/tap_test_helper.rb +39 -0
- data/test/task_base_test.rb +115 -0
- data/test/task_class_test.rb +56 -4
- data/test/task_execute_test.rb +29 -0
- data/test/task_test.rb +89 -70
- data/test/test/env_vars_test.rb +48 -0
- data/test/test/{inference_methods → file_methods}/test_assert_expected/expected/file.txt +0 -0
- data/test/test/{inference_methods → file_methods}/test_assert_expected/expected/folder/file.txt +0 -0
- data/test/test/{inference_methods → file_methods}/test_assert_expected/input/file.txt +0 -0
- data/test/test/{inference_methods → file_methods}/test_assert_expected/input/folder/file.txt +0 -0
- data/test/test/file_methods/test_assert_files_exist/input/input_1.txt +0 -0
- data/test/test/file_methods/test_assert_files_exist/input/input_2.txt +0 -0
- data/test/test/file_methods/test_assert_output_files_equal/expected/one.txt +1 -0
- data/test/test/file_methods/test_assert_output_files_equal/expected/two.txt +1 -0
- data/test/test/file_methods/test_assert_output_files_equal/input/one.txt +1 -0
- data/test/test/file_methods/test_assert_output_files_equal/input/two.txt +1 -0
- data/test/test/{inference_methods → file_methods}/test_file_compare/expected/output_1.txt +0 -0
- data/test/test/{inference_methods → file_methods}/test_file_compare/expected/output_2.txt +0 -0
- data/test/test/{inference_methods → file_methods}/test_file_compare/input/input_1.txt +0 -0
- data/test/test/{inference_methods → file_methods}/test_file_compare/input/input_2.txt +0 -0
- data/test/test/file_methods/test_infer_glob/expected/file.yml +0 -0
- data/test/test/file_methods/test_infer_glob/expected/file_1.txt +0 -0
- data/test/test/file_methods/test_infer_glob/expected/file_2.txt +0 -0
- data/test/test/file_methods/test_method_glob/expected/file.yml +0 -0
- data/test/test/file_methods/test_method_glob/expected/file_1.txt +0 -0
- data/test/test/file_methods/test_method_glob/expected/file_2.txt +0 -0
- data/test/test/{inference_methods → file_methods}/test_yml_compare/expected/output_1.yml +0 -0
- data/test/test/{inference_methods → file_methods}/test_yml_compare/expected/output_2.yml +0 -0
- data/test/test/{inference_methods → file_methods}/test_yml_compare/input/input_1.yml +0 -0
- data/test/test/{inference_methods → file_methods}/test_yml_compare/input/input_2.yml +0 -0
- data/test/test/file_methods_test.rb +204 -0
- data/test/test/subset_methods_test.rb +93 -33
- data/test/test/test_assert_expected_result_files/expected/task/name/a.txt +1 -0
- data/test/test/test_assert_expected_result_files/expected/task/name/b.txt +1 -0
- data/test/test/test_assert_expected_result_files/input/a.txt +1 -0
- data/test/test/test_assert_expected_result_files/input/b.txt +1 -0
- data/test/test/test_file_task_test/expected/one.txt +1 -0
- data/test/test/test_file_task_test/expected/two.txt +1 -0
- data/test/test/test_file_task_test/input/one.txt +1 -0
- data/test/test/test_file_task_test/input/two.txt +1 -0
- data/test/test_test.rb +143 -3
- data/test/workflow_test.rb +2 -0
- data/vendor/rails_generator.rb +56 -0
- data/vendor/rails_generator/base.rb +263 -0
- data/vendor/rails_generator/commands.rb +581 -0
- data/vendor/rails_generator/generated_attribute.rb +42 -0
- data/vendor/rails_generator/lookup.rb +209 -0
- data/vendor/rails_generator/manifest.rb +53 -0
- data/vendor/rails_generator/options.rb +143 -0
- data/vendor/rails_generator/scripts.rb +83 -0
- data/vendor/rails_generator/scripts/destroy.rb +7 -0
- data/vendor/rails_generator/scripts/generate.rb +7 -0
- data/vendor/rails_generator/scripts/update.rb +12 -0
- data/vendor/rails_generator/simple_logger.rb +46 -0
- data/vendor/rails_generator/spec.rb +44 -0
- metadata +180 -196
- data/lib/tap/generator/generators/root/templates/app.yml +0 -19
- data/lib/tap/generator/generators/root/templates/config/process_tap_request.yml +0 -4
- data/lib/tap/generator/generators/root/templates/lib/process_tap_request.rb +0 -26
- data/lib/tap/generator/generators/root/templates/public/images/nav.jpg +0 -0
- data/lib/tap/generator/generators/root/templates/public/stylesheets/color.css +0 -57
- data/lib/tap/generator/generators/root/templates/public/stylesheets/layout.css +0 -108
- data/lib/tap/generator/generators/root/templates/public/stylesheets/normalize.css +0 -40
- data/lib/tap/generator/generators/root/templates/public/stylesheets/typography.css +0 -21
- data/lib/tap/generator/generators/root/templates/server/config/environment.rb +0 -60
- data/lib/tap/generator/generators/root/templates/server/lib/tasks/clear_database_prerequisites.rake +0 -5
- data/lib/tap/generator/generators/root/templates/server/test/test_helper.rb +0 -53
- data/lib/tap/script/server.rb +0 -12
- data/lib/tap/support/rap.rb +0 -38
- data/lib/tap/test/inference_methods.rb +0 -298
- data/test/task/config/task_with_config.yml +0 -1
- data/test/test/inference_methods_test.rb +0 -311
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# this checks to see that you can unset and reset
|
|
2
|
+
# constants and retain the functionality of the
|
|
3
|
+
# constant.
|
|
4
|
+
|
|
5
|
+
module TestMod
|
|
6
|
+
CONST = 1
|
|
7
|
+
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
def function
|
|
11
|
+
puts "in function"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Object
|
|
16
|
+
old_ruby_token = remove_const(:TestMod)
|
|
17
|
+
const_set(:NewName, old_ruby_token )
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
puts NewName::CONST
|
|
21
|
+
puts NewName.function
|
|
22
|
+
|
|
23
|
+
puts "done"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
|
|
3
|
+
class ClassConfigurationTest < Test::Unit::TestCase
|
|
4
|
+
class A
|
|
5
|
+
class << self
|
|
6
|
+
def define_class_defined_method
|
|
7
|
+
define_method('class_defined_method') do
|
|
8
|
+
self
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
define_class_defined_method
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_self_in_define_method
|
|
17
|
+
a = A.new
|
|
18
|
+
|
|
19
|
+
assert a.respond_to?(:class_defined_method)
|
|
20
|
+
assert_equal a, a.class_defined_method
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
require 'active_support'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'test/unit'
|
|
4
|
+
|
|
5
|
+
class DependenciesCheck < Test::Unit::TestCase
|
|
6
|
+
|
|
7
|
+
def teardown
|
|
8
|
+
FileUtils.rm_r(dep_dir)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def dep_dir
|
|
12
|
+
File.join( File.dirname(__FILE__), "dependencies" )
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
#
|
|
16
|
+
# make files
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
def filepath(class_name)
|
|
20
|
+
File.join(dep_dir, class_name.underscore + ".rb")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def make_file(class_name, content)
|
|
24
|
+
path = filepath(class_name)
|
|
25
|
+
FileUtils.mkdir(File.dirname(path)) unless File.exists?(File.dirname(path))
|
|
26
|
+
File.open(path, "w") do |file|
|
|
27
|
+
file << content
|
|
28
|
+
end
|
|
29
|
+
class_name.underscore
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def make_module_file(class_name)
|
|
33
|
+
make_file class_name, %Q{
|
|
34
|
+
module #{class_name.camelize}
|
|
35
|
+
end}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def make_unloadable_file(class_name)
|
|
39
|
+
make_file class_name, %Q{
|
|
40
|
+
module #{class_name.camelize}
|
|
41
|
+
unloadable
|
|
42
|
+
end}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# dependencies check
|
|
47
|
+
#
|
|
48
|
+
|
|
49
|
+
def test_dependencies
|
|
50
|
+
pre_load = make_module_file "PreLoad"
|
|
51
|
+
pre_load_unloadable = make_unloadable_file "PreLoadUnloadable"
|
|
52
|
+
pre_loader = make_file("PreLoader", "require 'pre_load_required'\nrequire 'pre_load_required_unloadable'")
|
|
53
|
+
pre_load_required = make_module_file "PreLoadRequired"
|
|
54
|
+
pre_load_required_unloadable = make_unloadable_file "PreLoadRequiredUnloadable"
|
|
55
|
+
pre_load_consts = ["PreLoad", "PreLoadUnloadable", "PreLoadRequired", "PreLoadRequiredUnloadable"]
|
|
56
|
+
|
|
57
|
+
post_load = make_module_file "PostLoad"
|
|
58
|
+
post_load_unloadable = make_unloadable_file "PostLoadUnloadable"
|
|
59
|
+
post_loader = make_file("PostLoader", "require 'post_load_required'\nrequire 'post_load_required_unloadable'")
|
|
60
|
+
post_load_required = make_module_file "PostLoadRequired"
|
|
61
|
+
post_load_required_unloadable = make_unloadable_file "PostLoadRequiredUnloadable"
|
|
62
|
+
post_load_consts = ["PostLoad", "PostLoadUnloadable", "PostLoadRequired", "PostLoadRequiredUnloadable"]
|
|
63
|
+
|
|
64
|
+
assert_equal 10, Dir.glob( File.join( dep_dir, "*") ).length
|
|
65
|
+
|
|
66
|
+
# can't load if not on load path
|
|
67
|
+
assert_raise(MissingSourceFile) do
|
|
68
|
+
require pre_load
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
$:.unshift dep_dir
|
|
72
|
+
assert_nothing_raised do
|
|
73
|
+
require pre_load
|
|
74
|
+
require pre_load_unloadable
|
|
75
|
+
require pre_loader
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
pre_load_consts.each {|const| assert Object.const_defined?(const)}
|
|
79
|
+
post_load_consts.each {|const| assert !Object.const_defined?(const)}
|
|
80
|
+
|
|
81
|
+
# now set Dependencies to load from dep_dir
|
|
82
|
+
Dependencies.load_paths << dep_dir
|
|
83
|
+
|
|
84
|
+
# PostLoad constants will be autoloaded as missing constants by Dependencies
|
|
85
|
+
assert PostLoad
|
|
86
|
+
assert PostLoadUnloadable
|
|
87
|
+
assert PostLoadRequired
|
|
88
|
+
assert PostLoadRequiredUnloadable
|
|
89
|
+
|
|
90
|
+
pre_load_consts.each {|const| assert Object.const_defined?(const)}
|
|
91
|
+
post_load_consts.each {|const| assert Object.const_defined?(const)}
|
|
92
|
+
|
|
93
|
+
# post load modules are cleared, and pre-unloadable modules.
|
|
94
|
+
# other modules are not cleared
|
|
95
|
+
Dependencies.clear
|
|
96
|
+
|
|
97
|
+
["PreLoad", "PreLoadRequired"].each {|const| assert Object.const_defined?(const)}
|
|
98
|
+
["PreLoadUnloadable", "PreLoadRequiredUnloadable"].each {|const| assert !Object.const_defined?(const)}
|
|
99
|
+
post_load_consts.each {|const| assert !Object.const_defined?(const)}
|
|
100
|
+
|
|
101
|
+
# calling the missing modules reloads them
|
|
102
|
+
assert PreLoadUnloadable
|
|
103
|
+
assert PreLoadRequiredUnloadable
|
|
104
|
+
|
|
105
|
+
assert PostLoad
|
|
106
|
+
assert PostLoadUnloadable
|
|
107
|
+
assert PostLoadRequired
|
|
108
|
+
assert PostLoadRequiredUnloadable
|
|
109
|
+
|
|
110
|
+
pre_load_consts.each {|const| assert Object.const_defined?(const)}
|
|
111
|
+
post_load_consts.each {|const| assert Object.const_defined?(const)}
|
|
112
|
+
|
|
113
|
+
# As before, post load modules should be cleared, and pre-unloadable modules
|
|
114
|
+
Dependencies.clear
|
|
115
|
+
|
|
116
|
+
["PreLoad", "PreLoadRequired"].each {|const| assert Object.const_defined?(const)}
|
|
117
|
+
["PreLoadUnloadable", "PreLoadRequiredUnloadable"].each {|const| assert !Object.const_defined?(const)}
|
|
118
|
+
post_load_consts.each {|const| assert !Object.const_defined?(const)}
|
|
119
|
+
|
|
120
|
+
# requiring files will NOT restore pre-loads by themselves...
|
|
121
|
+
# but it will restore post load requires, because they haven't
|
|
122
|
+
# been required yet
|
|
123
|
+
assert_nothing_raised do
|
|
124
|
+
require pre_load
|
|
125
|
+
require pre_load_unloadable
|
|
126
|
+
require pre_loader
|
|
127
|
+
|
|
128
|
+
require post_load
|
|
129
|
+
require post_load_unloadable
|
|
130
|
+
require post_loader
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
["PreLoad", "PreLoadRequired"].each {|const| assert Object.const_defined?(const)}
|
|
134
|
+
["PreLoadUnloadable", "PreLoadRequiredUnloadable"].each {|const| assert !Object.const_defined?(const)}
|
|
135
|
+
post_load_consts.each {|const| assert Object.const_defined?(const)}
|
|
136
|
+
|
|
137
|
+
# Now, ONLY unloadable modules will be cleared -- the others were loaded
|
|
138
|
+
# using require, and NOT Dependencies autoloading
|
|
139
|
+
Dependencies.clear
|
|
140
|
+
|
|
141
|
+
["PreLoad", "PreLoadRequired"].each {|const| assert Object.const_defined?(const)}
|
|
142
|
+
["PreLoadUnloadable", "PreLoadRequiredUnloadable"].each {|const| assert !Object.const_defined?(const)}
|
|
143
|
+
["PostLoad", "PostLoadRequired"].each {|const| assert Object.const_defined?(const)}
|
|
144
|
+
["PostLoadUnloadable", "PostLoadRequiredUnloadable"].each {|const| assert !Object.const_defined?(const)}
|
|
145
|
+
|
|
146
|
+
# Now, requiring files will NOT restore any modules because
|
|
147
|
+
# the files have already been required
|
|
148
|
+
assert_nothing_raised do
|
|
149
|
+
require pre_load
|
|
150
|
+
require pre_load_unloadable
|
|
151
|
+
require pre_loader
|
|
152
|
+
|
|
153
|
+
require post_load
|
|
154
|
+
require post_load_unloadable
|
|
155
|
+
require post_loader
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
["PreLoad", "PreLoadRequired"].each {|const| assert Object.const_defined?(const)}
|
|
159
|
+
["PreLoadUnloadable", "PreLoadRequiredUnloadable"].each {|const| assert !Object.const_defined?(const)}
|
|
160
|
+
["PostLoad", "PostLoadRequired"].each {|const| assert Object.const_defined?(const)}
|
|
161
|
+
["PostLoadUnloadable", "PostLoadRequiredUnloadable"].each {|const| assert !Object.const_defined?(const)}
|
|
162
|
+
|
|
163
|
+
# but again... calling the missing modules reloads them, so even
|
|
164
|
+
# though the require doesn't work, you shold be good because you
|
|
165
|
+
# won't be accessing the module without calling it. (right?)
|
|
166
|
+
assert PreLoadUnloadable
|
|
167
|
+
assert PreLoadRequiredUnloadable
|
|
168
|
+
assert PostLoadUnloadable
|
|
169
|
+
assert PostLoadRequiredUnloadable
|
|
170
|
+
|
|
171
|
+
pre_load_consts.each {|const| assert Object.const_defined?(const)}
|
|
172
|
+
post_load_consts.each {|const| assert Object.const_defined?(const)}
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'active_support'
|
|
2
|
+
require 'test/unit'
|
|
3
|
+
|
|
4
|
+
class ClassConfigurationTest < Test::Unit::TestCase
|
|
5
|
+
class A
|
|
6
|
+
write_inheritable_attribute(:hash, {})
|
|
7
|
+
class_inheritable_reader(:hash)
|
|
8
|
+
|
|
9
|
+
self.hash[:one] = 'one'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class B < A
|
|
13
|
+
self.hash[:one] = 1
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_inheritance
|
|
17
|
+
assert_not_equal A.hash, B.hash
|
|
18
|
+
|
|
19
|
+
assert_equal 'one', A.hash[:one]
|
|
20
|
+
assert_equal 1, B.hash[:one]
|
|
21
|
+
end
|
|
22
|
+
end
|
data/test/file_task_test.rb
CHANGED
|
@@ -21,20 +21,134 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def test_touch_file
|
|
24
|
-
non_existant_file =
|
|
24
|
+
non_existant_file = method_filepath(:output, "non_existant_file.txt")
|
|
25
25
|
assert !File.exists?(non_existant_file)
|
|
26
26
|
touch_file(non_existant_file)
|
|
27
27
|
assert File.exists?(non_existant_file)
|
|
28
28
|
assert File.file?(non_existant_file)
|
|
29
29
|
assert_equal "", File.read(non_existant_file)
|
|
30
30
|
|
|
31
|
-
non_existant_file =
|
|
31
|
+
non_existant_file = method_filepath(:output, "non_existant_file2.txt")
|
|
32
32
|
assert !File.exists?(non_existant_file)
|
|
33
33
|
touch_file(non_existant_file, "content")
|
|
34
34
|
assert File.exists?(non_existant_file)
|
|
35
35
|
assert File.file?(non_existant_file)
|
|
36
36
|
assert_equal "content", File.read(non_existant_file)
|
|
37
37
|
end
|
|
38
|
+
|
|
39
|
+
#
|
|
40
|
+
# doc tests
|
|
41
|
+
#
|
|
42
|
+
|
|
43
|
+
def test_documentation
|
|
44
|
+
file_one = method_filepath(:output, "file.txt")
|
|
45
|
+
file_two = method_filepath(:output, "path/to/file.txt")
|
|
46
|
+
dir = method_filepath(:output, "some/dir")
|
|
47
|
+
FileUtils.mkdir_p( method_filepath(:output) )
|
|
48
|
+
|
|
49
|
+
File.open(file_one, "w") {|f| f << "original content"}
|
|
50
|
+
t = Tap::FileTask.new do |task, inputs|
|
|
51
|
+
task.mkdir(dir)
|
|
52
|
+
task.prepare([file_one, file_two])
|
|
53
|
+
|
|
54
|
+
File.open(file_one, "w") {|f| f << "new content"}
|
|
55
|
+
FileUtils.touch(file_two)
|
|
56
|
+
|
|
57
|
+
raise "error!"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
begin
|
|
61
|
+
assert !File.exists?(dir)
|
|
62
|
+
assert !File.exists?(file_two)
|
|
63
|
+
t.execute(nil)
|
|
64
|
+
flunk "no error raised"
|
|
65
|
+
rescue
|
|
66
|
+
assert_equal "error!", $!.message
|
|
67
|
+
assert !File.exists?(dir)
|
|
68
|
+
assert !File.exists?(file_two)
|
|
69
|
+
assert_equal "original content", File.read(file_one)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
#
|
|
74
|
+
# open tests
|
|
75
|
+
#
|
|
76
|
+
|
|
77
|
+
def test_open_doc
|
|
78
|
+
FileUtils.mkdir_p(method_filepath(:output))
|
|
79
|
+
one_filepath = method_filepath(:output, "one.txt")
|
|
80
|
+
two_filepath = method_filepath(:output, "two.txt")
|
|
81
|
+
|
|
82
|
+
Tap::FileTask.open([one_filepath, two_filepath], "w") do |one, two|
|
|
83
|
+
one << "one"
|
|
84
|
+
two << "two"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
assert_equal "one", File.read(one_filepath)
|
|
88
|
+
assert_equal "two", File.read(two_filepath)
|
|
89
|
+
|
|
90
|
+
#
|
|
91
|
+
filepath = method_filepath(:output, "file.txt")
|
|
92
|
+
Tap::FileTask.open(filepath, "w") do |array|
|
|
93
|
+
array.first << "content"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
assert_equal "content", File.read(filepath)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_open_opens_each_file
|
|
100
|
+
FileUtils.mkdir_p(method_filepath(:output))
|
|
101
|
+
|
|
102
|
+
list = [0, 1].collect do |n|
|
|
103
|
+
path = method_filepath(:output, "#{n}.txt")
|
|
104
|
+
File.open(path, "w") {|f| f << n.to_s}
|
|
105
|
+
path
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
Tap::FileTask.open(list) do |files|
|
|
109
|
+
files.each_with_index do |file, n|
|
|
110
|
+
assert_equal File, file.class
|
|
111
|
+
assert_equal n.to_s, file.read
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def test_open_opens_with_input_mode
|
|
117
|
+
FileUtils.mkdir_p(method_filepath(:output))
|
|
118
|
+
|
|
119
|
+
list = [0, 1].collect do |n|
|
|
120
|
+
path = method_filepath(:output, "#{n}.txt")
|
|
121
|
+
path
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
Tap::FileTask.open(list, "w") do |files|
|
|
125
|
+
files.each_with_index do |file, n|
|
|
126
|
+
assert_equal File, file.class
|
|
127
|
+
file << n.to_s
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
list.each_with_index do |file, n|
|
|
132
|
+
assert_equal n.to_s, File.read(file)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def test_open_returns_open_files_if_no_block_is_given
|
|
137
|
+
FileUtils.mkdir_p(method_filepath(:output))
|
|
138
|
+
|
|
139
|
+
list = [0, 1].collect do |n|
|
|
140
|
+
path = method_filepath(:output, "#{n}.txt")
|
|
141
|
+
File.open(path, "w") {|f| f << n.to_s}
|
|
142
|
+
path
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
open_files = Tap::FileTask.open(list)
|
|
146
|
+
open_files.each_with_index do |file, n|
|
|
147
|
+
assert_equal File, file.class
|
|
148
|
+
assert_equal n.to_s, file.read
|
|
149
|
+
file.close
|
|
150
|
+
end
|
|
151
|
+
end
|
|
38
152
|
|
|
39
153
|
#
|
|
40
154
|
# dirname tests
|
|
@@ -72,54 +186,64 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
72
186
|
end
|
|
73
187
|
|
|
74
188
|
#
|
|
75
|
-
#
|
|
189
|
+
# filepath tests
|
|
76
190
|
#
|
|
77
191
|
|
|
78
|
-
def
|
|
192
|
+
def test_filepath_passes_app_dir_dirname_and_path_to_block
|
|
79
193
|
t.inference do |root, dir, path|
|
|
80
194
|
[root, dir, path]
|
|
81
195
|
end
|
|
82
196
|
|
|
83
197
|
assert_equal "tap/file_task", t.dirname
|
|
84
|
-
assert_equal [app[:dir], "tap/file_task", "path"], t.
|
|
198
|
+
assert_equal [app[:dir], "tap/file_task", "path"], t.filepath(:dir, "path")
|
|
85
199
|
end
|
|
86
200
|
|
|
87
|
-
def
|
|
201
|
+
def test_filepath_with_multiple_paths
|
|
88
202
|
t.inference do |root, dir, *paths|
|
|
89
203
|
[root, dir, paths]
|
|
90
204
|
end
|
|
91
|
-
assert_equal [app[:dir], "tap/file_task", ["path", "to", "file"]], t.
|
|
205
|
+
assert_equal [app[:dir], "tap/file_task", ["path", "to", "file"]], t.filepath(:dir, "path", "to", "file")
|
|
92
206
|
end
|
|
93
207
|
|
|
94
|
-
def
|
|
208
|
+
def test_filepath_with_multiple_paths_but_single_path_given
|
|
95
209
|
t.inference do |root, dir, *paths|
|
|
96
210
|
[root, dir, paths]
|
|
97
211
|
end
|
|
98
|
-
assert_equal [app[:dir], "tap/file_task", ["path"]], t.
|
|
212
|
+
assert_equal [app[:dir], "tap/file_task", ["path"]], t.filepath(:dir, "path")
|
|
99
213
|
|
|
100
214
|
t.inference(true) do |root, dir, path_a, path_b|
|
|
101
215
|
[root, dir, path_a, path_b]
|
|
102
216
|
end
|
|
103
|
-
assert_equal [app[:dir], "tap/file_task", "path", nil], t.
|
|
217
|
+
assert_equal [app[:dir], "tap/file_task", "path", nil], t.filepath(:dir, "path")
|
|
104
218
|
end
|
|
105
219
|
|
|
106
|
-
def
|
|
220
|
+
def test_filepath_with_single_path_but_multiple_paths_given
|
|
107
221
|
t.inference do |root, dir, path|
|
|
108
222
|
[root, dir, path]
|
|
109
223
|
end
|
|
110
|
-
assert_equal [app[:dir], "tap/file_task", "path"], t.
|
|
224
|
+
assert_equal [app[:dir], "tap/file_task", "path"], t.filepath(:dir, "path", "to", "file")
|
|
111
225
|
end
|
|
112
226
|
|
|
113
|
-
def
|
|
227
|
+
def test_filepath_constructs_path_using_app_filepath_when_inference_block_is_not_set
|
|
114
228
|
assert_nil t.inference_block
|
|
115
229
|
assert_equal(
|
|
116
230
|
app.filepath(:dir, "tap/file_task", "path", "to", "file"),
|
|
117
|
-
t.
|
|
231
|
+
t.filepath(:dir, "path", "to", "file"))
|
|
118
232
|
end
|
|
119
233
|
|
|
120
234
|
#
|
|
121
235
|
# backup_filepath test
|
|
122
236
|
#
|
|
237
|
+
|
|
238
|
+
def btest_backup_filepath_documentation
|
|
239
|
+
|
|
240
|
+
t = FileTask.new("dir/name", :backup_dir => :backup, :backup_timestamp => "%Y%m%d")
|
|
241
|
+
t.app[:backup] # => "/backup"
|
|
242
|
+
Date.today.to_s # => "2007-08-08"
|
|
243
|
+
|
|
244
|
+
t.backup_filepath("path/to/folder/file.txt") # => "/backup/file_20070808.txt"
|
|
245
|
+
t.backup_filepath("dir/name/folder/file.txt") # => "/backup/folder/file_20070808.txt"
|
|
246
|
+
end
|
|
123
247
|
|
|
124
248
|
def prepare_backup_filepath_with_output_and_timestamp
|
|
125
249
|
timestamp_format = "%Y%m%d"
|
|
@@ -176,7 +300,8 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
176
300
|
t.backup_filepath("path/to/file.txt"))
|
|
177
301
|
end
|
|
178
302
|
|
|
179
|
-
|
|
303
|
+
# the SciTE text editor whines and fails for 'words' this long... hence the last part of the test name is commented out
|
|
304
|
+
def test_backup_filepath_does_not_mistake_files_as_folders#_when_checking_if_input_is_relative_to_dirname
|
|
180
305
|
timestamp = prepare_backup_filepath_with_output_and_timestamp
|
|
181
306
|
|
|
182
307
|
t.inference do |root, dir, path|
|
|
@@ -188,71 +313,13 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
188
313
|
t.backup_filepath("folder/tap/file_task.txt"))
|
|
189
314
|
end
|
|
190
315
|
|
|
191
|
-
#
|
|
192
|
-
# open tests
|
|
193
|
-
#
|
|
194
|
-
|
|
195
|
-
def test_open_opens_each_file
|
|
196
|
-
FileUtils.mkdir_p(infer_filepath(:output))
|
|
197
|
-
|
|
198
|
-
list = [0, 1].collect do |n|
|
|
199
|
-
path = infer_filepath(:output, "#{n}.txt")
|
|
200
|
-
File.open(path, "w") {|f| f << n.to_s}
|
|
201
|
-
path
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
t.open(list) do |files|
|
|
205
|
-
files.each_with_index do |file, n|
|
|
206
|
-
assert_equal File, file.class
|
|
207
|
-
assert_equal n.to_s, file.read
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
def test_open_opens_with_input_mode
|
|
213
|
-
FileUtils.mkdir_p(infer_filepath(:output))
|
|
214
|
-
|
|
215
|
-
list = [0, 1].collect do |n|
|
|
216
|
-
path = infer_filepath(:output, "#{n}.txt")
|
|
217
|
-
path
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
t.open(list, "w") do |files|
|
|
221
|
-
files.each_with_index do |file, n|
|
|
222
|
-
assert_equal File, file.class
|
|
223
|
-
file << n.to_s
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
list.each_with_index do |file, n|
|
|
228
|
-
assert_equal n.to_s, File.read(file)
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
def test_open_returns_open_files_if_no_block_is_given
|
|
233
|
-
FileUtils.mkdir_p(infer_filepath(:output))
|
|
234
|
-
|
|
235
|
-
list = [0, 1].collect do |n|
|
|
236
|
-
path = infer_filepath(:output, "#{n}.txt")
|
|
237
|
-
File.open(path, "w") {|f| f << n.to_s}
|
|
238
|
-
path
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
open_files = t.open(list)
|
|
242
|
-
open_files.each_with_index do |file, n|
|
|
243
|
-
assert_equal File, file.class
|
|
244
|
-
assert_equal n.to_s, file.read
|
|
245
|
-
file.close
|
|
246
|
-
end
|
|
247
|
-
end
|
|
248
|
-
|
|
249
316
|
#
|
|
250
317
|
# uptodate tests
|
|
251
318
|
#
|
|
252
319
|
|
|
253
320
|
def uptodate_test_setup(output_str='')
|
|
254
|
-
of1 =
|
|
255
|
-
of2 =
|
|
321
|
+
of1 = trs.filepath(:root, 'old_file_one.txt')
|
|
322
|
+
of2 = trs.filepath(:root, 'old_file_two.txt')
|
|
256
323
|
|
|
257
324
|
nf1 = tempfile('new_file_one.txt')
|
|
258
325
|
File.open(nf1, "w") {|file| file << output_str}
|
|
@@ -277,7 +344,7 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
277
344
|
def test_uptodate
|
|
278
345
|
of1, of2, nf1, nf2 = uptodate_test_setup
|
|
279
346
|
|
|
280
|
-
non =
|
|
347
|
+
non = trs.filepath(:output, "non_existant_file.txt")
|
|
281
348
|
assert !File.exists?(non)
|
|
282
349
|
|
|
283
350
|
assert t.uptodate?(nf1)
|
|
@@ -300,7 +367,7 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
300
367
|
|
|
301
368
|
of1, of2, nf1, nf2 = uptodate_test_setup
|
|
302
369
|
|
|
303
|
-
non =
|
|
370
|
+
non = trs.filepath(:output, "non_existant_file.txt")
|
|
304
371
|
assert !File.exists?(non)
|
|
305
372
|
|
|
306
373
|
assert t.uptodate?(nf1)
|
|
@@ -319,7 +386,7 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
319
386
|
end
|
|
320
387
|
|
|
321
388
|
def test_uptodate_with_out_of_date_config_file
|
|
322
|
-
filepath =
|
|
389
|
+
filepath = trs.filepath(:config, "configured-0.1.yml")
|
|
323
390
|
assert !File.exists?(filepath)
|
|
324
391
|
begin
|
|
325
392
|
of1, of2, nf1, nf2 = uptodate_test_setup
|
|
@@ -350,9 +417,32 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
350
417
|
# backup tests
|
|
351
418
|
#
|
|
352
419
|
|
|
420
|
+
def test_backup_restore_doc
|
|
421
|
+
FileUtils.mkdir_p(method_filepath(:output))
|
|
422
|
+
FileUtils.mkdir_p(method_filepath(:output))
|
|
423
|
+
|
|
424
|
+
file = method_filepath(:output, "file.txt")
|
|
425
|
+
File.open(file, "w") {|f| f << "file content"}
|
|
426
|
+
|
|
427
|
+
t = Tap::FileTask.new
|
|
428
|
+
t.app[:backup, true] = method_filepath(:backup)
|
|
429
|
+
backed_up_file = t.backup(file).first
|
|
430
|
+
|
|
431
|
+
assert !File.exists?(file)
|
|
432
|
+
assert File.exists?(backed_up_file)
|
|
433
|
+
assert_equal "file content", File.read(backed_up_file)
|
|
434
|
+
|
|
435
|
+
File.open(file, "w") {|f| f << "new content"}
|
|
436
|
+
t.restore(file)
|
|
437
|
+
|
|
438
|
+
assert File.exists?(file)
|
|
439
|
+
assert !File.exists?(backed_up_file)
|
|
440
|
+
assert_equal "file content", File.read(file)
|
|
441
|
+
end
|
|
442
|
+
|
|
353
443
|
def backup_test_setup
|
|
354
|
-
existing_file =
|
|
355
|
-
backup_file =
|
|
444
|
+
existing_file = method_filepath(:output, "file.txt")
|
|
445
|
+
backup_file = method_filepath(:output, "backup.txt")
|
|
356
446
|
|
|
357
447
|
touch_file(existing_file, "existing content")
|
|
358
448
|
# assure backup_filepath will return backup_file
|
|
@@ -371,34 +461,39 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
371
461
|
assert_equal backup_file, t.backup_filepath(existing_file)
|
|
372
462
|
end
|
|
373
463
|
|
|
374
|
-
def
|
|
464
|
+
def test_backup_moves_filepath_to_backup_filepath
|
|
375
465
|
existing_file, backup_file = backup_test_setup
|
|
376
466
|
|
|
377
467
|
t.backup(existing_file)
|
|
378
468
|
|
|
379
|
-
assert File.exists?(existing_file)
|
|
469
|
+
assert !File.exists?(existing_file)
|
|
380
470
|
assert File.exists?(backup_file)
|
|
381
|
-
|
|
471
|
+
assert_equal "existing content", File.read(backup_file)
|
|
382
472
|
end
|
|
383
473
|
|
|
384
|
-
def
|
|
474
|
+
def test_backup_copies_filepath_to_backup_filepath_if_backup_using_copy_is_true
|
|
385
475
|
existing_file, backup_file = backup_test_setup
|
|
386
476
|
|
|
387
|
-
t.backup(existing_file,
|
|
477
|
+
t.backup(existing_file, true)
|
|
388
478
|
|
|
389
|
-
assert
|
|
479
|
+
assert File.exists?(existing_file)
|
|
390
480
|
assert File.exists?(backup_file)
|
|
391
|
-
|
|
481
|
+
assert FileUtils.compare_file(existing_file, backup_file)
|
|
392
482
|
end
|
|
393
483
|
|
|
394
484
|
def test_backup_registers_expanded_filepath_and_backup_filepath_in_backed_up_files
|
|
395
485
|
existing_file, backup_file = backup_test_setup
|
|
396
486
|
|
|
397
|
-
|
|
487
|
+
relative_filepath = Tap::Root.relative_filepath(Dir.pwd, existing_file)
|
|
488
|
+
assert_not_equal existing_file, relative_filepath
|
|
489
|
+
|
|
490
|
+
assert_equal existing_file, File.expand_path(existing_file)
|
|
491
|
+
assert_equal existing_file, File.expand_path(relative_filepath)
|
|
492
|
+
assert_equal backup_file, File.expand_path(backup_file)
|
|
398
493
|
|
|
399
494
|
assert_equal({}, t.backed_up_files)
|
|
400
|
-
t.backup(
|
|
401
|
-
assert_equal({
|
|
495
|
+
t.backup(relative_filepath)
|
|
496
|
+
assert_equal({existing_file => backup_file}, t.backed_up_files)
|
|
402
497
|
end
|
|
403
498
|
|
|
404
499
|
def test_backup_does_nothing_if_filepath_does_not_exist
|
|
@@ -417,10 +512,10 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
417
512
|
end
|
|
418
513
|
|
|
419
514
|
def test_backup_acts_on_list_and_returns_backup_files
|
|
420
|
-
existing_file0 =
|
|
421
|
-
existing_file1 =
|
|
422
|
-
backup_file0 =
|
|
423
|
-
backup_file1 =
|
|
515
|
+
existing_file0 = method_filepath(:output, "file0.txt")
|
|
516
|
+
existing_file1 = method_filepath(:output, "file1.txt")
|
|
517
|
+
backup_file0 = method_filepath(:output, "backup0.txt")
|
|
518
|
+
backup_file1 = method_filepath(:output, "backup1.txt")
|
|
424
519
|
|
|
425
520
|
touch_file(existing_file0)
|
|
426
521
|
touch_file(existing_file1)
|
|
@@ -439,7 +534,7 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
439
534
|
|
|
440
535
|
def test_backup_raises_error_if_backup_for_file_already_exists
|
|
441
536
|
existing_file, backup_file = backup_test_setup
|
|
442
|
-
t.backup(existing_file)
|
|
537
|
+
t.backup(existing_file, true)
|
|
443
538
|
|
|
444
539
|
assert_raise(RuntimeError) { t.backup(existing_file) }
|
|
445
540
|
end
|
|
@@ -449,8 +544,8 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
449
544
|
#
|
|
450
545
|
|
|
451
546
|
def test_restore_restores_backed_up_file_to_original_location_as_listed_in_backed_up_files
|
|
452
|
-
original_file = File.expand_path(
|
|
453
|
-
backup_file = File.expand_path(
|
|
547
|
+
original_file = File.expand_path(method_filepath(:output, 'original/file.txt'))
|
|
548
|
+
backup_file = File.expand_path(method_filepath(:output, 'backup/file.txt'))
|
|
454
549
|
|
|
455
550
|
FileUtils.mkdir_p( File.dirname(original_file) )
|
|
456
551
|
touch_file(backup_file)
|
|
@@ -467,8 +562,8 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
467
562
|
end
|
|
468
563
|
|
|
469
564
|
def test_restore_creates_dirs_as_needed_to_restore_file
|
|
470
|
-
original_file = File.expand_path(
|
|
471
|
-
backup_file = File.expand_path(
|
|
565
|
+
original_file = File.expand_path(method_filepath(:output, 'original/file.txt'))
|
|
566
|
+
backup_file = File.expand_path(method_filepath(:output, 'backup/file.txt'))
|
|
472
567
|
|
|
473
568
|
touch_file(backup_file)
|
|
474
569
|
|
|
@@ -483,14 +578,16 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
483
578
|
assert !File.exists?(backup_file)
|
|
484
579
|
end
|
|
485
580
|
|
|
486
|
-
def
|
|
581
|
+
def test_restore_does_nothing_if_the_input_file_is_not_backed_up
|
|
582
|
+
assert !File.exists?("original_file")
|
|
487
583
|
assert t.backed_up_files.empty?
|
|
488
|
-
|
|
584
|
+
assert_equal [], t.restore("original_file")
|
|
585
|
+
assert !File.exists?("original_file")
|
|
489
586
|
end
|
|
490
587
|
|
|
491
588
|
def test_restore_removes_backup_dir_using_rmdir
|
|
492
|
-
original_file = File.expand_path(
|
|
493
|
-
backup_file = File.expand_path(
|
|
589
|
+
original_file = File.expand_path(method_filepath(:output, 'original/file.txt'))
|
|
590
|
+
backup_file = File.expand_path(method_filepath(:output, 'backup/file.txt'))
|
|
494
591
|
backup_dir = File.dirname(backup_file)
|
|
495
592
|
|
|
496
593
|
t.mkdir(backup_file)
|
|
@@ -505,10 +602,10 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
505
602
|
end
|
|
506
603
|
|
|
507
604
|
def test_restore_acts_on_list_and_returns_restored_files
|
|
508
|
-
existing_file0 = File.expand_path(
|
|
509
|
-
existing_file1 = File.expand_path(
|
|
510
|
-
backup_file0 = File.expand_path(
|
|
511
|
-
backup_file1 = File.expand_path(
|
|
605
|
+
existing_file0 = File.expand_path(method_filepath(:output, "file0.txt"))
|
|
606
|
+
existing_file1 = File.expand_path(method_filepath(:output, "file1.txt"))
|
|
607
|
+
backup_file0 = File.expand_path(method_filepath(:output, "backup0.txt"))
|
|
608
|
+
backup_file1 = File.expand_path(method_filepath(:output, "backup1.txt"))
|
|
512
609
|
|
|
513
610
|
touch_file(backup_file0)
|
|
514
611
|
touch_file(backup_file1)
|
|
@@ -529,8 +626,34 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
529
626
|
# mkdir tests
|
|
530
627
|
#
|
|
531
628
|
|
|
629
|
+
def test_mkdir_documentation
|
|
630
|
+
dir_one = method_filepath(:output, "path/to/dir")
|
|
631
|
+
dir_two = method_filepath(:output, "path/to/another")
|
|
632
|
+
|
|
633
|
+
t = Tap::FileTask.new do |task, inputs|
|
|
634
|
+
assert !File.exists?(method_filepath(:output, "path"))
|
|
635
|
+
|
|
636
|
+
task.mkdir(dir_one)
|
|
637
|
+
assert File.exists?(dir_one)
|
|
638
|
+
|
|
639
|
+
FileUtils.mkdir(dir_two)
|
|
640
|
+
assert File.exists?(dir_two)
|
|
641
|
+
|
|
642
|
+
raise "error!"
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
begin
|
|
646
|
+
t.execute(nil)
|
|
647
|
+
flunk "no error raised"
|
|
648
|
+
rescue
|
|
649
|
+
assert_equal "error!", $!.message
|
|
650
|
+
assert !File.exists?(dir_one)
|
|
651
|
+
assert File.exists?(dir_two)
|
|
652
|
+
end
|
|
653
|
+
end
|
|
654
|
+
|
|
532
655
|
def test_mkdir_creates_dir_if_it_does_not_exist
|
|
533
|
-
dir =
|
|
656
|
+
dir = method_filepath(:output, 'path/to/non_existant_folder')
|
|
534
657
|
FileUtils.mkdir_p(File.dirname(dir))
|
|
535
658
|
assert !File.exists?(dir)
|
|
536
659
|
|
|
@@ -539,36 +662,37 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
539
662
|
end
|
|
540
663
|
|
|
541
664
|
def test_mkdir_creates_parent_dirs_if_they_do_not_exist
|
|
542
|
-
dir =
|
|
543
|
-
assert !File.exists?(
|
|
665
|
+
dir = method_filepath(:output, 'path/to/non_existant_folder')
|
|
666
|
+
assert !File.exists?(method_filepath(:output))
|
|
544
667
|
|
|
545
668
|
t.mkdir(dir)
|
|
546
669
|
assert File.exists?(dir)
|
|
547
670
|
end
|
|
548
671
|
|
|
549
|
-
def
|
|
550
|
-
dir =
|
|
551
|
-
assert_equal [], t.
|
|
552
|
-
assert_not_equal dir, File.expand_path(dir)
|
|
672
|
+
def test_mkdir_registers_expanded_dir_and_all_non_existing_parent_dirs_in_added_files
|
|
673
|
+
dir = method_filepath(:output, 'path/to/non_existant_folder')
|
|
674
|
+
assert_equal [], t.added_files
|
|
553
675
|
|
|
554
|
-
|
|
676
|
+
relative_dir = Tap::Root.relative_filepath(Dir.pwd, dir)
|
|
677
|
+
assert_not_equal dir, relative_dir
|
|
678
|
+
assert_equal dir, File.expand_path(relative_dir)
|
|
679
|
+
|
|
680
|
+
t.mkdir(relative_dir)
|
|
555
681
|
|
|
556
682
|
expected = [
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
]
|
|
563
|
-
File.expand_path(dir)
|
|
564
|
-
end
|
|
683
|
+
method_root,
|
|
684
|
+
method_filepath(:output),
|
|
685
|
+
method_filepath(:output, 'path'),
|
|
686
|
+
method_filepath(:output, 'path/to'),
|
|
687
|
+
method_filepath(:output, 'path/to/non_existant_folder')
|
|
688
|
+
]
|
|
565
689
|
|
|
566
|
-
assert_equal expected, t.
|
|
690
|
+
assert_equal expected, t.added_files
|
|
567
691
|
end
|
|
568
692
|
|
|
569
693
|
def test_mkdir_acts_on_and_returns_list
|
|
570
|
-
dir =
|
|
571
|
-
another =
|
|
694
|
+
dir = method_filepath(:output, 'path')
|
|
695
|
+
another = method_filepath(:output, 'another')
|
|
572
696
|
|
|
573
697
|
assert !File.exists?(dir)
|
|
574
698
|
assert !File.exists?(another)
|
|
@@ -583,9 +707,26 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
583
707
|
# rmdir tests
|
|
584
708
|
#
|
|
585
709
|
|
|
710
|
+
def test_rmdir_documentation
|
|
711
|
+
dir_one = method_filepath(:output, 'path')
|
|
712
|
+
dir_two = method_filepath(:output, 'path/to/dir')
|
|
713
|
+
FileUtils.mkdir_p( method_filepath(:output) )
|
|
714
|
+
|
|
715
|
+
t = Tap::FileTask.new
|
|
716
|
+
assert !File.exists?(dir_one)
|
|
717
|
+
FileUtils.mkdir(dir_one)
|
|
718
|
+
|
|
719
|
+
t.mkdir(dir_two)
|
|
720
|
+
assert File.exists?(dir_two)
|
|
721
|
+
|
|
722
|
+
t.rmdir(dir_two)
|
|
723
|
+
assert File.exists?(dir_one)
|
|
724
|
+
assert !File.exists?(method_filepath(:output, 'path/to'))
|
|
725
|
+
end
|
|
726
|
+
|
|
586
727
|
def test_rmdir_removes_dir_if_made_by_the_task
|
|
587
|
-
dir =
|
|
588
|
-
existing_dir =
|
|
728
|
+
dir = method_filepath(:output, 'path/to/non_existant_folder')
|
|
729
|
+
existing_dir = method_filepath(:output, 'path/to')
|
|
589
730
|
|
|
590
731
|
FileUtils.mkdir_p(existing_dir)
|
|
591
732
|
assert File.exists?(existing_dir)
|
|
@@ -600,9 +741,9 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
600
741
|
end
|
|
601
742
|
|
|
602
743
|
def test_rmdir_removes_parent_dirs_if_made_by_the_task
|
|
603
|
-
dir =
|
|
604
|
-
root_parent_dir =
|
|
605
|
-
existing_dir =
|
|
744
|
+
dir = method_filepath(:output, 'path/to/non/existant/folder')
|
|
745
|
+
root_parent_dir = method_filepath(:output, 'path/to')
|
|
746
|
+
existing_dir = method_filepath(:output, 'path')
|
|
606
747
|
|
|
607
748
|
FileUtils.mkdir_p(existing_dir)
|
|
608
749
|
assert File.exists?(existing_dir)
|
|
@@ -617,7 +758,7 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
617
758
|
end
|
|
618
759
|
|
|
619
760
|
def test_rmdir_does_not_remove_if_dir_was_not_made_by_task
|
|
620
|
-
dir =
|
|
761
|
+
dir = method_filepath(:output, 'path/to/non_existant_folder')
|
|
621
762
|
|
|
622
763
|
FileUtils.mkdir_p(dir)
|
|
623
764
|
assert File.exists?(dir)
|
|
@@ -627,8 +768,8 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
627
768
|
end
|
|
628
769
|
|
|
629
770
|
def test_rmdir_does_not_remove_if_folder_is_not_empty
|
|
630
|
-
dir =
|
|
631
|
-
not_empty_dir =
|
|
771
|
+
dir = method_filepath(:output, 'path/to/folder')
|
|
772
|
+
not_empty_dir = method_filepath(:output, 'path/to')
|
|
632
773
|
|
|
633
774
|
t.mkdir(dir)
|
|
634
775
|
assert File.exists?(dir)
|
|
@@ -641,8 +782,8 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
641
782
|
end
|
|
642
783
|
|
|
643
784
|
def test_rmdir_checks_for_hidden_files_as_well_as_regular_files
|
|
644
|
-
dir =
|
|
645
|
-
not_empty_dir =
|
|
785
|
+
dir = method_filepath(:output, 'path/to/folder')
|
|
786
|
+
not_empty_dir = method_filepath(:output, 'path/to')
|
|
646
787
|
|
|
647
788
|
t.mkdir(dir)
|
|
648
789
|
assert File.exists?(dir)
|
|
@@ -654,73 +795,93 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
654
795
|
assert !File.exists?(dir)
|
|
655
796
|
end
|
|
656
797
|
|
|
657
|
-
def
|
|
658
|
-
dir =
|
|
798
|
+
def test_rmdir_clears_added_files_of_removed_dirs
|
|
799
|
+
dir = method_filepath(:output, 'path/to/folder')
|
|
659
800
|
|
|
660
|
-
FileUtils.mkdir_p(
|
|
661
|
-
assert_equal [], t.
|
|
801
|
+
FileUtils.mkdir_p(method_filepath(:output))
|
|
802
|
+
assert_equal [], t.added_files
|
|
662
803
|
|
|
663
804
|
t.mkdir(dir)
|
|
664
805
|
assert_equal [
|
|
665
|
-
File.expand_path(
|
|
666
|
-
File.expand_path(
|
|
667
|
-
File.expand_path(
|
|
806
|
+
File.expand_path(method_filepath(:output, 'path')),
|
|
807
|
+
File.expand_path(method_filepath(:output, 'path/to')),
|
|
808
|
+
File.expand_path(method_filepath(:output, 'path/to/folder'))], t.added_files
|
|
668
809
|
|
|
669
810
|
# touch a file so the 'path' folder isn't removed
|
|
670
|
-
touch_file
|
|
811
|
+
touch_file method_filepath(:output, 'path/file.txt')
|
|
671
812
|
|
|
672
813
|
t.rmdir(dir)
|
|
673
814
|
assert_equal [
|
|
674
|
-
File.expand_path(
|
|
815
|
+
File.expand_path(method_filepath(:output, 'path'))], t.added_files
|
|
675
816
|
end
|
|
676
817
|
|
|
677
818
|
def test_rmdir_acts_on_and_returns_expanded_list_of_removed_dirs
|
|
678
|
-
dir =
|
|
679
|
-
another =
|
|
680
|
-
not_removed =
|
|
681
|
-
removed =
|
|
819
|
+
dir = method_filepath(:output, 'path')
|
|
820
|
+
another = method_filepath(:output, 'another')
|
|
821
|
+
not_removed = method_filepath(:output, 'not')
|
|
822
|
+
removed = method_filepath(:output, 'not/removed')
|
|
682
823
|
|
|
683
824
|
t.mkdir([dir, another, not_removed, removed])
|
|
684
825
|
# touch a file so the not_removed folder isn't removed
|
|
685
|
-
touch_file
|
|
826
|
+
touch_file method_filepath(:output, 'not/file.txt')
|
|
686
827
|
|
|
687
828
|
expected = [dir, another, removed].collect {|d| File.expand_path(d)}
|
|
688
829
|
assert_equal expected, t.rmdir([dir, another, not_removed, removed])
|
|
689
830
|
end
|
|
690
831
|
|
|
691
832
|
#
|
|
692
|
-
#
|
|
833
|
+
# prepare tests
|
|
693
834
|
#
|
|
694
835
|
|
|
695
|
-
def
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
836
|
+
def test_prepare_documentation
|
|
837
|
+
file_one = method_filepath(:output, "file.txt")
|
|
838
|
+
file_two = method_filepath(:output, "path/to/file.txt")
|
|
839
|
+
FileUtils.mkdir_p( method_filepath(:output) )
|
|
840
|
+
|
|
841
|
+
File.open(file_one, "w") {|f| f << "original content"}
|
|
842
|
+
t = Tap::FileTask.new do |task, inputs|
|
|
843
|
+
assert !File.exists?(method_filepath(:output, "path"))
|
|
700
844
|
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
845
|
+
# backup... prepare parent dirs... prepare for restore
|
|
846
|
+
task.prepare([file_one, file_two])
|
|
847
|
+
|
|
848
|
+
File.open(file_one, "w") {|f| f << "new content"}
|
|
849
|
+
FileUtils.touch(file_two)
|
|
850
|
+
|
|
851
|
+
raise "error!"
|
|
706
852
|
end
|
|
707
|
-
|
|
853
|
+
|
|
854
|
+
begin
|
|
855
|
+
t.execute(nil)
|
|
856
|
+
flunk "no error raised"
|
|
857
|
+
rescue
|
|
858
|
+
assert_equal "error!", $!.message
|
|
859
|
+
assert File.exists?(file_one)
|
|
860
|
+
assert_equal "original content", File.read(file_one)
|
|
861
|
+
assert !File.exists?(method_filepath(:output, "path"))
|
|
862
|
+
end
|
|
863
|
+
end
|
|
864
|
+
|
|
865
|
+
def test_prepare_acts_on_and_returns_list
|
|
866
|
+
filepath = "file.txt"
|
|
867
|
+
another = "another.txt"
|
|
868
|
+
assert_equal [filepath, another], t.prepare([filepath, another])
|
|
708
869
|
end
|
|
709
870
|
|
|
710
|
-
def
|
|
711
|
-
existing_file =
|
|
712
|
-
non_existant_file =
|
|
871
|
+
def test_prepare_backs_up_existing_files_and_creates_non_existant_dirs
|
|
872
|
+
existing_file = method_filepath(:output, "path/to/existing/file.txt")
|
|
873
|
+
non_existant_file = method_filepath(:output, "path/to/non/existant/file.txt")
|
|
713
874
|
touch_file(existing_file, "existing content")
|
|
714
875
|
|
|
715
876
|
# be sure inference leads files to an output dir, for cleanup
|
|
716
|
-
removal_path =
|
|
877
|
+
removal_path = method_filepath(:output, 'removal')
|
|
717
878
|
t.inference {|root, dir, path| removal_path}
|
|
718
879
|
|
|
719
880
|
assert File.exists?(existing_file)
|
|
720
881
|
assert !File.exists?(non_existant_file)
|
|
721
882
|
|
|
722
883
|
files = [existing_file, non_existant_file]
|
|
723
|
-
t.
|
|
884
|
+
t.prepare(files)
|
|
724
885
|
|
|
725
886
|
# check neither of the files exist at this point
|
|
726
887
|
# and the parent dirs all exist
|
|
@@ -734,50 +895,68 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
734
895
|
assert_equal "existing content", File.read(removal_path)
|
|
735
896
|
end
|
|
736
897
|
|
|
737
|
-
def
|
|
738
|
-
existing_file =
|
|
739
|
-
non_existant_file =
|
|
898
|
+
def test_prepare_adds_list_to_added_files
|
|
899
|
+
existing_file = method_filepath(:output, "path/to/existing/file.txt")
|
|
900
|
+
non_existant_file = method_filepath(:output, "path/to/non/existant/file.txt")
|
|
740
901
|
touch_file(existing_file)
|
|
741
902
|
|
|
742
903
|
# be sure inference leads files to an output dir, for cleanup
|
|
743
|
-
removal_path =
|
|
904
|
+
removal_path = method_filepath(:output, 'removal')
|
|
744
905
|
t.inference {|root, dir, path| File.join(removal_path, path) }
|
|
745
906
|
|
|
746
|
-
assert_equal([], t.
|
|
907
|
+
assert_equal([], t.added_files)
|
|
747
908
|
assert File.exists?(existing_file)
|
|
748
909
|
assert !File.exists?(non_existant_file)
|
|
749
910
|
assert !File.exists?(removal_path)
|
|
750
911
|
|
|
751
912
|
files = [existing_file, non_existant_file]
|
|
752
|
-
t.
|
|
913
|
+
t.prepare(files)
|
|
753
914
|
|
|
754
915
|
expected = [
|
|
755
916
|
removal_path, # added by backup of existing_file
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
non_existant_file # added by
|
|
917
|
+
method_filepath(:output, 'path/to/non'), # added by mkdir
|
|
918
|
+
method_filepath(:output, 'path/to/non/existant'), # added by mkdir
|
|
919
|
+
existing_file, # added by prepare
|
|
920
|
+
non_existant_file # added by prepare
|
|
760
921
|
].collect do |dir|
|
|
761
922
|
File.expand_path(dir)
|
|
762
923
|
end
|
|
763
924
|
|
|
764
|
-
assert_equal expected, t.
|
|
925
|
+
assert_equal expected, t.added_files
|
|
765
926
|
end
|
|
766
927
|
|
|
767
928
|
#
|
|
768
929
|
# rm tests
|
|
769
930
|
#
|
|
770
931
|
|
|
932
|
+
def test_rm_documentation
|
|
933
|
+
dir = method_filepath(:output, 'path')
|
|
934
|
+
file = method_filepath(:output, 'path/to/file.txt')
|
|
935
|
+
FileUtils.mkdir_p( method_filepath(:output) )
|
|
936
|
+
|
|
937
|
+
t = Tap::FileTask.new
|
|
938
|
+
assert !File.exists?(dir)
|
|
939
|
+
FileUtils.mkdir(dir)
|
|
940
|
+
|
|
941
|
+
t.prepare(file)
|
|
942
|
+
FileUtils.touch(file)
|
|
943
|
+
assert File.exists?(file)
|
|
944
|
+
|
|
945
|
+
t.rm(file)
|
|
946
|
+
assert File.exists?(dir)
|
|
947
|
+
assert !File.exists?(method_filepath(:output, 'path/to'))
|
|
948
|
+
end
|
|
949
|
+
|
|
771
950
|
def test_rm_removes_file_and_parent_dirs_if_made_by_the_task
|
|
772
|
-
file =
|
|
773
|
-
parent_dir =
|
|
774
|
-
existing_dir =
|
|
951
|
+
file = method_filepath(:output, 'path/to/file.txt')
|
|
952
|
+
parent_dir = method_filepath(:output, 'path/to')
|
|
953
|
+
existing_dir = method_filepath(:output, 'path')
|
|
775
954
|
FileUtils.mkdir_p existing_dir
|
|
776
955
|
|
|
777
956
|
assert File.exists?(existing_dir)
|
|
778
957
|
assert !File.exists?(file)
|
|
779
958
|
|
|
780
|
-
t.
|
|
959
|
+
t.prepare file
|
|
781
960
|
touch_file(file)
|
|
782
961
|
assert File.exists?(file)
|
|
783
962
|
|
|
@@ -788,15 +967,15 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
788
967
|
end
|
|
789
968
|
|
|
790
969
|
def test_rm_removes_parent_dirs_even_if_file_does_not_exist
|
|
791
|
-
file =
|
|
792
|
-
parent_dir =
|
|
793
|
-
existing_dir =
|
|
970
|
+
file = method_filepath(:output, 'path/to/file.txt')
|
|
971
|
+
parent_dir = method_filepath(:output, 'path/to')
|
|
972
|
+
existing_dir = method_filepath(:output, 'path')
|
|
794
973
|
FileUtils.mkdir_p existing_dir
|
|
795
974
|
|
|
796
975
|
assert File.exists?(existing_dir)
|
|
797
976
|
assert !File.exists?(file)
|
|
798
977
|
|
|
799
|
-
t.
|
|
978
|
+
t.prepare file
|
|
800
979
|
assert !File.exists?(file)
|
|
801
980
|
|
|
802
981
|
t.rm(file)
|
|
@@ -805,7 +984,7 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
805
984
|
end
|
|
806
985
|
|
|
807
986
|
def test_rm_does_not_remove_file_if_not_made_by_the_task
|
|
808
|
-
file =
|
|
987
|
+
file = method_filepath(:output, 'path/to/file.txt')
|
|
809
988
|
|
|
810
989
|
touch_file(file)
|
|
811
990
|
assert File.exists?(file)
|
|
@@ -814,50 +993,50 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
814
993
|
assert File.exists?(file)
|
|
815
994
|
end
|
|
816
995
|
|
|
817
|
-
def
|
|
818
|
-
file0 =
|
|
819
|
-
file1 =
|
|
996
|
+
def test_rm_clears_added_files_of_removed_files
|
|
997
|
+
file0 = method_filepath(:output, 'file0.txt')
|
|
998
|
+
file1 = method_filepath(:output, 'file1.txt')
|
|
820
999
|
|
|
821
|
-
FileUtils.mkdir_p(
|
|
822
|
-
assert_equal [], t.
|
|
1000
|
+
FileUtils.mkdir_p(method_filepath(:output))
|
|
1001
|
+
assert_equal [], t.added_files
|
|
823
1002
|
|
|
824
|
-
t.
|
|
1003
|
+
t.prepare([file0,file1])
|
|
825
1004
|
assert_equal [
|
|
826
|
-
File.expand_path(
|
|
827
|
-
File.expand_path(
|
|
1005
|
+
File.expand_path(method_filepath(:output, 'file0.txt')),
|
|
1006
|
+
File.expand_path(method_filepath(:output, 'file1.txt'))], t.added_files
|
|
828
1007
|
|
|
829
1008
|
t.rm(file0)
|
|
830
1009
|
assert_equal [
|
|
831
|
-
File.expand_path(
|
|
1010
|
+
File.expand_path(method_filepath(:output, 'file1.txt'))], t.added_files
|
|
832
1011
|
end
|
|
833
1012
|
|
|
834
1013
|
def test_rm_acts_on_and_returns_expanded_list_of_removed_files_and_dirs
|
|
835
|
-
file =
|
|
836
|
-
another =
|
|
837
|
-
not_removed =
|
|
838
|
-
removed =
|
|
1014
|
+
file = method_filepath(:output, 'file.txt')
|
|
1015
|
+
another = method_filepath(:output, 'another.txt')
|
|
1016
|
+
not_removed = method_filepath(:output, 'not')
|
|
1017
|
+
removed = method_filepath(:output, 'not/removed.txt')
|
|
839
1018
|
|
|
840
|
-
t.
|
|
1019
|
+
t.prepare([file, another, removed])
|
|
841
1020
|
# touch a file so the not_removed folder isn't removed
|
|
842
|
-
touch_file
|
|
1021
|
+
touch_file method_filepath(:output, 'not/file.txt')
|
|
843
1022
|
|
|
844
1023
|
expected = [file, another, removed].collect {|f| File.expand_path(f)}
|
|
845
1024
|
assert_equal expected, t.rm([file, another, removed])
|
|
846
1025
|
end
|
|
847
1026
|
|
|
848
1027
|
#
|
|
849
|
-
#
|
|
1028
|
+
# execute tests
|
|
850
1029
|
#
|
|
851
1030
|
|
|
852
|
-
def
|
|
853
|
-
existing_file =
|
|
854
|
-
non_existant_dir =
|
|
1031
|
+
def setup_execute_test(&block)
|
|
1032
|
+
existing_file = method_filepath(:output, "path/to/existing/file.txt")
|
|
1033
|
+
non_existant_dir = method_filepath(:output, "path/to/non/existing")
|
|
855
1034
|
non_existant_file = File.join(non_existant_dir, "file.txt")
|
|
856
|
-
backup_file =
|
|
1035
|
+
backup_file = method_filepath(:output, "backup/file.txt")
|
|
857
1036
|
|
|
858
1037
|
touch_file(existing_file, "original content")
|
|
859
1038
|
@t = Tap::FileTask.new do |task, input|
|
|
860
|
-
task.
|
|
1039
|
+
task.prepare([existing_file, non_existant_file])
|
|
861
1040
|
|
|
862
1041
|
block.call if block_given?
|
|
863
1042
|
end
|
|
@@ -869,8 +1048,8 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
869
1048
|
[existing_file, backup_file, non_existant_dir, non_existant_file]
|
|
870
1049
|
end
|
|
871
1050
|
|
|
872
|
-
def
|
|
873
|
-
existing_file, backup_file, non_existant_dir, non_existant_file =
|
|
1051
|
+
def test_setup_execute_test
|
|
1052
|
+
existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
|
|
874
1053
|
assert !File.exists?(non_existant_file)
|
|
875
1054
|
assert File.exists?(non_existant_dir)
|
|
876
1055
|
assert File.exists?(backup_file)
|
|
@@ -879,109 +1058,163 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
879
1058
|
t.execute(nil)
|
|
880
1059
|
end
|
|
881
1060
|
|
|
882
|
-
def
|
|
883
|
-
|
|
884
|
-
existing_file, backup_file, non_existant_dir, non_existant_file =
|
|
885
|
-
|
|
1061
|
+
def test_execute_restores_backups_and_removes_added_files_on_error
|
|
1062
|
+
was_in_execute = false
|
|
1063
|
+
existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
|
|
1064
|
+
was_in_execute = true
|
|
886
1065
|
raise "error"
|
|
887
1066
|
end
|
|
888
1067
|
|
|
889
1068
|
assert_raise(RuntimeError) { t.execute(nil) }
|
|
890
1069
|
|
|
891
1070
|
# check the existing file was restored
|
|
892
|
-
assert
|
|
1071
|
+
assert was_in_execute
|
|
893
1072
|
assert File.exists?(existing_file)
|
|
894
1073
|
assert !File.exists?(non_existant_dir)
|
|
895
1074
|
assert !File.exists?(backup_file)
|
|
896
1075
|
assert_equal "original content", File.read(existing_file)
|
|
1076
|
+
assert t.added_files.empty?
|
|
1077
|
+
assert t.backed_up_files.empty?
|
|
897
1078
|
end
|
|
898
1079
|
|
|
899
|
-
def
|
|
900
|
-
|
|
901
|
-
existing_file, backup_file, non_existant_dir, non_existant_file =
|
|
902
|
-
|
|
1080
|
+
def test_execute_does_not_restore_backups_if_rollback_on_error_is_false
|
|
1081
|
+
was_in_execute = false
|
|
1082
|
+
existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
|
|
1083
|
+
was_in_execute = true
|
|
903
1084
|
raise "error"
|
|
904
1085
|
end
|
|
905
1086
|
|
|
906
|
-
t.
|
|
1087
|
+
t.rollback_on_error = false
|
|
907
1088
|
assert_raise(RuntimeError) { t.execute(nil) }
|
|
908
1089
|
|
|
909
1090
|
# check the existing file was NOT restored
|
|
910
|
-
assert
|
|
1091
|
+
assert was_in_execute
|
|
911
1092
|
assert !File.exists?(existing_file)
|
|
912
1093
|
assert File.exists?(non_existant_dir)
|
|
913
1094
|
assert File.exists?(backup_file)
|
|
914
1095
|
assert_equal "original content", File.read(backup_file)
|
|
1096
|
+
assert !t.added_files.empty?
|
|
1097
|
+
assert !t.backed_up_files.empty?
|
|
915
1098
|
end
|
|
916
1099
|
|
|
917
|
-
def
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
1100
|
+
# def test_execute_removes_backed_up_files_if_cleanup_after_execute_is_true
|
|
1101
|
+
# was_in_execute = false
|
|
1102
|
+
# existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
|
|
1103
|
+
# was_in_execute = true
|
|
1104
|
+
# touch_file(existing_file, "new content")
|
|
1105
|
+
# end
|
|
1106
|
+
#
|
|
1107
|
+
# t.cleanup_after_execute = true
|
|
1108
|
+
# t.execute(nil)
|
|
1109
|
+
#
|
|
1110
|
+
# # check the backup file was removed and that
|
|
1111
|
+
# # there was no restore (no error was raised)
|
|
1112
|
+
# assert was_in_execute
|
|
1113
|
+
# assert File.exists?(existing_file)
|
|
1114
|
+
# assert_equal "new content", File.read(existing_file)
|
|
1115
|
+
# assert !File.exists?(backup_file)
|
|
1116
|
+
# assert !File.exists?(File.dirname(backup_file))
|
|
1117
|
+
# assert !t.added_files.empty?
|
|
1118
|
+
# assert !t.added_files.include?(backup_file)
|
|
1119
|
+
# assert t.backed_up_files.empty?
|
|
1120
|
+
# end
|
|
935
1121
|
|
|
936
|
-
def
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
1122
|
+
# def test_execute_restores_backups_on_error_even_if_cleanup_after_execute_is_true
|
|
1123
|
+
# was_in_execute = false
|
|
1124
|
+
# existing_file, backup_file, non_existant_dir, non_existant_file = setup_execute_test do
|
|
1125
|
+
# was_in_execute = true
|
|
1126
|
+
# touch_file(existing_file, "new content")
|
|
1127
|
+
# raise "error"
|
|
1128
|
+
# end
|
|
1129
|
+
#
|
|
1130
|
+
# t.cleanup_after_execute = true
|
|
1131
|
+
# assert_raise(RuntimeError) { t.execute(nil) }
|
|
1132
|
+
#
|
|
1133
|
+
# # check the existing file was restored and
|
|
1134
|
+
# # backup file was removed
|
|
1135
|
+
# assert was_in_execute
|
|
1136
|
+
# assert File.exists?(existing_file)
|
|
1137
|
+
# assert_equal "original content", File.read(existing_file)
|
|
1138
|
+
# assert !File.exists?(backup_file)
|
|
1139
|
+
# assert !File.exists?(File.dirname(backup_file))
|
|
1140
|
+
# assert t.added_files.empty?
|
|
1141
|
+
# assert t.backed_up_files.empty?
|
|
1142
|
+
# end
|
|
943
1143
|
|
|
944
|
-
|
|
945
|
-
|
|
1144
|
+
def test_execute_does_not_rollback_results_from_prior_successful_executions
|
|
1145
|
+
existing_file = method_filepath(:output, "path/to/existing/file.txt")
|
|
1146
|
+
non_existant_dir = method_filepath(:output, "path/to/non/existing")
|
|
1147
|
+
non_existant_file = File.join(non_existant_dir, "file.txt")
|
|
1148
|
+
backup_file = method_filepath(:output, "backup/file.txt")
|
|
1149
|
+
|
|
1150
|
+
touch_file(existing_file, "original content")
|
|
1151
|
+
count = 0
|
|
1152
|
+
@t = Tap::FileTask.new do |task, input|
|
|
1153
|
+
if count > 0
|
|
1154
|
+
count = 2
|
|
1155
|
+
raise "error"
|
|
1156
|
+
else
|
|
1157
|
+
count = 1
|
|
1158
|
+
task.prepare([existing_file, non_existant_file])
|
|
1159
|
+
touch_file(existing_file, "new content")
|
|
1160
|
+
end
|
|
1161
|
+
end
|
|
1162
|
+
|
|
1163
|
+
# inference leads to the backup_file
|
|
1164
|
+
@t.inference do |root, dir, path|
|
|
1165
|
+
backup_file
|
|
1166
|
+
end
|
|
1167
|
+
|
|
1168
|
+
# assert !t.cleanup_after_execute
|
|
1169
|
+
|
|
1170
|
+
assert_nothing_raised { t.execute(nil) }
|
|
1171
|
+
assert_equal 1, count
|
|
1172
|
+
assert File.exists?(existing_file)
|
|
1173
|
+
assert_equal "new content", File.read(existing_file)
|
|
1174
|
+
assert File.exists?(non_existant_dir)
|
|
1175
|
+
assert File.exists?(backup_file)
|
|
1176
|
+
assert_equal "original content", File.read(backup_file)
|
|
1177
|
+
|
|
1178
|
+
assert_raise(RuntimeError) { t.execute(nil) }
|
|
946
1179
|
|
|
947
|
-
# check the existing file was restored
|
|
948
|
-
|
|
949
|
-
assert was_in_process
|
|
1180
|
+
# check the existing file was NOT restored
|
|
1181
|
+
assert_equal 2, count
|
|
950
1182
|
assert File.exists?(existing_file)
|
|
951
|
-
assert_equal "
|
|
952
|
-
assert
|
|
953
|
-
assert
|
|
1183
|
+
assert_equal "new content", File.read(existing_file)
|
|
1184
|
+
assert File.exists?(non_existant_dir)
|
|
1185
|
+
assert File.exists?(backup_file)
|
|
1186
|
+
assert_equal "original content", File.read(backup_file)
|
|
954
1187
|
end
|
|
955
1188
|
|
|
956
1189
|
#
|
|
957
|
-
# test
|
|
1190
|
+
# test execute with multiple files
|
|
958
1191
|
#
|
|
959
1192
|
|
|
960
|
-
def
|
|
1193
|
+
def setup_multiple_file_execute_test(&block)
|
|
961
1194
|
existing_files = [0,1].collect do |n|
|
|
962
|
-
path =
|
|
1195
|
+
path = method_filepath(:output, "path/to/existing/file#{n}.txt")
|
|
963
1196
|
touch_file path, n.to_s
|
|
964
1197
|
path
|
|
965
1198
|
end
|
|
966
1199
|
|
|
967
1200
|
non_existant_files = [0,1].collect do |n|
|
|
968
|
-
|
|
1201
|
+
method_filepath(:output, "path/to/non/existing/file#{n}.txt")
|
|
969
1202
|
end
|
|
970
1203
|
|
|
971
1204
|
@t = Tap::FileTask.new do |task, input|
|
|
972
|
-
task.
|
|
1205
|
+
task.prepare(existing_files + non_existant_files)
|
|
973
1206
|
block.call if block_given?
|
|
974
1207
|
end
|
|
975
1208
|
# inference leads to an output_dir
|
|
976
1209
|
@t.inference do |root, dir, path|
|
|
977
|
-
|
|
1210
|
+
method_filepath(:output, 'backup', path)
|
|
978
1211
|
end
|
|
979
1212
|
|
|
980
1213
|
[existing_files, non_existant_files]
|
|
981
1214
|
end
|
|
982
1215
|
|
|
983
|
-
def
|
|
984
|
-
existing_files, non_existant_files =
|
|
1216
|
+
def test_setup_multiple_file_execute_test
|
|
1217
|
+
existing_files, non_existant_files = setup_multiple_file_execute_test do
|
|
985
1218
|
(existing_files + existing_files).each do |file|
|
|
986
1219
|
assert !File.exists?(file)
|
|
987
1220
|
assert File.exists?(File.dirname(file))
|
|
@@ -990,21 +1223,21 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
990
1223
|
t.execute(nil)
|
|
991
1224
|
end
|
|
992
1225
|
|
|
993
|
-
def
|
|
994
|
-
|
|
995
|
-
existing_files, non_existant_files =
|
|
996
|
-
|
|
1226
|
+
def test_execute_restore_and_removal_with_multiple_files
|
|
1227
|
+
was_in_execute = false
|
|
1228
|
+
existing_files, non_existant_files = setup_multiple_file_execute_test do
|
|
1229
|
+
was_in_execute = true
|
|
997
1230
|
(existing_files + non_existant_files) .each do |file|
|
|
998
1231
|
touch_file file, "new content"
|
|
999
1232
|
end
|
|
1000
1233
|
raise "error"
|
|
1001
1234
|
end
|
|
1002
1235
|
|
|
1003
|
-
assert !File.exists?(
|
|
1236
|
+
assert !File.exists?(method_filepath(:output, 'backup'))
|
|
1004
1237
|
assert_raise(RuntimeError) { t.execute(nil) }
|
|
1005
1238
|
|
|
1006
1239
|
# check existing files were restored, made files and backups removed.
|
|
1007
|
-
assert
|
|
1240
|
+
assert was_in_execute
|
|
1008
1241
|
existing_files.each_with_index do |existing_file, n|
|
|
1009
1242
|
assert File.exists?(existing_file)
|
|
1010
1243
|
assert_equal n.to_s, File.read(existing_file)
|
|
@@ -1012,30 +1245,30 @@ class FileTaskTest < Test::Unit::TestCase
|
|
|
1012
1245
|
non_existant_files.each do |non_existing_file|
|
|
1013
1246
|
assert !File.exists?(non_existing_file)
|
|
1014
1247
|
end
|
|
1015
|
-
assert !File.exists?(
|
|
1248
|
+
assert !File.exists?(method_filepath(:output, 'backup'))
|
|
1016
1249
|
end
|
|
1017
1250
|
|
|
1018
|
-
def
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
end
|
|
1251
|
+
# def test_execute_cleanup_after_execute_with_multiple_files
|
|
1252
|
+
# was_in_execute = false
|
|
1253
|
+
# existing_files, non_existant_files = setup_multiple_file_execute_test do
|
|
1254
|
+
# was_in_execute = true
|
|
1255
|
+
# (existing_files + non_existant_files) .each do |file|
|
|
1256
|
+
# touch_file file, "new content"
|
|
1257
|
+
# end
|
|
1258
|
+
# end
|
|
1259
|
+
#
|
|
1260
|
+
# assert !File.exists?(method_filepath(:output, 'backup'))
|
|
1261
|
+
#
|
|
1262
|
+
# t.cleanup_after_execute = true
|
|
1263
|
+
# t.execute(nil)
|
|
1264
|
+
#
|
|
1265
|
+
# # check existing files were restored, made files and backups removed.
|
|
1266
|
+
# assert was_in_execute
|
|
1267
|
+
# (existing_files + non_existant_files).each do |file|
|
|
1268
|
+
# assert File.exists?(file)
|
|
1269
|
+
# assert_equal "new content", File.read(file)
|
|
1270
|
+
# end
|
|
1271
|
+
# assert !File.exists?(method_filepath(:output, 'backup'))
|
|
1272
|
+
# end
|
|
1040
1273
|
|
|
1041
1274
|
end
|