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.
Files changed (149) hide show
  1. data/History +28 -0
  2. data/MIT-LICENSE +1 -1
  3. data/README +71 -43
  4. data/Rakefile +81 -64
  5. data/Tutorial +235 -0
  6. data/bin/tap +80 -44
  7. data/lib/tap.rb +41 -12
  8. data/lib/tap/app.rb +243 -246
  9. data/lib/tap/file_task.rb +357 -118
  10. data/lib/tap/generator.rb +88 -29
  11. data/lib/tap/generator/generators/config/config_generator.rb +4 -2
  12. data/lib/tap/generator/generators/config/templates/config.erb +1 -2
  13. data/lib/tap/generator/generators/file_task/file_task_generator.rb +3 -18
  14. data/lib/tap/generator/generators/file_task/templates/task.erb +22 -15
  15. data/lib/tap/generator/generators/file_task/templates/test.erb +13 -2
  16. data/{test/test/inference_methods/test_assert_files_exist/input/input_1.txt → lib/tap/generator/generators/generator/USAGE} +0 -0
  17. data/lib/tap/generator/generators/generator/generator_generator.rb +21 -0
  18. data/lib/tap/generator/generators/generator/templates/generator.erb +23 -0
  19. data/lib/tap/generator/generators/generator/templates/usage.erb +1 -0
  20. data/{test/test/inference_methods/test_assert_files_exist/input/input_2.txt → lib/tap/generator/generators/package/USAGE} +0 -0
  21. data/lib/tap/generator/generators/package/package_generator.rb +38 -0
  22. data/lib/tap/generator/generators/package/templates/package.erb +186 -0
  23. data/lib/tap/generator/generators/root/root_generator.rb +14 -9
  24. data/lib/tap/generator/generators/root/templates/Rakefile +20 -14
  25. data/{test/test/inference_methods/test_infer_glob/expected/file.yml → lib/tap/generator/generators/root/templates/ReadMe.txt} +0 -0
  26. data/lib/tap/generator/generators/root/templates/tap.yml +82 -0
  27. data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +0 -1
  28. data/lib/tap/generator/generators/root/templates/test/tap_test_suite.rb +2 -1
  29. data/{test/test/inference_methods/test_infer_glob/expected/file_1.txt → lib/tap/generator/generators/script/USAGE} +0 -0
  30. data/lib/tap/generator/generators/script/script_generator.rb +17 -0
  31. data/lib/tap/generator/generators/script/templates/script.erb +42 -0
  32. data/lib/tap/generator/generators/task/task_generator.rb +1 -1
  33. data/lib/tap/generator/generators/task/templates/task.erb +24 -16
  34. data/lib/tap/generator/generators/task/templates/test.erb +13 -17
  35. data/lib/tap/generator/generators/workflow/templates/task.erb +10 -10
  36. data/lib/tap/generator/generators/workflow/templates/test.erb +1 -1
  37. data/lib/tap/generator/generators/workflow/workflow_generator.rb +3 -18
  38. data/lib/tap/root.rb +108 -146
  39. data/lib/tap/script.rb +362 -0
  40. data/lib/tap/script/console.rb +28 -0
  41. data/lib/tap/script/destroy.rb +13 -1
  42. data/lib/tap/script/generate.rb +13 -1
  43. data/lib/tap/script/run.rb +100 -57
  44. data/lib/tap/support/batch_queue.rb +0 -3
  45. data/lib/tap/support/logger.rb +6 -3
  46. data/lib/tap/support/rake.rb +54 -0
  47. data/lib/tap/support/task_configuration.rb +169 -0
  48. data/lib/tap/support/tdoc.rb +198 -0
  49. data/lib/tap/support/tdoc/config_attr.rb +338 -0
  50. data/lib/tap/support/tdoc/tdoc_html_generator.rb +38 -0
  51. data/lib/tap/support/tdoc/tdoc_html_template.rb +42 -0
  52. data/lib/tap/support/versions.rb +33 -1
  53. data/lib/tap/task.rb +339 -227
  54. data/lib/tap/test.rb +86 -128
  55. data/lib/tap/test/env_vars.rb +16 -5
  56. data/lib/tap/test/file_methods.rb +373 -0
  57. data/lib/tap/test/subset_methods.rb +299 -180
  58. data/lib/tap/version.rb +2 -1
  59. data/lib/tap/workflow.rb +2 -0
  60. data/test/app/lib/app_test_task.rb +1 -0
  61. data/test/app_test.rb +327 -83
  62. data/test/check/binding_eval.rb +23 -0
  63. data/test/check/define_method_check.rb +22 -0
  64. data/test/check/dependencies_check.rb +175 -0
  65. data/test/check/inheritance_check.rb +22 -0
  66. data/test/file_task_test.rb +524 -291
  67. data/test/{test/inference_methods/test_infer_glob/expected/file_2.txt → root/glob/one.txt} +0 -0
  68. data/test/root/glob/two.txt +0 -0
  69. data/test/root_test.rb +330 -262
  70. data/test/script_test.rb +194 -0
  71. data/test/support/audit_test.rb +5 -2
  72. data/test/support/combinator_test.rb +10 -10
  73. data/test/support/rake_test.rb +35 -0
  74. data/test/support/task_configuration_test.rb +272 -0
  75. data/test/support/tdoc_test.rb +363 -0
  76. data/test/support/templater_test.rb +2 -2
  77. data/test/support/versions_test.rb +32 -0
  78. data/test/tap_test_helper.rb +39 -0
  79. data/test/task_base_test.rb +115 -0
  80. data/test/task_class_test.rb +56 -4
  81. data/test/task_execute_test.rb +29 -0
  82. data/test/task_test.rb +89 -70
  83. data/test/test/env_vars_test.rb +48 -0
  84. data/test/test/{inference_methods → file_methods}/test_assert_expected/expected/file.txt +0 -0
  85. data/test/test/{inference_methods → file_methods}/test_assert_expected/expected/folder/file.txt +0 -0
  86. data/test/test/{inference_methods → file_methods}/test_assert_expected/input/file.txt +0 -0
  87. data/test/test/{inference_methods → file_methods}/test_assert_expected/input/folder/file.txt +0 -0
  88. data/test/test/file_methods/test_assert_files_exist/input/input_1.txt +0 -0
  89. data/test/test/file_methods/test_assert_files_exist/input/input_2.txt +0 -0
  90. data/test/test/file_methods/test_assert_output_files_equal/expected/one.txt +1 -0
  91. data/test/test/file_methods/test_assert_output_files_equal/expected/two.txt +1 -0
  92. data/test/test/file_methods/test_assert_output_files_equal/input/one.txt +1 -0
  93. data/test/test/file_methods/test_assert_output_files_equal/input/two.txt +1 -0
  94. data/test/test/{inference_methods → file_methods}/test_file_compare/expected/output_1.txt +0 -0
  95. data/test/test/{inference_methods → file_methods}/test_file_compare/expected/output_2.txt +0 -0
  96. data/test/test/{inference_methods → file_methods}/test_file_compare/input/input_1.txt +0 -0
  97. data/test/test/{inference_methods → file_methods}/test_file_compare/input/input_2.txt +0 -0
  98. data/test/test/file_methods/test_infer_glob/expected/file.yml +0 -0
  99. data/test/test/file_methods/test_infer_glob/expected/file_1.txt +0 -0
  100. data/test/test/file_methods/test_infer_glob/expected/file_2.txt +0 -0
  101. data/test/test/file_methods/test_method_glob/expected/file.yml +0 -0
  102. data/test/test/file_methods/test_method_glob/expected/file_1.txt +0 -0
  103. data/test/test/file_methods/test_method_glob/expected/file_2.txt +0 -0
  104. data/test/test/{inference_methods → file_methods}/test_yml_compare/expected/output_1.yml +0 -0
  105. data/test/test/{inference_methods → file_methods}/test_yml_compare/expected/output_2.yml +0 -0
  106. data/test/test/{inference_methods → file_methods}/test_yml_compare/input/input_1.yml +0 -0
  107. data/test/test/{inference_methods → file_methods}/test_yml_compare/input/input_2.yml +0 -0
  108. data/test/test/file_methods_test.rb +204 -0
  109. data/test/test/subset_methods_test.rb +93 -33
  110. data/test/test/test_assert_expected_result_files/expected/task/name/a.txt +1 -0
  111. data/test/test/test_assert_expected_result_files/expected/task/name/b.txt +1 -0
  112. data/test/test/test_assert_expected_result_files/input/a.txt +1 -0
  113. data/test/test/test_assert_expected_result_files/input/b.txt +1 -0
  114. data/test/test/test_file_task_test/expected/one.txt +1 -0
  115. data/test/test/test_file_task_test/expected/two.txt +1 -0
  116. data/test/test/test_file_task_test/input/one.txt +1 -0
  117. data/test/test/test_file_task_test/input/two.txt +1 -0
  118. data/test/test_test.rb +143 -3
  119. data/test/workflow_test.rb +2 -0
  120. data/vendor/rails_generator.rb +56 -0
  121. data/vendor/rails_generator/base.rb +263 -0
  122. data/vendor/rails_generator/commands.rb +581 -0
  123. data/vendor/rails_generator/generated_attribute.rb +42 -0
  124. data/vendor/rails_generator/lookup.rb +209 -0
  125. data/vendor/rails_generator/manifest.rb +53 -0
  126. data/vendor/rails_generator/options.rb +143 -0
  127. data/vendor/rails_generator/scripts.rb +83 -0
  128. data/vendor/rails_generator/scripts/destroy.rb +7 -0
  129. data/vendor/rails_generator/scripts/generate.rb +7 -0
  130. data/vendor/rails_generator/scripts/update.rb +12 -0
  131. data/vendor/rails_generator/simple_logger.rb +46 -0
  132. data/vendor/rails_generator/spec.rb +44 -0
  133. metadata +180 -196
  134. data/lib/tap/generator/generators/root/templates/app.yml +0 -19
  135. data/lib/tap/generator/generators/root/templates/config/process_tap_request.yml +0 -4
  136. data/lib/tap/generator/generators/root/templates/lib/process_tap_request.rb +0 -26
  137. data/lib/tap/generator/generators/root/templates/public/images/nav.jpg +0 -0
  138. data/lib/tap/generator/generators/root/templates/public/stylesheets/color.css +0 -57
  139. data/lib/tap/generator/generators/root/templates/public/stylesheets/layout.css +0 -108
  140. data/lib/tap/generator/generators/root/templates/public/stylesheets/normalize.css +0 -40
  141. data/lib/tap/generator/generators/root/templates/public/stylesheets/typography.css +0 -21
  142. data/lib/tap/generator/generators/root/templates/server/config/environment.rb +0 -60
  143. data/lib/tap/generator/generators/root/templates/server/lib/tasks/clear_database_prerequisites.rake +0 -5
  144. data/lib/tap/generator/generators/root/templates/server/test/test_helper.rb +0 -53
  145. data/lib/tap/script/server.rb +0 -12
  146. data/lib/tap/support/rap.rb +0 -38
  147. data/lib/tap/test/inference_methods.rb +0 -298
  148. data/test/task/config/task_with_config.yml +0 -1
  149. data/test/test/inference_methods_test.rb +0 -311
