pork 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0720abd3578e820759c2cec35d565a41e41d6f79
4
- data.tar.gz: 3abb0dc9d216004aa1fa11590fef142671111168
3
+ metadata.gz: 885c569da2496923eeac8a765bb713a38d882e79
4
+ data.tar.gz: 0e9fb16d8d4b9de93177ea86da953639c7500e22
5
5
  SHA512:
6
- metadata.gz: 6387d2c2049e7bbab044bcfba005616e3a236b9f58f2303c06fbd6b47613ee277c8219f098b49671e5011f94c3dab80aa449ffa8effb139da8885a1fc138355f
7
- data.tar.gz: e4e2189fc58eede08bdcf3d65580ef1728474728fce82db3dae57f5ab013b6611b4385b5b16700ab54feba4b97e9cd1ed18470ea05ad633622f78222bdbc09a4
6
+ metadata.gz: 66d37601b58be4a81c6c1e41fa4bde8c55d8a7ac827d43acf18ffae90babac1894dc0cb90c21d3edafb6c042a4c20bd81d1a992267b6655a9e8d92376ca9d819
7
+ data.tar.gz: 68ecfbbf3939cf7adeb1662dbcb826c5845a6e147d1dea0bcc348f1582593c8e01e43bda5fd20423446b47865b3a6720d21b21a1c549f5cf8b91fe534ddb2c75
data/.travis.yml CHANGED
@@ -1,9 +1,11 @@
1
- before_install: 'git submodule update --init'
2
- script: 'ruby -r bundler/setup -S rake test'
3
1
 
2
+ language: ruby
4
3
  rvm:
5
4
  - 1.9.3
6
5
  - 2.0.0
7
6
  - ruby
8
7
  - rbx-2
9
8
  - jruby
9
+
10
+ script: 'ruby -r bundler/setup -S rake test'
11
+ sudo: false
data/CHANGES.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # CHANGES
2
2
 
3
+ ## Pork 0.9.1 -- 2014-07-14
4
+
5
+ ### Bugs fixed
6
+
7
+ * It would now properly `exit(1)` when there's an error.
8
+ * It would now properly search the stashes chain upon `paste`.
9
+
10
+
11
+ ### Enhancement
12
+
13
+ * `Kernel#should` now accepts a second argument for building messages lazily.
14
+ * `Should#satisfy` now accepts a second argument for building messages lazily.
15
+ * Introduced `Pork.inspect_failure_mode` to switch failure display mode.
16
+ * Default `Pork.inspect_failure_mode` to `:auto`, which would display failures
17
+ accordingly.
18
+
3
19
  ## Pork 0.9.0 -- 2014-07-11
4
20
 
5
21
  * First serious release! Bunch of updates. Nearly complete.
data/README.md CHANGED
@@ -274,6 +274,196 @@ end
274
274
 
275
275
  ## The API
276
276
 
