stendhal 0.1.2 → 0.1.3

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stendhal (0.1.0)
4
+ stendhal (0.1.2)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/Readme.md CHANGED
@@ -8,12 +8,16 @@ development.
8
8
 
9
9
  ##Current features
10
10
 
11
+ * Test doubles and stubs (no partial stubbing yet)
11
12
  * Nested example groups
12
13
  * Pending examples
13
14
  * Lame reporter (but will get better eventually)
14
15
  * Matchers (use with object.must or object.must_not)
16
+
15
17
  eq() / eql()
18
+
16
19
  be_a() / be_kind_of() / be_a_kind_of()
20
+
17
21
  be_whatever # asks object.whatever?
18
22
 
19
23
 
@@ -60,6 +64,21 @@ development.
60
64
 
61
65
  end
62
66
 
67
+ describe "Test double" do
68
+ it "is declared with fake" do
69
+ my_logger = fake('logger')
70
+ end
71
+
72
+ it "is declared with double as well" do
73
+ my_logger = double('logger')
74
+ end
75
+
76
+ it "can be given stubs" do
77
+ my_logger = double('logger', :my_method => 6)
78
+ my_logger.my_method.must eq(6)
79
+ end
80
+ end
81
+
63
82
  end
64
83
 
65
84
  ###Running the specs!
@@ -81,7 +100,12 @@ development.
81
100
  * should do something but I don't know what yet
82
101
  * will do something else
83
102
 
84
- 7 examples, 2 failures, 2 pending
103
+ Test double
104
+ * is declared with fake
105
+ * is declared with double as well
106
+ * can be given stubs
107
+
108
+ 10 examples, 2 failures, 2 pending
85
109
 
86
110
  ##Note on Patches/Pull Requests
87
111
 
@@ -0,0 +1,63 @@
1
+ Feature: Test doubles and stubs
2
+
3
+ Use test doubles and stubs everywhere! They help decoupling :)
4
+
5
+ Scenario: declare a test double
6
+ Given a directory named "stendhal_project"
7
+ When I cd to "stendhal_project"
8
+ Given a file named "sample_spec.rb" with:
9
+ """
10
+ class MyClass
11
+ def initialize(logger)
12
+ @logger = logger
13
+ end
14
+ end
15
+
16
+ describe "something" do
17
+ it "declares test doubles with :fake helper" do
18
+ logger = fake('logger')
19
+ object = MyClass.new(logger)
20
+
21
+ object.must be_a(MyClass)
22
+ end
23
+ it "declares test doubles with :double helper as well" do
24
+ logger = double('logger')
25
+ object = MyClass.new(logger)
26
+
27
+ object.must be_a(MyClass)
28
+ end
29
+ end
30
+ """
31
+ When I run "stendhal sample_spec.rb"
32
+ Then the exit status should be 0
33
+ And the output should contain "2 examples, 0 failures"
34
+
35
+ Scenario: declare a test double with stubs
36
+ Given a directory named "stendhal_project"
37
+ When I cd to "stendhal_project"
38
+ Given a file named "sample_spec.rb" with:
39
+ """
40
+ class MyClass
41
+ def initialize(logger)
42
+ @logger = logger
43
+ end
44
+ def do_something
45
+ @logger.log "Logger"
46
+ if @logger.print
47
+ return "result"
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "something" do
53
+ it "does something" do
54
+ logger = fake('logger', :log => nil, :print => true)
55
+ object = MyClass.new(logger)
56
+
57
+ object.do_something.must eq("result")
58
+ end
59
+ end
60
+ """
61
+ When I run "stendhal sample_spec.rb"
62
+ Then the exit status should be 0
63
+ And the output should contain "1 example, 0 failures"
@@ -1,12 +1,14 @@
1
1
  module Stendhal
2
2
  class Example
3
3
  include Matchers
4
+ include Mocks
4
5
 
5
6
  @@examples = []
6
7
 
7
8
  attr_reader :description
8
9
  attr_reader :block
9
10
  attr_reader :failed_message
11
+ attr_reader :aborted_message
10
12
 
11
13
  def initialize(docstring, options = {}, &block)
12
14
  @description = docstring
@@ -25,6 +27,7 @@ module Stendhal
25
27
  return 1
26
28
  rescue StandardError=>e
27
29
  @aborted = true
30
+ @aborted_message = e.message
28
31
  return 1
29
32
  end
30
33
  end
@@ -19,15 +19,18 @@ module Stendhal
19
19
  examples.reject do |example|
20
20
  if example.pending?
21
21
  pending += 1
22
- $stdout.print "* #{example.description}\n"
22
+ $stdout.print "* #{example.description} [PENDING]\n"
23
23
  true
24
24
  else
25
25
  false
26
26
  end
27
27
  end.each do |example|
28
28
  failures += example.run
29
- $stdout.print "* #{example.description}#{' [FAILED]' if example.failed?}\n"
30
- $stdout.print "\t#{example.failed_message}\n"
29
+ status = " [FAILED]" if example.failed?
30
+ status = " [ABORTED]" if example.aborted?
31
+ $stdout.print "* #{example.description}#{status || ''}\n"
32
+ $stdout.print "\t#{example.failed_message}\n" if example.failed?
33
+ $stdout.print "\t#{example.aborted_message}\n" if example.aborted?
31
34
  end
32
35
  [examples.count, failures, pending]
33
36
  end
@@ -10,6 +10,10 @@ module Stendhal
10
10
  end
11
11
  alias_method :eql, :eq
