rspec-given 3.0.0.beta.3 → 3.0.0.beta.4

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: 526253bf084bd3ed7a442a2dc8a2e5049f62dc76
4
- data.tar.gz: 5bcbfbda442a3588713463696a3ac9994de455f9
3
+ metadata.gz: 5ca5bc4ebba5ec0c35f8d71a594441d748f8a7d4
4
+ data.tar.gz: a70613b7f9b6dacdbab6c5b9bd88e1d73d7d07e8
5
5
  SHA512:
6
- metadata.gz: 73e39a4a291dff30c8692cb19dca897acbb7cdcf02ef2b363948bc864d4b3d8bcea29cfb1bd3aa7df760700dc89f9637877b42cf95643d32c7fdcacb9dae399b
7
- data.tar.gz: c33ee265c7a6f7c7ce6325607b836cad9d87766ff6801c55b2933587b6efcc298a2a6b8152df41986a0b28fee39c7561da8fe71cb270f121225697650b952701
6
+ metadata.gz: 09fe70ee6a76b187e6f3aa583bc5bb02faac92571ef7ae80ecfcf7c018b12f89b10f7c18508e01d4425ab888b9ead56abf5644b1ca2d967c6cc01860e82b1762
7
+ data.tar.gz: 1311f64f6f5db5514281cd43540053bb6b0e28554bf95489b56f96b0bc74271e09bbea217277dbf54a13d9b426e1d3b1cf60a0c9a4013f8847da43582081d6b0
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # rspec-given
1
+ # Given/When/Then for RSpec and Minitest
2
2
 
3
3
  | Master |
4
4
  | :----: |
@@ -28,7 +28,7 @@ The rspec-given gem is the original given/when/then extension for
28
28
  RSpec. It now depends on a given_core gem for the basic functionality
29
29
  and then adds the RSpec specific code.
30
30
 
31
- * rspec-given now require RSpec version 2.12 or better.
31
+ * rspec-given now requires RSpec version 2.12 or better.
32
32
 
33
33
  ### Minitest/Given
34
34
 
@@ -58,7 +58,7 @@ things to watch out for:
58
58
 
59
59
  ### Auto Selecting
60
60
 
61
- If you exclusively use natural assertions in your specs, it's quite
61
+ If you use natural assertions exclusively in your specs, it's quite
62
62
  possible to write specs that run under both RSpec and Minitest::Spec.
63
63
 
64
64
  Use this at the start of your spec file:
@@ -94,22 +94,22 @@ describe Stack do
94
94
  end
95
95
 
96
96
  Given(:stack) { stack_with(initial_contents) }
97
- Invariant { stack.empty?.should == (stack.depth == 0) }
97
+ Invariant { stack.empty? == (stack.depth == 0) }
98
98
 
99
99
  context "with no items" do
100
100
  Given(:initial_contents) { [] }
101
- Then { stack.depth.should == 0 }
101
+ Then { stack.depth == 0 }
102
102
 
103
103
  context "when pushing" do
104
104
  When { stack.push(:an_item) }
105
105
 
106
- Then { stack.depth.should == 1 }
107
- Then { stack.top.should == :an_item }
106
+ Then { stack.depth == 1 }
107
+ Then { stack.top == :an_item }
108
108
  end
109
109
 
110
110
  context "when popping" do
111
111
  When(:result) { stack.pop }
112
- Then { result.should have_failed(Stack::UnderflowError, /empty/) }
112
+ Then { result == Failure(Stack::UnderflowError, /empty/) }
113
113
  end
114
114
  end
115
115
 
@@ -119,8 +119,8 @@ describe Stack do
119
119
  context "when popping" do
120
120
  When(:pop_result) { stack.pop }
121
121
 
122
- Then { pop_result.should == :an_item }
123
- Then { stack.depth.should == 0 }
122
+ Then { pop_result == :an_item }
123
+ Then { stack.depth == 0 }
124
124
  end
125
125
  end
126
126
 