@@ -0,0 +1,48 @@
1
+ require File.join(File.dirname(__FILE__), '../tap_test_helper.rb')
2
+
3
+ class EnvVarsTest < Test::Unit::TestCase
4
+ include Tap::Test::EnvVars
5
+
6
+ def setup
7
+ @env_hold = {}
8
+ ENV.each_pair do |key, value|
9
+ @env_hold[key] = value
10
+ end
11
+ ENV.clear
12
+ end
13
+
14
+ def teardown
15
+ ENV.clear
16
+ @env_hold.each_pair do |key, value|
17
+ ENV[key] = value
18
+ end
19
+ end
20
+
21
+ #
22
+ # env test
23
+ #
24
+
25
+ def test_env_access_is_case_insensitive
26
+ ENV['key1'] = "value"
27
+ assert_equal 'value', env('key1')
28
+ assert_equal 'value', env('KEY1')
29
+
30
+ ENV['KEY2'] = "VALUE"
31
+ assert_equal 'VALUE', env('key2')
32
+ assert_equal 'VALUE', env('KEY2')
33
+ end
34
+
35
+ def test_env_raises_error_if_multiple_values_can_be_selected
36
+ ENV['key'] = "value"
37
+ ENV['KEY'] = "VALUE"
38
+
39
+ # Some platforms (ex Windows) already make ENV case-independent
40
+ # Filter for the platforms that do not by checking that ENV has both
41
+ # expected keys
42
+ if ENV.length == 2
43
+ assert_raise(RuntimeError) { env('key') }
44
+ assert_raise(RuntimeError) { env('Key') }
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,204 @@
1
+ require File.join(File.dirname(__FILE__), '../tap_test_helper.rb')
2
+ require 'tap/test/file_methods'
3
+
4
+ class FileMethodsTest < Test::Unit::TestCase
5
+ include Tap::Test::SubsetMethods
6
+ acts_as_file_test
7
+
8
+ def test_method_name_returns_test_method_name1
9
+ assert_equal "test_method_name_returns_test_method_name1", method_name
10
+ end
11
+
12
+ def test_method_name_returns_test_method_name2
13
+ assert_equal "test_method_name_returns_test_method_name2", method_name
14
+ end
15
+
16
+ def test_make_test_directories
17
+ root = File.expand_path(File.join(File.dirname(__FILE__), "file_methods"))
18
+ begin
19
+ assert_equal root, trs[:root]
20
+ assert_equal({
21
+ :input => 'input',
22
+ :output => 'output',
23
+ :expected => 'expected'}, trs.directories)
24
+
25
+ trs.directories.values.each do |dir|
26
+ assert !File.exists?(File.join(root, "test_make_test_directories", dir.to_s)), dir
27
+ end
28
+
29
+ make_test_directories # alias for make_test_directories
30
+
31
+ trs.directories.values.each do |dir|
32
+ assert File.exists?(File.join(root, "test_make_test_directories", dir.to_s)), dir
33
+ end
34
+ ensure
35
+ dir = File.join(File.join(root, "test_make_test_directories"))
36
+ FileUtils.rm_r dir if File.exists?(dir)
37
+ end
38
+ end
39
+
40
+ #
41
+ # method filepath tests
42
+ #
43
+
44
+ def test_method_dir_adds_method_to_path
45
+ assert_equal File.join(trs.root, method_name, "input"), method_dir(:input)
46
+ end
47
+
48
+ def test_method_filepath_adds_method_to_path
49
+ input_root = File.join(trs.root, method_name, "input")
50
+ assert_equal File.join(input_root, "file.txt"), method_filepath(:input, 'file.txt')
51
+ assert_equal File.join(input_root, "folder/file.txt"), method_filepath(:input, 'folder', 'file.txt')
52
+ end
53
+
54
+ #
55
+ # method relative filepath tests
56
+ #
57
+
58
+ def test_method_relative_filepath_removes_method_dir
59
+ input_root = File.join(trs.root, method_name, "input")
60
+ assert_equal 'file.txt', method_relative_filepath(:input, File.join(input_root, "file.txt"))
61
+ assert_equal 'folder/file.txt', method_relative_filepath(:input, File.join(input_root, "folder/file.txt"))
62
+ end
63
+
64
+ def test_method_relative_filepath_expands_filepaths
65
+ input_root = File.join(trs.root, method_name, "input")
66
+ assert_equal 'file.txt', method_relative_filepath(:input, File.join(input_root, "folder/.././file.txt") )
67
+ end
68
+
69
+ def test_method_relative_filepath_raises_error_unless_filepath_begins_with_method_dir
70
+ assert_raise(RuntimeError) { method_relative_filepath(:input, File.join('some/path', trs[:input], 'file.txt') ) }
71
+ end
72
+
73
+ #
74
+ # method translate tests
75
+ #
76
+
77
+ def test_method_translate
78
+ ['file.txt', 'folder/file.txt'].each do |path|
79
+ filepath = File.join(trs.root, method_name, "input", path)
80
+ expected = File.join(trs.root, method_name, "output", path)
81
+
82
+ assert_equal expected, method_translate(filepath, :input, :output)
83
+ end
84
+ end
85
+
86
+ #
87
+ # method glob tests
88
+ #
89
+
90
+ def test_method_glob
91
+ {
92
+ [:expected] => ["file.yml", "file_1.txt", "file_2.txt"],
93
+ [:expected, "*"] => ["file.yml", "file_1.txt", "file_2.txt"],
94
+ [:expected, "*.txt"] => ["file_1.txt", "file_2.txt"],
95
+ [:expected, "*.txt", "*.yml"] => ["file.yml", "file_1.txt", "file_2.txt"]
96
+ }.each_pair do |testcase, expected|
97
+ expected.collect! { |file| method_filepath(:expected, file) }
98
+
99
+ assert_equal expected.sort, method_glob(*testcase).sort
100
+ end
101
+ end
102
+
103
+ #
104
+ # tempfile test
105
+ #
106
+
107
+ def test_tempfile_returns_new_file_in_output_dir
108
+ output_root = File.join(trs.root, method_name, "output")
109
+
110
+ filepath =File.join(output_root, "file#{$$}.0")
111
+ assert_equal filepath, tempfile('file')
112
+
113
+ filepath = File.join(output_root, "file#{$$}.0")
114
+ assert_equal filepath, tempfile('file')
115
+
116
+ FileUtils.touch filepath
117
+ filepath = File.join(output_root, "file#{$$}.1")
118
+ assert_equal filepath, tempfile('file')
119
+
120
+ FileUtils.touch filepath
121
+ filepath = File.join(output_root, "file#{$$}.2")
122
+ assert_equal filepath, tempfile('file')
123
+ end
124
+
125
+ #
126
+ # files equal test
127
+ #
128
+
129
+ def test_file_compare
130
+ count = 0
131
+ each_pair(method_glob(:input, "*1*"), method_glob(:expected, "*1*") ) do |a, b|
132
+ assert files_equal?(a, b)
133
+ count += 1
134
+ end
135
+ assert_equal 1, count
136
+
137
+ each_pair(method_glob(:input, "*2*"), method_glob(:expected, "*2*") ) do |a, b|
138
+ assert !files_equal?(a, b)
139
+ count += 1
140
+ end
141
+ assert_equal 2, count
142
+ end
143
+
144
+ #
145
+ # yml equal test
146
+ #
147
+
148
+ def test_yml_compare
149
+ count = 0
150
+ each_pair(method_glob(:input, "*1*"), method_glob(:expected, "*1*") ) do |a, b|
151
+ assert yml_equal?(a, b)
152
+ count += 1
153
+ end
154
+ assert_equal 1, count
155
+
156
+ each_pair(method_glob(:input, "*2*"), method_glob(:expected, "*2*") ) do |a, b|
157
+ assert !yml_equal?(a, b)
158
+ count += 1
159
+ end
160
+ assert_equal 2, count
161
+ end
162
+
163
+ #
164
+ # assert_output_files_equal
165
+ #
166
+
167
+ def setup_file(dir, path, content)
168
+ path = method_filepath(dir, path)
169
+ dir = File.dirname(path)
170
+ FileUtils.mkdir_p(dir) unless File.exists?(dir)
171
+
172
+ File.open(path, "w") {|f| f << content}
173
+ path
174
+ end
175
+
176
+ def test_assert_output_files_equal
177
+ setup_file :input, "one.txt", "file one"
178
+ setup_file :input, "two.txt", "file two"
179
+ setup_file :expected, "one.txt", "processed file one"
180
+ setup_file :expected, "two.txt", "processed file two"
181
+
182
+ assert_output_files_equal(:iterate_inputs => true) do |input_file|
183
+ target = method_filepath(:output, File.basename(input_file))
184
+ File.open(target, "w") do |file|
185
+ file << "processed "
186
+ file << File.read(input_file)
187
+ end
188
+ target
189
+ end
190
+ end
191
+ end
192
+
193
+ class FileTestTestWithOptions < Test::Unit::TestCase
194
+ acts_as_file_test :root => "some/root/dir"
195
+
196
+ def test_test_setup
197
+ assert_equal File.expand_path("some/root/dir"), trs[:root]
198
+ assert_equal({
199
+ :input => 'input',
200
+ :output => 'output',
201
+ :expected => 'expected'}, trs.directories)
202
+ end
203
+ end
204
+
@@ -3,10 +3,7 @@ require 'tap/test/subset_methods'
3
3
 
