tap 0.8.0 → 0.9.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/Basic Overview +151 -0
- data/Command Reference +99 -0
- data/History +24 -0
- data/MIT-LICENSE +1 -1
- data/README +29 -57
- data/Rakefile +30 -37
- data/Tutorial +243 -191
- data/bin/tap +66 -35
- data/lib/tap.rb +47 -29
- data/lib/tap/app.rb +700 -342
- data/lib/tap/{script → cmd}/console.rb +0 -0
- data/lib/tap/{script → cmd}/destroy.rb +0 -0
- data/lib/tap/{script → cmd}/generate.rb +0 -0
- data/lib/tap/cmd/run.rb +156 -0
- data/lib/tap/constants.rb +4 -0
- data/lib/tap/dump.rb +57 -0
- data/lib/tap/env.rb +316 -0
- data/lib/tap/file_task.rb +106 -109
- data/lib/tap/generator.rb +4 -1
- data/lib/tap/generator/generators/command/USAGE +6 -0
- data/lib/tap/generator/generators/command/command_generator.rb +17 -0
- data/lib/tap/generator/generators/{script/templates/script.erb → command/templates/command.erb} +10 -10
- data/lib/tap/generator/generators/config/USAGE +21 -0
- data/lib/tap/generator/generators/config/config_generator.rb +17 -7
- data/lib/tap/generator/generators/file_task/USAGE +3 -0
- data/lib/tap/generator/generators/file_task/file_task_generator.rb +16 -0
- data/lib/tap/generator/generators/file_task/templates/file.txt +2 -0
- data/lib/tap/generator/generators/file_task/templates/file.yml +3 -0
- data/lib/tap/generator/generators/file_task/templates/task.erb +26 -20
- data/lib/tap/generator/generators/file_task/templates/test.erb +20 -10
- data/lib/tap/generator/generators/generator/generator_generator.rb +1 -1
- data/lib/tap/generator/generators/generator/templates/generator.erb +21 -12
- data/lib/tap/generator/generators/root/templates/Rakefile +33 -24
- data/lib/tap/generator/generators/root/templates/tap.yml +28 -31
- data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +1 -0
- data/lib/tap/generator/generators/task/USAGE +3 -0
- data/lib/tap/generator/generators/task/task_generator.rb +18 -5
- data/lib/tap/generator/generators/task/templates/task.erb +7 -12
- data/lib/tap/generator/generators/task/templates/test.erb +10 -11
- data/lib/tap/generator/generators/workflow/templates/task.erb +1 -1
- data/lib/tap/generator/generators/workflow/templates/test.erb +1 -1
- data/lib/tap/patches/rake/rake_test_loader.rb +8 -0
- data/lib/tap/patches/rake/testtask.rb +55 -0
- data/lib/tap/patches/ruby19/backtrace_filter.rb +51 -0
- data/lib/tap/patches/ruby19/parsedate.rb +16 -0
- data/lib/tap/root.rb +172 -67
- data/lib/tap/script.rb +70 -336
- data/lib/tap/support/aggregator.rb +55 -0
- data/lib/tap/support/audit.rb +281 -280
- data/lib/tap/support/batchable.rb +59 -0
- data/lib/tap/support/class_configuration.rb +279 -0
- data/lib/tap/support/configurable.rb +92 -0
- data/lib/tap/support/configurable_methods.rb +296 -0
- data/lib/tap/support/executable.rb +98 -0
- data/lib/tap/support/executable_queue.rb +82 -0
- data/lib/tap/support/logger.rb +9 -15
- data/lib/tap/support/rake.rb +43 -54
- data/lib/tap/support/run_error.rb +32 -13
- data/lib/tap/support/shell_utils.rb +47 -0
- data/lib/tap/support/tdoc.rb +9 -8
- data/lib/tap/support/tdoc/config_attr.rb +40 -16
- data/lib/tap/support/validation.rb +77 -0
- data/lib/tap/support/versions.rb +36 -36
- data/lib/tap/task.rb +276 -482
- data/lib/tap/test.rb +20 -261
- data/lib/tap/test/env_vars.rb +7 -5
- data/lib/tap/test/file_methods.rb +126 -121
- data/lib/tap/test/subset_methods.rb +86 -45
- data/lib/tap/test/tap_methods.rb +271 -0
- data/lib/tap/workflow.rb +174 -46
- data/test/app/config/another/task.yml +1 -0
- data/test/app/config/erb.yml +2 -1
- data/test/app/config/some/task.yml +1 -0
- data/test/app/config/template.yml +2 -6
- data/test/app_test.rb +1241 -1008
- data/test/env/test_configure/recurse_a.yml +2 -0
- data/test/env/test_configure/recurse_b.yml +2 -0
- data/test/env/test_configure/tap.yml +23 -0
- data/test/env/test_load_env_config/dir/tap.yml +3 -0
- data/test/env/test_load_env_config/recurse_a.yml +2 -0
- data/test/env/test_load_env_config/recurse_b.yml +2 -0
- data/test/env/test_load_env_config/tap.yml +3 -0
- data/test/env_test.rb +198 -0
- data/test/file_task_test.rb +70 -53
- data/{lib/tap/generator/generators/package/USAGE → test/root/file.txt} +0 -0
- data/test/root_test.rb +621 -454
- data/test/script_test.rb +38 -174
- data/test/support/aggregator_test.rb +99 -0
- data/test/support/audit_test.rb +409 -416
- data/test/support/batchable_test.rb +74 -0
- data/test/support/{task_configuration_test.rb → class_configuration_test.rb} +106 -47
- data/test/{task/config/overriding.yml → support/configurable/config/configured.yml} +0 -0
- data/test/support/configurable_test.rb +295 -0
- data/test/support/executable_queue_test.rb +103 -0
- data/test/support/executable_test.rb +38 -0
- data/test/support/logger_test.rb +17 -17
- data/test/support/rake_test.rb +4 -2
- data/test/support/shell_utils_test.rb +24 -0
- data/test/support/tdoc_test.rb +265 -258
- data/test/support/validation_test.rb +54 -0
- data/test/support/versions_test.rb +38 -38
- data/test/tap_test_helper.rb +19 -5
- data/test/tap_test_suite.rb +5 -2
- data/test/task_base_test.rb +13 -104
- data/test/task_syntax_test.rb +300 -0
- data/test/task_test.rb +258 -381
- data/test/test/env_vars_test.rb +40 -40
- data/test/test/file_methods/{test_assert_output_files_equal → test_assert_files}/expected/one.txt +0 -0
- data/test/test/file_methods/{test_assert_output_files_equal → test_assert_files}/expected/two.txt +0 -0
- data/test/test/file_methods/{test_assert_output_files_equal → test_assert_files}/input/one.txt +0 -0
- data/test/test/file_methods/{test_assert_output_files_equal → test_assert_files}/input/two.txt +0 -0
- data/test/test/{test_file_task_test → file_methods/test_assert_files_can_have_no_expected_files_if_specified}/input/one.txt +0 -0
- data/test/test/{test_file_task_test → file_methods/test_assert_files_can_have_no_expected_files_if_specified}/input/two.txt +0 -0
- data/test/test/file_methods/test_assert_files_fails_for_different_content/expected/one.txt +1 -0
- data/test/test/{test_file_task_test → file_methods/test_assert_files_fails_for_different_content}/expected/two.txt +0 -0
- data/test/test/file_methods/test_assert_files_fails_for_different_content/input/one.txt +1 -0
- data/test/test/file_methods/test_assert_files_fails_for_different_content/input/two.txt +1 -0
- data/test/test/{test_file_task_test → file_methods/test_assert_files_fails_for_missing_expected_file}/expected/one.txt +0 -0
- data/test/test/file_methods/test_assert_files_fails_for_missing_expected_file/input/one.txt +1 -0
- data/test/test/file_methods/test_assert_files_fails_for_missing_expected_file/input/two.txt +1 -0
- data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/expected/one.txt +1 -0
- data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/expected/two.txt +1 -0
- data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/input/one.txt +1 -0
- data/test/test/file_methods/test_assert_files_fails_for_missing_output_file/input/two.txt +1 -0
- data/test/test/file_methods/test_assert_files_fails_for_no_expected_files/input/one.txt +1 -0
- data/test/test/file_methods/test_assert_files_fails_for_no_expected_files/input/two.txt +1 -0
- data/test/test/file_methods_doc/test_sub/expected/one.txt +1 -0
- data/test/test/file_methods_doc/test_sub/expected/two.txt +1 -0
- data/test/test/file_methods_doc/test_sub/input/one.txt +1 -0
- data/test/test/file_methods_doc/test_sub/input/two.txt +1 -0
- data/test/test/file_methods_doc_test.rb +29 -0
- data/test/test/file_methods_test.rb +214 -143
- data/test/test/subset_methods_test.rb +111 -115
- data/test/test/{test_assert_expected_result_files → tap_methods/test_assert_files}/expected/task/name/a.txt +0 -0
- data/test/test/{test_assert_expected_result_files → tap_methods/test_assert_files}/expected/task/name/b.txt +0 -0
- data/test/test/{test_assert_expected_result_files → tap_methods/test_assert_files}/input/a.txt +0 -0
- data/test/test/{test_assert_expected_result_files → tap_methods/test_assert_files}/input/b.txt +0 -0
- data/test/test/tap_methods_test.rb +399 -0
- data/test/workflow_test.rb +101 -91
- metadata +86 -70
- data/lib/tap/generator/generators/package/package_generator.rb +0 -38
- data/lib/tap/generator/generators/package/templates/package.erb +0 -186
- data/lib/tap/generator/generators/script/USAGE +0 -0
- data/lib/tap/generator/generators/script/script_generator.rb +0 -17
- data/lib/tap/script/run.rb +0 -154
- data/lib/tap/support/batch_queue.rb +0 -162
- data/lib/tap/support/combinator.rb +0 -114
- data/lib/tap/support/task_configuration.rb +0 -169
- data/lib/tap/support/template.rb +0 -81
- data/lib/tap/support/templater.rb +0 -155
- data/lib/tap/version.rb +0 -4
- data/test/app/config/addition_template.yml +0 -6
- data/test/app_class_test.rb +0 -33
- data/test/check/binding_eval.rb +0 -23
- data/test/check/define_method_check.rb +0 -22
- data/test/check/dependencies_check.rb +0 -175
- data/test/check/inheritance_check.rb +0 -22
- data/test/support/batch_queue_test.rb +0 -320
- data/test/support/combinator_test.rb +0 -249
- data/test/support/template_test.rb +0 -122
- data/test/support/templater/erb.txt +0 -2
- data/test/support/templater/erb.yml +0 -2
- data/test/support/templater/somefile.txt +0 -2
- data/test/support/templater_test.rb +0 -192
- data/test/task/config/template.yml +0 -4
- data/test/task_class_test.rb +0 -170
- data/test/task_execute_test.rb +0 -262
- data/test/test/file_methods/test_assert_expected/expected/file.txt +0 -1
- data/test/test/file_methods/test_assert_expected/expected/folder/file.txt +0 -1
- data/test/test/file_methods/test_assert_expected/input/file.txt +0 -1
- data/test/test/file_methods/test_assert_expected/input/folder/file.txt +0 -1
- 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_file_compare/expected/output_1.txt +0 -3
- data/test/test/file_methods/test_file_compare/expected/output_2.txt +0 -1
- data/test/test/file_methods/test_file_compare/input/input_1.txt +0 -3
- data/test/test/file_methods/test_file_compare/input/input_2.txt +0 -3
- 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_yml_compare/expected/output_1.yml +0 -6
- data/test/test/file_methods/test_yml_compare/expected/output_2.yml +0 -6
- data/test/test/file_methods/test_yml_compare/input/input_1.yml +0 -4
- data/test/test/file_methods/test_yml_compare/input/input_2.yml +0 -4
- data/test/test_test.rb +0 -373
data/lib/tap/version.rb
DELETED
data/test/app_class_test.rb
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'tap_test_helper')
|
|
2
|
-
require 'tap/app'
|
|
3
|
-
|
|
4
|
-
class AppClassTest < Test::Unit::TestCase
|
|
5
|
-
include Tap
|
|
6
|
-
|
|
7
|
-
#
|
|
8
|
-
# instance tests
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
def test_instance_returns_current_instance_or_a_default_app
|
|
12
|
-
a = App.new
|
|
13
|
-
App.instance = a
|
|
14
|
-
assert_equal a, App.instance
|
|
15
|
-
|
|
16
|
-
App.instance = nil
|
|
17
|
-
assert_equal App, App.instance.class
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
#
|
|
21
|
-
# parse_yaml tests
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
def test_parse_yaml_loads_arg_if_arg_matches_yaml_document_string
|
|
25
|
-
string = "---\nkey: value"
|
|
26
|
-
assert_equal({"key" => "value"}, App.parse_yaml(string))
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def test_parse_yaml_returns_arg_unless_matches_yaml_document_string
|
|
30
|
-
string = "key: value"
|
|
31
|
-
assert_equal("key: value", App.parse_yaml(string))
|
|
32
|
-
end
|
|
33
|
-
end
|
data/test/check/binding_eval.rb
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
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"
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
|
@@ -1,175 +0,0 @@
|
|
|
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
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
|
@@ -1,320 +0,0 @@
|
|
|
1
|
-
require File.join(File.dirname(__FILE__), '../tap_test_helper')
|
|
2
|
-
require 'tap/support/batch_queue'
|
|
3
|
-
|
|
4
|
-
class BatchQueueTest < Test::Unit::TestCase
|
|
5
|
-
|
|
6
|
-
# creates readers to facilitate testing
|
|
7
|
-
module BatchQueueAccessors
|
|
8
|
-
attr_reader :tasks, :inputs
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
attr_accessor :t, :not_executable, :queue
|
|
12
|
-
|
|
13
|
-
def setup
|
|
14
|
-
@t = Tap::Task.new
|
|
15
|
-
@not_executable = Tap::Task.new
|
|
16
|
-
@not_executable.condition {|task, inputs| false}
|
|
17
|
-
|
|
18
|
-
@queue = Tap::Support::BatchQueue.new
|
|
19
|
-
@queue.extend BatchQueueAccessors
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def test_not_executable_is_not_executable_with_and_without_inputs
|
|
23
|
-
assert !not_executable.executable?([])
|
|
24
|
-
assert !not_executable.executable?([:a,:b,:c])
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def test_documentation
|
|
28
|
-
t1 = Tap::Task.new
|
|
29
|
-
t2 = Tap::Task.new
|
|
30
|
-
|
|
31
|
-
q = Tap::Support::BatchQueue.new
|
|
32
|
-
q.enq t1, 1
|
|
33
|
-
q.enq t2, :a,:b,:c
|
|
34
|
-
q.enq t1, 2,3
|
|
35
|
-
|
|
36
|
-
assert_equal [t1, [1,2,3]], q.deq
|
|
37
|
-
assert_equal [t2, [:a,:b,:c]], q.deq
|
|
38
|
-
assert_nil q.deq
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
#
|
|
42
|
-
# initialization tests
|
|
43
|
-
#
|
|
44
|
-
|
|
45
|
-
def test_queue_is_empty_and_inputs_and_tasks_cannot_be_accessed
|
|
46
|
-
q = Tap::Support::BatchQueue.new
|
|
47
|
-
assert q.empty?
|
|
48
|
-
assert_raise(NoMethodError) { q.inputs }
|
|
49
|
-
assert_raise(NoMethodError) { q.tasks }
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
#
|
|
53
|
-
# size, length, clear, empty? tests
|
|
54
|
-
#
|
|
55
|
-
|
|
56
|
-
def test_size_and_length_return_number_of_tasks
|
|
57
|
-
assert_equal 0, queue.size
|
|
58
|
-
assert_equal 0, queue.length
|
|
59
|
-
|
|
60
|
-
queue.inputs[t] = [1,2,3]
|
|
61
|
-
|
|
62
|
-
assert_equal 0, queue.size
|
|
63
|
-
assert_equal 0, queue.length
|
|
64
|
-
|
|
65
|
-
queue.tasks << t
|
|
66
|
-
|
|
67
|
-
assert_equal 1, queue.size
|
|
68
|
-
assert_equal 1, queue.length
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def test_empty_is_true_if_tasks_is_empty
|
|
72
|
-
assert queue.empty?
|
|
73
|
-
queue.inputs[t] = [1,2,3]
|
|
74
|
-
assert queue.empty?
|
|
75
|
-
queue.tasks << t
|
|
76
|
-
assert !queue.empty?
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def test_clear_resets_tasks_and_inputs
|
|
80
|
-
assert_equal({}, queue.inputs)
|
|
81
|
-
assert_equal [], queue.tasks
|
|
82
|
-
|
|
83
|
-
queue.inputs[t] = [1,2,3]
|
|
84
|
-
queue.tasks << t
|
|
85
|
-
queue.clear
|
|
86
|
-
|
|
87
|
-
assert_equal({}, queue.inputs)
|
|
88
|
-
assert_equal [], queue.tasks
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
#
|
|
92
|
-
# queue test
|
|
93
|
-
#
|
|
94
|
-
|
|
95
|
-
def test_enq_pushes_task_onto_tasks
|
|
96
|
-
t1 = Tap::Task.new
|
|
97
|
-
t2 = Tap::Task.new
|
|
98
|
-
assert_equal [], queue.tasks
|
|
99
|
-
|
|
100
|
-
queue.enq(t1)
|
|
101
|
-
assert_equal [t1], queue.tasks
|
|
102
|
-
|
|
103
|
-
queue.enq(t2)
|
|
104
|
-
assert_equal [t1, t2], queue.tasks
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def test_enq_concats_inputs_to_inputs
|
|
108
|
-
assert_equal nil, queue.inputs[t]
|
|
109
|
-
|
|
110
|
-
queue.enq(t,1)
|
|
111
|
-
assert_equal [1], queue.inputs[t]
|
|
112
|
-
|
|
113
|
-
queue.enq(t,2,3)
|
|
114
|
-
assert_equal [1,2,3], queue.inputs[t]
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def test_enq_does_not_push_task_onto_tasks_if_it_is_already_in_the_queue
|
|
118
|
-
t1 = Tap::Task.new
|
|
119
|
-
t2 = Tap::Task.new
|
|
120
|
-
queue.tasks << t1
|
|
121
|
-
queue.tasks << t2
|
|
122
|
-
assert_equal [t1,t2], queue.tasks
|
|
123
|
-
|
|
124
|
-
queue.enq(t1)
|
|
125
|
-
assert_equal [t1,t2], queue.tasks
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def test_enq_queues_batch_if_task_is_batched
|
|
129
|
-
t.batch << t.dup
|
|
130
|
-
assert_equal [], queue.tasks
|
|
131
|
-
|
|
132
|
-
queue.enq(t)
|
|
133
|
-
assert_equal t.batch, queue.tasks
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def test_enq_forks_inputs_if_necessary_for_batch
|
|
137
|
-
t.batch << t.dup
|
|
138
|
-
|
|
139
|
-
a = Tap::Support::Audit.new(2)
|
|
140
|
-
queue.enq(t, 1, a)
|
|
141
|
-
|
|
142
|
-
audits = []
|
|
143
|
-
t.batch.each do |task|
|
|
144
|
-
assert_equal [1, a], queue.inputs[task]
|
|
145
|
-
audits << queue.inputs[task].last
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
# if the object ids of these audits are not equal, but they
|
|
149
|
-
# evaluate to equal, we can safely assume they're forked.
|
|
150
|
-
assert_equal 2, audits.length
|
|
151
|
-
assert_equal audits.first, audits.last
|
|
152
|
-
assert_not_equal audits.first.object_id, audits.last.object_id
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
#
|
|
156
|
-
# priority_enq test
|
|
157
|
-
#
|
|
158
|
-
|
|
159
|
-
def test_priority_enq_shifts_task_onto_tasks
|
|
160
|
-
t1 = Tap::Task.new
|
|
161
|
-
t2 = Tap::Task.new
|
|
162
|
-
assert_equal [], queue.tasks
|
|
163
|
-
|
|
164
|
-
queue.priority_enq(t1)
|
|
165
|
-
assert_equal [t1], queue.tasks
|
|
166
|
-
|
|
167
|
-
queue.priority_enq(t2)
|
|
168
|
-
assert_equal [t2, t1], queue.tasks
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
#
|
|
172
|
-
# prioritize test
|
|
173
|
-
#
|
|
174
|
-
|
|
175
|
-
def test_prioritize_moves_task_to_the_front_of_the_queue
|
|
176
|
-
t1 = Tap::Task.new
|
|
177
|
-
t2 = Tap::Task.new
|
|
178
|
-
queue.tasks << t1
|
|
179
|
-
queue.tasks << t2
|
|
180
|
-
assert_equal [t1,t2], queue.tasks
|
|
181
|
-
|
|
182
|
-
queue.prioritize(t2)
|
|
183
|
-
assert_equal [t2,t1], queue.tasks
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
def test_prioritize_does_not_insert_the_task_if_the_task_is_not_in_the_queue
|
|
187
|
-
assert_equal [], queue.tasks
|
|
188
|
-
|
|
189
|
-
queue.prioritize(t)
|
|
190
|
-
assert_equal [], queue.tasks
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
def test_prioritize_prioritizes_each_task_in_a_batch_in_order
|
|
194
|
-
t1 = Tap::Task.new
|
|
195
|
-
t2 = Tap::Task.new
|
|
196
|
-
t2.batch << t2.dup
|
|
197
|
-
|
|
198
|
-
queue.tasks << t1
|
|
199
|
-
queue.tasks.concat t2.batch
|
|
200
|
-
|
|
201
|
-
assert_equal [t1] + t2.batch, queue.tasks
|
|
202
|
-
|
|
203
|
-
queue.prioritize(t2)
|
|
204
|
-
assert_equal t2.batch + [t1], queue.tasks
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
#
|
|
208
|
-
# marginalize test
|
|
209
|
-
#
|
|
210
|
-
|
|
211
|
-
def test_marginalize_moves_task_to_the_front_of_the_queue
|
|
212
|
-
t1 = Tap::Task.new
|
|
213
|
-
t2 = Tap::Task.new
|
|
214
|
-
queue.tasks << t1
|
|
215
|
-
queue.tasks << t2
|
|
216
|
-
assert_equal [t1,t2], queue.tasks
|
|
217
|
-
|
|
218
|
-
queue.marginalize(t1)
|
|
219
|
-
assert_equal [t2,t1], queue.tasks
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
def test_marginalizeoes_not_insert_the_task_if_the_task_is_not_in_the_queue
|
|
223
|
-
assert_equal [], queue.tasks
|
|
224
|
-
|
|
225
|
-
queue.marginalize(t)
|
|
226
|
-
assert_equal [], queue.tasks
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
def test_marginalize_marginalizes_each_task_in_a_batch_in_order
|
|
230
|
-
t1 = Tap::Task.new
|
|
231
|
-
t2 = Tap::Task.new
|
|
232
|
-
t2.batch << t2.dup
|
|
233
|
-
|
|
234
|
-
queue.tasks.concat t2.batch
|
|
235
|
-
queue.tasks << t1
|
|
236
|
-
|
|
237
|
-
assert_equal t2.batch + [t1], queue.tasks
|
|
238
|
-
queue.marginalize(t2)
|
|
239
|
-
assert_equal [t1] + t2.batch, queue.tasks
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
#
|
|
243
|
-
# executable? tests
|
|
244
|
-
#
|
|
245
|
-
|
|
246
|
-
def test_executable_true_if_task_is_executable_with_current_inputs
|
|
247
|
-
t.condition {|task, inputs| inputs && inputs.length > 1 }
|
|
248
|
-
|
|
249
|
-
assert !queue.executable?(t)
|
|
250
|
-
queue.enq t,1
|
|
251
|
-
assert !queue.executable?(t)
|
|
252
|
-
queue.enq t,2
|
|
253
|
-
assert queue.executable?(t)
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
#
|
|
257
|
-
# deq test
|
|
258
|
-
#
|
|
259
|
-
|
|
260
|
-
def test_deq_returns_the_next_executable_task_and_inputs
|
|
261
|
-
queue.enq not_executable, :a,:b,:c
|
|
262
|
-
queue.enq t,1,2,3
|
|
263
|
-
|
|
264
|
-
assert_equal [t, [1,2,3]], queue.deq
|
|
265
|
-
assert !queue.empty?
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
def test_deq_returns_the_specified_task_even_if_not_executable
|
|
269
|
-
queue.enq t,1,2,3
|
|
270
|
-
queue.enq not_executable, :a,:b,:c
|
|
271
|
-
|
|
272
|
-
assert_equal [not_executable, [:a,:b,:c]], queue.deq(not_executable)
|
|
273
|
-
assert !queue.empty?
|
|
274
|
-
end
|
|
275
|
-
|
|
276
|
-
def test_deq_with_no_inputs_returns_empty_array_as_inputs
|
|
277
|
-
queue.enq t
|
|
278
|
-
assert_equal [t, []], queue.deq
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
#
|
|
282
|
-
# peek test
|
|
283
|
-
#
|
|
284
|
-
|
|
285
|
-
def test_peek_returns_the_next_executable_task_and_does_not_dequeue_the_task
|
|
286
|
-
queue.enq not_executable
|
|
287
|
-
queue.enq t
|
|
288
|
-
|
|
289
|
-
assert_equal t, queue.peek
|
|
290
|
-
assert_equal 2, queue.size
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
def test_peek_returns_nil_if_no_tasks_are_executable
|
|
294
|
-
assert_equal nil, queue.peek
|
|
295
|
-
|
|
296
|
-
queue.enq not_executable
|
|
297
|
-
|
|
298
|
-
assert_equal nil, queue.peek
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
#
|
|
302
|
-
# num_executable test
|
|
303
|
-
#
|
|
304
|
-
|
|
305
|
-
def test_num_executable_returns_number_of_queued_executable_tasks
|
|
306
|
-
assert_equal 0, queue.num_executable
|
|
307
|
-
queue.enq not_executable
|
|
308
|
-
assert_equal 0, queue.num_executable
|
|
309
|
-
queue.enq t
|
|
310
|
-
assert_equal 1, queue.num_executable
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
def test_num_not_executable_returns_number_of_queued_non_executable_tasks
|
|
314
|
-
assert_equal 0, queue.num_not_executable
|
|
315
|
-
queue.enq t
|
|
316
|
-
assert_equal 0, queue.num_not_executable
|
|
317
|
-
queue.enq not_executable
|
|
318
|
-
assert_equal 1, queue.num_not_executable
|
|
319
|
-
end
|
|
320
|
-
end
|