power_assert 0.2.0 → 0.2.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 089a171012087ec11186283c05d7cd1b238d56c1
4
- data.tar.gz: 6a970dc3416704997c85a5b8361f9481909e7658
3
+ metadata.gz: 61a285182186fe82f7d5e42eb9ce9942edfd11ba
4
+ data.tar.gz: f03a6ff069821625f498c48b359d41697d8278bf
5
5
  SHA512:
6
- metadata.gz: 9a26ee36c760f14be0a7d4c6ecce7fb8128e1e3834ade0f7ace29b4667885147d807d216d0bf0e95f87a59f8e9d2600c2f425091e8df581b191995d0e51ed825
7
- data.tar.gz: 168aa6a21ba264001f63c52d1e66b56f263a4ec6593a23bad3c11e09e1f432960a8f9630e5e36c76d8efe872637bcdcc678b24ef32b3f881dc8cf3f80e5f45df
6
+ metadata.gz: f4a379fc1cc3569968450a0c37d32f48bd46524b31e5fa73988cd540e4a78f40dfb5297e0fbd14c4c77e5375340a9e033733d4689d2f0e23004af96d2adc78a7
7
+ data.tar.gz: 48a718d7da45368b3bf5363d6948efcbd29c6a748c29ba56f6f046e214ff728e20f9947434db9e7ac64276b420e7855eaf290f5f227e91f462888b26aad64257
data/lib/power_assert.rb CHANGED
@@ -64,16 +64,22 @@ module PowerAssert
64
64
  end
65
65
 
66
66
  def inspect
67
- @value.inspect
68
- rescue NoMethodError
69
- InspectationFailure
67
+ inspect = @value.inspect
68
+ if Encoding.compatible?(Encoding.default_external, inspect)
69
+ inspect
70
+ else
71
+ begin
72
+ "#{inspect.encode(Encoding.default_external)}(#{inspect.encoding})"
73
+ rescue Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError
74
+ inspect.force_encoding(Encoding.default_external)
75
+ end
76
+ end
77
+ rescue => e
78
+ "InspectionFailure: #{e.class}: #{e.message.each_line.first}"
70
79
  end
71
80
  end
72
81
  private_constant :SafeInspectable
73
82
 
74
- class InspectationFailure; end
75
- private_constant :InspectationFailure
76
-
77
83
  class Context
78
84
  Value = Struct.new(:name, :value, :column)
79
85
  Ident = Struct.new(:type, :name, :column)
@@ -151,7 +157,7 @@ module PowerAssert
151
157
  if vals.empty?
152
158
  return line
153
159
  end
154
- fmt = (vals[0].column + 1).times.map {|i| vals.find {|v| v.column == i } ? "%<#{i}>s" : ' ' }.join
160
+ fmt = (0..vals[0].column).map {|i| vals.find {|v| v.column == i } ? "%<#{i}>s" : ' ' }.join
155
161
  ret = []
156
162
  ret << line.chomp
157
163
  ret << sprintf(fmt, vals.each_with_object({}) {|v, h| h[v.column.to_s.to_sym] = '|' }).chomp
@@ -159,7 +165,8 @@ module PowerAssert
159
165
  inspected_vals = vals.each_with_object({}) do |j, h|
160
166
  h[j.column.to_s.to_sym] = [SafeInspectable.new(i.value).inspect, '|', ' '][i.column <=> j.column]
161
167
  end
162
- ret << sprintf(fmt, inspected_vals).rstrip
168
+ l = sprintf(fmt, inspected_vals)
169
+ ret << (l.valid_encoding? ? l.rstrip : l)
163
170
  end
164
171
  ret.join("\n")
165
172
  end
@@ -36,6 +36,11 @@ if defined? RubyVM
36
36
  def ==
37
37
  end
38
38
  end
39
+
40
+ refine Symbol do
41
+ def ==
42
+ end
43
+ end
39
44
  end
40
45
  ensure
41
46
  $VERBOSE = verbose
@@ -1,3 +1,3 @@
1
1
  module PowerAssert
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -148,6 +148,38 @@ class TestPowerAssert < Test::Unit::TestCase
148
148
  false
149
149
  end
150
150
 
151
+ def test_lazy_inspection
152
+ PowerAssert.configure do |c|
153
+ assert !c.lazy_inspection
154
+ end
155
+ assert_equal <<END.chomp, assertion_message {
156
+ 'a'.sub(/./, 'b').sub!(/./, 'c')
157
+ | |
158
+ | "c"
159
+ "b"
160
+ END
161
+ 'a'.sub(/./, 'b').sub!(/./, 'c')
162
+ }
163
+
164
+ PowerAssert.configure do |c|
165
+ c.lazy_inspection = true
166
+ end
167
+ begin
168
+ assert_equal <<END.chomp, assertion_message {
169
+ 'a'.sub(/./, 'b').sub!(/./, 'c')
170
+ | |
171
+ | "c"
172
+ "c"
173
+ END
174
+ 'a'.sub(/./, 'b').sub!(/./, 'c')
175
+ }
176
+ ensure
177
+ PowerAssert.configure do |c|
178
+ c.lazy_inspection = false
179
+ end
180
+ end
181
+ end
182
+
151
183
  def test_assertion_message
