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.
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