tap 0.7.9
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +21 -0
- data/README +71 -0
- data/Rakefile +117 -0
- data/bin/tap +63 -0
- data/lib/tap.rb +15 -0
- data/lib/tap/app.rb +739 -0
- data/lib/tap/file_task.rb +354 -0
- data/lib/tap/generator.rb +29 -0
- data/lib/tap/generator/generators/config/USAGE +0 -0
- data/lib/tap/generator/generators/config/config_generator.rb +23 -0
- data/lib/tap/generator/generators/config/templates/config.erb +2 -0
- data/lib/tap/generator/generators/file_task/USAGE +0 -0
- data/lib/tap/generator/generators/file_task/file_task_generator.rb +21 -0
- data/lib/tap/generator/generators/file_task/templates/task.erb +27 -0
- data/lib/tap/generator/generators/file_task/templates/test.erb +12 -0
- data/lib/tap/generator/generators/root/USAGE +0 -0
- data/lib/tap/generator/generators/root/root_generator.rb +36 -0
- data/lib/tap/generator/generators/root/templates/Rakefile +48 -0
- data/lib/tap/generator/generators/root/templates/app.yml +19 -0
- data/lib/tap/generator/generators/root/templates/config/process_tap_request.yml +4 -0
- data/lib/tap/generator/generators/root/templates/lib/process_tap_request.rb +26 -0
- data/lib/tap/generator/generators/root/templates/public/images/nav.jpg +0 -0
- data/lib/tap/generator/generators/root/templates/public/stylesheets/color.css +57 -0
- data/lib/tap/generator/generators/root/templates/public/stylesheets/layout.css +108 -0
- data/lib/tap/generator/generators/root/templates/public/stylesheets/normalize.css +40 -0
- data/lib/tap/generator/generators/root/templates/public/stylesheets/typography.css +21 -0
- data/lib/tap/generator/generators/root/templates/server/config/environment.rb +60 -0
- data/lib/tap/generator/generators/root/templates/server/lib/tasks/clear_database_prerequisites.rake +5 -0
- data/lib/tap/generator/generators/root/templates/server/test/test_helper.rb +53 -0
- data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +3 -0
- data/lib/tap/generator/generators/root/templates/test/tap_test_suite.rb +4 -0
- data/lib/tap/generator/generators/task/USAGE +0 -0
- data/lib/tap/generator/generators/task/task_generator.rb +21 -0
- data/lib/tap/generator/generators/task/templates/task.erb +21 -0
- data/lib/tap/generator/generators/task/templates/test.erb +29 -0
- data/lib/tap/generator/generators/workflow/USAGE +0 -0
- data/lib/tap/generator/generators/workflow/templates/task.erb +16 -0
- data/lib/tap/generator/generators/workflow/templates/test.erb +7 -0
- data/lib/tap/generator/generators/workflow/workflow_generator.rb +21 -0
- data/lib/tap/generator/options.rb +26 -0
- data/lib/tap/generator/usage.rb +26 -0
- data/lib/tap/root.rb +275 -0
- data/lib/tap/script/console.rb +7 -0
- data/lib/tap/script/destroy.rb +8 -0
- data/lib/tap/script/generate.rb +8 -0
- data/lib/tap/script/run.rb +111 -0
- data/lib/tap/script/server.rb +12 -0
- data/lib/tap/support/audit.rb +415 -0
- data/lib/tap/support/batch_queue.rb +165 -0
- data/lib/tap/support/combinator.rb +114 -0
- data/lib/tap/support/logger.rb +91 -0
- data/lib/tap/support/rap.rb +38 -0
- data/lib/tap/support/run_error.rb +20 -0
- data/lib/tap/support/template.rb +81 -0
- data/lib/tap/support/templater.rb +155 -0
- data/lib/tap/support/versions.rb +63 -0
- data/lib/tap/task.rb +448 -0
- data/lib/tap/test.rb +320 -0
- data/lib/tap/test/env_vars.rb +16 -0
- data/lib/tap/test/inference_methods.rb +298 -0
- data/lib/tap/test/subset_methods.rb +260 -0
- data/lib/tap/version.rb +3 -0
- data/lib/tap/workflow.rb +73 -0
- data/test/app/config/addition_template.yml +6 -0
- data/test/app/config/batch.yml +2 -0
- data/test/app/config/empty.yml +0 -0
- data/test/app/config/erb.yml +1 -0
- data/test/app/config/template.yml +6 -0
- data/test/app/config/version-0.1.yml +1 -0
- data/test/app/config/version.yml +1 -0
- data/test/app/lib/app_test_task.rb +2 -0
- data/test/app_class_test.rb +33 -0
- data/test/app_test.rb +1372 -0
- data/test/file_task/config/batch.yml +2 -0
- data/test/file_task/config/configured.yml +1 -0
- data/test/file_task/old_file_one.txt +0 -0
- data/test/file_task/old_file_two.txt +0 -0
- data/test/file_task_test.rb +1041 -0
- data/test/root/alt_lib/alt_module.rb +4 -0
- data/test/root/lib/absolute_alt_filepath.rb +2 -0
- data/test/root/lib/alternative_filepath.rb +2 -0
- data/test/root/lib/another_module.rb +2 -0
- data/test/root/lib/nested/some_module.rb +4 -0
- data/test/root/lib/no_module_included.rb +0 -0
- data/test/root/lib/some/module.rb +4 -0
- data/test/root/lib/some_class.rb +2 -0
- data/test/root/lib/some_module.rb +3 -0
- data/test/root/load_path/load_path_module.rb +2 -0
- data/test/root/load_path/skip_module.rb +2 -0
- data/test/root/mtime/older.txt +0 -0
- data/test/root/unload/full_path.rb +2 -0
- data/test/root/unload/loaded_by_nested.rb +2 -0
- data/test/root/unload/nested/nested_load.rb +6 -0
- data/test/root/unload/nested/nested_with_ext.rb +4 -0
- data/test/root/unload/nested/relative_path.rb +4 -0
- data/test/root/unload/older.rb +2 -0
- data/test/root/unload/unload_base.rb +9 -0
- data/test/root/versions/another.yml +0 -0
- data/test/root/versions/file-0.1.2.yml +0 -0
- data/test/root/versions/file-0.1.yml +0 -0
- data/test/root/versions/file.yml +0 -0
- data/test/root_test.rb +483 -0
- data/test/support/audit_test.rb +449 -0
- data/test/support/batch_queue_test.rb +320 -0
- data/test/support/combinator_test.rb +249 -0
- data/test/support/logger_test.rb +31 -0
- data/test/support/template_test.rb +122 -0
- data/test/support/templater/erb.txt +2 -0
- data/test/support/templater/erb.yml +2 -0
- data/test/support/templater/somefile.txt +2 -0
- data/test/support/templater_test.rb +192 -0
- data/test/support/versions_test.rb +71 -0
- data/test/tap_test_helper.rb +4 -0
- data/test/tap_test_suite.rb +4 -0
- data/test/task/config/batch.yml +2 -0
- data/test/task/config/batched.yml +2 -0
- data/test/task/config/configured.yml +1 -0
- data/test/task/config/example.yml +1 -0
- data/test/task/config/overriding.yml +2 -0
- data/test/task/config/task_with_config.yml +1 -0
- data/test/task/config/template.yml +4 -0
- data/test/task_class_test.rb +118 -0
- data/test/task_execute_test.rb +233 -0
- data/test/task_test.rb +424 -0
- data/test/test/inference_methods/test_assert_expected/expected/file.txt +1 -0
- data/test/test/inference_methods/test_assert_expected/expected/folder/file.txt +1 -0
- data/test/test/inference_methods/test_assert_expected/input/file.txt +1 -0
- data/test/test/inference_methods/test_assert_expected/input/folder/file.txt +1 -0
- data/test/test/inference_methods/test_assert_files_exist/input/input_1.txt +0 -0
- data/test/test/inference_methods/test_assert_files_exist/input/input_2.txt +0 -0
- data/test/test/inference_methods/test_file_compare/expected/output_1.txt +3 -0
- data/test/test/inference_methods/test_file_compare/expected/output_2.txt +1 -0
- data/test/test/inference_methods/test_file_compare/input/input_1.txt +3 -0
- data/test/test/inference_methods/test_file_compare/input/input_2.txt +3 -0
- data/test/test/inference_methods/test_infer_glob/expected/file.yml +0 -0
- data/test/test/inference_methods/test_infer_glob/expected/file_1.txt +0 -0
- data/test/test/inference_methods/test_infer_glob/expected/file_2.txt +0 -0
- data/test/test/inference_methods/test_yml_compare/expected/output_1.yml +6 -0
- data/test/test/inference_methods/test_yml_compare/expected/output_2.yml +6 -0
- data/test/test/inference_methods/test_yml_compare/input/input_1.yml +4 -0
- data/test/test/inference_methods/test_yml_compare/input/input_2.yml +4 -0
- data/test/test/inference_methods_test.rb +311 -0
- data/test/test/subset_methods_test.rb +115 -0
- data/test/test_test.rb +233 -0
- data/test/workflow_test.rb +108 -0
- metadata +274 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../tap_test_helper')
|
2
|
+
require 'tap/support/versions'
|
3
|
+
|
4
|
+
class VersionTest < Test::Unit::TestCase
|
5
|
+
include Tap::Support::Versions
|
6
|
+
|
7
|
+
def test_documentation
|
8
|
+
assert_equal "path/to/file-1.0.txt", version("path/to/file.txt", 1.0)
|
9
|
+
assert_equal "path/to/file-1.0.1.txt", increment("path/to/file-1.0.txt", "0.0.1")
|
10
|
+
assert_equal "path/to/file-1.0.txt", increment("path/to/file.txt", 1.0)
|
11
|
+
assert_equal ["path/to/file.txt", "1.0"], deversion("path/to/file-1.0.txt")
|
12
|
+
assert_equal ["path/to/file.txt", nil], deversion("path/to/file.txt")
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
# version tests
|
17
|
+
#
|
18
|
+
|
19
|
+
def test_version_accepts_string_or_numeric_versions
|
20
|
+
assert_equal "path/to/file-1.1.txt", version("path/to/file.txt", "1.1")
|
21
|
+
assert_equal "path/to/file-1.1.txt", version("path/to/file.txt", 1.1)
|
22
|
+
|
23
|
+
assert_equal "path/to/file-1.1", version("path/to/file", "1.1")
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_version_defaults_to_filepath_when_no_version_is_specified
|
27
|
+
assert_equal "path/to/file.txt", version("path/to/file.txt", "")
|
28
|
+
assert_equal "path/to/file.txt", version("path/to/file.txt", " ")
|
29
|
+
assert_equal "path/to/file.txt", version("path/to/file.txt", nil)
|
30
|
+
|
31
|
+
assert_equal "path/to/file", version("path/to/file", "")
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# deversion tests
|
36
|
+
#
|
37
|
+
|
38
|
+
def test_deversion_returns_filepath_and_version
|
39
|
+
assert_equal ["path/to/file.txt", "1.1"], deversion("path/to/file-1.1.txt")
|
40
|
+
assert_equal ["path/to/file", "1.1"], deversion("path/to/file-1.1")
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_deversion_returns_nil_for_version_when_no_version_is_specified
|
44
|
+
assert_equal ["path/to/file.txt", nil], deversion("path/to/file.txt")
|
45
|
+
assert_equal ["path/to/file", nil], deversion("path/to/file")
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# increment tests
|
50
|
+
#
|
51
|
+
|
52
|
+
def test_increment_adds_increment_to_current_version
|
53
|
+
assert_equal "path/to/file-1.0.1.txt", increment("path/to/file-1.0.txt", "0.0.1")
|
54
|
+
assert_equal "path/to/file-2.1.txt", increment("path/to/file-1.0.txt", 1.1)
|
55
|
+
assert_equal "path/to/file-2.0.txt", increment("path/to/file-1.0.txt", 1)
|
56
|
+
assert_equal "path/to/file-1.1.txt", increment("path/to/file.txt", 1.1)
|
57
|
+
|
58
|
+
assert_equal "path/to/file-1.0.1", increment("path/to/file-1.0", "0.0.1")
|
59
|
+
assert_equal "path/to/file-2.1", increment("path/to/file-1.0", 1.1)
|
60
|
+
assert_equal "path/to/file-2.0", increment("path/to/file-1.0", 1)
|
61
|
+
assert_equal "path/to/file-1.1", increment("path/to/file", 1.1)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_increment_adds_zero_if_increment_is_nil
|
65
|
+
assert_equal "path/to/file-1.0.txt", increment("path/to/file-1.0.txt", nil)
|
66
|
+
assert_equal "path/to/file.txt", increment("path/to/file.txt", nil)
|
67
|
+
|
68
|
+
assert_equal "path/to/file-1.0", increment("path/to/file-1.0", nil)
|
69
|
+
assert_equal "path/to/file", increment("path/to/file", nil)
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
key: value
|
@@ -0,0 +1 @@
|
|
1
|
+
one: ONE
|
@@ -0,0 +1 @@
|
|
1
|
+
config: value
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'tap_test_helper')
|
2
|
+
require 'tap/task'
|
3
|
+
|
4
|
+
class TaskClassTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
#
|
7
|
+
# task config tests
|
8
|
+
#
|
9
|
+
|
10
|
+
class TaskWithDefaultConfig < Tap::Task
|
11
|
+
set_default_config :one => 1, :two => 2, :three => 3
|
12
|
+
config_accessor :one
|
13
|
+
config_writer :two
|
14
|
+
config_reader :three
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_task_default_config_set_by_default_config
|
18
|
+
t = TaskWithDefaultConfig.new
|
19
|
+
assert_equal({:one => 1, :two => 2, :three => 3}, t.config)
|
20
|
+
|
21
|
+
t = TaskWithDefaultConfig.new nil, :one => "one"
|
22
|
+
assert_equal({:one => "one", :two => 2, :three => 3}, t.config)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_config_reader_and_writer_defined_by_config_accessor
|
26
|
+
t = TaskWithDefaultConfig.new
|
27
|
+
assert t.respond_to?(:one)
|
28
|
+
assert t.respond_to?("one=")
|
29
|
+
|
30
|
+
assert_equal 1, t.one
|
31
|
+
assert_equal 1, t.config[:one]
|
32
|
+
|
33
|
+
t.one = "one"
|
34
|
+
assert_equal "one", t.one
|
35
|
+
assert_equal "one", t.config[:one]
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_config_reader_defined_by_config_reader
|
39
|
+
t = TaskWithDefaultConfig.new
|
40
|
+
assert t.respond_to?(:three)
|
41
|
+
assert !t.respond_to?("three=")
|
42
|
+
|
43
|
+
assert_equal 3, t.three
|
44
|
+
assert_equal 3, t.config[:three]
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_config_writer_defined_by_config_writer
|
48
|
+
t = TaskWithDefaultConfig.new
|
49
|
+
assert !t.respond_to?(:two)
|
50
|
+
assert t.respond_to?("two=")
|
51
|
+
|
52
|
+
assert_equal 2, t.config[:two]
|
53
|
+
t.two = "two"
|
54
|
+
assert_equal "two", t.config[:two]
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# test subclass behavior
|
59
|
+
#
|
60
|
+
|
61
|
+
class SubclassedTask < TaskWithDefaultConfig
|
62
|
+
set_default_config :one => "one", :four => 4
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_config_accessors_are_inherited
|
66
|
+
t = SubclassedTask.new
|
67
|
+
|
68
|
+
assert t.respond_to?(:one)
|
69
|
+
assert t.respond_to?("one=")
|
70
|
+
assert !t.respond_to?(:two)
|
71
|
+
assert t.respond_to?("two=")
|
72
|
+
assert t.respond_to?(:three)
|
73
|
+
assert !t.respond_to?("three=")
|
74
|
+
|
75
|
+
assert !t.respond_to?(:four)
|
76
|
+
assert !t.respond_to?("four=")
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_default_configs_are_inherited_but_can_be_overridden
|
80
|
+
s = SubclassedTask.new
|
81
|
+
assert_equal({:one => "one", :two => 2, :three => 3, :four => 4}, s.config)
|
82
|
+
|
83
|
+
# assure subclass configs do not affect superclass
|
84
|
+
t = TaskWithDefaultConfig.new
|
85
|
+
assert_equal({:one => 1, :two => 2, :three => 3}, t.config)
|
86
|
+
end
|
87
|
+
|
88
|
+
#
|
89
|
+
# iterative tests
|
90
|
+
#
|
91
|
+
|
92
|
+
def test_iterative_is_by_default_true
|
93
|
+
assert Tap::Task.iterative
|
94
|
+
end
|
95
|
+
|
96
|
+
class NonIterativeTask < Tap::Task
|
97
|
+
do_not_iterate
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_do_not_iterate_sets_iterative_to_false
|
101
|
+
assert !NonIterativeTask.iterative
|
102
|
+
end
|
103
|
+
|
104
|
+
class AnotherNonIterativeTask < NonIterativeTask
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_iterative_is_inherited
|
108
|
+
assert !AnotherNonIterativeTask.iterative
|
109
|
+
end
|
110
|
+
|
111
|
+
class IterativeTask < NonIterativeTask
|
112
|
+
iterate
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_iterative_can_be_reset_with_iterate
|
116
|
+
assert IterativeTask.iterative
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,233 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'tap_test_helper')
|
2
|
+
require 'tap/task'
|
3
|
+
|
4
|
+
class TaskExecuteTest < Test::Unit::TestCase
|
5
|
+
include Tap
|
6
|
+
|
7
|
+
acts_as_tap_test
|
8
|
+
|
9
|
+
attr_accessor :t1, :t2, :t3, :t4
|
10
|
+
|
11
|
+
def setup
|
12
|
+
super
|
13
|
+
1.upto(4) do |index|
|
14
|
+
var = "t#{index}".to_sym
|
15
|
+
self.send("#{var}=", Task.new(&echo))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# check t1-t4 are iterative
|
21
|
+
#
|
22
|
+
|
23
|
+
def test_t1_to_t4_tasks_are_iterative
|
24
|
+
assert t1.iterate?
|
25
|
+
assert t2.iterate?
|
26
|
+
assert t3.iterate?
|
27
|
+
assert t4.iterate?
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
# condition and on_complete tests
|
32
|
+
#
|
33
|
+
|
34
|
+
def test_execute_raises_error_unless_condtion_block_returns_true
|
35
|
+
t = Task.new
|
36
|
+
t.condition {false}
|
37
|
+
assert_raise(RuntimeError) { t.execute }
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_on_complete_executes_after_execute_and_recieves_results
|
41
|
+
t = Task.new
|
42
|
+
|
43
|
+
recieved = nil
|
44
|
+
t.on_complete do |results|
|
45
|
+
recieved = results
|
46
|
+
end
|
47
|
+
|
48
|
+
t.execute(1,2,3)
|
49
|
+
|
50
|
+
assert_equal t.results, recieved
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# iterative execute tests
|
55
|
+
#
|
56
|
+
|
57
|
+
def test_execute_without_inputs_produces_empty_results
|
58
|
+
t1.execute
|
59
|
+
|
60
|
+
assert_equal [], runlist
|
61
|
+
assert_equal [], t1.results
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_execute_iteratively_processes_and_audits_each_input
|
65
|
+
t1.execute([1,2], 3)
|
66
|
+
|
67
|
+
assert_equal [[1,2], 3], runlist
|
68
|
+
assert_inputs(t1 => [[1,2], 3])
|
69
|
+
assert_outputs(t1 => [[1,2], 3])
|
70
|
+
assert_audits(
|
71
|
+
t1.results,
|
72
|
+
0 => [[nil, [1,2]], [t1, [1,2]]],
|
73
|
+
1 => [[nil, 3], [t1, 3]])
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
# iterative audit tests
|
78
|
+
#
|
79
|
+
|
80
|
+
def test_each_result_is_an_audit
|
81
|
+
t1.execute 1,2
|
82
|
+
|
83
|
+
t1.results.each do |r|
|
84
|
+
assert r.kind_of?(Support::Audit)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_execute_passes_audit_trails
|
89
|
+
t1.execute 1,2
|
90
|
+
t2.execute(*t1.results)
|
91
|
+
t3.execute(*t2.results)
|
92
|
+
|
93
|
+
assert_outputs(
|
94
|
+
t1 => [1,2],
|
95
|
+
t2 => [1,2],
|
96
|
+
t3 => [1,2])
|
97
|
+
assert_audits(
|
98
|
+
t3.results,
|
99
|
+
0 => [[nil, 1],[t1, 1],[t2, 1],[t3, 1]],
|
100
|
+
1 => [[nil, 2],[t1, 2],[t2, 2],[t3, 2]])
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_execute_audits_additional_inputs
|
104
|
+
t1.execute 1,2
|
105
|
+
t2.execute(*(t1.results + [3]))
|
106
|
+
t3.execute(*(t2.results + [4]))
|
107
|
+
|
108
|
+
assert_outputs(
|
109
|
+
t1 => [1,2],
|
110
|
+
t2 => [1,2,3],
|
111
|
+
t3 => [1,2,3,4])
|
112
|
+
assert_audits(
|
113
|
+
t3.results,
|
114
|
+
0 => [[nil, 1], [t1, 1],[t2, 1],[t3, 1]],
|
115
|
+
1 => [[nil, 2], [t1, 2],[t2, 2],[t3, 2]],
|
116
|
+
2 => [[nil, 3], [t2, 3],[t3, 3]],
|
117
|
+
3 => [[nil, 4], [t3, 4]])
|
118
|
+
|
119
|
+
check_audit(t3.results[0]) do
|
120
|
+
1._from nil
|
121
|
+
1._from t1
|
122
|
+
1._from t2
|
123
|
+
1._from t3
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
class NonIterativeTask < Task
|
128
|
+
do_not_iterate
|
129
|
+
end
|
130
|
+
|
131
|
+
#
|
132
|
+
# check NonIterativeTask is set to not iterate
|
133
|
+
#
|
134
|
+
|
135
|
+
def test_do_not_iterate
|
136
|
+
assert !NonIterativeTask.iterative
|
137
|
+
t = NonIterativeTask.new
|
138
|
+
assert !t.iterate?
|
139
|
+
end
|
140
|
+
|
141
|
+
#
|
142
|
+
# non iterative execute tests
|
143
|
+
#
|
144
|
+
|
145
|
+
def test_non_iterative_execute_processes_inputs_as_one_input
|
146
|
+
t = NonIterativeTask.new(&echo)
|
147
|
+
t.execute(1,2,3)
|
148
|
+
|
149
|
+
assert_equal [[1,2,3]], runlist
|
150
|
+
assert_inputs(t => [[1,2,3]])
|
151
|
+
assert_outputs(t => [[1,2,3]])
|
152
|
+
assert_audits(
|
153
|
+
t.results,
|
154
|
+
0 => [ [[nil, nil, nil], [1,2,3]], [t, [1,2,3]] ])
|
155
|
+
end
|
156
|
+
|
157
|
+
def test_non_iterative_execute_respects_array_inputs
|
158
|
+
t = NonIterativeTask.new(&echo)
|
159
|
+
t.execute([1,2], 3)
|
160
|
+
|
161
|
+
assert_equal [[[1,2], 3]], runlist
|
162
|
+
assert_inputs(t => [[[1,2], 3]])
|
163
|
+
assert_outputs(t => [[[1,2], 3]])
|
164
|
+
assert_audits(
|
165
|
+
t.results,
|
166
|
+
0 => [ [[nil, nil], [[1,2], 3]], [t, [[1,2], 3]] ])
|
167
|
+
end
|
168
|
+
|
169
|
+
#
|
170
|
+
# non iterative audit tests
|
171
|
+
#
|
172
|
+
|
173
|
+
def test_non_iterative_execute_audits_inputs_as_one_unit
|
174
|
+
t = NonIterativeTask.new(&echo)
|
175
|
+
t.execute 1,2
|
176
|
+
|
177
|
+
assert_outputs(t => [[1,2]])
|
178
|
+
assert_audits(
|
179
|
+
t.results,
|
180
|
+
0 => [
|
181
|
+
[[nil, nil], [1,2]], # original source
|
182
|
+
[t, [1,2]]] # final value
|
183
|
+
)
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_non_iterative_execute_audits_additional_inputs_as_one_unit
|
187
|
+
t1 = NonIterativeTask.new(&echo)
|
188
|
+
t2 = NonIterativeTask.new(&echo)
|
189
|
+
|
190
|
+
t1.execute 1,2
|
191
|
+
assert_outputs(t1 => [[1,2]])
|
192
|
+
|
193
|
+
t2.execute(t1.results.first, 3)
|
194
|
+
|
195
|
+
assert_outputs(
|
196
|
+
t2 => [ [[1,2],3] ])
|
197
|
+
assert_audits(
|
198
|
+
t2.results,
|
199
|
+
0 => [
|
200
|
+
[[[[nil, nil], t1], nil], [[1, 2], 3]], # original source
|
201
|
+
[t2, [[1, 2], 3]]] # final value source
|
202
|
+
)
|
203
|
+
|
204
|
+
check_audit(t2.results[0]) do
|
205
|
+
[[1,2], 3]._from(t2) {
|
206
|
+
[1,2]._from(t1) {
|
207
|
+
1._from nil
|
208
|
+
2._from nil }
|
209
|
+
3._from nil }
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
|
214
|
+
#
|
215
|
+
# synchronization tests
|
216
|
+
#
|
217
|
+
|
218
|
+
def test_execute_is_synchronized
|
219
|
+
extended_test do
|
220
|
+
count = 0
|
221
|
+
counter = Task.new do
|
222
|
+
count += 1
|
223
|
+
end
|
224
|
+
|
225
|
+
t1 = Thread.new { 10000.times { counter.execute(1) } }
|
226
|
+
t2 = Thread.new { 10000.times { counter.execute(1) } }
|
227
|
+
t1.join
|
228
|
+
t2.join
|
229
|
+
|
230
|
+
assert_equal 20000, count
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|