wrong 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +85 -7
- data/lib/predicated/lib/predicated/from/callable_object.rb +21 -21
- data/lib/predicated/lib/predicated/to/sentence.rb +4 -4
- data/lib/predicated/test_integration/usage_test.rb +1 -1
- data/lib/wrong/adapters/minitest.rb +1 -4
- data/lib/wrong/adapters/test_unit.rb +1 -3
- data/lib/wrong/assert.rb +22 -17
- data/lib/wrong/config.rb +21 -0
- data/lib/wrong/sexp_ext.rb +2 -1
- data/lib/wrong/version.rb +1 -1
- data/test/adapters/minitest_test.rb +56 -46
- data/test/adapters/rspec_test.rb +1 -1
- data/test/adapters/test_unit_test.rb +18 -14
- data/test/assert_test.rb +53 -23
- data/test/capturing_test.rb +6 -6
- data/test/chunk_test.rb +32 -32
- data/test/close_to_test.rb +1 -1
- data/test/config_test.rb +63 -6
- data/test/failures_test.rb +29 -19
- data/test/message/array_diff_test.rb +6 -6
- data/test/message/string_diff_test.rb +5 -5
- data/test/message/test_context_text.rb +4 -4
- data/test/rescuing_test.rb +2 -2
- data/test/sexp_ext_test.rb +16 -16
- data/test/test_helper.rb +6 -13
- metadata +4 -4
data/test/failures_test.rb
CHANGED
@@ -2,7 +2,7 @@ require "./test/test_helper"
|
|
2
2
|
|
3
3
|
require "wrong/assert"
|
4
4
|
|
5
|
-
|
5
|
+
describe "failures" do
|
6
6
|
|
7
7
|
before do
|
8
8
|
@m = Module.new do
|
@@ -10,15 +10,15 @@ regarding "failures" do
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
describe "simple" do
|
14
14
|
|
15
|
-
|
15
|
+
it "raw boolean assert failure" do
|
16
16
|
error = get_error { @m.assert { false } }
|
17
17
|
# puts error.message
|
18
18
|
assert_match "false", error.message
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
it "raw boolean deny failure" do
|
22
22
|
error = get_error {
|
23
23
|
@m.deny { true }
|
24
24
|
}
|
@@ -26,7 +26,7 @@ regarding "failures" do
|
|
26
26
|
assert_match "true", error.message
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
it "equality failure" do
|
30
30
|
assert_match "1 is not equal to 2", get_error {
|
31
31
|
@m.assert { 1==2 }
|
32
32
|
}.message
|
@@ -35,7 +35,7 @@ regarding "failures" do
|
|
35
35
|
}.message
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
it "failure of basic operations" do
|
39
39
|
assert_match "1 is not greater than 2", get_error {
|
40
40
|
@m.assert { 1>2 }
|
41
41
|
}.message
|
@@ -63,13 +63,13 @@ regarding "failures" do
|
|
63
63
|
}.message
|
64
64
|
end
|
65
65
|
|
66
|
-
|
66
|
+
it "object failure" do
|
67
67
|
assert_match "Color:red is not equal to 2", get_error {
|
68
68
|
@m.assert { Color.new("red")==2 }
|
69
69
|
}.message
|
70
70
|
end
|
71
71
|
|
72
|
-
|
72
|
+
it %{multiline assert block shouldn't look any different
|
73
73
|
than when there everything is on one line} do
|
74
74
|
assert_match("1 is not equal to 2", get_error {
|
75
75
|
@m.assert {
|
@@ -81,8 +81,8 @@ regarding "failures" do
|
|
81
81
|
|
82
82
|
end
|
83
83
|
|
84
|
-
|
85
|
-
|
84
|
+
describe "accessing and printing values set outside of the assert" do
|
85
|
+
it "use a value in the assert defined outside of it" do
|
86
86
|
a = 1
|
87
87
|
assert_match "1 is not equal to 2", get_error {
|
88
88
|
@m.assert { a==2 }
|
@@ -93,8 +93,18 @@ regarding "failures" do
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
|
97
|
-
|
96
|
+
describe "conjunctions (and and or)" do
|
97
|
+
it "omit a primary failure message since 'This is not true etc.' is more obscuring than clarifying" do
|
98
|
+
m = get_error {
|
99
|
+
x = 5
|
100
|
+
@m.assert { x == 5 && x != 5}
|
101
|
+
}.message
|
102
|
+
assert m == "Expected ((x == 5) and (not (x == 5))), but \n (x == 5) is true\n x is 5\n (not (x == 5)) is false\n"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "the assert block has many statements" do
|
107
|
+
it "only pay attention to the final statement" do
|
98
108
|
assert_match("1 is not equal to 2", get_error {
|
99
109
|
@m.assert {
|
100
110
|
a = "aaa"
|
@@ -107,7 +117,7 @@ regarding "failures" do
|
|
107
117
|
}.message)
|
108
118
|
end
|
109
119
|
|
110
|
-
|
120
|
+
it "works even if the assertion is based on stuff set previously in the block" do
|
111
121
|
assert_match("\"aaa\" is not equal to \"bbb\"", get_error {
|
112
122
|
@m.assert {
|
113
123
|
a = "aaa"
|
@@ -117,16 +127,16 @@ regarding "failures" do
|
|
117
127
|
end
|
118
128
|
end
|
119
129
|
|
120
|
-
|
121
|
-
|
130
|
+
describe "array comparisons" do
|
131
|
+
it "basic" do
|
122
132
|
assert_match %{[1, 2] is not equal to ["a", "b"]}, get_error {
|
123
133
|
@m.assert { [1, 2]==%w{a b} }
|
124
134
|
}.message
|
125
135
|
end
|
126
136
|
end
|
127
137
|
|
128
|
-
|
129
|
-
|
138
|
+
describe "hash comparisons" do
|
139
|
+
it "basic" do
|
130
140
|
assert_match '{1=>2} is not equal to {"a"=>"b"}',
|
131
141
|
get_error {
|
132
142
|
@m.assert { {1=>2}=={"a"=>"b"} }
|
@@ -134,8 +144,8 @@ regarding "failures" do
|
|
134
144
|
end
|
135
145
|
end
|
136
146
|
|
137
|
-
|
138
|
-
|
147
|
+
describe "methods that result in a boolean. this might be hard." do
|
148
|
+
it "string include" do
|
139
149
|
assert_match "\"abc\" does not include \"cd\"", get_error {
|
140
150
|
@m.assert { "abc".include?("cd") }
|
141
151
|
}.message
|
@@ -3,7 +3,7 @@ require "wrong/assert"
|
|
3
3
|
require "wrong/message/array_diff"
|
4
4
|
require "wrong/adapters/minitest"
|
5
5
|
|
6
|
-
|
6
|
+
describe "when you're comparing strings and they don't match, show me the diff message" do
|
7
7
|
|
8
8
|
def assert_string_diff_message(first_array, second_array, expected_error_message)
|
9
9
|
assert {
|
@@ -13,7 +13,7 @@ regarding "when you're comparing strings and they don't match, show me the diff
|
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
it "don't attempt to do this if the assertion is not of the form a_array==b_array" do
|
17
17
|
deny {
|
18
18
|
rescuing {
|
19
19
|
assert { [1]==2 }
|
@@ -26,7 +26,7 @@ regarding "when you're comparing strings and they don't match, show me the diff
|
|
26
26
|
}
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
it "simple" do
|
30
30
|
assert {
|
31
31
|
rescuing {
|
32
32
|
assert { ["a"]==["b"] }
|
@@ -40,7 +40,7 @@ regarding "when you're comparing strings and they don't match, show me the diff
|
|
40
40
|
})
|
41
41
|
end
|
42
42
|
|
43
|
-
|
43
|
+
it "elements align properly" do
|
44
44
|
assert_string_diff_message(["a", "b", "c"], ["a", "cccc", "c"], %{
|
45
45
|
["a", "b" , "c"]
|
46
46
|
["a", "cccc", "c"]
|
@@ -54,7 +54,7 @@ regarding "when you're comparing strings and they don't match, show me the diff
|
|
54
54
|
})
|
55
55
|
end
|
56
56
|
|
57
|
-
|
57
|
+
it "different primitive types" do
|
58
58
|
assert_string_diff_message([1, true], [2, true, nil], %{
|
59
59
|
[1, true]
|
60
60
|
[2, true, nil]
|
@@ -62,7 +62,7 @@ regarding "when you're comparing strings and they don't match, show me the diff
|
|
62
62
|
})
|
63
63
|
end
|
64
64
|
|
65
|
-
|
65
|
+
it "2d array - just inspects the inner array like it would any other element" do
|
66
66
|
assert { [1, [2, 3]] == [1, [2, 3]] }
|
67
67
|
assert_string_diff_message([1, [2]], [1, [2, 3]], %{
|
68
68
|
[1, [2] ]
|
@@ -3,7 +3,7 @@ require "wrong/assert"
|
|
3
3
|
require "wrong/message/string_diff"
|
4
4
|
require "wrong/adapters/minitest"
|
5
5
|
|
6
|
-
|
6
|
+
describe "when you're comparing strings and they don't match, show me the diff message" do
|
7
7
|
|
8
8
|
def assert_string_diff_message(first_string, second_string, str)
|
9
9
|
assert{
|
@@ -13,7 +13,7 @@ regarding "when you're comparing strings and they don't match, show me the diff
|
|
13
13
|
}
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
it "don't attempt to do this if the assertion is not of the form a_string==b_string" do
|
17
17
|
deny{
|
18
18
|
rescuing{
|
19
19
|
assert{1==2}
|
@@ -36,7 +36,7 @@ regarding "when you're comparing strings and they don't match, show me the diff
|
|
36
36
|
}
|
37
37
|
end
|
38
38
|
|
39
|
-
|
39
|
+
it "simple" do
|
40
40
|
assert{
|
41
41
|
rescuing{
|
42
42
|
assert{"a"=="b"}
|
@@ -51,7 +51,7 @@ acc
|
|
51
51
|
})
|
52
52
|
end
|
53
53
|
|
54
|
-
|
54
|
+
it "whitespace" do
|
55
55
|
assert_string_diff_message("a\nb", "a\ncc", %{
|
56
56
|
a\\nb
|
57
57
|
^
|
@@ -74,7 +74,7 @@ a\\rcc
|
|
74
74
|
|
75
75
|
end
|
76
76
|
|
77
|
-
|
77
|
+
xit "elides really long matching sections" do
|
78
78
|
left = "x"*100 + "ab" + "y"*100 + "AB" + "z"*100
|
79
79
|
right = "x"*100 + "acc" + "y"*100 + "ACC" + "z"*100
|
80
80
|
|
@@ -2,11 +2,11 @@ require "./test/test_helper"
|
|
2
2
|
require "wrong/assert"
|
3
3
|
require "wrong/message/test_context"
|
4
4
|
|
5
|
-
|
5
|
+
describe "showing the lines just above where the failure occurs, so you have some context" do
|
6
6
|
|
7
7
|
include Wrong::Assert
|
8
8
|
|
9
|
-
|
9
|
+
it "you can see test method all the way back to the start of the test, plus an indication of where the failure was" do
|
10
10
|
a = 1
|
11
11
|
b = 2
|
12
12
|
c = 1
|
@@ -16,7 +16,7 @@ regarding "showing the lines just above where the failure occurs, so you have so
|
|
16
16
|
rescue Wrong::Assert::AssertionFailedError => e
|
17
17
|
assert do
|
18
18
|
e.message.include?(
|
19
|
-
%{
|
19
|
+
%{ it "you can see test method all the way back to the start of the test, plus an indication of where the failure was" do
|
20
20
|
a = 1
|
21
21
|
b = 2
|
22
22
|
c = 1
|
@@ -65,4 +65,4 @@ regarding "showing the lines just above where the failure occurs, so you have so
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
end
|
68
|
+
end
|
data/test/rescuing_test.rb
CHANGED
@@ -3,12 +3,12 @@ require "./test/test_helper"
|
|
3
3
|
require "wrong/assert"
|
4
4
|
require "wrong/adapters/minitest"
|
5
5
|
|
6
|
-
|
6
|
+
describe "a tool for rescuing errors" do
|
7
7
|
|
8
8
|
class RedError < StandardError; end
|
9
9
|
class BlueError < StandardError; end
|
10
10
|
|
11
|
-
|
11
|
+
it "catch the error and assert on it" do
|
12
12
|
assert{ rescuing{raise RedError.new}.is_a?(RedError) }
|
13
13
|
assert{ rescuing{"x"}.nil? }
|
14
14
|
end
|
data/test/sexp_ext_test.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require "./test/test_helper"
|
2
2
|
require "wrong/sexp_ext"
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
describe Sexp do
|
5
|
+
describe "#doop" do
|
6
|
+
it "deeply duplicates the sexp" do
|
7
7
|
original = RubyParser.new.parse("x == 5")
|
8
8
|
duplicate = original.doop
|
9
9
|
assert(original.object_id != duplicate.object_id)
|
@@ -17,60 +17,60 @@ regarding Sexp do
|
|
17
17
|
RubyParser.new.parse(ruby)
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
describe "#to_ruby" do
|
21
|
+
it "converts the sexp to ruby code" do
|
22
22
|
sexp = parse("x == 5")
|
23
23
|
assert sexp.to_ruby == "(x == 5)"
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
it "leaves the original sexp alone" do
|
27
27
|
sexp = parse("x == 5")
|
28
28
|
assert sexp.to_ruby == "(x == 5)"
|
29
29
|
assert sexp.to_ruby == "(x == 5)" # intended
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
describe "#assertion? with a question mark" do
|
34
|
+
it "matches an sexp that looks like assert { }" do
|
35
35
|
sexp = parse("assert { true }")
|
36
36
|
assert sexp.assertion?
|
37
37
|
end
|
38
38
|
|
39
|
-
|
39
|
+
it "matches an sexp that looks like assert(message) { }" do
|
40
40
|
sexp = parse("assert('hi') { true }")
|
41
41
|
assert sexp.assertion?
|
42
42
|
end
|
43
43
|
|
44
|
-
|
44
|
+
it "matches an sexp that looks like deny { }" do
|
45
45
|
sexp = parse("deny { false }")
|
46
46
|
assert sexp.assertion?
|
47
47
|
end
|
48
48
|
|
49
|
-
|
49
|
+
it "doesn't match an sexp that calls assert without a block" do
|
50
50
|
sexp = parse("assert(true)")
|
51
51
|
assert !sexp.assertion?
|
52
52
|
end
|
53
53
|
|
54
|
-
|
54
|
+
it "doesn't match a normal sexp" do
|
55
55
|
sexp = parse("x == 5")
|
56
56
|
assert !sexp.assertion?
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
|
61
|
-
|
60
|
+
describe "#assertion" do
|
61
|
+
it "matches a top-level sexp that looks like assert { }" do
|
62
62
|
sexp = parse("assert { true }")
|
63
63
|
code = sexp.assertion.to_ruby
|
64
64
|
assert code == "assert { true }"
|
65
65
|
end
|
66
66
|
|
67
|
-
|
67
|
+
it "matches a nested sexp that looks like assert { }" do
|
68
68
|
sexp = parse("nesting { assert { true } }")
|
69
69
|
code = sexp.assertion.to_ruby
|
70
70
|
assert code == "assert { true }"
|
71
71
|
end
|
72
72
|
|
73
|
-
|
73
|
+
it "matches the first nested sexp that looks like assert { }" do
|
74
74
|
sexp = parse("nesting { assert { true } or assert { false } }")
|
75
75
|
code = sexp.assertion.to_ruby
|
76
76
|
assert code == "assert { true }"
|
data/test/test_helper.rb
CHANGED
@@ -6,6 +6,7 @@ require "minitest/spec"
|
|
6
6
|
require "minitest/unit"
|
7
7
|
require "pp"
|
8
8
|
|
9
|
+
# yes, this does look a lot like Wrong::Assert#rescuing :-)
|
9
10
|
def get_error
|
10
11
|
error = nil
|
11
12
|
begin
|
@@ -13,10 +14,6 @@ def get_error
|
|
13
14
|
rescue Exception, RuntimeError => e
|
14
15
|
error = e
|
15
16
|
end
|
16
|
-
|
17
|
-
# puts ""
|
18
|
-
# puts error
|
19
|
-
#
|
20
17
|
error
|
21
18
|
end
|
22
19
|
|
@@ -24,10 +21,8 @@ class MiniTest::Unit::TestCase
|
|
24
21
|
end
|
25
22
|
|
26
23
|
module Kernel
|
27
|
-
|
28
|
-
|
29
|
-
def xregarding(str)
|
30
|
-
puts "x'd out 'regarding \"#{str}\"'"
|
24
|
+
def xdescribe(str)
|
25
|
+
puts "x'd out describe \"#{str}\""
|
31
26
|
end
|
32
27
|
end
|
33
28
|
|
@@ -35,15 +30,13 @@ class MiniTest::Spec
|
|
35
30
|
include MiniTest::Assertions
|
36
31
|
|
37
32
|
class << self
|
38
|
-
|
39
|
-
|
40
|
-
def xtest(str)
|
41
|
-
puts "x'd out 'test \"#{str}\"'"
|
33
|
+
def xit(str)
|
34
|
+
puts "x'd out test \"#{str}\""
|
42
35
|
end
|
43
|
-
|
44
36
|
end
|
45
37
|
end
|
46
38
|
|
39
|
+
# dummy class for use by tests
|
47
40
|
class Color
|
48
41
|
attr_reader :name
|
49
42
|
def initialize(name)
|
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: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
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-08-
|
19
|
+
date: 2010-08-29 00:00:00 -07:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|