@@ -131,16 +131,16 @@ describe Stack do
131
131
  context "when pushing" do
132
132
  When { stack.push(:new_item) }
133
133
 
134
- Then { stack.top.should == :new_item }
135
- Then { stack.depth.should == original_depth + 1 }
134
+ Then { stack.top == :new_item }
135
+ Then { stack.depth == original_depth + 1 }
136
136
  end
137
137
 
138
138
  context "when popping" do
139
139
  When(:pop_result) { stack.pop }
140
140
 
141
- Then { pop_result.should == :top_item }
142
- Then { stack.top.should == :second_item }
143
- Then { stack.depth.should == original_depth - 1 }
141
+ Then { pop_result == :top_item }
142
+ Then { stack.top == :second_item }
143
+ Then { stack.depth == original_depth - 1 }
144
144
  end
145
145
  end
146
146
  end
@@ -307,7 +307,7 @@ should use an empty _Then_ clause, like this:
307
307
  #### Then examples:
308
308
 
309
309
  ```ruby
310
- Then { stack.should be_empty }
310
+ Then { stack.empty? }
311
311
  ```
312
312
 
313
313
  After the related block for the _When_ clause is run, the stack should
@@ -354,9 +354,9 @@ stick with _Then_ clauses.
354
354
  #### Then/And examples:
355
355
 
356
356
  ```ruby
357
- Then { pop_result.should == :top_item } # Required
358
- And { stack.top.should == :second_item } # No Setup rerun
359
- And { stack.depth.should == original_depth - 1 } # ... for these
357
+ Then { pop_result == :top_item } # Required
358
+ And { stack.top == :second_item } # No Setup rerun
359
+ And { stack.depth == original_depth - 1 } # ... for these
360
360
  ```
361
361
 
362
362
  ### Invariant
@@ -420,29 +420,56 @@ clauses and _before_ blocks.
420
420
 
421
421
  ## Natural Assertions
422
422
 
423
- **NOTE:** <em>Natural assertions are currently an experimental feature
424
- of RSpec/Given. They are currently disabled by default, but can be
425
- enabled by a simple configuration option (see "use_natural_assertions"
426
- below).</em>
427
-
428
423
  RSpec/Given now supports the use of "natural assertions" in _Then_,
429
424
  _And_, and _Invariant_ blocks. Natural assertions are just Ruby
430
425
  conditionals, without the _should_ or _expect_ methods that RSpec
431
- provides. Here are the Then/And examples from above, but written using
432
- natural assertions:
426
+ provides. Here are the Then/And examples showing natural assertions:
427
+
428
+ ### Using Natural Assertions
429
+
430
+ ```ruby
431
+ Then { stack.top == :second_item }
432
+ Then { stack.depth == original_depth - 1 }
433
+ Then { result == Failure(Stack::UnderflowError, /empty/) }
434
+ ```
435
+
436
+ ### Using RSpec expect().to
433
437
 
434
438
  ```ruby
435
- Then { pop_result == :top_item }
436
- And { stack.top == :second_item }
437
- And { stack.depth == original_depth - 1 }
439
+ Then { expect(stack.top).to eq(:second_item) }
440
+ Then { expect(stack.depth).to eq(original_depth - 1) }
441
+ Then { expect(result).to have_failed(Stack::UnderflowError, /empty/) }
438
442
  ```
439
443
 
440
- Natural assertions must be enabled, either globally or on a per
441
- context basis, to be recognized.
444
+ ### Using Minitest asserts
442
445
 