277
+ ### Kernel#should
278
+
279
+ All the assertions begin with `should`. Whenever we called `should` on an
280
+ object, it would create an `Pork::Should` object which would verify the
281
+ assertion we make. For the simplest case, this verifies if `1 == 1`:
282
+
283
+ ``` ruby
284
+ require 'pork/auto'
285
+
286
+ would{ 1.should.eq 1 }
287
+ ```
288
+
289
+ Sometimes we would also want to have a customized message if the assertion
290
+ failed, as in `assert_equal 1, 1, 'the message'`, we pass the message as the
291
+ first argument to should.
292
+
293
+ ``` ruby
294
+ require 'pork/auto'
295
+
296
+ would{ 1.should('verify one equals to one').eq 1 }
297
+ ```
298
+
299
+ In a rare case, constructing the message could be expensive, so we might not
300
+ want to build the message if the assertion passed. Then we pass the second
301
+ argument as the constructor of the message.
302
+
303
+ ``` ruby
304
+ require 'pork/auto'
305
+
306
+ would{ 1.should(nil, lambda{'verify one equals to one'}).eq 1 }
307
+ ```
308
+
309
+ Other than built in assertions such as `eq`, all methods in the questioning
310
+ object are available. For example, for arrays we could use `empty?`,
311
+ `include?` and `[]`.
312
+
313
+ ``` ruby
314
+ describe Array do
315
+ would 'have array methods as verifiers' do
316
+ [ ].should.empty?
317
+ [1].should.include? 1
318
+ [1].should[0]
319
+ end
320
+ end
321
+ ```
322
+
323
+ The assertions would only fail whenever the result was `false` or `nil`,
324
+ otherwise pass.
325
+
326
+ ### Pork::Should#satisfy
327
+
328
+ If we want to have custom verifier other than the methods from questioning
329
+ object, this is it.
330
+
331
+ ``` ruby
332
+ require 'pork/auto'
333
+
334
+ describe do
335
+ divided_by_2 = lambda{ |n| n % 2 == 0 }
336
+
337
+ would do
338
+ 2.should.satisfy(&divided_by_2)
339
+ end
340
+ end
341
+ ```
342
+
343
+ The message argument applies to `should` also applies to `satisfy`.
344
+
345
+ ``` ruby
346
+ require 'pork/auto'
347
+
348
+ describe do
349
+ divided_by_2 = lambda{ |n| n % 2 == 0 }
350
+
351
+ would do
352
+ 2.should.satisfy('be divided by two', &divided_by_2)
353
+ 2.should.satisfy(nil, lambda{'be divided by two'}, &divided_by_2)
354
+ end
355
+ end
356
+ ```
357
+
358
+ ### Pork::Should#not
359
+
360
+ An easy way to negate the expectation.
361
+
362
+ ``` ruby
363
+ require 'pork/auto'
364
+
365
+ would{ 1.should.not.eq 2 }
366
+ ```
367
+
368
+ ### Pork::Should#eq
369
+
370
+ To avoid warnings from Ruby, using `eq` instead of `==`. It's fine if you
371
+ still prefer using `==` if you don't care about warnings.
372
+
373
+ ``` ruby
374
+ require 'pork/auto'
375
+
376
+ would{ 1.should.eq 1 }
377
+ ```
378
+
379
+ ### Pork::Should#lt
380
+
381
+ To avoid warnings from Ruby, using `lt` instead of `<`. It's fine if you
382
+ still prefer using `<` if you don't care about warnings.
383
+
384
+ ``` ruby
385
+ require 'pork/auto'
386
+
387
+ would{ 1.should.lt 2 }
388
+ ```
389
+
390
+ ### Pork::Should#gt
391
+
392
+ To avoid warnings from Ruby, using `gt` instead of `>`. It's fine if you
393
+ still prefer using `>` if you don't care about warnings.
394
+
395
+ ``` ruby
396
+ require 'pork/auto'
397
+
398
+ would{ 1.should.gt 0 }
399
+ ```
400
+
401
+ ### Pork::Should#lte
402
+
403
+ To avoid warnings from Ruby, using `lte` instead of `<=`. It's fine if you
404
+ still prefer using `<=` if you don't care about warnings.
405
+
406
+ ``` ruby
407
+ require 'pork/auto'
408
+
409
+ would{ 1.should.lte 1 }
410
+ ```
411
+
412
+ ### Pork::Should#gte
413
+
414
+ To avoid warnings from Ruby, using `gte` instead of `>=`. It's fine if you
415
+ still prefer using `>=` if you don't care about warnings.
416
+
417
+ ``` ruby
418
+ require 'pork/auto'
419
+
420
+ would{ 1.should.gte 1 }
421
+ ```
422
+
423
+ ### Pork::Should#raise
424
+
425
+ Expect for exceptions! There are two ways to call it. Either you could use
426
+ lambda to wrap the questioning expression, or you could simply pass a block
427
+ as the questioning expression.
428
+
429
+ ``` ruby
430
+ require 'pork/auto'
431
+
432
+ describe 'Pork::Should#raise' do
433
+ would 'check with a block' do
434
+ e = should.raise(RuntimeError){ raise "nnf" }
435
+ e.should.message.include?("nnf")
436
+ end
437
+
438
+ would 'check with a lambda' do
439
+ e = lambda{ raise "nnf" }.should.raise(RuntimeError)
440
+ e.should.message.include?("nnf")
441
+ end
442
+ end
443
+ ```
444
+
445
+ ### Pork::Should#throw
446
+
447
+ Expect for something to be thrown. There are two ways to call it. Either
448
+ you could use lambda to wrap the questioning expression, or you could
449
+ simply pass a block as the questioning expression.
450
+
451
+ ``` ruby
452
+ require 'pork/auto'
453
+
454
+ describe 'Pork::Should#throw' do
455
+ would 'check with a block' do
456
+ e = should.throw(:nnf){ throw :nnf, 0 }
457
+ e.should.eq [:nnf, 0]
458
+ end
459
+
460
+ would 'check with a lambda' do
461
+ e = lambda{ throw :nnf, 1 }.should.throw(:nnf)
462
+ e.should.eq [:nnf, 1]
463
+ end
464
+ end
465
+ ```
466
+
277
467
  ### Pork::API.describe