4
4
  class SubsetMethodsTest < Test::Unit::TestCase
5
5
  include Tap::Test::SubsetMethods
6
-
7
- # TODO - replace ENV[] with env() throughout,
8
- # and override env() so ENV is absolutely NOT
9
- # modified
6
+ include Benchmark
10
7
 
11
8
  def setup
12
9
  @env_hold = {}
@@ -43,7 +40,48 @@ class SubsetMethodsTest < Test::Unit::TestCase
43
40
  ENV['type'] = "TRUE"
44
41
  assert env_true?('type')
45
42
  end
46
-
43
+
44
+ #
45
+ # extended_test test
46
+ #
47
+
48
+ def test_extended_test_runs_only_if_extended_true
49
+ was_in_test = false
50
+ extended_test { was_in_test = true }
51
+ assert !was_in_test
52
+
53
+ ENV['EXTENDED'] = 'true'
54
+ extended_test { was_in_test = true }
55
+ assert was_in_test
56
+ end
57
+
58
+ #
59
+ # condition test
60
+ #
61
+
62
+ condition(:is_true) {true}
63
+ condition(:is_false) {false}
64
+
65
+ def test_conditional_test_runs_only_if_all_conditions_are_true
66
+ test_ran = false
67
+ condition_test(:is_true) { test_ran = true}
68
+ assert test_ran
69
+
70
+ test_ran = false
71
+ condition_test(:is_false) { test_ran = true}
72
+ assert !test_ran
73
+
74
+ test_ran = false
75
+ condition_test(:is_true, :is_false) { test_ran = true}
76
+ assert !test_ran
77
+ end
78
+
79
+ #
80
+ # benchmark_test test
81
+ #
82
+
83
+ # TODO - find a way to test this is a quiet fashion
84
+
47
85
  #