152
184
  a = 0
153
185
  @b = 1
@@ -266,14 +298,15 @@ END
266
298
  }
267
299
 
268
300
 
269
- assert_equal <<END.chomp,
270
- assertion_message { BasicObjectSubclass.new.foo }
271
- | | |
272
- | | "foo"
273
- | PowerAssert::InspectationFailure
274
- TestPowerAssert::BasicObjectSubclass
301
+ a = :a
302
+ assert_equal <<END.chomp, assertion_message {
303
+ a == :b
304
+ | |
305
+ | false
306
+ :a
275
307
  END
276
- assertion_message { BasicObjectSubclass.new.foo }
308
+ a == :b
309
+ }
277
310
 
278
311
 
279
312
  if PowerAssert.respond_to?(:clear_global_method_cache, true)
@@ -289,9 +322,76 @@ END
289
322
  }
290
323
  end
291
324
  end
325
+ end
326
+
327
+ def test_inspection_failure
328
+ assert_match Regexp.new(<<END.chomp.gsub('|', "\\|")),
329
+ assertion_message { BasicObjectSubclass.new.foo }
330
+ | | |
331
+ | | "foo"
332
+ | InspectionFailure: NoMethodError: .*
333
+ TestPowerAssert::BasicObjectSubclass
334
+ END
335
+ assertion_message { BasicObjectSubclass.new.foo }
292
336
 
293
337
 
294
- a = 0
338
+ verbose = $VERBOSE
339
+ default_external = Encoding.default_external
340
+ default_internal = Encoding.default_internal
341
+ begin
342
+ $VERBOSE = nil
343
+ Encoding.default_external = 'cp932'
344
+ Encoding.default_internal = 'utf-8'
345
+ ary = ["\u3042"]
346
+ assert_match Regexp.new(<<END.chomp), assertion_message {
347
+ ary.length
348
+ | |
349
+ | 1
350
+ InspectionFailure: Encoding::CompatibilityError: .*
351
+ END
352
+ ary.length
353
+ }
354
+ ensure
355
+ Encoding.default_internal = default_internal
356
+ Encoding.default_external = default_external
357
+ $VERBOSE = verbose
358
+ end
359
+ end
360
+
361
+ def test_assertion_message_with_incompatible_encodings
362
+ if Encoding.default_external == Encoding::UTF_8
363
+ a = "\u3042"
364
+ def a.inspect
365
+ super.encode('utf-16le')
366
+ end
367
+ assert_equal <<END.chomp, assertion_message {
368
+ a + a
369
+ | | |
370
+ | | "\u3042"(UTF-16LE)
371
+ | "\u3042\u3042"
372
+ "\u3042"(UTF-16LE)
373
+ END
374
+ a + a
375
+ }
376
+ end
377
+
378
+
379
+ a = "\xFF"
380
+ def a.inspect
381
+ "\xFF".force_encoding('ascii-8bit')
382
+ end
383
+ assert_equal <<END.chomp.b, assertion_message {
384
+ a.length
385
+ | |
386
+ | 1
387
+ \xFF
388
+ END
389
+ a.length
390
+ }.b
391
+ end
392
+
393
+ def test_assertion_message_with_string
394
+ a, = 0, a # suppress "assigned but unused variable" warning
295
395
  @b = 1
296
396
  @@c = 2
297
397
  $d = 3
@@ -313,36 +413,4 @@ END
313
413
  String(a) + String(@b) + String(@@c) + String($d)
314
414
  END
315
415
  end
316
-
317
- def test_lazy_inspection
318
- PowerAssert.configure do |c|
319
- assert !c.lazy_inspection
320
- end
321
- assert_equal <<END.chomp, assertion_message {
322
- 'a'.sub(/./, 'b').sub!(/./, 'c')
323
- | |
324
- | "c"
325
- "b"
326
- END
327
- 'a'.sub(/./, 'b').sub!(/./, 'c')
328
- }
329
-
330
- PowerAssert.configure do |c|
331
- c.lazy_inspection = true
332
- end
333
- begin
334
- assert_equal <<END.chomp, assertion_message {
335
- 'a'.sub(/./, 'b').sub!(/./, 'c')
336
- | |
337
- | "c"
338
- "c"
339
- END
340
- 'a'.sub(/./, 'b').sub!(/./, 'c')
341
- }
342
- ensure
343
- PowerAssert.configure do |c|
344
- c.lazy_inspection = false
345
- end
346
- end
347
- end
348
416
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: power_assert
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazuki Tsujimoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-08 00:00:00.000000000 Z
11
+ date: 2014-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: test-unit
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  version: '0'
98
98
  requirements: []
99
99
  rubyforge_project:
100
- rubygems_version: 2.4.2
100
+ rubygems_version: 2.2.2
101
101
  signing_key:
102
102
  specification_version: 4
103
103
  summary: Power Assert for Ruby