278
468
 
279
469
  So this creates a test suite which should be containing various test cases
@@ -457,131 +647,6 @@ describe do
457
647
  end
458
648
  ```
459
649
 
460
- ### Pork::Should#satisfy
461
-
462
- If we want to have custom verifier, that is it.
463
-
464
- ``` ruby
465
- require 'pork/auto'
466
-
467
- describe do
468
- divided_by_2 = lambda{ |n| n % 2 == 0 }
469
-
470
- would do
471
- 2.should.satisfy(&divided_by_2)
472
- end
473
- end
474
- ```
475
-
476
- ### Pork::Should#not
477
-
478
- An easy way to negate the expectation.
479
-
480
- ``` ruby
481
- require 'pork/auto'
482
-
483
- would{ 1.should.not.eq 2 }
484
- ```
485
-
486
- ### Pork::Should#eq
487
-
488
- To avoid warnings from Ruby, using `eq` instead of `==`. It's fine if you
489
- still prefer using `==` if you don't care about warnings.
490
-
491
- ``` ruby
492
- require 'pork/auto'
493
-
494
- would{ 1.should.eq 1 }
495
- ```
496
-
497
- ### Pork::Should#lt
498
-
499
- To avoid warnings from Ruby, using `lt` instead of `<`. It's fine if you
500
- still prefer using `<` if you don't care about warnings.
501
-
502
- ``` ruby
503
- require 'pork/auto'
504
-
505
- would{ 1.should.lt 2 }
506
- ```
507
-
508
- ### Pork::Should#gt
509
-
510
- To avoid warnings from Ruby, using `gt` instead of `>`. It's fine if you
511
- still prefer using `>` if you don't care about warnings.
512
-
513
- ``` ruby
514
- require 'pork/auto'
515
-
516
- would{ 1.should.gt 0 }
517
- ```
518
-
519
- ### Pork::Should#lte
520
-
521
- To avoid warnings from Ruby, using `lte` instead of `<=`. It's fine if you
522
- still prefer using `<=` if you don't care about warnings.
523
-
524
- ``` ruby
525
- require 'pork/auto'
526
-
527
- would{ 1.should.lte 1 }
528
- ```
529
-
530
- ### Pork::Should#gte
531
-
532
- To avoid warnings from Ruby, using `gte` instead of `>=`. It's fine if you
533
- still prefer using `>=` if you don't care about warnings.
534
-
535
- ``` ruby
536
- require 'pork/auto'
537
-
538
- would{ 1.should.gte 1 }
539
- ```
540
-
541
- ### Pork::Should#raise
542
-
543
- Expect for exceptions! There are two ways to call it. Either you could use
544
- lambda to wrap the questioning expression, or you could simply pass a block
545
- as the questioning expression.
546
-
547
- ``` ruby
548
- require 'pork/auto'
549
-
550
- describe 'Pork::Should#raise' do
551
- would 'check with a block' do
552
- e = should.raise(RuntimeError){ raise "nnf" }
553
- e.should.message.include?("nnf")
554
- end
555
-
556
- would 'check with a lambda' do
557
- e = lambda{ raise "nnf" }.should.raise(RuntimeError)
558
- e.should.message.include?("nnf")
559
- end
560
- end
561
- ```
562
-
563
- ### Pork::Should#throw
564
-
565
- Expect for something to be thrown. There are two ways to call it. Either
566
- you could use lambda to wrap the questioning expression, or you could
567
- simply pass a block as the questioning expression.
568
-
569
- ``` ruby
570
- require 'pork/auto'
571
-
572
- describe 'Pork::Should#throw' do
573
- would 'check with a block' do
574
- e = should.throw(:nnf){ throw :nnf, 0 }
575
- e.should.eq [:nnf, 0]
576
- end
577
-
578
- would 'check with a lambda' do
579
- e = lambda{ throw :nnf, 1 }.should.throw(:nnf)
580
- e.should.eq [:nnf, 1]
581
- end
582
- end
583
- ```
584
-
585
650
  ### Pork.report
586
651
 
587
652
  Report the summary from the tests. Usually you would want to call this at
@@ -606,9 +671,38 @@ extend Pork::API
606
671
  Pork.report_at_exit
607
672
  ```