12
12
 
13
+ def caca(other)
14
+ Equality.new(other)
15
+ end
16
+
13
17
  def be_a(kind)
14
18
  Kind.new(kind)
15
19
  end
@@ -19,6 +23,8 @@ module Stendhal
19
23
  def method_missing(m,*args)
20
24
  if m.to_s =~ /be_(\w+)/
21
25
  Predicate.new(($1 + '?').to_sym)
26
+ else
27
+ super(m,*args)
22
28
  end
23
29
  end
24
30
  end
@@ -0,0 +1,23 @@
1
+ module Stendhal
2
+ module Mocks
3
+ class TestDouble
4
+
5
+ attr_accessor :name
6
+
7
+ def initialize(name, stubs = {})
8
+ @name = name
9
+ assign_stubs(stubs)
10
+ end
11
+
12
+ def assign_stubs(stubs)
13
+ stubs.each_pair do |k,v|
14
+ (class << self;self;end).send(:define_method,k.to_sym) do |*args|
15
+ v
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ require 'stendhal/mocks/test_double'
2
+
3
+ module Stendhal
4
+ module Mocks
5
+ def double(*args)
6
+ TestDouble.new(*args)
7
+ end
8
+ alias_method :fake, :double
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module Stendhal
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/lib/stendhal.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'stendhal/exceptions'
2
2
  require 'stendhal/matchers'
3
+ require 'stendhal/mocks'
3
4
  require 'stendhal/example'
4
5
  require 'stendhal/example_group'
5
6
 
@@ -51,6 +51,15 @@ module Stendhal
51
51
  example.should be_aborted
52
52
  end
53
53
 
54
+ it "captures everything else" do
55
+ example = Example.new("docstring") do
56
+ hello my dear reader
57
+ end
58
+ expect {example.run}.to_not raise_error
59
+ example.run
60
+ example.should be_aborted
61
+ end
62
+
54
63
  end
55
64
 
56
65
  describe "#fail" do
@@ -9,10 +9,11 @@ module Stendhal
9
9
 
10
10
  let(:object) { MyClass.new }
11
11
 
12
- describe "#==" do
12
+ describe "#eql / #eq" do
13
13
  it 'creates a new equality expectation' do
14
- Matchers::Equality.should_receive(:new).with(7)
15
- object == 7
14
+ Matchers::Equality.should_receive(:new).with(7).twice
15
+ object.eq(7)
16
+ object.eql(7)
16
17
  end
17
18
  end
18
19
 
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ module Stendhal
4
+ module Mocks
5
+ describe TestDouble do
6
+
7
+ subject { TestDouble.new('double') }
8
+
9
+ it 'is created with a name' do
10
+ subject.name.should == 'double'
11
+ end
12
+
13
+ context "when given a hash of stubs" do
14
+
15
+ subject { TestDouble.new('double', :my_stub => 3) }
16
+
17
+ it 'assigns them to the test double' do
18
+ subject.should respond_to(:my_stub)
19
+ end
20
+
21
+ it 'makes every stub return its value' do
22
+ subject.my_stub.should == 3
23
+ end
24
+
25
+ context "when giving arguments to the subbed method" do
26
+
27
+ it 'ignores them' do
28
+ subject.my_stub("argument").should == 3
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
37
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 2
9
- version: 0.1.2
8
+ - 3
9
+ version: 0.1.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Josep M. Bach
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-31 01:00:00 +02:00
17
+ date: 2010-11-03 00:00:00 +01:00
18
18
  default_executable: stendhal
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -92,6 +92,7 @@ files:
92
92
  - features/examples.feature
93
93
  - features/expectations.feature
94
94
  - features/support/env.rb
95
+ - features/test_doubles_and_stubs.feature
95
96
  - lib/stendhal.rb
96
97
  - lib/stendhal/autorun.rb
97
98
  - lib/stendhal/core_ext/kernel.rb
@@ -104,6 +105,8 @@ files:
104
105
  - lib/stendhal/matchers/equality.rb
105
106
  - lib/stendhal/matchers/kind.rb
106
107
  - lib/stendhal/matchers/predicate.rb
108
+ - lib/stendhal/mocks.rb
109
+ - lib/stendhal/mocks/test_double.rb
107
110
  - lib/stendhal/version.rb
108
111
  - script/console
109
112
  - spec/spec_helper.rb
@@ -115,6 +118,7 @@ files:
115
118
  - spec/stendhal/matchers/kind_spec.rb
116
119
  - spec/stendhal/matchers/predicate_spec.rb
117
120
  - spec/stendhal/matchers_spec.rb
121
+ - spec/stendhal/test_double_spec.rb
118
122
  - stendhal.gemspec
119
123
  has_rdoc: true
120
124
  homepage: http://rubygems.org/gems/stendhal
@@ -152,6 +156,7 @@ test_files:
152
156
  - features/examples.feature
153
157
  - features/expectations.feature
154
158
  - features/support/env.rb
159
+ - features/test_doubles_and_stubs.feature
155
160
  - spec/spec_helper.rb
156
161
  - spec/stendhal/core_ext/kernel_spec.rb
157
162
  - spec/stendhal/example_group_spec.rb
@@ -161,3 +166,4 @@ test_files:
161
166
  - spec/stendhal/matchers/kind_spec.rb
162
167
  - spec/stendhal/matchers/predicate_spec.rb
163
168
  - spec/stendhal/matchers_spec.rb
169
+ - spec/stendhal/test_double_spec.rb