wrong 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/README.markdown +77 -11
  2. data/lib/wrong.rb +20 -0
  3. data/lib/wrong/adapters/minitest.rb +6 -18
  4. data/lib/wrong/adapters/rspec.rb +18 -7
  5. data/lib/wrong/adapters/test_unit.rb +2 -2
  6. data/lib/wrong/assert.rb +45 -90
  7. data/lib/wrong/chunk.rb +89 -27
  8. data/lib/wrong/close_to.rb +7 -11
  9. data/lib/wrong/d.rb +42 -0
  10. data/lib/wrong/failure_message.rb +43 -0
  11. data/lib/wrong/helpers.rb +66 -0
  12. data/lib/wrong/irb.rb +1 -1
  13. data/lib/wrong/message/array_diff.rb +57 -75
  14. data/lib/wrong/message/string_comparison.rb +88 -0
  15. data/lib/wrong/message/test_context.rb +2 -0
  16. data/lib/{predicated/lib/predicated/sexp_patch.rb → wrong/ruby2ruby_patch.rb} +3 -5
  17. data/lib/wrong/sexp_ext.rb +12 -4
  18. data/lib/wrong/version.rb +1 -1
  19. data/test/adapters/rspec1/failing_spec.rb +23 -0
  20. data/test/adapters/rspec2/failing_spec.rb +26 -0
  21. data/test/adapters/rspec_test.rb +65 -4
  22. data/test/adapters/test_unit_test.rb +6 -1
  23. data/test/assert_advanced_test.rb +51 -0
  24. data/test/assert_test.rb +4 -48
  25. data/test/capturing_test.rb +4 -2
  26. data/test/chunk_test.rb +36 -11
  27. data/test/close_to_test.rb +2 -2
  28. data/test/config_test.rb +5 -5
  29. data/test/d_test.rb +64 -0
  30. data/test/failure_message_test.rb +40 -0
  31. data/test/failures_test.rb +6 -7
  32. data/test/message/array_diff_test.rb +18 -14
  33. data/test/message/{test_context_text.rb → test_context_test.rb} +2 -1
  34. data/test/rescuing_test.rb +5 -4
  35. data/test/separate.rb +4 -0
  36. data/test/sexp_ext_test.rb +2 -2
  37. data/test/string_comparison_test.rb +159 -0
  38. data/test/suite.rb +7 -4
  39. data/test/test_helper.rb +2 -0
  40. data/test/wrong_test.rb +60 -0
  41. metadata +92 -46
  42. data/lib/wrong/message/string_diff.rb +0 -42
  43. data/test/message/string_diff_test.rb +0 -89
@@ -1,4 +1,7 @@
1
- #simple way to make sure requires are isolated
2
- result = Dir["test/**/*_test.rb"].collect{|test_file| system("bundle exec ruby #{test_file}") }.uniq == [true]
3
- puts "suite " + (result ? "passed" : "FAILED")
4
- exit(result ? 0 : 1)
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)
@@ -1,3 +1,5 @@
1
+ puts "RUBY_VERSION=#{RUBY_VERSION}#{" (JRuby)" if Object.const_defined?(:JRuby)}"
2
+
1
3
  dir = File.dirname(__FILE__)
2
4
  $LOAD_PATH.unshift "#{dir}/../lib"
3
5
 
@@ -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: 21
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 3
10
- version: 0.3.3
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-09-22 00:00:00 -07:00
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: 21
29
+ hash: 19
30
30
  segments:
31
31
  - 0
32
32
  - 2
33
- - 1
34
- version: 0.2.1
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: ParseTree
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: 13
45
+ hash: 7
46
46
  segments:
47
- - 3
47
+ - 2
48
48
  - 0
49
- - 5
50
- version: 3.0.5
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: ruby_parser
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: 7
61
+ hash: 11
62
62
  segments:
63
+ - 1
63
64
  - 2
64
- - 0
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: ruby2ruby
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
- - 4
82
- version: 1.2.4
96
+ version: 1.1.2
83
97
  type: :runtime
84
98
  prerelease: false
85
- version_requirements: *id004
99
+ version_requirements: *id005
86
100
  - !ruby/object:Gem::Dependency
87
- name: diff
88
- requirement: &id005 !ruby/object:Gem::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: 31
122
+ hash: 19
94
123
  segments:
95
124
  - 0
96
125
  - 3
97
- - 6
98
- version: 0.3.6
126
+ - 0
127
+ version: 0.3.0
99
128
  type: :runtime
100
129
  prerelease: false
101
- version_requirements: *id005
130
+ version_requirements: *id007
102
131
  - !ruby/object:Gem::Dependency
103
- name: diff-lcs
104
- requirement: &id006 !ruby/object:Gem::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: 23
138
+ hash: 15
110
139
  segments:
111
140
  - 1
112
- - 1
113
- - 2
114
- version: 1.1.2
141
+ - 0
142
+ version: "1.0"
115
143
  type: :runtime
116
144
  prerelease: false
117
- version_requirements: *id006
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/string_diff.rb
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/string_diff_test.rb
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/string_diff_test.rb
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