more_unit_test 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/lib/more_unit_test.rb +5 -1
- data/lib/more_unit_test/assert_equal_filecontent.rb +152 -45
- data/lib/more_unit_test/assert_stdout.rb +105 -97
- data/readme +53 -0
- data/unittest/test_assert_equal_filecontent.rb +128 -36
- data/unittest/test_assert_stdout.rb +2 -2
- metadata +71 -74
- data/readme.rd +0 -32
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MzcyN2QwZTc2M2VjNzljMWZmMDgwMGRhYmIyMTZiYWZhOGEzOTlkMQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NjQ5YjQ1ZWRjNWEzZjZjZTFmY2UxYzFmYjllZjg5ZjgzNzljYTJiNA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZDI4MWZhZjkzMTQyZThjNGFiMTFiM2Q5NWYxNmE0ZGVlYmEwOWMzNzhiN2Ez
|
10
|
+
ZTVhZDNjYzQwMmY2OGY4NzY1ZTFmOTljZTlhMzA0MzE3NjVjMGMyMDE1ZTYy
|
11
|
+
ODg1Y2JiZWJmNDI2Njk3NTQ0Y2YyNTU1MTNmYjExYmI0YmY5ODM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NDUwOTdmYjkyODlhMTg3ZWI3NjgyZjFkMzJhMzcwODBmMjI5MmM2ZTNmNjFh
|
14
|
+
ODBlZDE4MWU0ZmU5YjRhNmJmMzdjYWViNGZmNDA5ZDNkYzVkYWIxYWIyNjk2
|
15
|
+
OGRlMDgzNWI2OTUxNzA5ZmQ4NmY4ZTQzMjYzOTM5ZGQ5YTFmMzA=
|
data/lib/more_unit_test.rb
CHANGED
@@ -14,21 +14,17 @@ Here it is: Test::Unit::TestCase#assert_equal_filecontent
|
|
14
14
|
See http://rubyforge.org/tracker/?func=detail&aid=19509&group_id=5650&atid=21859
|
15
15
|
|
16
16
|
==Ruby 1.9
|
17
|
-
|
18
|
-
The "expected"-file is read with
|
19
|
-
your test result may differ.
|
17
|
+
Ruby 1.9 supports encoding information for strings.
|
18
|
+
The "expected"-file is read with the encoding of your result.
|
20
19
|
|
21
|
-
You
|
22
|
-
Encoding.default_external
|
23
|
-
|
24
|
-
Or you define a read option for the test:
|
20
|
+
You may overwrite this with:
|
25
21
|
class MyTest < Test::Unit::TestCase
|
26
22
|
def test_utf()
|
27
|
-
self.
|
23
|
+
self.read_encoding = 'utf-8'
|
28
24
|
assert_equal_filecontent( "expected/test_utf.txt", mycall() )
|
29
25
|
end
|
30
26
|
end
|
31
|
-
|
27
|
+
.
|
32
28
|
=end
|
33
29
|
require 'test/unit'
|
34
30
|
#~ puts RUBY_VERSION
|
@@ -37,22 +33,33 @@ require 'fileutils'
|
|
37
33
|
require 'date' #needed for Ruby 1.9 (class Date no standard?)
|
38
34
|
|
39
35
|
=begin rdoc
|
40
|
-
Extend the class TestCase with additional methods/assertions
|
36
|
+
Extend the class TestCase with additional methods/assertions:
|
37
|
+
|
38
|
+
* Test::Unit::TestCase#assert_equal_filecontent
|
41
39
|
=end
|
42
40
|
class Test::Unit::TestCase
|
43
|
-
#
|
44
|
-
|
41
|
+
#Default path in case of an error.
|
42
|
+
FOLDER_FOR_FAILURE = "failure_#{Date.today}"
|
43
|
+
#Default path in case of an error. Overwrites FOLDER_FOR_FAILURE.
|
44
|
+
#With 'false' no file is written
|
45
|
+
attr_writer :folder_for_failure
|
46
|
+
#Overwrite encoding of 'expected' file.
|
47
|
+
#Needed for each test method.
|
48
|
+
attr_writer :read_encoding
|
45
49
|
|
46
50
|
=begin rdoc
|
47
51
|
Takes the content of the file 'filename' and compares it with 'actual' like in assert_equal.
|
48
|
-
If '
|
52
|
+
If 'filename' doesn't exist, the failure
|
49
53
|
Reference file <#{filename}> missing
|
50
54
|
is returned.
|
51
55
|
|
52
56
|
'folder_for_failure' will contain all results with differences.
|
53
57
|
|
54
58
|
Example of the usage:
|
55
|
-
assert_equal_filecontent( "expected/test_section.html",
|
59
|
+
assert_equal_filecontent( "expected/test_section.html",
|
60
|
+
text.to_doc(:html),
|
61
|
+
'short description of test'
|
62
|
+
)
|
56
63
|
|
57
64
|
What will happen:
|
58
65
|
1. text.to_doc(:html) is the test. It creates some HTML-Text
|
@@ -61,58 +68,158 @@ What will happen:
|
|
61
68
|
2. If it is the same -> fine
|
62
69
|
3. If there are differences:
|
63
70
|
3. A message is given (like in assert_equal)
|
64
|
-
4. A folder "
|
65
|
-
5. The file 'test_section.html' with the result is created in
|
66
|
-
6.
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
4. A folder "failure_#{Date.today}" is created if not already exist (See FOLDER_FOR_FAILURE )
|
72
|
+
5. The file 'test_section.html' with the result is created in FOLDER_FOR_FAILURE
|
73
|
+
6. You can use a compare tool to compare the expected result and the real result.
|
74
|
+
|
75
|
+
If you don't want a failure file (step 4 and 5), you may suppress it with:
|
76
|
+
def text_no_failure file
|
77
|
+
self.folder_for_failure = false #inactivate error/reference file creation.
|
78
|
+
#...
|
79
|
+
end
|
80
|
+
|
81
|
+
==filename
|
82
|
+
The filename may contains some parameters in <x>.
|
83
|
+
Details see Test::Unit::TestCase#build_filename
|
84
|
+
|
85
|
+
==Recommendation to build up your test.
|
86
|
+
1. Define your tests with your assertions.
|
87
|
+
2. Run the test
|
88
|
+
3. You will get errors 'Reference file <xx/not_available.txt> missing'
|
89
|
+
and a directory 'failure_<date>
|
90
|
+
4. Rename the folder 'failure' to 'expected'
|
91
|
+
5. Check, if the content of the folder is the wanted result.
|
74
92
|
6. Rerun again, you have no failure (hopefully ;-) )
|
93
|
+
|
94
|
+
If you already have the result, you may start like this:
|
95
|
+
1. Create a folder: 'expected'
|
96
|
+
2. Define your assertion with non-existing filename in the 'expected'-folder.
|
97
|
+
3. Copy the expected results to the 'expected'-folder.
|
98
|
+
4. Run the test
|
99
|
+
5. In case of errors:
|
100
|
+
Compare the content of the 'expected'-folder with the failure-folder.
|
101
|
+
Adapt your code or your expected result.
|
102
|
+
6. Rerun again, until you get the expected results
|
75
103
|
=end
|
76
|
-
def assert_equal_filecontent( filename, actual,
|
104
|
+
def assert_equal_filecontent( filename, actual, message = nil )
|
77
105
|
#
|
78
|
-
|
106
|
+
filename = build_filename(filename)
|
107
|
+
#Set encoding, if actual includes encoding-info.
|
108
|
+
encoding = Encoding.default_external
|
109
|
+
encoding = actual.encoding if actual.respond_to?(:encoding)
|
110
|
+
encoding = @read_encoding if @read_encoding #encoding was overwritten
|
111
|
+
|
79
112
|
#Make the tests
|
80
113
|
if File.exist?(filename)
|
81
114
|
#~ expected = File.read(filename)
|
82
115
|
expected = nil
|
83
|
-
File.open(filename,
|
84
|
-
full_message = build_message(message, "<?> expected (#{filename}) but was\n<?>.\n", expected, actual).to_s
|
116
|
+
File.open(filename, 'r', :encoding => encoding ){|file| expected = file.read }
|
117
|
+
#~ full_message = build_message(message, "<?> expected (#{filename}) but was\n<?>.\n", expected, actual).to_s
|
118
|
+
full_message = '' #main message build from assert_equal
|
85
119
|
else
|
86
120
|
full_message = "Reference file <#{filename}> missing"
|
87
121
|
end
|
88
122
|
|
89
123
|
#Write the real result to a file if a failure folder is given.
|
90
|
-
if folder_for_failure and expected != actual
|
91
|
-
|
92
|
-
|
124
|
+
if @folder_for_failure != false and expected != actual
|
125
|
+
folder_for_failure = @folder_for_failure || FOLDER_FOR_FAILURE
|
126
|
+
FileUtils.makedirs(folder_for_failure) unless File.directory?(folder_for_failure)
|
127
|
+
File.open( "#{folder_for_failure}/#{File.basename(filename)}", 'w', :encoding => encoding){|f|
|
93
128
|
f << actual
|
94
129
|
}
|
95
130
|
full_message << "\n\t-> Build <#{folder_for_failure}/#{File.basename(filename)}>"
|
96
131
|
end
|
97
132
|
|
133
|
+
#Will not work with Ruby 1.9.1/1.9.2.
|
134
|
+
# -> assert( false, full_message )
|
98
135
|
if File.exist?(filename)
|
136
|
+
#Use the standard assertion to get the layouted message.
|
137
|
+
assert_equal( expected, actual, "Result differs to file content #{filename}" + full_message )
|
99
138
|
#~ assert_block( full_message ){ expected == actual }
|
100
|
-
case RUBY_VERSION
|
101
|
-
when /^1\.8/
|
102
|
-
assert_block( full_message ){ expected == actual }
|
103
|
-
when /^1.9/
|
104
|
-
#ruby 1.9: Add "\nExpected block to return true value." to message with assert_block
|
105
|
-
assert( expected == actual, full_message )
|
106
|
-
end
|
107
139
|
else
|
108
|
-
|
109
|
-
|
110
|
-
assert_block( full_message ){ false }
|
111
|
-
when /^1.9/
|
112
|
-
#ruby 1.9: Add "\nExpected block to return true value." to message with assert_block
|
113
|
-
assert( false, full_message )
|
114
|
-
end
|
140
|
+
assert_block( full_message ){ false }
|
141
|
+
#~ assert_equal( expected, actual, full_message )
|
115
142
|
end
|
116
143
|
end
|
144
|
+
=begin rdoc
|
145
|
+
Make filename conversion.
|
146
|
+
|
147
|
+
The filename may contains some parameters in <x>. _x_ may be:
|
148
|
+
* c - test class name
|
149
|
+
* m - methodname from caller[level]
|
150
|
+
* cm - test class name - methodname
|
151
|
+
|
152
|
+
Parameter 'level' is needed to get the method.
|
153
|
+
|
154
|
+
Example:
|
155
|
+
|
156
|
+
class MyTest < Test::Unit::TestCase
|
157
|
+
def test_xx
|
158
|
+
assert_equal_filecontent( "<m>.txt", mycode )
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
The caller stack will be
|
163
|
+
___lib/more_unit_test/assert_equal_filecontent.rb:112:in `assert_equal_filecontent'
|
164
|
+
quicktest.rb:13:in `test_xx'
|
165
|
+
___test-unit-2.4.0/lib/test/unit/testcase.rb:531:in `run_test'
|
166
|
+
|
167
|
+
The result with default level 1 is 'test_xx' - the method from your test.
|
168
|
+
|
169
|
+
=end
|
170
|
+
def build_filename(filename, level = 1)
|
171
|
+
method = caller[level].match(/^(.+?):(\d+)(?::in `(.*)')?/)[3] #methodname
|
172
|
+
filename.gsub(/<.*?>/){ |hit|
|
173
|
+
case hit
|
174
|
+
when '<c>'; self.class.name
|
175
|
+
when '<m>'; method
|
176
|
+
when '<cm>'; "#{self.class}-#{method}" #methodname
|
177
|
+
else; raise ArgumentError, "Undefined option #{hit} in filename #{filename}"
|
178
|
+
end
|
179
|
+
}.sub(/block (\(\d+ levels\) )?in /,'')
|
180
|
+
|
181
|
+
end
|
117
182
|
#
|
118
183
|
end
|
184
|
+
|
185
|
+
__END__
|
186
|
+
|
187
|
+
Ziel:
|
188
|
+
Angabe der expected-Datei vereinfachen.
|
189
|
+
Generieren aus classe/methode des Aufrufers.
|
190
|
+
|
191
|
+
"#{self.class}-#{caller.first.match(/^(.+?):(\d+)(?::in `(.*)')?/)[3]}
|
192
|
+
|
193
|
+
Ben�tigt:
|
194
|
+
* extension
|
195
|
+
* variation (bei mehreren tests in methode
|
196
|
+
* Zus�tzliche Verzeichnisname (gesetzt in class?)
|
197
|
+
|
198
|
+
Idee:
|
199
|
+
Lsg per symbol/fixnum als filename
|
200
|
+
Dann filename = "#{self.class}-#{caller.first.match(/^(.+?):(\d+)(?::in `(.*)')?/)[3]}_#{filename}"
|
201
|
+
Aber: extension?
|
202
|
+
|
203
|
+
class Test_x << Test::Unit::TestCase
|
204
|
+
def test_xx
|
205
|
+
assert_equal_filecontent( :var1, actual ) #-> Test_x-test_xx-var1
|
206
|
+
assert_equal_filecontent( 1, actual ) #-> Test_x-test_xx-1
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
Idee 2:
|
211
|
+
analog strftime.
|
212
|
+
Nur ein parameter ben�tigt.
|
213
|
+
|
214
|
+
* <c> - class
|
215
|
+
* <m> - method
|
216
|
+
* <cm> - class-method
|
217
|
+
* <p> - predefined path
|
218
|
+
* M�glichkeiten: * <>
|
219
|
+
class Test_x << Test::Unit::TestCase
|
220
|
+
def test_xx
|
221
|
+
assert_equal_filecontent( 'expected/$$_var1', actual ) #-> Test_x-test_xx-var1
|
222
|
+
assert_equal_filecontent( 'expected/$$_1', actual ) #-> Test_x-test_xx-1
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
@@ -1,44 +1,51 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
#
|
4
|
-
#Example:
|
5
|
-
# require 'assert_stdout'
|
6
|
-
# class MyTest < Test::Unit::TestCase
|
7
|
-
# #This is a method and I wnat to test the screen output.
|
8
|
-
# def any_output()
|
9
|
-
# puts "Just some output"
|
10
|
-
# end
|
11
|
-
# def test_stdout_ok()
|
12
|
-
# assert_stdout("Just some output\n", proc{ any_output()} )
|
13
|
-
# assert_stdout_block("Just some output\n"){ any_output() }
|
14
|
-
# end
|
15
|
-
# end
|
16
|
-
#
|
17
|
-
#Please be aware:
|
18
|
-
#Normally you should not test the output of methods, but the result of methods.
|
19
|
-
#
|
20
|
-
require 'test/unit'
|
21
|
-
module Test::Unit
|
1
|
+
=begin rdoc
|
2
|
+
Add some functionality to check stdout and stderr-output with test/unit.
|
22
3
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
4
|
+
Example:
|
5
|
+
require 'assert_stdout'
|
6
|
+
class MyTest < Test::Unit::TestCase
|
7
|
+
#This is a method and I wnat to test the screen output.
|
8
|
+
def any_output()
|
9
|
+
puts "Just some output"
|
10
|
+
end
|
11
|
+
def test_stdout_ok()
|
12
|
+
assert_stdout("Just some output\n", proc{ any_output()} )
|
13
|
+
assert_stdout_block("Just some output\n"){ any_output() }
|
14
|
+
end
|
28
15
|
end
|
29
|
-
end #MyIO
|
30
16
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
17
|
+
Please be aware:
|
18
|
+
Normally you should not test the output of methods, but the result of methods.
|
19
|
+
=end
|
20
|
+
require 'test/unit'
|
21
|
+
module Test
|
22
|
+
module Unit
|
23
|
+
#Class to catch the std output and stderr
|
24
|
+
class Catch_IO < String
|
25
|
+
#Receive content
|
26
|
+
def write( cont )
|
27
|
+
self << cont
|
28
|
+
end
|
29
|
+
end #MyIO
|
30
|
+
|
31
|
+
=begin rdoc
|
32
|
+
Extend the class TestCase with additional methods/assertions
|
33
|
+
|
34
|
+
Details see
|
35
|
+
* Test::Unit::TestCase#assert_stdout
|
36
|
+
* Test::Unit::TestCase#assert_stdout_block
|
37
|
+
* Test::Unit::TestCase#assert_stderr
|
38
|
+
* Test::Unit::TestCase#assert_stderr_block
|
39
|
+
|
40
|
+
=end
|
41
|
+
class TestCase
|
42
|
+
#Catch stdout for a given procedure (Proc-Element).
|
43
|
+
def catch_stdout( procedure )
|
44
|
+
$stdout = output = Catch_IO.new #temporary copy
|
45
|
+
procedure.call
|
46
|
+
$stdout = STDOUT
|
47
|
+
output
|
48
|
+
end
|
42
49
|
=begin rdoc
|
43
50
|
Compare the stdout-output with your exception.
|
44
51
|
|
@@ -53,17 +60,17 @@ class TestCase
|
|
53
60
|
end
|
54
61
|
end
|
55
62
|
=end
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
63
|
+
def assert_stdout( expected, actual, message = nil )
|
64
|
+
if actual.respond_to?(:call)
|
65
|
+
output = catch_stdout( actual )
|
66
|
+
full_message = build_message(message, "<?> expected in stdout, but was\n<?>.\n", expected, output)
|
67
|
+
assert_block( full_message ){ expected == output }
|
68
|
+
else
|
69
|
+
raise 'no Proc-object given'
|
70
|
+
full_message = build_message(message, "<?> expected in stdout, but no Proc-object is given to test.\n", expected )
|
71
|
+
assert_block( full_message ){ false } #force error
|
72
|
+
end
|
73
|
+
end
|
67
74
|
=begin rdoc
|
68
75
|
Compare the stdout-output of a given block with your exception.
|
69
76
|
|
@@ -75,32 +82,32 @@ Example:
|
|
75
82
|
end
|
76
83
|
end
|
77
84
|
=end
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
85
|
+
def assert_stdout_block( expected, message = nil )
|
86
|
+
previous_stdout = $stdout
|
87
|
+
previous_STDOUT = STDOUT
|
88
|
+
if block_given?
|
89
|
+
$stdout = output = Catch_IO.new #temporary copy
|
90
|
+
#~ STDOUT.reopen($stdout)
|
91
|
+
yield
|
92
|
+
$stdout = previous_stdout
|
93
|
+
#~ STDOUT.reopen(previous_STDOUT)
|
94
|
+
full_message = build_message(message, "<?> expected in stdout, but was\n<?>.\n", expected, output)
|
95
|
+
assert_block( full_message ){ expected == output }
|
96
|
+
else
|
97
|
+
raise 'no block given'
|
98
|
+
full_message = build_message(message, "<?> expected in stdout, but no block to test.\n", expected )
|
99
|
+
assert_block( full_message ){ false }
|
100
|
+
end
|
101
|
+
end
|
95
102
|
=begin rdoc
|
96
103
|
Catch stderr for a given procedure (Proc-Element).
|
97
104
|
=end
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
105
|
+
def catch_stderr( procedure )
|
106
|
+
$stderr = output = Catch_IO.new #temporary copy
|
107
|
+
procedure.call
|
108
|
+
$stderr = STDERR
|
109
|
+
output
|
110
|
+
end
|
104
111
|
=begin rdoc
|
105
112
|
Compare the stderr-output with your exception.
|
106
113
|
|
@@ -119,17 +126,17 @@ Example:
|
|
119
126
|
end
|
120
127
|
end
|
121
128
|
=end
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
129
|
+
def assert_stderr( expected, actual, message = nil )
|
130
|
+
if actual.respond_to?(:call)
|
131
|
+
output = catch_stderr( actual )
|
132
|
+
full_message = build_message(message, "<?> expected in stderr, but was\n<?>.\n", expected, output)
|
133
|
+
assert_block( full_message ){ expected == output }
|
134
|
+
else
|
135
|
+
raise 'no Proc-object given'
|
136
|
+
full_message = build_message(message, "<?> expected in stderr, but no Proc-object is given to test.\n", expected )
|
137
|
+
assert_block( full_message ){ false } #force error
|
138
|
+
end
|
139
|
+
end
|
133
140
|
=begin rdoc
|
134
141
|
Compare the stderr-output with your exception.
|
135
142
|
|
@@ -145,20 +152,21 @@ Example:
|
|
145
152
|
end
|
146
153
|
end
|
147
154
|
=end
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
end #class TestCase
|
155
|
+
def assert_stderr_block( expected, message = nil )
|
156
|
+
if block_given?
|
157
|
+
$stderr = output = Catch_IO.new #temporary copy
|
158
|
+
yield
|
159
|
+
$stderr = STDERR
|
160
|
+
full_message = build_message(message, "<?> expected in stderr, but was\n<?>.\n", expected, output)
|
161
|
+
assert_block( full_message ){ expected == output }
|
162
|
+
else
|
163
|
+
raise 'no block given'
|
164
|
+
full_message = build_message(message, "<?> expected in stderr, but no block to test.\n", expected )
|
165
|
+
assert_block( full_message ){ false }
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end #class TestCase
|
169
|
+
end #module Unit
|
162
170
|
end #module Test::Unit
|
163
171
|
|
164
172
|
__END__
|
data/readme
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
=Extend test/unit
|
2
|
+
The more_unit_test-package extends test/unit with some additional tests
|
3
|
+
to handle stdout/stderr and big strings.
|
4
|
+
|
5
|
+
==more_unit_test/assert_equal_filecontent.rb
|
6
|
+
|
7
|
+
Compare expected result with file content
|
8
|
+
|
9
|
+
Usefull, if you compare long strings in your tests.
|
10
|
+
|
11
|
+
Details see Test::Unit::TestCase#assert_equal_filecontent
|
12
|
+
|
13
|
+
==more_unit_test/assert_stdout.rb
|
14
|
+
Test for stdout/stderr.
|
15
|
+
|
16
|
+
Details see
|
17
|
+
* Test::Unit::TestCase#assert_stdout
|
18
|
+
* Test::Unit::TestCase#assert_stdout_block
|
19
|
+
* Test::Unit::TestCase#assert_stderr
|
20
|
+
* Test::Unit::TestCase#assert_stderr_block
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
=Version history:
|
25
|
+
0.0.1:
|
26
|
+
* Initial version.
|
27
|
+
|
28
|
+
0.0.2:
|
29
|
+
* modified folder structure
|
30
|
+
* more documentation.
|
31
|
+
* published at gemcutter
|
32
|
+
|
33
|
+
0.1.0 2010-02-07
|
34
|
+
* Restructured lib-directory
|
35
|
+
* Restructured the tests
|
36
|
+
* removed catch_output (is available in knut_tools.gem)
|
37
|
+
|
38
|
+
0.1.1 2010-05-03
|
39
|
+
* first steps to Ruby 1.9
|
40
|
+
|
41
|
+
0.1.2 2011-02-17
|
42
|
+
* Add Test::Unit::TestCase#readoption= for read options of expected-file
|
43
|
+
|
44
|
+
0.1.3
|
45
|
+
* Correction ruby 1.9-specialities (was there a problem with 1.9.1?)
|
46
|
+
|
47
|
+
0.2.0 2015-02-02
|
48
|
+
* Remove _parameter folder_for_failure_ from Test::Unit::TestCase#assert_equal_filecontent
|
49
|
+
* Advantage: interface is same as _assert_equal_
|
50
|
+
* folder_for_failure can be set with Test::Unit::TestCase#folder_for_failure=
|
51
|
+
* Use encoding of test-result to write to failure-file.
|
52
|
+
* Test::Unit::TestCase#assert_equal_filecontent: use assert_equal to layout failure message
|
53
|
+
* Enable Test::Unit::TestCase#assert_equal_filecontent to define dynamic filenames, based on test method name.
|
@@ -1,13 +1,8 @@
|
|
1
1
|
#~ #encoding: utf-8
|
2
2
|
gem 'test-unit', '>= 2.1.1' #defines omit, pend...
|
3
3
|
require 'test/unit'
|
4
|
-
|
5
|
-
|
6
|
-
$:.unshift("../lib")
|
7
|
-
else
|
8
|
-
$: << "../lib"
|
9
|
-
end
|
10
|
-
end
|
4
|
+
|
5
|
+
$:.unshift("../lib") if $0 == __FILE__
|
11
6
|
require "more_unit_test/assert_equal_filecontent.rb"
|
12
7
|
|
13
8
|
#Some content to be tested.
|
@@ -36,7 +31,33 @@ $folder_for_failure = File.dirname(__FILE__) + '/tmp_failure'
|
|
36
31
|
#~ require 'test/testunit/test_assertions'
|
37
32
|
|
38
33
|
#
|
39
|
-
class
|
34
|
+
class Test_equal_filecontent_filename < Test::Unit::TestCase
|
35
|
+
def test_normal
|
36
|
+
assert_equal('x', build_filename('x'))
|
37
|
+
end
|
38
|
+
def test_c
|
39
|
+
assert_equal(self.class.to_s, build_filename('<c>'))
|
40
|
+
end
|
41
|
+
def test_m
|
42
|
+
assert_equal(__method__.to_s, build_filename('<m>',0))
|
43
|
+
end
|
44
|
+
def test_cm
|
45
|
+
assert_equal("#{self.class}-#{__method__}", build_filename('<cm>',0))
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_m_cascaded
|
49
|
+
assert_nothing_raised{
|
50
|
+
assert_equal(__method__.to_s, build_filename('<m>',0))
|
51
|
+
}
|
52
|
+
assert_nothing_raised{
|
53
|
+
assert_nothing_raised{
|
54
|
+
assert_equal(__method__.to_s, build_filename('<m>',0))
|
55
|
+
}
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end #Test_equal_filecontent_filename
|
59
|
+
|
60
|
+
class Test_equal_filecontent < Test::Unit::TestCase
|
40
61
|
|
41
62
|
#Machte Probleme ohne gem laden
|
42
63
|
#~ case RUBY_VERSION
|
@@ -49,61 +70,132 @@ class MyTest < Test::Unit::TestCase
|
|
49
70
|
#~ AssertionFailedError = Test::Unit::AssertionFailedError
|
50
71
|
#~ end
|
51
72
|
AssertionFailedError = Test::Unit::AssertionFailedError
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
self.readoption = 'r:cp1252' unless RUBY_VERSION <= '1.8'
|
73
|
+
|
74
|
+
#Build reference data
|
75
|
+
def self.startup()
|
56
76
|
FileUtils.makedirs($expected)
|
57
77
|
File.open("#{$expected}/test.txt", 'w'){|f| f << DUMMYTEXT }
|
78
|
+
File.open("#{$expected}/test_utf.txt", 'w:utf-8'){|f| f << DUMMYTEXT_utf }
|
79
|
+
File.open("#{$expected}/test_build.txt", 'w'){|f| f << DUMMYTEXT*2 }
|
80
|
+
end
|
81
|
+
def self.shutdown()
|
82
|
+
#~ File.delete("#{$expected}/test.txt")
|
83
|
+
#~ File.delete("#{$expected}/test_utf.txt")
|
84
|
+
#~ File.delete("#{$expected}/test_build.txt")
|
85
|
+
#~ Dir.delete("#{$expected}")
|
86
|
+
|
87
|
+
FileUtils.rmtree($expected)
|
88
|
+
FileUtils.rmtree($folder_for_failure)
|
89
|
+
FileUtils.rmtree(FOLDER_FOR_FAILURE)
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_ok()
|
93
|
+
#Build reference data
|
94
|
+
self.read_encoding = 'cp1252' unless RUBY_VERSION <= '1.8'
|
58
95
|
#Make test
|
59
96
|
assert_equal_filecontent( "#{$expected}/test.txt", DUMMYTEXT )
|
60
97
|
end
|
61
98
|
|
62
99
|
def test_utf()
|
63
100
|
omit_if(RUBY_VERSION <= '1.8', "No encoding check for ruby #{RUBY_VERSION}")
|
64
|
-
#Build reference data
|
65
|
-
FileUtils.makedirs($expected)
|
66
|
-
File.open("#{$expected}/test_utf.txt", 'w:utf-8'){|f| f << DUMMYTEXT_utf }
|
67
101
|
#Make test
|
68
|
-
self.
|
102
|
+
self.read_encoding = 'utf-8' #default, not necessary
|
69
103
|
assert_equal_filecontent( "#{$expected}/test_utf.txt", DUMMYTEXT_utf )
|
70
104
|
end
|
71
105
|
|
72
106
|
#Check error
|
73
107
|
def test_no_reference_file()
|
74
108
|
|
109
|
+
self.folder_for_failure = false #inactivate error/reference file creation.
|
75
110
|
#Check exception and get the message
|
76
111
|
msg = assert_raise( AssertionFailedError ){
|
77
|
-
assert_equal_filecontent( "#{$expected}/not_available.txt", DUMMYTEXT
|
112
|
+
assert_equal_filecontent( "#{$expected}/not_available.txt", DUMMYTEXT )
|
78
113
|
}
|
79
|
-
|
80
|
-
|
81
|
-
when /1.9/
|
82
|
-
pend("Check for Ruby-Version #{RUBY_VERSION }")
|
83
|
-
assert_equal( "Reference file <#{$expected}/not_available.txt> missing.\nExpected block to return true value.", msg.to_s)
|
84
|
-
when /1.8/
|
85
|
-
assert_equal( "Reference file <#{$expected}/not_available.txt> missing", msg.to_s)
|
86
|
-
else
|
87
|
-
notify("Ruby-Version #{RUBY_VERSION } undefined")
|
88
|
-
end
|
114
|
+
assert_instance_of(Test::Unit::AssertionFailedError, msg)
|
115
|
+
assert_equal( "Reference file <#{$expected}/not_available.txt> missing", msg.to_s)
|
89
116
|
end
|
90
117
|
#Check, if "Failure" is created.
|
91
|
-
def
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
118
|
+
def test_build_reference_file_default_path()
|
119
|
+
|
120
|
+
#First check. There is a difference, in failure we get the correct result
|
121
|
+
msg = assert_raise( AssertionFailedError ){
|
122
|
+
assert_equal_filecontent( "#{$expected}/test_build.txt", DUMMYTEXT )
|
123
|
+
}
|
124
|
+
assert_match( %r{Result differs to file content #{$expected}/test_build.txt\n\t-> Build <#{FOLDER_FOR_FAILURE}/test_build.txt}m,
|
125
|
+
msg.to_s )
|
126
|
+
|
127
|
+
#Check for file with correkt result
|
128
|
+
assert_true(File.exist?("#{FOLDER_FOR_FAILURE}/test_build.txt" ))
|
129
|
+
#Check with new file (normally you would copy the file to $expected
|
130
|
+
assert_equal_filecontent( "#{FOLDER_FOR_FAILURE}/test_build.txt", DUMMYTEXT, nil )
|
131
|
+
end
|
132
|
+
|
133
|
+
#Check, if "Failure" is created.
|
134
|
+
def test_build_reference_file_with_path()
|
96
135
|
|
136
|
+
self.folder_for_failure = $folder_for_failure #set other failure folder for assertion in this test
|
97
137
|
#First check. There is a difference, in failure we get the correct result
|
98
138
|
msg = assert_raise( AssertionFailedError ){
|
99
|
-
assert_equal_filecontent( "#{$expected}/test_build.txt", DUMMYTEXT
|
139
|
+
assert_equal_filecontent( "#{$expected}/test_build.txt", DUMMYTEXT )
|
100
140
|
}
|
101
|
-
assert_match( %r{
|
141
|
+
assert_match( %r{Result differs to file content #{$expected}/test_build.txt\n\t-> Build <#{$folder_for_failure}/test_build.txt}m,
|
102
142
|
msg.to_s )
|
103
143
|
|
104
144
|
#Check for file with correkt result
|
105
|
-
|
145
|
+
assert_true(File.exist?("#{$folder_for_failure}/test_build.txt" ))
|
106
146
|
#Check with new file (normally you would copy the file to $expected
|
107
147
|
assert_equal_filecontent( "#{$folder_for_failure}/test_build.txt", DUMMYTEXT, nil )
|
108
148
|
end
|
109
|
-
|
149
|
+
def test_build_reference_file_parameter_error()
|
150
|
+
#First check. There is a difference, in failure we get the correct result
|
151
|
+
msg = assert_raise( ArgumentError ){
|
152
|
+
assert_equal_filecontent( "<??>.txt", DUMMYTEXT )
|
153
|
+
}
|
154
|
+
end
|
155
|
+
def test_build_reference_file_parameter_c()
|
156
|
+
filename = self.class.name
|
157
|
+
#First check. There is a difference, in failure we get the correct result
|
158
|
+
msg = assert_raise( AssertionFailedError ){
|
159
|
+
assert_equal_filecontent( "#{$expected}/<c>.txt", DUMMYTEXT )
|
160
|
+
}
|
161
|
+
assert_match( %r{Reference file <#{$expected}/#{filename}.txt> missing.*-> Build <#{FOLDER_FOR_FAILURE}/#{filename}.txt}m,
|
162
|
+
msg.to_s )
|
163
|
+
|
164
|
+
#Check for file with correkt result
|
165
|
+
assert_true(File.exist?("#{FOLDER_FOR_FAILURE}/#{filename}.txt" ))
|
166
|
+
#Check with new file (normally you would copy the file to $expected
|
167
|
+
assert_equal_filecontent( "#{FOLDER_FOR_FAILURE}/#{filename}.txt", DUMMYTEXT, nil )
|
168
|
+
end
|
169
|
+
def test_build_reference_file_parameter_m()
|
170
|
+
#~ pend "filename <m>"
|
171
|
+
filename = __method__
|
172
|
+
#First check. There is a difference, in failure we get the correct result
|
173
|
+
msg = assert_raise( AssertionFailedError ){
|
174
|
+
assert_equal_filecontent( "#{$expected}/<m>.txt", DUMMYTEXT )
|
175
|
+
}
|
176
|
+
assert_match( %r{Reference file <#{$expected}/#{filename}.txt> missing.*-> Build <#{FOLDER_FOR_FAILURE}/#{filename}.txt}m,
|
177
|
+
msg.to_s )
|
178
|
+
|
179
|
+
|
180
|
+
#Check for file with correkt result
|
181
|
+
assert_true(File.exist?("#{FOLDER_FOR_FAILURE}/#{filename}.txt" ))
|
182
|
+
#Check with new file (normally you would copy the file to $expected
|
183
|
+
assert_equal_filecontent( "#{FOLDER_FOR_FAILURE}/#{filename}.txt", DUMMYTEXT, nil )
|
184
|
+
end
|
185
|
+
#~ def test_build_reference_file_parameter_cm()
|
186
|
+
#~ pend "filename <cm>"
|
187
|
+
#~ filename = "#{self.class.name}-#{__method__}"
|
188
|
+
#~ #First check. There is a difference, in failure we get the correct result
|
189
|
+
#~ msg = assert_raise( AssertionFailedError ){
|
190
|
+
#~ assert_equal_filecontent( "#{$expected}/<cm>.txt", DUMMYTEXT )
|
191
|
+
#~ }
|
192
|
+
#~ assert_match( %r{Reference file <#{$expected}/#{filename}.txt> missing.*-> Build <#{FOLDER_FOR_FAILURE}/#{filename}.txt}m,
|
193
|
+
#~ msg.to_s )
|
194
|
+
|
195
|
+
#~ #Check for file with correkt result
|
196
|
+
#~ assert_true(File.exist?("#{FOLDER_FOR_FAILURE}/#{filename}.txt" ))
|
197
|
+
#~ #Check with new file (normally you would copy the file to $expected
|
198
|
+
#~ assert_equal_filecontent( "#{FOLDER_FOR_FAILURE}/#{filename}.txt", DUMMYTEXT, nil )
|
199
|
+
#~ end
|
200
|
+
|
201
|
+
end #Test_equal_filecontent
|
@@ -63,9 +63,9 @@ class Log4rTest < Test::Unit::TestCase
|
|
63
63
|
def test_alternative()
|
64
64
|
log = Log4r::Logger.new('testlog')
|
65
65
|
begin
|
66
|
-
io = Tempfile.new(self.object_id)
|
66
|
+
io = Tempfile.new(self.object_id.to_s)
|
67
67
|
rescue ArgumentError
|
68
|
-
omit("Tempfile error
|
68
|
+
omit("Tempfile error")
|
69
69
|
end
|
70
70
|
log.outputters << Log4r::IOOutputter.new('log_stdout', io)
|
71
71
|
log.info('a')
|
metadata
CHANGED
@@ -1,105 +1,102 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: more_unit_test
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 2
|
10
|
-
version: 0.1.2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Knut Lickert
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2015-02-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
22
14
|
name: test-unit
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2'
|
33
20
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: knut_tools
|
37
21
|
prerelease: false
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: knut-gempackager
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.1'
|
47
34
|
type: :development
|
48
|
-
|
49
|
-
|
50
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: knut-testtask
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.1'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.1'
|
55
|
+
description: ! 'The more_unit_test-package extends test/unit with some additional
|
56
|
+
tests:
|
57
|
+
|
51
58
|
- assert_equal_filecontent.rb: Compare expected result with file content
|
59
|
+
|
52
60
|
- assert_stdout.rb: test for stdout/stderr
|
53
61
|
|
62
|
+
'
|
54
63
|
email: knut@lickert.net
|
55
64
|
executables: []
|
56
|
-
|
57
65
|
extensions: []
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
files:
|
62
|
-
- readme.rd
|
66
|
+
extra_rdoc_files:
|
67
|
+
- readme
|
68
|
+
files:
|
63
69
|
- lib/more_unit_test.rb
|
64
70
|
- lib/more_unit_test/assert_equal_filecontent.rb
|
65
71
|
- lib/more_unit_test/assert_stdout.rb
|
66
|
-
-
|
72
|
+
- readme
|
67
73
|
- unittest/test_assert_equal_filecontent.rb
|
68
|
-
|
74
|
+
- unittest/test_assert_stdout.rb
|
69
75
|
homepage: http://gems.rubypla.net/more_unit_test/
|
70
76
|
licenses: []
|
71
|
-
|
77
|
+
metadata: {}
|
72
78
|
post_install_message:
|
73
|
-
rdoc_options:
|
79
|
+
rdoc_options:
|
74
80
|
- --main
|
75
|
-
- readme
|
76
|
-
require_paths:
|
81
|
+
- readme
|
82
|
+
require_paths:
|
77
83
|
- lib
|
78
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
none: false
|
89
|
-
requirements:
|
90
|
-
- - ">="
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
hash: 3
|
93
|
-
segments:
|
94
|
-
- 0
|
95
|
-
version: "0"
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
96
94
|
requirements: []
|
97
|
-
|
98
95
|
rubyforge_project: more_unit_test
|
99
|
-
rubygems_version:
|
96
|
+
rubygems_version: 2.2.2
|
100
97
|
signing_key:
|
101
|
-
specification_version:
|
98
|
+
specification_version: 4
|
102
99
|
summary: Additional assertions for big text results.
|
103
|
-
test_files:
|
100
|
+
test_files:
|
104
101
|
- unittest/test_assert_stdout.rb
|
105
102
|
- unittest/test_assert_equal_filecontent.rb
|
data/readme.rd
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
=Extend test/unit
|
2
|
-
The more_unit_test-package extends test/unit with some additional tests
|
3
|
-
to hande staou/stderr
|
4
|
-
|
5
|
-
==more_unit_test/assert_equal_filecontent.rb
|
6
|
-
|
7
|
-
Compare expected result with file content
|
8
|
-
==more_unit_test/assert_stdout.rb
|
9
|
-
Test for stdout/stderr
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
=Version history:
|
14
|
-
0.0.1:
|
15
|
-
* Initial version.
|
16
|
-
|
17
|
-
0.0.2:
|
18
|
-
* modified folder structure
|
19
|
-
* more documentation.
|
20
|
-
* published at gemcutter
|
21
|
-
|
22
|
-
0.1.0 2010-02-07
|
23
|
-
* Restructured lib-directory
|
24
|
-
* Restructured the tests (using knut_tools/rake/testtask.rb)
|
25
|
-
* removed catch_output (is available in knut_tools.gem)
|
26
|
-
|
27
|
-
0.1.1 2010-05-03
|
28
|
-
* first steps to Ruby 1.9
|
29
|
-
|
30
|
-
0.1.2 2011-02-17
|
31
|
-
* Add readoption for read options of expected-file
|
32
|
-
|