48
86
  # run subset test
49
87
  #
@@ -84,32 +122,54 @@ class SubsetMethodsTest < Test::Unit::TestCase
84
122
  def test_match_regexp_returns_default_unless_ENV_type_is_set
85
123
  assert_equal "default", match_regexp?('type', 1, "default")
86
124
  end
87
-
88
- #
89
- # calling method tests
90
- #
91
-
92
- def nested_call_to_calling_method
93
- assert_equal 'test_calling_method', calling_method
94
- end
95
-
96
- def nested_call_with_alternate_pattern
97
- assert_equal 'nested_call_with_alternate_pattern', calling_method(/^nested/)
98
- end
99
-
100
- def test_calling_method
101
- assert_equal 'test_calling_method', calling_method
102
- nested_call_to_calling_method
103
- nested_call_with_alternate_pattern
104
- end
105
-
106
- #
107
- # singleline pp test
108
- #
109
-
110
- def test_format_pps_input
111
- [1, "two", [:three, 4]].each do |input|
112
- assert_equal PP.singleline_pp(input, ''), spp(input)
113
- end
114
- end
125
+ end
126
+
127
+ class SkippedTest < Test::Unit::TestCase
128
+ include Tap::Test::SubsetMethods
129
+
130
+ if !conditions.empty?
131
+ raise "conditions were NOT empty in subclass"
132
+ end
133
+
134
+ condition(:unsatisfied) do
135
+ false
136
+ end
137
+
138
+ unless satisfied?(:unsatisfied)
139
+ skip_test
140
+ end
141
+
142
+ def test_method
143
+ flunk "test WAS run"
144
+ end
145
+ end
146
+
147
+ class SkippedSubTest < SkippedTest
148
+ if conditions.empty?
149
+ raise "conditions WERE empty in subclass"
150
+ end
151
+
152
+ condition(:unsatisfied) do
153
+ true
154
+ end
155
+
156
+ def test_method
157
+ assert true
158
+ end
159
+ end
160
+
161
+ class NonSkippedTest < Test::Unit::TestCase
162
+ include Tap::Test::SubsetMethods
163
+
164
+ condition(:unsatisfied) do
165
+ true
166
+ end
167
+
168
+ unless satisfied?(:unsatisfied)
169
+ skip_test
170
+ end
171
+
172
+ def test_method
173
+ assert true
174
+ end
115
175
  end