wrong 0.3.3 → 0.4.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.
- data/README.markdown +77 -11
- data/lib/wrong.rb +20 -0
- data/lib/wrong/adapters/minitest.rb +6 -18
- data/lib/wrong/adapters/rspec.rb +18 -7
- data/lib/wrong/adapters/test_unit.rb +2 -2
- data/lib/wrong/assert.rb +45 -90
- data/lib/wrong/chunk.rb +89 -27
- data/lib/wrong/close_to.rb +7 -11
- data/lib/wrong/d.rb +42 -0
- data/lib/wrong/failure_message.rb +43 -0
- data/lib/wrong/helpers.rb +66 -0
- data/lib/wrong/irb.rb +1 -1
- data/lib/wrong/message/array_diff.rb +57 -75
- data/lib/wrong/message/string_comparison.rb +88 -0
- data/lib/wrong/message/test_context.rb +2 -0
- data/lib/{predicated/lib/predicated/sexp_patch.rb → wrong/ruby2ruby_patch.rb} +3 -5
- data/lib/wrong/sexp_ext.rb +12 -4
- data/lib/wrong/version.rb +1 -1
- data/test/adapters/rspec1/failing_spec.rb +23 -0
- data/test/adapters/rspec2/failing_spec.rb +26 -0
- data/test/adapters/rspec_test.rb +65 -4
- data/test/adapters/test_unit_test.rb +6 -1
- data/test/assert_advanced_test.rb +51 -0
- data/test/assert_test.rb +4 -48
- data/test/capturing_test.rb +4 -2
- data/test/chunk_test.rb +36 -11
- data/test/close_to_test.rb +2 -2
- data/test/config_test.rb +5 -5
- data/test/d_test.rb +64 -0
- data/test/failure_message_test.rb +40 -0
- data/test/failures_test.rb +6 -7
- data/test/message/array_diff_test.rb +18 -14
- data/test/message/{test_context_text.rb → test_context_test.rb} +2 -1
- data/test/rescuing_test.rb +5 -4
- data/test/separate.rb +4 -0
- data/test/sexp_ext_test.rb +2 -2
- data/test/string_comparison_test.rb +159 -0
- data/test/suite.rb +7 -4
- data/test/test_helper.rb +2 -0
- data/test/wrong_test.rb +60 -0
- metadata +92 -46
- data/lib/wrong/message/string_diff.rb +0 -42
- data/test/message/string_diff_test.rb +0 -89
data/test/suite.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
#simple way to make sure requires are isolated
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
#simple (but slow) way to make sure requires are isolated
|
2
|
+
failed = Dir["test/**/*_test.rb"].collect do |test_file|
|
3
|
+
ok = system("bundle exec ruby #{test_file}")
|
4
|
+
test_file unless ok
|
5
|
+
end.compact
|
6
|
+
puts "suite " + (failed.empty? ? "passed" : "FAILED: #{failed.join(', ')}")
|
7
|
+
exit(failed.empty? ? 0 : 1)
|
data/test/test_helper.rb
CHANGED
data/test/wrong_test.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require "./test/test_helper"
|
2
|
+
require "wrong"
|
3
|
+
|
4
|
+
describe "the Wrong module" do
|
5
|
+
|
6
|
+
class Client
|
7
|
+
include Wrong
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "by itself" do
|
11
|
+
it "gets the assert method" do
|
12
|
+
Wrong.assert { true }
|
13
|
+
end
|
14
|
+
|
15
|
+
it "gets the deny method" do
|
16
|
+
Wrong.deny { false }
|
17
|
+
end
|
18
|
+
|
19
|
+
it "gets the capturing method" do
|
20
|
+
value = Wrong.capturing { puts "ok" }
|
21
|
+
assert value == "ok\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "gets the rescuing method" do
|
25
|
+
value = Wrong.rescuing { raise "uh-oh" }
|
26
|
+
assert value.message == "uh-oh"
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "when included" do
|
32
|
+
it "gets the assert method" do
|
33
|
+
Client.new.assert { true }
|
34
|
+
end
|
35
|
+
|
36
|
+
it "gets the deny method" do
|
37
|
+
Client.new.deny { false }
|
38
|
+
end
|
39
|
+
|
40
|
+
it "gets the capturing method" do
|
41
|
+
value = Client.new.capturing { puts "ok" }
|
42
|
+
assert value == "ok\n"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "gets the rescuing method" do
|
46
|
+
value = Client.new.rescuing { raise "uh-oh" }
|
47
|
+
assert value.message == "uh-oh"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "adds #close_to? to Float" do
|
51
|
+
assert 1.0.respond_to?(:close_to?)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "adds #d to a global namespace" do
|
55
|
+
x = 5
|
56
|
+
output = Wrong.capturing { d { x } }
|
57
|
+
Wrong.assert { output == "x is 5\n" }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wrong
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Steve Conover
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-
|
19
|
+
date: 2010-10-04 00:00:00 -07:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -26,101 +26,130 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 19
|
30
30
|
segments:
|
31
31
|
- 0
|
32
32
|
- 2
|
33
|
-
-
|
34
|
-
version: 0.2.
|
33
|
+
- 2
|
34
|
+
version: 0.2.2
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: *id001
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
39
|
+
name: ruby_parser
|
40
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
45
|
+
hash: 7
|
46
46
|
segments:
|
47
|
-
-
|
47
|
+
- 2
|
48
48
|
- 0
|
49
|
-
-
|
50
|
-
version:
|
49
|
+
- 4
|
50
|
+
version: 2.0.4
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: *id002
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
|
-
name:
|
55
|
+
name: ruby2ruby
|
56
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
hash:
|
61
|
+
hash: 11
|
62
62
|
segments:
|
63
|
+
- 1
|
63
64
|
- 2
|
64
|
-
|
65
|
-
- 4
|
66
|
-
version: 2.0.4
|
65
|
+
version: "1.2"
|
67
66
|
type: :runtime
|
68
67
|
prerelease: false
|
69
68
|
version_requirements: *id003
|
70
69
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
70
|
+
name: sexp_processor
|
72
71
|
requirement: &id004 !ruby/object:Gem::Requirement
|
73
72
|
none: false
|
74
73
|
requirements:
|
75
|
-
- -
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 7
|
77
|
+
segments:
|
78
|
+
- 3
|
79
|
+
- 0
|
80
|
+
version: "3.0"
|
81
|
+
type: :runtime
|
82
|
+
prerelease: false
|
83
|
+
version_requirements: *id004
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: diff-lcs
|
86
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ~>
|
76
90
|
- !ruby/object:Gem::Version
|
77
91
|
hash: 23
|
78
92
|
segments:
|
79
93
|
- 1
|
94
|
+
- 1
|
80
95
|
- 2
|
81
|
-
|
82
|
-
version: 1.2.4
|
96
|
+
version: 1.1.2
|
83
97
|
type: :runtime
|
84
98
|
prerelease: false
|
85
|
-
version_requirements: *
|
99
|
+
version_requirements: *id005
|
86
100
|
- !ruby/object:Gem::Dependency
|
87
|
-
name:
|
88
|
-
requirement: &
|
101
|
+
name: ParseTree
|
102
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ~>
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
hash: 7
|
108
|
+
segments:
|
109
|
+
- 3
|
110
|
+
- 0
|
111
|
+
version: "3.0"
|
112
|
+
type: :runtime
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: *id006
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: sourcify
|
117
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
89
118
|
none: false
|
90
119
|
requirements:
|
91
120
|
- - ">="
|
92
121
|
- !ruby/object:Gem::Version
|
93
|
-
hash:
|
122
|
+
hash: 19
|
94
123
|
segments:
|
95
124
|
- 0
|
96
125
|
- 3
|
97
|
-
-
|
98
|
-
version: 0.3.
|
126
|
+
- 0
|
127
|
+
version: 0.3.0
|
99
128
|
type: :runtime
|
100
129
|
prerelease: false
|
101
|
-
version_requirements: *
|
130
|
+
version_requirements: *id007
|
102
131
|
- !ruby/object:Gem::Dependency
|
103
|
-
name:
|
104
|
-
requirement: &
|
132
|
+
name: file-tail
|
133
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
105
134
|
none: false
|
106
135
|
requirements:
|
107
|
-
- -
|
136
|
+
- - ~>
|
108
137
|
- !ruby/object:Gem::Version
|
109
|
-
hash:
|
138
|
+
hash: 15
|
110
139
|
segments:
|
111
140
|
- 1
|
112
|
-
-
|
113
|
-
|
114
|
-
version: 1.1.2
|
141
|
+
- 0
|
142
|
+
version: "1.0"
|
115
143
|
type: :runtime
|
116
144
|
prerelease: false
|
117
|
-
version_requirements: *
|
145
|
+
version_requirements: *id008
|
118
146
|
description: |-
|
119
147
|
Wrong provides a general assert method that takes a predicate block. Assertion failure
|
120
148
|
messages are rich in detail. The Wrong idea is to replace all those countless assert_this,
|
121
149
|
assert_that library methods which only exist to give a more useful failure message than
|
122
150
|
"assertion failed". Wrong replaces all of them in one fell swoop, since if you can write it
|
123
|
-
in Ruby, Wrong can make a sensible failure message out of it.
|
151
|
+
in Ruby, Wrong can make a sensible failure message out of it. Also provided are several
|
152
|
+
helper methods, like rescuing, capturing, and d.
|
124
153
|
email: sconover@gmail.com
|
125
154
|
executables: []
|
126
155
|
|
@@ -129,7 +158,6 @@ extensions: []
|
|
129
158
|
extra_rdoc_files:
|
130
159
|
- README.markdown
|
131
160
|
files:
|
132
|
-
- lib/predicated/lib/predicated/sexp_patch.rb
|
133
161
|
- lib/wrong/adapters/minitest.rb
|
134
162
|
- lib/wrong/adapters/rspec.rb
|
135
163
|
- lib/wrong/adapters/test_unit.rb
|
@@ -137,31 +165,42 @@ files:
|
|
137
165
|
- lib/wrong/chunk.rb
|
138
166
|
- lib/wrong/close_to.rb
|
139
167
|
- lib/wrong/config.rb
|
168
|
+
- lib/wrong/d.rb
|
169
|
+
- lib/wrong/failure_message.rb
|
170
|
+
- lib/wrong/helpers.rb
|
140
171
|
- lib/wrong/irb.rb
|
141
172
|
- lib/wrong/message/array_diff.rb
|
142
|
-
- lib/wrong/message/
|
173
|
+
- lib/wrong/message/string_comparison.rb
|
143
174
|
- lib/wrong/message/test_context.rb
|
144
175
|
- lib/wrong/rainbow.rb
|
176
|
+
- lib/wrong/ruby2ruby_patch.rb
|
145
177
|
- lib/wrong/sexp_ext.rb
|
146
178
|
- lib/wrong/version.rb
|
147
179
|
- lib/wrong.rb
|
148
180
|
- README.markdown
|
149
181
|
- test/adapters/minitest_test.rb
|
182
|
+
- test/adapters/rspec1/failing_spec.rb
|
183
|
+
- test/adapters/rspec2/failing_spec.rb
|
150
184
|
- test/adapters/rspec_test.rb
|
151
185
|
- test/adapters/test_unit_test.rb
|
186
|
+
- test/assert_advanced_test.rb
|
152
187
|
- test/assert_test.rb
|
153
188
|
- test/capturing_test.rb
|
154
189
|
- test/chunk_test.rb
|
155
190
|
- test/close_to_test.rb
|
156
191
|
- test/config_test.rb
|
192
|
+
- test/d_test.rb
|
193
|
+
- test/failure_message_test.rb
|
157
194
|
- test/failures_test.rb
|
158
195
|
- test/message/array_diff_test.rb
|
159
|
-
- test/message/
|
160
|
-
- test/message/test_context_text.rb
|
196
|
+
- test/message/test_context_test.rb
|
161
197
|
- test/rescuing_test.rb
|
198
|
+
- test/separate.rb
|
162
199
|
- test/sexp_ext_test.rb
|
200
|
+
- test/string_comparison_test.rb
|
163
201
|
- test/suite.rb
|
164
202
|
- test/test_helper.rb
|
203
|
+
- test/wrong_test.rb
|
165
204
|
has_rdoc: true
|
166
205
|
homepage: http://github.com/sconover/wrong
|
167
206
|
licenses: []
|
@@ -198,18 +237,25 @@ specification_version: 3
|
|
198
237
|
summary: Wrong provides a general assert method that takes a predicate block. Assertion failure messages are rich in detail.
|
199
238
|
test_files:
|
200
239
|
- test/adapters/minitest_test.rb
|
240
|
+
- test/adapters/rspec1/failing_spec.rb
|
241
|
+
- test/adapters/rspec2/failing_spec.rb
|
201
242
|
- test/adapters/rspec_test.rb
|
202
243
|
- test/adapters/test_unit_test.rb
|
244
|
+
- test/assert_advanced_test.rb
|
203
245
|
- test/assert_test.rb
|
204
246
|
- test/capturing_test.rb
|
205
247
|
- test/chunk_test.rb
|
206
248
|
- test/close_to_test.rb
|
207
249
|
- test/config_test.rb
|
250
|
+
- test/d_test.rb
|
251
|
+
- test/failure_message_test.rb
|
208
252
|
- test/failures_test.rb
|
209
253
|
- test/message/array_diff_test.rb
|
210
|
-
- test/message/
|
211
|
-
- test/message/test_context_text.rb
|
254
|
+
- test/message/test_context_test.rb
|
212
255
|
- test/rescuing_test.rb
|
256
|
+
- test/separate.rb
|
213
257
|
- test/sexp_ext_test.rb
|
258
|
+
- test/string_comparison_test.rb
|
214
259
|
- test/suite.rb
|
215
260
|
- test/test_helper.rb
|
261
|
+
- test/wrong_test.rb
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "diff"
|
2
|
-
|
3
|
-
module Wrong
|
4
|
-
module Assert
|
5
|
-
|
6
|
-
def failure_message(method_sym, block, predicate)
|
7
|
-
message = super
|
8
|
-
|
9
|
-
if predicate.is_a?(Predicated::Equal) &&
|
10
|
-
predicate.left.is_a?(String) &&
|
11
|
-
predicate.right.is_a?(String)
|
12
|
-
|
13
|
-
problems = predicate.left.diff(predicate.right)
|
14
|
-
max_length = [predicate.left.length, predicate.right.length].max
|
15
|
-
|
16
|
-
message << "\n\nstring diff:\n"
|
17
|
-
message << StringDiff.string_with_diff(predicate.left, problems, max_length, "-")
|
18
|
-
message << StringDiff.string_with_diff(predicate.right, problems, max_length, "+")
|
19
|
-
end
|
20
|
-
|
21
|
-
message
|
22
|
-
end
|
23
|
-
|
24
|
-
module StringDiff
|
25
|
-
def self.string_with_diff(original_str, problems, max_length, sign)
|
26
|
-
str = ""
|
27
|
-
str << original_str.gsub("\n", "\\n").gsub("\t", "\\t").gsub("\r", "\\r") + "\n"
|
28
|
-
str << StringDiff.problems_to_carrot_string(problems, max_length, sign) + "\n"
|
29
|
-
str
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.problems_to_carrot_string(problems, length, sign)
|
33
|
-
carrot_string = " " * length
|
34
|
-
problems.diffs.first.each do |add_subtract, position, character_code|
|
35
|
-
carrot_string[position] = "^" if sign == add_subtract
|
36
|
-
end
|
37
|
-
carrot_string
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
require "./test/test_helper"
|
2
|
-
require "wrong/assert"
|
3
|
-
require "wrong/message/string_diff"
|
4
|
-
require "wrong/adapters/minitest"
|
5
|
-
|
6
|
-
describe "when you're comparing strings and they don't match, show me the diff message" do
|
7
|
-
|
8
|
-
def assert_string_diff_message(first_string, second_string, str)
|
9
|
-
assert{
|
10
|
-
rescuing{
|
11
|
-
assert{first_string == second_string}
|
12
|
-
}.message.include?(str)
|
13
|
-
}
|
14
|
-
end
|
15
|
-
|
16
|
-
it "don't attempt to do this if the assertion is not of the form a_string==b_string" do
|
17
|
-
deny{
|
18
|
-
rescuing{
|
19
|
-
assert{1==2}
|
20
|
-
}.message.include?("diff")
|
21
|
-
}
|
22
|
-
deny{
|
23
|
-
rescuing{
|
24
|
-
assert{"a"==2}
|
25
|
-
}.message.include?("diff")
|
26
|
-
}
|
27
|
-
deny{
|
28
|
-
rescuing{
|
29
|
-
assert{1=="a"}
|
30
|
-
}.message.include?("diff")
|
31
|
-
}
|
32
|
-
deny{
|
33
|
-
rescuing{
|
34
|
-
assert{nil=="a"}
|
35
|
-
}.message.include?("diff")
|
36
|
-
}
|
37
|
-
end
|
38
|
-
|
39
|
-
it "simple" do
|
40
|
-
assert{
|
41
|
-
rescuing{
|
42
|
-
assert{"a"=="b"}
|
43
|
-
}.message.include?("diff")
|
44
|
-
}
|
45
|
-
|
46
|
-
assert_string_diff_message("ab", "acc", %{
|
47
|
-
ab
|
48
|
-
^
|
49
|
-
acc
|
50
|
-
^^
|
51
|
-
})
|
52
|
-
end
|
53
|
-
|
54
|
-
it "whitespace" do
|
55
|
-
assert_string_diff_message("a\nb", "a\ncc", %{
|
56
|
-
a\\nb
|
57
|
-
^
|
58
|
-
a\\ncc
|
59
|
-
^^
|
60
|
-
})
|
61
|
-
|
62
|
-
assert_string_diff_message("a\tb", "a\tcc", %{
|
63
|
-
a\\tb
|
64
|
-
^
|
65
|
-
a\\tcc
|
66
|
-
^^
|
67
|
-
})
|
68
|
-
assert_string_diff_message("a\rb", "a\rcc", %{
|
69
|
-
a\\rb
|
70
|
-
^
|
71
|
-
a\\rcc
|
72
|
-
^^
|
73
|
-
})
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
xit "elides really long matching sections" do
|
78
|
-
left = "x"*100 + "ab" + "y"*100 + "AB" + "z"*100
|
79
|
-
right = "x"*100 + "acc" + "y"*100 + "ACC" + "z"*100
|
80
|
-
|
81
|
-
assert_string_diff_message("ab", "acc", %{
|
82
|
-
...xxabyyy....yyABzzz....
|
83
|
-
^ ^
|
84
|
-
...xxaccyyy...yyACCzzz...
|
85
|
-
^^ ^^
|
86
|
-
})
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|