tap-test 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History +11 -0
- data/README +7 -9
- data/lib/tap/test.rb +1 -1
- data/lib/tap/test/file_test.rb +52 -50
- data/lib/tap/test/shell_test.rb +53 -13
- data/lib/tap/test/shell_test/class_methods.rb +2 -1
- metadata +2 -2
data/History
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== 0.4.0 / 2009-19-09
|
2
|
+
|
3
|
+
Various improvements to the test modules. Note that FileTest now will
|
4
|
+
cleanup the method_root directory completely by default; to restore
|
5
|
+
the old behavior, set cleanup_dirs equal to [:output, :tmp].
|
6
|
+
|
7
|
+
* added set_env method to ShellTest
|
8
|
+
* added indent stripping to sh_test
|
9
|
+
* changed FileTest to cleanup method_root
|
10
|
+
completely by default
|
11
|
+
|
1
12
|
== 0.3.0 / 2009-12-05
|
2
13
|
|
3
14
|
Updates for Tap-0.19.0
|
data/README
CHANGED
@@ -33,9 +33,7 @@ can be overlaid.
|
|
33
33
|
|
34
34
|
Sets up a test-specific method_root for working with temporary files. Better
|
35
35
|
in most cases than using Tempfile because you can flag temporary files to be
|
36
|
-
saved on a failure (using ENV['KEEP_OUTPUTS']='true').
|
37
|
-
assertion to test that all the files in an expected directory are equal to
|
38
|
-
those in an output directory.
|
36
|
+
saved on a failure (using ENV['KEEP_OUTPUTS']='true').
|
39
37
|
|
40
38
|
require 'tap/test/unit'
|
41
39
|
class FileTestTest < Test::Unit::TestCase
|
@@ -63,9 +61,9 @@ Simple testing of shell commands.
|
|
63
61
|
|
64
62
|
def test_echo_with_an_alias
|
65
63
|
sh_test %q{
|
66
|
-
|
67
|
-
|
68
|
-
|
64
|
+
% alias goodnight moon
|
65
|
+
goodnight moon
|
66
|
+
}
|
69
67
|
end
|
70
68
|
end
|
71
69
|
|
@@ -102,9 +100,9 @@ Sets up Tap::App.instance for testing tasks.
|
|
102
100
|
class TapTestTest < Test::Unit::TestCase
|
103
101
|
acts_as_tap_test
|
104
102
|
|
105
|
-
def
|
106
|
-
|
107
|
-
assert_equal "result",
|
103
|
+
def test_node
|
104
|
+
n = app.node { "result" }
|
105
|
+
assert_equal "result", n.call
|
108
106
|
end
|
109
107
|
end
|
110
108
|
|
data/lib/tap/test.rb
CHANGED
@@ -50,7 +50,7 @@ module Tap
|
|
50
50
|
# sh_test_options.
|
51
51
|
def acts_as_shell_test(options=nil)
|
52
52
|
include Tap::Test::ShellTest
|
53
|
-
self.sh_test_options
|
53
|
+
self.sh_test_options.merge!(options) if options
|
54
54
|
end
|
55
55
|
|
56
56
|
# Includes TapTest in the calling class and calls acts_as_file_test with
|
data/lib/tap/test/file_test.rb
CHANGED
@@ -5,15 +5,15 @@ module Tap
|
|
5
5
|
module Test
|
6
6
|
|
7
7
|
# FileTest facilitates access and utilization of test-specific files and
|
8
|
-
# directories. FileTest provides each test method with a Tap::Root
|
9
|
-
# (method_root) specific for the method, and defines a new assertion
|
10
|
-
# (assert_files) to facilitate tests which involve the production
|
11
|
-
# modification of files.
|
8
|
+
# directories. FileTest provides each test method with a Tap::Root
|
9
|
+
# (method_root) specific for the method, and defines a new assertion
|
10
|
+
# method (assert_files) to facilitate tests which involve the production
|
11
|
+
# and/or modification of files.
|
12
12
|
#
|
13
13
|
# [file_test_doc_test.rb]
|
14
14
|
# class FileTestDocTest < Test::Unit::TestCase
|
15
15
|
# acts_as_file_test
|
16
|
-
#
|
16
|
+
#
|
17
17
|
# def test_something
|
18
18
|
# # each test class has a class test root (ctr)
|
19
19
|
# # and each test method has a method-specific
|
@@ -36,7 +36,7 @@ module Tap
|
|
36
36
|
# # by the block the expected files, ensuring they
|
37
37
|
# # are the same (see the documentation for the
|
38
38
|
# # simplest use of assert_files)
|
39
|
-
#
|
39
|
+
#
|
40
40
|
# expected_file = method_root.prepare(:expected, 'output.txt') {|file| file << 'expected output' }
|
41
41
|
#
|
42
42
|
# # passes
|
@@ -46,19 +46,39 @@ module Tap
|
|
46
46
|
# end
|
47
47
|
# end
|
48
48
|
#
|
49
|
+
# ==== Cleanup
|
50
|
+
#
|
51
|
+
# By default the method_root directory is cleaned up at the end of the
|
52
|
+
# test, making FileTest very conveient for creating temporary test files.
|
53
|
+
# To prevent cleanup, either set the KEEP_OUTPUTS or KEEP_FAILURES ENV
|
54
|
+
# variable to 'true'. The cleanup directories can be specified manually
|
55
|
+
# using cleanup_dirs class variable:
|
56
|
+
#
|
57
|
+
# class LimitedCleanupTest < Test::Unit::TestCase
|
58
|
+
#
|
59
|
+
# # only cleanup the method_root[:output] directory
|
60
|
+
# acts_as_file_test :cleanup_dirs => [:output]
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# This technique is useful when you want to keep certain static files
|
64
|
+
# under version control, for instance.
|
65
|
+
#
|
66
|
+
# ==== Requirements
|
67
|
+
#
|
49
68
|
# FileTest requires that a method_name method is provided by the including
|
50
|
-
# class, in order to properly set the directory for method_root.
|
69
|
+
# class, in order to properly set the directory for method_root.
|
70
|
+
# Test::Unit::TestCase satisfies this requirement already.
|
51
71
|
module FileTest
|
52
72
|
|
53
73
|
def self.included(base) # :nodoc:
|
54
74
|
super
|
55
75
|
base.extend FileTest::ClassMethods
|
56
|
-
base.cleanup_dirs = [:
|
76
|
+
base.cleanup_dirs = [:root]
|
57
77
|
end
|
58
78
|
|
59
|
-
# The test-method-specific Tap::Root which may be used to
|
60
|
-
#
|
61
|
-
#
|
79
|
+
# The test-method-specific Tap::Root which may be used to access test
|
80
|
+
# files. method_root is a duplicate of ctr reconfigured so that
|
81
|
+
# method_root.root is ctr[method_name.to_sym]
|
62
82
|
attr_reader :method_root
|
63
83
|
|
64
84
|
# Sets up method_root and calls cleanup. Be sure to call super when
|
@@ -70,9 +90,9 @@ module Tap
|
|
70
90
|
end
|
71
91
|
|
72
92
|
# Cleans up the method_root.root directory by removing the class
|
73
|
-
# cleanup_dirs (by default :
|
74
|
-
# will
|
75
|
-
#
|
93
|
+
# cleanup_dirs (by default :root, ie the method_root directory itself).
|
94
|
+
# The root directory will be removed if it is empty.
|
95
|
+
#
|
76
96
|
# Override as necessary in subclasses.
|
77
97
|
def cleanup
|
78
98
|
self.class.cleanup_dirs.each do |dir|
|
@@ -81,15 +101,8 @@ module Tap
|
|
81
101
|
try_remove_dir(method_root.root)
|
82
102
|
end
|
83
103
|
|
84
|
-
# Calls cleanup unless flagged otherwise by an ENV variable
|
85
|
-
#
|
86
|
-
# 'KEEP_FAILURES' ENV variables:
|
87
|
-
#
|
88
|
-
# % rap test KEEP_OUTPUTS=true
|
89
|
-
# % rap test KEEP_FAILURES=true
|
90
|
-
#
|
91
|
-
# Cleanup is only suppressed for failing tests when KEEP_FAILURES is
|
92
|
-
# specified. Be sure to call super when overriding this method.
|
104
|
+
# Calls cleanup unless flagged otherwise by an ENV variable (see above).
|
105
|
+
# Be sure to call super when overriding this method.
|
93
106
|
def teardown
|
94
107
|
# check that method_root still exists (nil may
|
95
108
|
# indicate setup was overridden without super)
|
@@ -116,7 +129,7 @@ module Tap
|
|
116
129
|
|
117
130
|
# Runs a file-based test that compares files created by the block with
|
118
131
|
# files in an expected directory. The block receives files from the
|
119
|
-
# input directory, and should return a list of files relative to the
|
132
|
+
# input directory, and should return a list of files relative to the
|
120
133
|
# output directory. Only the files returned by the block are compared;
|
121
134
|
# additional files in the output directory are effectively ignored.
|
122
135
|
#
|
@@ -126,7 +139,7 @@ module Tap
|
|
126
139
|
#
|
127
140
|
# class FileTestDocTest < Test::Unit::TestCase
|
128
141
|
# acts_as_file_test
|
129
|
-
#
|
142
|
+
#
|
130
143
|
# def test_assert_files
|
131
144
|
# assert_files do |input_files|
|
132
145
|
# input_files.collect do |path|
|
@@ -152,7 +165,7 @@ module Tap
|
|
152
165
|
# `- input
|
153
166
|
# |- one.txt
|
154
167
|
# `- two.txt
|
155
|
-
#
|
168
|
+
#
|
156
169
|
# [input/one.txt]
|
157
170
|
# test input 1
|
158
171
|
#
|
@@ -165,7 +178,7 @@ module Tap
|
|
165
178
|
# [expected/two.txt]
|
166
179
|
# test output 2
|
167
180
|
#
|
168
|
-
# When you run the test, the assert_files passes the input files to the
|
181
|
+
# When you run the test, the assert_files passes the input files to the
|
169
182
|
# block. When the block completes, assert_files compares the output
|
170
183
|
# files returned by the block with the files in the expected directory.
|
171
184
|
# In this case, the files are equal and the test passes.
|
@@ -181,7 +194,7 @@ module Tap
|
|
181
194
|
#
|
182
195
|
# === Options
|
183
196
|
# A variety of options adjust the behavior of assert_files:
|
184
|
-
#
|
197
|
+
#
|
185
198
|
# :input_dir specify the directory to glob for input files
|
186
199
|
# (default method_root[:input])
|
187
200
|
# :output_dir specify the output directory
|
@@ -195,18 +208,18 @@ module Tap
|
|
195
208
|
# :include_expected_directories specifies directories to be included in the
|
196
209
|
# expected-output file list comparison
|
197
210
|
# (by default dirs are excluded)
|
198
|
-
#
|
211
|
+
#
|
199
212
|
# assert_files will fail if <tt>:expected_files</tt> was not specified
|
200
|
-
# in the options and no files were found in <tt>:expected_dir</tt>.
|
201
|
-
# check tries to prevent silent false-positive results when you forget
|
202
|
-
# put expected files in their place.
|
213
|
+
# in the options and no files were found in <tt>:expected_dir</tt>. This
|
214
|
+
# check tries to prevent silent false-positive results when you forget
|
215
|
+
# to put expected files in their place.
|
203
216
|
#
|
204
217
|
# === File References
|
205
218
|
#
|
206
|
-
# Sometimes the same files will get used across multiple tests. To
|
207
|
-
# separate management of test files and prevent duplication, file
|
208
|
-
# references can be provided in place of test files. For instance, with
|
209
|
-
# test directory like:
|
219
|
+
# Sometimes the same files will get used across multiple tests. To
|
220
|
+
# allow separate management of test files and prevent duplication, file
|
221
|
+
# references can be provided in place of test files. For instance, with
|
222
|
+
# a test directory like:
|
210
223
|
#
|
211
224
|
# method_root
|
212
225
|
# |- expected
|
@@ -218,7 +231,7 @@ module Tap
|
|
218
231
|
# `- ref
|
219
232
|
# |- one.txt
|
220
233
|
# `- two.txt
|
221
|
-
#
|
234
|
+
#
|
222
235
|
# The input and expected files (all references in this case) can be
|
223
236
|
# dereferenced to the 'ref' paths like so:
|
224
237
|
#
|
@@ -236,21 +249,10 @@ module Tap
|
|
236
249
|
# configurations; a reference_dir must be specified for dereferencing to
|
237
250
|
# occur (see Utils.dereference for more details).
|
238
251
|
#
|
239
|
-
# === Keeping Outputs
|
240
|
-
#
|
241
|
-
# By default FileTest cleans up everything under method_root except the
|
242
|
-
# input and expected directories. For ease in debugging, ENV variable
|
243
|
-
# flags can be specified to prevent cleanup for all tests (KEEP_OUTPUTS)
|
244
|
-
# or just tests that fail (KEEP_FAILURES). These flags can be specified
|
245
|
-
# from the command line if you're running the tests with rake or rap:
|
246
|
-
#
|
247
|
-
# % rake test keep_outputs=true
|
248
|
-
# % rap test keep_failures=true
|
249
|
-
#
|
250
252
|
#--
|
251
253
|
# TODO:
|
252
|
-
# * add debugging information to indicate, for instance,
|
253
|
-
#
|
254
|
+
# * add debugging information to indicate, for instance, when
|
255
|
+
# dereferencing is going on.
|
254
256
|
def assert_files(options={}, &block) # :yields: input_files
|
255
257
|
transform_test(block, options) do |expected_file, output_file|
|
256
258
|
unless FileUtils.cmp(expected_file, output_file)
|
data/lib/tap/test/shell_test.rb
CHANGED
@@ -71,27 +71,37 @@ module Tap
|
|
71
71
|
quiet && quiet =~ /^true$/i ? true : false
|
72
72
|
end
|
73
73
|
|
74
|
-
# Sets the specified ENV variables
|
74
|
+
# Sets the specified ENV variables and returns the *current* env.
|
75
75
|
# If replace is true, current ENV variables are replaced; otherwise
|
76
76
|
# the new env variables are simply added to the existing set.
|
77
|
-
def
|
77
|
+
def set_env(env={}, replace=false)
|
78
78
|
current_env = {}
|
79
79
|
ENV.each_pair do |key, value|
|
80
80
|
current_env[key] = value
|
81
81
|
end
|
82
82
|
|
83
|
+
ENV.clear if replace
|
84
|
+
|
85
|
+
env.each_pair do |key, value|
|
86
|
+
ENV[key] = value
|
87
|
+
end if env
|
88
|
+
|
89
|
+
current_env
|
90
|
+
end
|
91
|
+
|
92
|
+
# Sets the specified ENV variables for the duration of the block.
|
93
|
+
# If replace is true, current ENV variables are replaced; otherwise
|
94
|
+
# the new env variables are simply added to the existing set.
|
95
|
+
#
|
96
|
+
# Returns the block return.
|
97
|
+
def with_env(env={}, replace=false)
|
98
|
+
current_env = nil
|
83
99
|
begin
|
84
|
-
|
85
|
-
env.each_pair do |key, value|
|
86
|
-
ENV[key] = value
|
87
|
-
end if env
|
88
|
-
|
100
|
+
current_env = set_env(env, replace)
|
89
101
|
yield
|
90
|
-
|
91
102
|
ensure
|
92
|
-
|
93
|
-
|
94
|
-
ENV[key] = value
|
103
|
+
if current_env
|
104
|
+
set_env(current_env, true)
|
95
105
|
end
|
96
106
|
end
|
97
107
|
end
|
@@ -160,6 +170,29 @@ module Tap
|
|
160
170
|
# ["hello", "world"]
|
161
171
|
# }, opts
|
162
172
|
#
|
173
|
+
# ==== Indents
|
174
|
+
#
|
175
|
+
# To improve the readability of tests, sh_test will lstrip each line in the
|
176
|
+
# expected output to the same degree as the command line. So for instance
|
177
|
+
# these all pass:
|
178
|
+
#
|
179
|
+
# sh_test %Q{
|
180
|
+
# % argv_inspect hello world
|
181
|
+
# ["hello", "world"]
|
182
|
+
# }, opts
|
183
|
+
#
|
184
|
+
# sh_test %Q{
|
185
|
+
# % argv_inspect hello world
|
186
|
+
# ["hello", "world"]
|
187
|
+
# }, opts
|
188
|
+
#
|
189
|
+
# sh_test %Q{
|
190
|
+
# % argv_inspect hello world
|
191
|
+
# ["hello", "world"]
|
192
|
+
# }, opts
|
193
|
+
#
|
194
|
+
# Turn off indent stripping by specifying :indent => false.
|
195
|
+
#
|
163
196
|
# ==== ENV variables
|
164
197
|
#
|
165
198
|
# Options may specify a hash of env variables that will be set in the
|
@@ -179,8 +212,15 @@ module Tap
|
|
179
212
|
def sh_test(cmd, options={})
|
180
213
|
options = sh_test_options.merge(options)
|
181
214
|
|
182
|
-
cmd
|
183
|
-
|
215
|
+
if cmd =~ /\A\s*?\n?(\s*)(.*?\n)(.*)\z/m
|
216
|
+
indent, cmd, expected = $1, $2, $3
|
217
|
+
cmd.strip!
|
218
|
+
|
219
|
+
if indent.length > 0 && options[:indents]
|
220
|
+
expected.gsub!(/^\s{0,#{indent.length}}/, '')
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
184
224
|
result = sh(cmd, options)
|
185
225
|
|
186
226
|
assert_equal(expected, result, cmd) if expected
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tap-test
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Chiang
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-19 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|