608
673
 
674
+ ### Pork.inspect_failure_mode
675
+
676
+ By default, `Pork.inspect_failure_mode` is set to `:auto`, which would
677
+ display failures accordingly. For example, if the message is short, it would
678
+ simply show the message. But if the message is long, it would try to insert
679
+ a newline between actual result and expected result, since it would be much
680
+ easier for human to distinguish the difference this way. If the message is
681
+ really long, it would even use `diff` to show the difference.
682
+
683
+ This is because if the actual string is long, it would be quite painful to
684
+ find the actual difference for human without assistance.
685
+
686
+ However, this might not really be desired at times. So we should be able to
687
+ switch between each mode. For now, we have the following modes:
688
+
689
+ * :auto (default)
690
+ * :inline
691
+ * :newline
692
+ * :diff
693
+
694
+ If we want to force to a specific mode, here's how we would do:
695
+
696
+ ``` ruby
697
+ Pork.inspect_failure_mode :newline
698
+ ```
699
+
700
+ Then it would always use the mode we specified.
701
+
609
702
  ## CONTRIBUTORS:
610
703
 
611
704
  * Lin Jen-Shin (@godfat)
705
+ * Josh Kalderimis (@joshk)
612
706
 
613
707
  ## LICENSE:
614
708
 
data/lib/pork.rb CHANGED
@@ -2,8 +2,8 @@
2
2
  require 'thread'
3
3
 
4
4
  module Kernel
5
- def should message=nil, &checker
6
- Pork::Should.new(self, message, &checker)
5
+ def should message=nil, message_lazy=nil, &checker
6
+ Pork::Should.new(self, message, message_lazy, &checker)
7
7
  end
8
8
  end
9
9
 
@@ -19,7 +19,55 @@ module Pork
19
19
  Pork.stats.start
20
20
  @report_at_exit ||= at_exit do
21
21
  stats.report
22
- exit stats.failures.size + stats.errors.size
22
+ exit stats.failures.size + stats.errors.size + ($! && 1).to_i
23
+ end
24
+ end
25
+ # default to :auto while eliminating warnings for uninitialized ivar
26
+ def self.inspect_failure_mode mode=nil; @mode = mode || @mode ||= :auto; end
27
+ def self.inspect_failure *args
28
+ lambda{ public_send("inspect_failure_#{inspect_failure_mode}", *args) }
29
+ end
30
+
31
+ def self.inspect_failure_auto object, msg, args, negate
32
+ if args.size > 1
33
+ inspect_failure_inline(object, msg, args, negate)
34
+ elsif object.kind_of?(Hash) && args.first.kind_of?(Hash)
35
+ inspect_failure_inline(Hash[object.sort], msg,
36
+ [Hash[args.first.sort]], negate)
37
+ elsif object.kind_of?(String) && object.size > 400 &&
38
+ object.count("\n") > 4 && !`which diff`.empty?
39
+ inspect_failure_diff(object, msg, args, negate)
40
+ else
41
+ ins = object.inspect
42
+ if ins.size > 78
43
+ inspect_failure_newline(object, msg, args, negate)
44
+ else
45
+ inspect_failure_inline( object, msg, args, negate)
46
+ end
47
+ end
48
+ end
49
+
50
+ def self.inspect_failure_inline object, msg, args, negate
51
+ a = args.map(&:inspect).join(', ')
52
+ "#{object.inspect}.#{msg}(#{a}) to return #{!negate}"
53
+ end
54
+
55
+ def self.inspect_failure_newline object, msg, args, negate
56
+ a = args.map(&:inspect).join(",\n")
57
+ "\n#{object.inspect}.#{msg}(\n#{a}) to return #{!negate}"
58
+ end
59
+
60
+ def self.inspect_failure_diff object, msg, args, negate
61
+ require 'tempfile'
62
+ Tempfile.open('pork-expect') do |expect|
63
+ Tempfile.open('pork-was') do |was|
64
+ expect.puts(object.to_s)
65
+ expect.close
66
+ was.puts(args.map(&:to_s).join(",\n"))
67
+ was.close
68
+ name = "#{object.class}##{msg}(\n"
69
+ "#{name}#{`diff #{expect.path} #{was.path}`}) to return #{!negate}"
70
+ end
23
71
  end
24
72
  end
25
73
 
@@ -46,8 +94,7 @@ module Pork
46
94
  end