443
- Here's a heads up: If you use natural assertions, but fail to enable
444
- them, all your specs will mysteriously pass. This is why the **red**
445
- part of _Red/Green/Refactor_ is so important.
446
+ ```ruby
447
+ Then { assert_equal :second_item, stack.top }
448
+ Then { assert_equal original_depth - 1, stack.depth }
449
+ Then {
450
+ assert_raises(Stack::UnderflowError, /empty/) do
451
+ result.call()
452
+ end
453
+ }
454
+ ```
455
+
456
+ ### Using Minitest expectations
457
+
458
+ ```ruby
459
+ Then { stack.top.must_equal :second_item }
460
+ Then { stack.depth.must_equal original_depth - 1}
461
+ Then { result.must_raise(Stack::UnderflowError, /empty/) }
462
+ ```
463
+
464
+ ### Disabling Natural Assertions
465
+
466
+ Natural assertions may be disabled, either globally or on a per
467
+ context basis. See the **configuration** section below to see how to
468
+ disable natural assertions project wide.
469
+
470
+ Here's a heads up: If you use natural assertions, but configure Given
471
+ to disable them, then all your specs will mysteriously pass. This is
472
+ why the **red** part of _Red/Green/Refactor_ is so important.
446
473
 
447
474
  ### Failure Messages with Natural Assertions
448
475
 
@@ -552,19 +579,18 @@ problems with And clauses.
552
579
 
553
580
  ### Mixing Natural Assertions and RSpec Assertions
554
581
 
555
- Natural assertions and RSpec assertions for the most part can be
556
- intermixed in a single test suite, even within a single context.
557
- Because there are a few corner cases that might cause problems, they
558
- must be explicitly enabled before they will be considered.
559
-
560
- To enable natural assertions in a context, call the
561
- _use_natural_assertions_ method in that context. For example:
582
+ Natural assertions, RSpec should assertions and Minitest assertions
583
+ can be intermixed in a single test suite, even within a single
584
+ context.
562
585
 
563
586
  ```ruby
564
587
  context "Outer" do
565
- use_natural_assertions
566
-
567
588
  context "Inner" do
589
+ Then { a == b } # Natural Assertions
590
+ Then { a.should == b } # RSpec style
591
+ Then { expect(a).to eq(b) } # RSpec style
592
+ Then { assert_equal b, a } # Minitest style
593
+ Then { a.must_equal b } # Minitest style
568
594
  end
569
595
 
570
596
  context "Disabled" do
@@ -577,7 +603,7 @@ Both the _Outer_ and _Inner_ contexts will use natural assertions. The
577
603
  _Disabled_ context overrides the setting inherited from _Outer_ and
578
604
  will not process natural assertions.
579
605
 
580
- See the **configuration** section below to see how to enable natural
606
+ See the **configuration** section below to see how to disable natural
581
607
  assertions project wide.
582
608
 
583
609
  ### Matchers and Natural Assertions
@@ -622,7 +648,7 @@ There are several ways of creating fuzzy numbers:
622
648
 
623
649
  * <code>about(n)</code> -- Same as <code>about(n).epsilon(10)</code>.
624
650
 
625
- When the file <code>rspec/given/fuzzy_shortcuts</code> is required,
651
+ When the file <code>given/fuzzy_shortcuts</code> is required,
626
652
  the following unicode shortcut methods are added to Numeric to create
627
653
  fuzzy numbers.
628
654
 
@@ -648,7 +674,7 @@ For example, the following two Then clauses are equivalent:
648
674
  Then { result.should have_failed(StandardError, /message/) }
649
675
 
650
676
  # Using natural assertions
651
- Then { result == have_failed(StandardError, /message/) }
677
+ Then { result == Failure(StandardError, /message/) }
652
678
  ```
653
679
 
654
680
  ### Processing Natural Assertions
