stendhal 0.1.0 → 0.1.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.
- data/Gemfile.lock +1 -1
- data/Readme.md +42 -10
- data/features/examples.feature +22 -20
- data/features/expectations.feature +119 -0
- data/lib/stendhal/core_ext/kernel.rb +6 -0
- data/lib/stendhal/dsl.rb +2 -0
- data/lib/stendhal/example.rb +8 -2
- data/lib/stendhal/example_group.rb +2 -1
- data/lib/stendhal/exceptions.rb +5 -0
- data/lib/stendhal/matchers/abstract_matcher.rb +16 -0
- data/lib/stendhal/matchers/equality.rb +17 -0
- data/lib/stendhal/matchers/kind.rb +17 -0
- data/lib/stendhal/matchers/predicate.rb +17 -0
- data/lib/stendhal/matchers.rb +25 -0
- data/lib/stendhal/version.rb +1 -1
- data/lib/stendhal.rb +2 -1
- data/spec/stendhal/example_group_spec.rb +2 -2
- data/spec/stendhal/example_spec.rb +14 -2
- data/spec/stendhal/matchers/abstract_matcher_spec.rb +19 -0
- data/spec/stendhal/matchers/equality_spec.rb +41 -0
- data/spec/stendhal/matchers/kind_spec.rb +42 -0
- data/spec/stendhal/matchers/predicate_spec.rb +42 -0
- data/spec/stendhal/matchers_spec.rb +34 -0
- metadata +21 -6
- data/lib/stendhal/assertions.rb +0 -12
- data/spec/stendhal/assertions_spec.rb +0 -29
data/Gemfile.lock
CHANGED
data/Readme.md
CHANGED
@@ -6,24 +6,50 @@ Currently under development, there is only basic functionality for now.
|
|
6
6
|
Below I will be posting whatever features are available throughout the
|
7
7
|
development.
|
8
8
|
|
9
|
+
##Current features
|
10
|
+
|
11
|
+
* Nested example groups
|
12
|
+
* Pending examples
|
13
|
+
* Lame reporter (but will get better eventually)
|
14
|
+
* Matchers (use with object.must or object.must_not)
|
15
|
+
eq() / eql()
|
16
|
+
be_a() / be_kind_of() / be_a_kind_of()
|
17
|
+
be_whatever # asks object.whatever?
|
18
|
+
|
19
|
+
|
9
20
|
##Installation
|
10
21
|
|
11
22
|
gem install stendhal
|
12
23
|
|
13
24
|
##Usage
|
14
25
|
|
15
|
-
# your spec file for some class -
|
26
|
+
# your spec file for some class - foo_spec.rb
|
16
27
|
|
17
|
-
describe "
|
28
|
+
describe "Foo" do
|
18
29
|
|
19
30
|
it "does something" do
|
20
31
|
my_object = MyClass.new
|
21
|
-
my_object.
|
32
|
+
my_object.must be_a(MyClass)
|
33
|
+
end
|
22
34
|
|
23
|
-
|
35
|
+
|
36
|
+
it "fails when 7 is not 9" do
|
37
|
+
(3 + 4).must eq(9)
|
24
38
|
end
|
25
39
|
|
26
|
-
|
40
|
+
it "asks for a kind of object" do
|
41
|
+
"string".must be_a(String)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "asks things to objects" do
|
45
|
+
"string".must be_frozen
|
46
|
+
end
|
47
|
+
|
48
|
+
it "has common sense" do
|
49
|
+
"string".must_not eq(3)
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "Pending examples" do
|
27
53
|
|
28
54
|
it "should do something but I don't know what yet"
|
29
55
|
|
@@ -38,18 +64,24 @@ development.
|
|
38
64
|
|
39
65
|
###Running the specs!
|
40
66
|
|
41
|
-
stendhal
|
67
|
+
stendhal foo_spec.rb
|
42
68
|
|
43
69
|
###And the output...
|
44
70
|
|
45
|
-
|
71
|
+
Foo
|
46
72
|
* does something
|
47
|
-
|
48
|
-
|
73
|
+
* fails when 7 is not 9 [FAILED]
|
74
|
+
expected 7 to equal 9
|
75
|
+
* asks for a kind of object
|
76
|
+
* asks things to objects [FAILED]
|
77
|
+
expected "string" to be frozen
|
78
|
+
* has common sense
|
79
|
+
|
80
|
+
Pending examples
|
49
81
|
* should do something but I don't know what yet
|
50
82
|
* will do something else
|
51
83
|
|
52
|
-
|
84
|
+
7 examples, 2 failures, 2 pending
|
53
85
|
|
54
86
|
##Note on Patches/Pull Requests
|
55
87
|
|
data/features/examples.feature
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
Feature: Examples and example groups
|
2
2
|
|
3
|
-
|
3
|
+
RSpec-ish Domain Specific Language
|
4
4
|
|
5
5
|
Scenario: declare an example
|
6
|
-
Given a directory named "
|
7
|
-
When I cd to "
|
6
|
+
Given a directory named "stendhal_project"
|
7
|
+
When I cd to "stendhal_project"
|
8
8
|
Given a file named "sample_spec.rb" with:
|
9
9
|
"""
|
10
10
|
describe "something" do
|
11
11
|
it "does something" do
|
12
|
-
|
12
|
+
# put your code here
|
13
13
|
end
|
14
14
|
end
|
15
15
|
"""
|
@@ -18,29 +18,30 @@ Feature: Examples and example groups
|
|
18
18
|
And the output should contain "1 example, 0 failures"
|
19
19
|
|
20
20
|
Scenario: declare a failing example
|
21
|
-
Given a directory named "
|
22
|
-
When I cd to "
|
21
|
+
Given a directory named "stendhal_project"
|
22
|
+
When I cd to "stendhal_project"
|
23
23
|
Given a file named "sample_spec.rb" with:
|
24
24
|
"""
|
25
25
|
describe "something" do
|
26
26
|
it "does something" do
|
27
|
-
|
27
|
+
fail "this is not what I expected"
|
28
28
|
end
|
29
29
|
end
|
30
30
|
"""
|
31
31
|
When I run "stendhal sample_spec.rb"
|
32
32
|
Then the exit status should be 0
|
33
|
-
And the output should contain "* does something"
|
33
|
+
And the output should contain "* does something [FAILED]"
|
34
|
+
And the output should contain "this is not what I expected"
|
34
35
|
And the output should contain "1 example, 1 failure"
|
35
36
|
|
36
37
|
Scenario: declare a pending example
|
37
|
-
Given a directory named "
|
38
|
-
When I cd to "
|
38
|
+
Given a directory named "stendhal_project"
|
39
|
+
When I cd to "stendhal_project"
|
39
40
|
Given a file named "sample_spec.rb" with:
|
40
41
|
"""
|
41
42
|
describe "something" do
|
42
43
|
pending "does something" do
|
43
|
-
|
44
|
+
fail "this is not what I expected"
|
44
45
|
end
|
45
46
|
end
|
46
47
|
"""
|
@@ -50,14 +51,14 @@ Feature: Examples and example groups
|
|
50
51
|
And the output should contain "1 example, 0 failures, 1 pending"
|
51
52
|
|
52
53
|
Scenario: declare an example in nested groups
|
53
|
-
Given a directory named "
|
54
|
-
When I cd to "
|
54
|
+
Given a directory named "stendhal_project"
|
55
|
+
When I cd to "stendhal_project"
|
55
56
|
Given a file named "sample_spec.rb" with:
|
56
57
|
"""
|
57
58
|
describe "something" do
|
58
59
|
describe "inside another thing" do
|
59
60
|
it "does this" do
|
60
|
-
|
61
|
+
# put your code here
|
61
62
|
end
|
62
63
|
end
|
63
64
|
end
|
@@ -70,22 +71,22 @@ Feature: Examples and example groups
|
|
70
71
|
And the output should contain "1 example, 0 failures"
|
71
72
|
|
72
73
|
Scenario: many examples in different example groups
|
73
|
-
Given a directory named "
|
74
|
-
When I cd to "
|
74
|
+
Given a directory named "stendhal_project"
|
75
|
+
When I cd to "stendhal_project"
|
75
76
|
Given a file named "sample_spec.rb" with:
|
76
77
|
"""
|
77
78
|
describe "something" do
|
78
79
|
describe "inside another thing" do
|
79
80
|
it "does this" do
|
80
|
-
|
81
|
+
# put your code here
|
81
82
|
end
|
82
83
|
end
|
83
84
|
describe "pending" do
|
84
85
|
pending "todo" do
|
85
|
-
|
86
|
+
# put your code here
|
86
87
|
end
|
87
88
|
it "fails" do
|
88
|
-
|
89
|
+
fail "indeed"
|
89
90
|
end
|
90
91
|
end
|
91
92
|
end
|
@@ -97,5 +98,6 @@ Feature: Examples and example groups
|
|
97
98
|
And the output should contain "* does this"
|
98
99
|
And the output should contain "pending"
|
99
100
|
And the output should contain "* todo"
|
100
|
-
And the output should contain "* fails"
|
101
|
+
And the output should contain "* fails [FAILED]"
|
102
|
+
And the output should contain "indeed"
|
101
103
|
And the output should contain "3 examples, 1 failure, 1 pending"
|
@@ -0,0 +1,119 @@
|
|
1
|
+
Feature: Expectations
|
2
|
+
|
3
|
+
Stendhal comes with some built-in expectations.
|
4
|
+
|
5
|
+
Scenario: equality expectations
|
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
|
+
describe "something" do
|
11
|
+
it "does something" do
|
12
|
+
|
13
|
+
(3 + 4).must eq(7)
|
14
|
+
6.must_not eql(7)
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
"""
|
19
|
+
When I run "stendhal sample_spec.rb"
|
20
|
+
Then the exit status should be 0
|
21
|
+
And the output should contain "1 example, 0 failures"
|
22
|
+
|
23
|
+
Scenario: failed equality expectations
|
24
|
+
Given a directory named "stendhal_project"
|
25
|
+
When I cd to "stendhal_project"
|
26
|
+
Given a file named "sample_spec.rb" with:
|
27
|
+
"""
|
28
|
+
describe "something" do
|
29
|
+
it "does something" do
|
30
|
+
|
31
|
+
(3 + 4).must eql(4)
|
32
|
+
|
33
|
+
end
|
34
|
+
it "does something else" do
|
35
|
+
|
36
|
+
4.must_not eq(4)
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
"""
|
41
|
+
When I run "stendhal sample_spec.rb"
|
42
|
+
Then the exit status should be 0
|
43
|
+
And the output should contain "expected 7 to equal 4"
|
44
|
+
And the output should contain "expected 4 to be different than 4"
|
45
|
+
And the output should contain "2 examples, 2 failures"
|
46
|
+
|
47
|
+
Scenario: kind_of expectations
|
48
|
+
Given a directory named "stendhal_project"
|
49
|
+
When I cd to "stendhal_project"
|
50
|
+
Given a file named "sample_spec.rb" with:
|
51
|
+
"""
|
52
|
+
describe "something" do
|
53
|
+
it "does something" do
|
54
|
+
|
55
|
+
6.must be_a(Fixnum)
|
56
|
+
6.must be_kind_of(Fixnum)
|
57
|
+
6.must be_kind_of(Fixnum)
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
"""
|
62
|
+
When I run "stendhal sample_spec.rb"
|
63
|
+
Then the exit status should be 0
|
64
|
+
And the output should contain "1 example, 0 failures"
|
65
|
+
|
66
|
+
Scenario: failed kind_of expectations
|
67
|
+
Given a directory named "stendhal_project"
|
68
|
+
When I cd to "stendhal_project"
|
69
|
+
Given a file named "sample_spec.rb" with:
|
70
|
+
"""
|
71
|
+
describe "something" do
|
72
|
+
it "does something" do
|
73
|
+
|
74
|
+
6.must_not be_a(Fixnum)
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
"""
|
79
|
+
When I run "stendhal sample_spec.rb"
|
80
|
+
Then the exit status should be 0
|
81
|
+
And the output should contain "expected 6 not to be a Fixnum"
|
82
|
+
And the output should contain "1 example, 1 failure"
|
83
|
+
|
84
|
+
Scenario: predicate expectations
|
85
|
+
Given a directory named "stendhal_project"
|
86
|
+
When I cd to "stendhal_project"
|
87
|
+
Given a file named "sample_spec.rb" with:
|
88
|
+
"""
|
89
|
+
describe "something" do
|
90
|
+
it "does something" do
|
91
|
+
|
92
|
+
str = "String".freeze
|
93
|
+
str.must be_frozen
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
"""
|
98
|
+
When I run "stendhal sample_spec.rb"
|
99
|
+
Then the exit status should be 0
|
100
|
+
And the output should contain "1 example, 0 failures"
|
101
|
+
|
102
|
+
Scenario: failed predicate expectations
|
103
|
+
Given a directory named "stendhal_project"
|
104
|
+
When I cd to "stendhal_project"
|
105
|
+
Given a file named "sample_spec.rb" with:
|
106
|
+
"""
|
107
|
+
describe "something" do
|
108
|
+
it "does something" do
|
109
|
+
|
110
|
+
hash = {:number => 3}.freeze
|
111
|
+
hash.must_not be_frozen
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
115
|
+
"""
|
116
|
+
When I run "stendhal sample_spec.rb"
|
117
|
+
Then the exit status should be 0
|
118
|
+
And the output should contain "expected {:number=>3} not to be frozen"
|
119
|
+
And the output should contain "1 example, 1 failure"
|
data/lib/stendhal/dsl.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module Stendhal
|
2
2
|
module DSL
|
3
|
+
|
3
4
|
module Example
|
4
5
|
def it(*args,&blk)
|
5
6
|
self.add_example Stendhal::Example.new(*args,&blk)
|
@@ -14,6 +15,7 @@ module Stendhal
|
|
14
15
|
self.add_example Stendhal::Example.new(*args,options,&blk)
|
15
16
|
end
|
16
17
|
end
|
18
|
+
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
data/lib/stendhal/example.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
module Stendhal
|
2
2
|
class Example
|
3
|
-
include
|
3
|
+
include Matchers
|
4
4
|
|
5
5
|
@@examples = []
|
6
6
|
|
7
7
|
attr_reader :description
|
8
8
|
attr_reader :block
|
9
|
+
attr_reader :failed_message
|
9
10
|
|
10
11
|
def initialize(docstring, options = {}, &block)
|
11
12
|
@description = docstring
|
@@ -18,8 +19,9 @@ module Stendhal
|
|
18
19
|
begin
|
19
20
|
self.instance_eval(&@block)
|
20
21
|
return 0
|
21
|
-
rescue
|
22
|
+
rescue Exceptions::ExpectationNotMet=>e
|
22
23
|
@failed = true
|
24
|
+
@failed_message = e.message
|
23
25
|
return 1
|
24
26
|
rescue StandardError=>e
|
25
27
|
@aborted = true
|
@@ -43,6 +45,10 @@ module Stendhal
|
|
43
45
|
@@examples.delete self
|
44
46
|
end
|
45
47
|
|
48
|
+
def fail(message = 'failed')
|
49
|
+
raise Stendhal::Exceptions::ExpectationNotMet.new(message)
|
50
|
+
end
|
51
|
+
|
46
52
|
class << self
|
47
53
|
|
48
54
|
def destroy_all
|
@@ -26,7 +26,8 @@ module Stendhal
|
|
26
26
|
end
|
27
27
|
end.each do |example|
|
28
28
|
failures += example.run
|
29
|
-
$stdout.print "* #{example.description}\n"
|
29
|
+
$stdout.print "* #{example.description}#{' [FAILED]' if example.failed?}\n"
|
30
|
+
$stdout.print "\t#{example.failed_message}\n"
|
30
31
|
end
|
31
32
|
[examples.count, failures, pending]
|
32
33
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Stendhal
|
2
|
+
module Matchers
|
3
|
+
class Equality < AbstractMatcher
|
4
|
+
|
5
|
+
def match(original, options = {})
|
6
|
+
message = "expected #{original.inspect} #{options[:negative] ? 'to be different than' : 'to equal'} #{@target.inspect}"
|
7
|
+
if options[:negative]
|
8
|
+
raise Stendhal::Exceptions::ExpectationNotMet.new(message) if @target == original
|
9
|
+
else
|
10
|
+
raise Stendhal::Exceptions::ExpectationNotMet.new(message) unless @target == original
|
11
|
+
end
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Stendhal
|
2
|
+
module Matchers
|
3
|
+
class Kind < AbstractMatcher
|
4
|
+
|
5
|
+
def match(original, options = {})
|
6
|
+
message = "expected #{original.inspect} #{options[:negative] ? 'not ' : ''}to be a #{@target.inspect}"
|
7
|
+
if options[:negative]
|
8
|
+
raise Stendhal::Exceptions::ExpectationNotMet.new(message) if original.is_a?(@target)
|
9
|
+
else
|
10
|
+
raise Stendhal::Exceptions::ExpectationNotMet.new(message) unless original.is_a?(@target)
|
11
|
+
end
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Stendhal
|
2
|
+
module Matchers
|
3
|
+
class Predicate < AbstractMatcher
|
4
|
+
|
5
|
+
def match(original, options = {})
|
6
|
+
message = "expected #{original.inspect} #{options[:negative] ? 'not ' : ''}to be #{@target.to_s.gsub('?','')}"
|
7
|
+
if options[:negative]
|
8
|
+
raise Stendhal::Exceptions::ExpectationNotMet.new(message) if original.send(@target)
|
9
|
+
else
|
10
|
+
raise Stendhal::Exceptions::ExpectationNotMet.new(message) unless original.send(@target)
|
11
|
+
end
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'stendhal/matchers/abstract_matcher'
|
2
|
+
require 'stendhal/matchers/equality'
|
3
|
+
require 'stendhal/matchers/kind'
|
4
|
+
require 'stendhal/matchers/predicate'
|
5
|
+
|
6
|
+
module Stendhal
|
7
|
+
module Matchers
|
8
|
+
def eq(other)
|
9
|
+
Equality.new(other)
|
10
|
+
end
|
11
|
+
alias_method :eql, :eq
|
12
|
+
|
13
|
+
def be_a(kind)
|
14
|
+
Kind.new(kind)
|
15
|
+
end
|
16
|
+
alias_method :be_kind_of, :be_a
|
17
|
+
alias_method :be_a_kind_of, :be_a
|
18
|
+
|
19
|
+
def method_missing(m,*args)
|
20
|
+
if m.to_s =~ /be_(\w+)/
|
21
|
+
Predicate.new(($1 + '?').to_sym)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/stendhal/version.rb
CHANGED
data/lib/stendhal.rb
CHANGED
@@ -38,13 +38,13 @@ module Stendhal
|
|
38
38
|
@group = ExampleGroup.new("group")
|
39
39
|
4.times do
|
40
40
|
example = Example.new("some example") do
|
41
|
-
|
41
|
+
true
|
42
42
|
end
|
43
43
|
@runnable_examples << example
|
44
44
|
@group.add_example example
|
45
45
|
end
|
46
46
|
@failing_example = Example.new("failing") do
|
47
|
-
|
47
|
+
fail "this example fails just because"
|
48
48
|
end
|
49
49
|
@group.add_example @failing_example
|
50
50
|
@pending_example = Example.new("pending")
|
@@ -32,13 +32,14 @@ module Stendhal
|
|
32
32
|
example.run
|
33
33
|
end
|
34
34
|
|
35
|
-
it "captures
|
35
|
+
it "captures unmet expectations" do
|
36
36
|
example = Example.new("docstring") do
|
37
|
-
|
37
|
+
raise Stendhal::Exceptions::ExpectationNotMet.new("expected this example to be awesome")
|
38
38
|
end
|
39
39
|
expect {example.run}.to_not raise_error
|
40
40
|
example.run
|
41
41
|
example.should be_failed
|
42
|
+
example.failed_message.should == "expected this example to be awesome"
|
42
43
|
end
|
43
44
|
|
44
45
|
it "captures exceptions" do
|
@@ -52,6 +53,17 @@ module Stendhal
|
|
52
53
|
|
53
54
|
end
|
54
55
|
|
56
|
+
describe "#fail" do
|
57
|
+
it 'fails with a given message' do
|
58
|
+
example = Example.new("docstring") do
|
59
|
+
fail "expectation not awesome enough"
|
60
|
+
end
|
61
|
+
example.run
|
62
|
+
example.should be_failed
|
63
|
+
example.failed_message.should == "expectation not awesome enough"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
55
67
|
describe "class methods" do
|
56
68
|
describe "#count" do
|
57
69
|
it "returns the number of examples in memory" do
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Stendhal
|
4
|
+
module Matchers
|
5
|
+
describe AbstractMatcher do
|
6
|
+
|
7
|
+
it 'initializes with a target' do
|
8
|
+
matcher = AbstractMatcher.new("target")
|
9
|
+
matcher.target.should == "target"
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'does not implement #match' do
|
13
|
+
matcher = AbstractMatcher.new("target")
|
14
|
+
expect { matcher.match("whatever") }.to raise_error(NotImplementedError)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Stendhal
|
4
|
+
module Matchers
|
5
|
+
describe Equality do
|
6
|
+
|
7
|
+
describe "#match" do
|
8
|
+
it 'passes when original and target objects are equivalent' do
|
9
|
+
matcher = Equality.new("string")
|
10
|
+
matcher.match("string").should be_true
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'fails when original and target objects are unequivalent' do
|
14
|
+
matcher = Equality.new("string")
|
15
|
+
expected_message = %q{expected "other string" to equal "string"}
|
16
|
+
expect {
|
17
|
+
matcher.match("other string")
|
18
|
+
}.to raise_error(Stendhal::Exceptions::ExpectationNotMet, expected_message)
|
19
|
+
end
|
20
|
+
|
21
|
+
context "with :negative => true" do
|
22
|
+
|
23
|
+
it 'passes when found unequivalence' do
|
24
|
+
matcher = Equality.new("string")
|
25
|
+
matcher.match("other string", :negative => true).should be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'fails otherwise' do
|
29
|
+
matcher = Equality.new("string")
|
30
|
+
expected_message = %q{expected "string" to be different than "string"}
|
31
|
+
expect {
|
32
|
+
matcher.match("string", :negative => true)
|
33
|
+
}.to raise_error(Stendhal::Exceptions::ExpectationNotMet, expected_message)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Stendhal
|
4
|
+
module Matchers
|
5
|
+
describe Kind do
|
6
|
+
|
7
|
+
describe "#match" do
|
8
|
+
it 'passes when original is a subclass of target' do
|
9
|
+
matcher = Kind.new(Numeric)
|
10
|
+
matcher.match(3).should be_true
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'fails otherwise' do
|
14
|
+
matcher = Kind.new(Fixnum)
|
15
|
+
expected_message = %q{expected 3.2 to be a Fixnum}
|
16
|
+
expect {
|
17
|
+
matcher.match(3.2)
|
18
|
+
}.to raise_error(Stendhal::Exceptions::ExpectationNotMet, expected_message)
|
19
|
+
end
|
20
|
+
|
21
|
+
context "with :negative => true" do
|
22
|
+
|
23
|
+
it 'passes when original is not a subclass of target' do
|
24
|
+
matcher = Kind.new(Numeric)
|
25
|
+
matcher.match("string", :negative => true).should be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'fails otherwise' do
|
29
|
+
matcher = Kind.new(Numeric)
|
30
|
+
expected_message = %q{expected 3 not to be a Numeric}
|
31
|
+
expect {
|
32
|
+
matcher.match(3, :negative => true)
|
33
|
+
}.to raise_error(Stendhal::Exceptions::ExpectationNotMet, expected_message)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Stendhal
|
4
|
+
module Matchers
|
5
|
+
describe Predicate do
|
6
|
+
|
7
|
+
describe "#match" do
|
8
|
+
it 'passes when original responds to target returning true' do
|
9
|
+
matcher = Predicate.new(:frozen?)
|
10
|
+
matcher.match("string".freeze).should be_true
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'fails when it returns false' do
|
14
|
+
matcher = Predicate.new(:frozen?)
|
15
|
+
expected_message = %q{expected "string" to be frozen}
|
16
|
+
expect {
|
17
|
+
matcher.match("string")
|
18
|
+
}.to raise_error(Stendhal::Exceptions::ExpectationNotMet, expected_message)
|
19
|
+
end
|
20
|
+
|
21
|
+
context "with :negative => true" do
|
22
|
+
|
23
|
+
it 'passes when original returns false when sent target' do
|
24
|
+
matcher = Predicate.new(:frozen?)
|
25
|
+
matcher.match("string", :negative => true).should be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'fails otherwise' do
|
29
|
+
matcher = Predicate.new(:frozen?)
|
30
|
+
expected_message = %q{expected "string" not to be frozen}
|
31
|
+
expect {
|
32
|
+
matcher.match("string".freeze, :negative => true)
|
33
|
+
}.to raise_error(Stendhal::Exceptions::ExpectationNotMet, expected_message)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MyClass
|
4
|
+
include Stendhal::Matchers
|
5
|
+
end
|
6
|
+
|
7
|
+
module Stendhal
|
8
|
+
describe "a class with included Matchers" do
|
9
|
+
|
10
|
+
let(:object) { MyClass.new }
|
11
|
+
|
12
|
+
describe "#==" do
|
13
|
+
it 'creates a new equality expectation' do
|
14
|
+
Matchers::Equality.should_receive(:new).with(7)
|
15
|
+
object == 7
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#be_a" do
|
20
|
+
it 'creates a new kind expectation' do
|
21
|
+
Matchers::Kind.should_receive(:new).with(Fixnum)
|
22
|
+
object.be_a(Fixnum)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#be_whatever" do
|
27
|
+
it 'creates a new predicate expectation' do
|
28
|
+
Matchers::Predicate.should_receive(:new).with(:frozen?)
|
29
|
+
object.be_frozen
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
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-
|
17
|
+
date: 2010-10-31 01:00:00 +02:00
|
18
18
|
default_executable: stendhal
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -90,21 +90,31 @@ files:
|
|
90
90
|
- Readme.md
|
91
91
|
- bin/stendhal
|
92
92
|
- features/examples.feature
|
93
|
+
- features/expectations.feature
|
93
94
|
- features/support/env.rb
|
94
95
|
- lib/stendhal.rb
|
95
|
-
- lib/stendhal/assertions.rb
|
96
96
|
- lib/stendhal/autorun.rb
|
97
97
|
- lib/stendhal/core_ext/kernel.rb
|
98
98
|
- lib/stendhal/dsl.rb
|
99
99
|
- lib/stendhal/example.rb
|
100
100
|
- lib/stendhal/example_group.rb
|
101
|
+
- lib/stendhal/exceptions.rb
|
102
|
+
- lib/stendhal/matchers.rb
|
103
|
+
- lib/stendhal/matchers/abstract_matcher.rb
|
104
|
+
- lib/stendhal/matchers/equality.rb
|
105
|
+
- lib/stendhal/matchers/kind.rb
|
106
|
+
- lib/stendhal/matchers/predicate.rb
|
101
107
|
- lib/stendhal/version.rb
|
102
108
|
- script/console
|
103
109
|
- spec/spec_helper.rb
|
104
|
-
- spec/stendhal/assertions_spec.rb
|
105
110
|
- spec/stendhal/core_ext/kernel_spec.rb
|
106
111
|
- spec/stendhal/example_group_spec.rb
|
107
112
|
- spec/stendhal/example_spec.rb
|
113
|
+
- spec/stendhal/matchers/abstract_matcher_spec.rb
|
114
|
+
- spec/stendhal/matchers/equality_spec.rb
|
115
|
+
- spec/stendhal/matchers/kind_spec.rb
|
116
|
+
- spec/stendhal/matchers/predicate_spec.rb
|
117
|
+
- spec/stendhal/matchers_spec.rb
|
108
118
|
- stendhal.gemspec
|
109
119
|
has_rdoc: true
|
110
120
|
homepage: http://rubygems.org/gems/stendhal
|
@@ -140,9 +150,14 @@ specification_version: 3
|
|
140
150
|
summary: Stendhal is a really simple test framework.
|
141
151
|
test_files:
|
142
152
|
- features/examples.feature
|
153
|
+
- features/expectations.feature
|
143
154
|
- features/support/env.rb
|
144
155
|
- spec/spec_helper.rb
|
145
|
-
- spec/stendhal/assertions_spec.rb
|
146
156
|
- spec/stendhal/core_ext/kernel_spec.rb
|
147
157
|
- spec/stendhal/example_group_spec.rb
|
148
158
|
- spec/stendhal/example_spec.rb
|
159
|
+
- spec/stendhal/matchers/abstract_matcher_spec.rb
|
160
|
+
- spec/stendhal/matchers/equality_spec.rb
|
161
|
+
- spec/stendhal/matchers/kind_spec.rb
|
162
|
+
- spec/stendhal/matchers/predicate_spec.rb
|
163
|
+
- spec/stendhal/matchers_spec.rb
|
data/lib/stendhal/assertions.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class MyClass
|
4
|
-
include Stendhal::Assertions
|
5
|
-
end
|
6
|
-
|
7
|
-
module Stendhal
|
8
|
-
describe Assertions do
|
9
|
-
|
10
|
-
subject { MyClass.new }
|
11
|
-
|
12
|
-
describe "#assert" do
|
13
|
-
|
14
|
-
it "does nothing if asserted expression returns true" do
|
15
|
-
subject.assert true
|
16
|
-
end
|
17
|
-
|
18
|
-
it "raises an AssertionFailed exception otherwise" do
|
19
|
-
expect { subject.assert false }.to raise_error(AssertionFailed)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "yields a given message for the error" do
|
23
|
-
expect { subject.assert false, "softwared!" }.to raise_error(AssertionFailed, "softwared!")
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|