47
95
  def copy desc=:default, &suite; stash[desc] = suite; end
48
96
  def paste desc=:default, *args
49
- stashes = [self, super_executor].compact.map(&:stash)
50
- module_exec(*args, &stashes.find{ |s| s[desc] }[desc])
97
+ module_exec(*args, &search_stash(desc))
51
98
  end
52
99
  def would desc=:default, &test
53
100
  assertions = Pork.stats.assertions
@@ -74,21 +121,22 @@ module Pork
74
121
  end
75
122
 
76
123
  protected
77
- def init desc=''
78
- @desc, @before, @after, @stash = desc, [], [], {}
79
- end
124
+ def init desc=''; @desc, @before, @after, @stash = desc, [], [], {}; end
80
125
  def super_executor
81
126
  @super_executor ||= ancestors[1..-1].find{ |a| a <= Executor }
82
127
  end
128
+ def search_stash desc
129
+ stash[desc] or super_executor && super_executor.search_stash(desc)
130
+ end
83
131
  def description_for name=''
84
132
  "#{desc}#{super_executor && super_executor.description_for}#{name}"
85
133
  end
86
134
  def run_before context
87
- super_executor.run_before(context) if super_executor
135
+ super_executor && super_executor.run_before(context)
88
136
  before.each{ |b| context.instance_eval(&b) }
89
137
  end
90
138
  def run_after context
91
- super_executor.run_after(context) if super_executor
139
+ super_executor && super_executor.run_after(context)
92
140
  after.each{ |b| context.instance_eval(&b) }
93
141
  end
94
142
  end
@@ -101,58 +149,26 @@ module Pork
101
149
  def ok ; Pork.stats.incr_assertions ; end
102
150
  end
103
151
 