@@ -662,7 +688,9 @@ following are true:
662
688
  1. The block returns false (blocks that return true pass the
663
689
  assertion and don't need a failure message).
664
690
 
665
- 1. The block does not use RSpec's _should_ or _expect_ methods.
691
+ 1. The block does not use the native frameworks assertions or
692
+ expectations (e.g. RSpec's _should_ or _expect_ methods, or
693
+ Minitest's _assert\_xxx_ or _must\_xxx_ methods).
666
694
 
667
695
  Detecting that last point (the use of _should_ and _expect_) is done
668
696
  by modifying the RSpec runtime to report uses of _should_ and
@@ -672,11 +700,11 @@ _expect_.
672
700
 
673
701
  Natural assertions use the Ripper library to parse the failing
674
702
  condition and find all the sub-expression values upon a failure.
675
- Currently Ripper is not supported on JRuby 1.7.2. Charles Nutter has
676
- said that Ripper support is coming soon and may arrive as early as
677
- version 1.7.3. Until then, natural assertions are disabled when
678
- running under JRuby. Never fear, JRuby supports all the other features
679
- of rspec-given and will work just fine.
703
+ Currently Ripper is not fully supported on JRuby 1.7.4. Charles Nutter
704
+ has said that Ripper support is coming soon and may arrive soon. Until
705
+ then, natural assertions are disabled when running under JRuby. Never
706
+ fear, JRuby supports all the other features of rspec-given and will
707
+ work just fine.
680
708
 
681
709
  ### Further Reading
682
710
 
@@ -697,7 +725,7 @@ the pretty output and wish to disable source code caching
697
725
  unconditionally, then add the following line to your spec helper file:
698
726
 
699
727
  ```ruby
700
- RSpec::Given.source_caching_disabled = true
728
+ Given.source_caching_disabled = true
701
729
  ```
702
730
 
703
731
  Natural assertions are disabled by default. To globally configure
@@ -714,8 +742,8 @@ file:
714
742
 
715
743
  # License
716
744
 
717
- RSpec-Given is available under the MIT License. See the MIT-LICENSE
718
- file in the source distribution.
745
+ rspec-given, minitest-given and given_core are available under the MIT
746
+ License. See the MIT-LICENSE file in the source distribution.
719
747
 
720
748
  # History
721
749
 
data/Rakefile CHANGED
@@ -57,8 +57,11 @@ end
57
57
 
58
58
  EXAMPLES = FileList['examples/**/*_spec.rb'].
59
59
  exclude('examples/failing/*.rb').
60
+ exclude('examples/minitest/*.rb').
60
61
  exclude('examples/integration/failing/*.rb')
61
62
 
63
+ MT_EXAMPLES = FileList['examples/minitest/**/*_spec.rb']
64
+
62
65
  unless Given::NATURAL_ASSERTIONS_SUPPORTED
63
66
  EXAMPLES.exclude("examples/stack/*.rb")
64
67
  end
@@ -80,7 +83,7 @@ end
80
83
  desc "Run the examples in Minitest"
81
84
  task :mt_examples do
82
85
  puts "Running examples (with Minitest)"
83
- sh "ruby -Ilib:examples examples/loader.rb #{EXAMPLES}"
86
+ sh "ruby -Ilib:examples examples/loader.rb #{EXAMPLES} #{MT_EXAMPLES}"
84
87
  end
85
88
 
86
89
  desc "Run failing examples"
data/examples/loader.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  ARGV.each do |fn|
2
- puts "Loading #{fn} ..."
3
2
  load fn
4
3
  end
@@ -0,0 +1,25 @@
1
+ require 'minitest/given'
2
+ require 'minitest/autorun'
3
+
4
+ describe "stacks" do
5
+ context "when it fails" do
6
+ When(:result) { fail StandardError, "Oops" }
7
+
8
+ Then { result.must_raise(StandardError, /oops/i) }
9
+ Then {
10
+ assert_raises(StandardError, /oops/i) do
11
+ result.die
12
+ end
13
+ }
14
+ Then { result == Failure() }
15
+ Then { result == Failure(StandardError) }
16
+ end
17
+
18
+ context "when it does not fail" do
19
+ When(:result) { :ok }
20
+
21
+ Then { result != Failure() }
22
+ Then { result != Failure(StandardError) }
23
+ end
24
+
25
+ end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Environmental Access" do
4
+ use_natural_assertions false
4
5
  X = 1
5
6
  Given(:a) { 2 }
6
7
  FauxThen { X + a }
@@ -14,6 +15,7 @@ end
14
15
  module Nested
15
16
  X = 1
16
17
  describe "Environmental Access with Nested modules" do
18
+ use_natural_assertions false
17
19
  Given(:a) { 2 }
18
20
  FauxThen { X + a }
19
21
  Then { block_result.should == 3 }
@@ -24,6 +26,7 @@ module Nested
24
26
  end
25
27
 
26
28
  describe "Evaluator with error object" do
29
+ use_natural_assertions false
27
30
  FauxThen { 1 }
28
31
  When(:result) { ev.eval_string("fail 'XYZ'") }
29
32
  Then { result.class.should == Given::EvalErr }
@@ -8,6 +8,8 @@ module FailureMatcherSpec
8
8
  NotMetError = RSpec::Expectations::ExpectationNotMetError
9
9
 
10
10
  describe Given::FailureMatcher do
11
+ use_natural_assertions_if_supported
12
+
11
13
  Given(:error) { CustomError.new("CUSTOM") }
12
14
 
13
15
  Given(:failure_result) { Given::Failure.new(error) }
@@ -65,13 +67,17 @@ module FailureMatcherSpec
65
67
  end
66
68
 
67
69
  describe "==" do
68
- Then { failure_result == Failure(CustomError) }
70
+ Then { failure_result == Failure() }
71
+ Then { failure_result == Failure(CustomError) }
72
+ Then { Failure() == failure_result }
69
73
  Then { Failure(CustomError) == failure_result }
70
74
  end
71
75
 
72
76
  describe "!=" do
73
77
  Then { failure_result != Failure(SubError) }
74
- Then { Failure(SubError) == failure_result }
78
+ Then { Failure(SubError) != failure_result }
79
+ Then { Failure() != nil }
80
+ Then { nil != Failure() }
75
81
  end
76
82
  end
77
83
  end
@@ -2,7 +2,8 @@ require 'spec_helper'
2
2
  require 'given/failure'
3
3
 
4
4
  describe Given::Failure do
5
- OtherError = Class.new(StandardError)
5
+ Given(:other_error) { Class.new(StandardError) }
6
+ Given(:custom_error) { Class.new(StandardError) }
6
7
 
7
8
  Given(:exception) { StandardError.new("Oops") }
8
9
  Given(:failure) { Given::Failure.new(exception) }
@@ -26,24 +27,23 @@ describe Given::Failure do
26
27
  end
27
28
 
28
29
  describe "== have_failed" do
30
+ use_natural_assertions_if_supported
29
31
  Then { failure == have_failed(StandardError, "Oops") }
30
32
  Then { failure == have_failed(StandardError) }
31
33
  Then { failure == have_failed }
32
34
  end
33
35
 
34
- describe "!= have_failed" do
35
- Then { failure != have_failed() }
36
- end
37
-
38
36
  describe "== Failure" do
37
+ use_natural_assertions_if_supported
39
38
  Then { failure == Failure(StandardError, "Oops") }
40
39
  Then { failure == Failure(StandardError) }
41
40
  Then { failure == Failure() }
42
41
  end
43
42
 
44
43
  describe "!= Failure" do
44
+ use_natural_assertions_if_supported
45
45
  Then { expect { failure != Object.new }.to raise_error(StandardError) }
46
- Then { failure != Failure() }
46
+ Then { failure != Failure(other_error) }
47
47
  end
48
48
 
49
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-given
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta.3
4
+ version: 3.0.0.beta.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Weirich
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 3.0.0.beta.3
19
+ version: 3.0.0.beta.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 3.0.0.beta.3
26
+ version: 3.0.0.beta.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +91,7 @@ files:
91
91
  - examples/integration/invariant_spec.rb
92
92
  - examples/integration/then_spec.rb
93
93
  - examples/loader.rb
94
+ - examples/minitest/assert_raises_spec.rb
94
95
  - examples/minitest_helper.rb
95
96
  - examples/other/line_example.rb
96
97
  - examples/stack/stack.rb