tap 0.7.9 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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