104
- module InspectInlineError
105
- def inspect_error object, msg, args, negate
106
- a = args.map(&:inspect).join(', ')
107
- "#{object.inspect}.#{msg}(#{a}) to return #{!negate}"
108
- end
109
- end
110
-
111
- module InspectNewlineError
112
- def inspect_error object, msg, args, negate
113
- a = args.map(&:inspect).join(', ')
114
- "\n#{object.inspect}.#{msg}(\n#{a}) to return #{!negate}"
115
- end
116
- end
117
-
118
- module InspectDiffError
119
- def inspect_error object, msg, args, negate
120
- ::Kernel.require 'tempfile'
121
- ::Tempfile.open('pork-expect') do |expect|
122
- ::Tempfile.open('pork-was') do |was|
123
- expect.puts(object.to_s)
124
- expect.close
125
- was.puts(args.map(&:to_s).join(",\n"))
126
- was.close
127
- name = "#{object.class}##{msg}(\n"
128
- diff = ::Kernel.__send__(:`, "diff #{expect.path} #{was.path}")
129
- "#{name}#{diff}) to return #{!negate}"
130
- end
131
- end
132
- end
133
- end
134
-
135
152
  class Should < BasicObject
136
153
  instance_methods.each{ |m| undef_method(m) unless m =~ /^__|^object_id$/ }
137
- include ::Pork::InspectInlineError
138
-
139
- def initialize object, message, &checker
140
- @object = object
141
- @negate = false
142
- @message = message
154
+ def initialize object, message=nil, message_lazy=nil, &checker
155
+ @object, @negate = object, false
156
+ @message, @message_lazy = message, message_lazy
143
157
  satisfy(&checker) if checker
144
158
  end
145
159
 
146
160
  def method_missing msg, *args, &block
147
- satisfy(inspect_error(@object, msg, args, @negate)) do
161
+ satisfy(nil, ::Pork.inspect_failure(@object, msg, args, @negate)) do
148
162
  @object.public_send(msg, *args, &block)
149
163
  end
150
164
  end
151
165
 
152
- def satisfy desc=@object
166
+ def satisfy desc=@object, desc_lazy=nil
153
167
  result = yield(@object)
154
168
  if !!result == @negate
155
- ::Kernel.raise Failure.new("Expect #{desc}\n#{@message}".chomp)
169
+ d = desc_lazy && desc_lazy.call || desc
170
+ m = @message_lazy && @message_lazy.call || @message
171
+ ::Kernel.raise Failure.new("Expect #{d}\n#{m}".chomp)
156
172
  else
157
173
  ::Pork.stats.incr_assertions
158
174
  end
@@ -195,13 +211,7 @@ module Pork
195
211
  end
196
212
 
197
213
  private
198
- def __not__
199
- if @negate == true
200
- 'not '
201
- else
202
- ''
203
- end
204
- end
214
+ def __not__; if @negate == true then 'not ' else '' end; end
205
215
  end
206
216
 
207
217
  class Stats < Struct.new(:tests, :assertions, :skips, :failures, :errors)
@@ -214,12 +224,8 @@ module Pork
214
224
  def incr_skips ; @mutex.synchronize{ self.skips += 1; print('s')}; end
215
225
  def add_failure *e ; @mutex.synchronize{ failures << e; print('F')}; end
216
226
  def add_error *e ; @mutex.synchronize{ errors << e; print('E')}; end
217
- def numbers
218
- [tests, assertions, failures.size, errors.size, skips]
219
- end
220
- def start
221
- @start ||= Time.now
222
- end
227
+ def numbers; [tests, assertions, failures.size, errors.size, skips]; end
228
+ def start ; @start ||= Time.now ; end
223
229
  def report
224
230
  puts
225
231
  puts (failures + errors).map{ |(e, m)|
data/lib/pork/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Pork
3
- VERSION = '0.9.0'
3
+ VERSION = '0.9.1'
4
4
  end
data/pork.gemspec CHANGED
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: pork 0.9.0 ruby lib
2
+ # stub: pork 0.9.1 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "pork"
6
- s.version = "0.9.0"
6
+ s.version = "0.9.1"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib"]
10
10
  s.authors = ["Lin Jen-Shin (godfat)"]
11
- s.date = "2014-07-11"
11
+ s.date = "2014-07-14"
12
12
  s.description = "Pork -- Simple and clean and modular testing library.\n\n[Bacon][] reimplemented around 250 lines of code.\n\n[Bacon]: https://github.com/chneukirchen/bacon"
13
13
  s.email = ["godfat (XD) godfat.org"]
14
14
  s.files = [
data/test/test_bacon.rb CHANGED
@@ -304,7 +304,7 @@ describe "shared/behaves_like" do
304
304
  would "raise NameError when the context is not found" do
305
305
  lambda {
306
306
  ctx.paste "whoops"
307
- }.should.raise NameError
307
+ }.should.raise LocalJumpError
308
308
  end
309
309
 
310
310
  paste "a shared context"
data/test/test_nested.rb CHANGED
@@ -44,6 +44,10 @@ describe 'A' do
44
44
  would do
45
45
  t.should.eq true
46
46
  end
47
+
48
+ describe 'C' do
49
+ paste
50
+ end
47
51
  end
48
52
 
49
53
  would 'skip' do
@@ -55,3 +59,37 @@ end
55
59
  would 'also work on top-level' do
56
60
  true.should.eq true
57
61
  end
62
+
63
+ describe 'Pork.inspect_failure' do
64
+ would 'hash' do
65
+ Pork.inspect_failure_auto(
66
+ {:b => 1, :a => 0}, :==, [{:a => 1, :b => 0}], false).
67
+ should.eq '{:a=>0, :b=>1}.==({:a=>1, :b=>0}) to return true'
68
+ end
69
+
70
+ would 'newline' do
71
+ obj, arg = 'a'*80, 'b'*80
72
+ Pork.inspect_failure_auto(obj, :==, [arg], true).
73
+ should.eq "\n#{obj.inspect}.==(\n#{arg.inspect}) to return false"
74
+ end
75
+
76
+ would 'diff' do
77
+ s = File.read(__FILE__)
78
+ n = s.count("\n")
79
+ Pork.inspect_failure_auto(s, :==, ["#{s}b\n"], true).
80
+ should.eq "String#==(\n#{n}a#{n+1}\n> b\n) to return false"
81
+ end
82
+ end
83
+
84
+ describe 'should(message)' do
85
+ would 'show message' do
86
+ should.raise(Pork::Failure){ should('nnf').satisfy('qoo'){ false } }.
87
+ message.should.eq "Expect qoo\nnnf"
88
+ end
89
+
90
+ would 'show lazy message' do
91
+ should.raise(Pork::Failure) do
92
+ should(nil, lambda{'nnf'}).satisfy(nil, lambda{'qoo'}){ false }
93
+ end.message.should.eq "Expect qoo\nnnf"
94
+ end
95
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pork
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lin Jen-Shin (godfat)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-11 00:00:00.000000000 Z
11
+ date: 2014-07-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Pork -- Simple and clean and modular testing library.