expectations 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,7 +9,7 @@ module Expectations::BehaviorBasedExpectation
9
9
  self.extend(Expectations::Results::BehaviorFailure)
10
10
  self.message = ex.message
11
11
  rescue Exception => ex
12
- self.extend(Expectations::Results::BehaviorBasedError)
12
+ self.extend(Expectations::Results::Error)
13
13
  self.exception = ex
14
14
  ensure
15
15
  mocha_teardown
@@ -0,0 +1,7 @@
1
+ class Module
2
+
3
+ def expectations_equal_to(other)
4
+ self === other || self == other
5
+ end
6
+
7
+ end
@@ -2,6 +2,10 @@ class Object
2
2
  def to_receive(method)
3
3
  Expectations::MockRecorder.new(self, method)
4
4
  end
5
+
6
+ def expectations_equal_to(other)
7
+ self == other
8
+ end
5
9
 
6
10
  unless defined? instance_exec # 1.9
7
11
  module InstanceExecMethods #:nodoc:
@@ -0,0 +1,7 @@
1
+ class Range
2
+
3
+ def expectations_equal_to(other)
4
+ self === other
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class Regexp
2
+
3
+ def expectations_equal_to(other)
4
+ self === other
5
+ end
6
+
7
+ end
@@ -12,7 +12,7 @@ module Expectations::Results
12
12
  end
13
13
 
14
14
  def error?
15
- self.is_a?(Expectations::Results::StateBasedError) || self.is_a?(Expectations::Results::BehaviorBasedError)
15
+ self.is_a?(Expectations::Results::Error)
16
16
  end
17
17
 
18
18
  def self.included(klass)
@@ -56,15 +56,7 @@ module Expectations::Results
56
56
  end
57
57
 
58
58
  module Expectations::Results
59
- module BehaviorBasedError
60
- attr_accessor :exception, :message
61
- include Expectations::Results
62
- char "E"
63
- end
64
- end
65
-
66
- module Expectations::Results
67
- module StateBasedError
59
+ module Error
68
60
  attr_accessor :exception, :message
69
61
  include Expectations::Results
70
62
  char "E"
@@ -3,10 +3,10 @@ module Expectations::StateBasedExpectation
3
3
  begin
4
4
  mocha_setup
5
5
  self.actual = instance_eval &block
6
- return self.extend(Expectations::Results::Fulfilled) if expected == actual
6
+ return self.extend(Expectations::Results::Fulfilled) if expected.expectations_equal_to(actual)
7
7
  rescue Exception => ex
8
8
  return self.extend(Expectations::Results::Fulfilled) if expected == ex.class
9
- self.extend(Expectations::Results::StateBasedError)
9
+ self.extend(Expectations::Results::Error)
10
10
  self.exception = ex
11
11
  self.message = "expected: <#{expected.inspect}> got: <#{ex.class.inspect}>" if expected.is_a?(Class) && expected < StandardError
12
12
  return self
data/lib/expectations.rb CHANGED
@@ -17,6 +17,9 @@ require 'benchmark'
17
17
  require 'erb'
18
18
  require 'fileutils'
19
19
  require File.expand_path(File.dirname(__FILE__) + '/expectations/object')
20
+ require File.expand_path(File.dirname(__FILE__) + '/expectations/regexp')
21
+ require File.expand_path(File.dirname(__FILE__) + '/expectations/range')
22
+ require File.expand_path(File.dirname(__FILE__) + '/expectations/module')
20
23
  require File.expand_path(File.dirname(__FILE__) + '/expectations/string')
21
24
  require File.expand_path(File.dirname(__FILE__) + '/expectations/mocha')
22
25
  require File.expand_path(File.dirname(__FILE__) + '/expectations/suite')
data/rakefile.rb CHANGED
@@ -41,7 +41,7 @@ specification = Gem::Specification.new do |s|
41
41
  expect NoMethodError do
42
42
  Object.invalid_method_call
43
43
  end."
44
- s.version = "0.1.0"
44
+ s.version = "0.1.1"
45
45
  s.author = 'Jay Fields'
46
46
  s.description = "A lightweight unit testing framework. Tests (expectations) will be written as follows
47
47
  expect 2 do
@@ -10,7 +10,7 @@ Expectations do
10
10
  end
11
11
 
12
12
  expect true do
13
- Expectations::Expectation.new(1) { raise }.execute.is_a?(Expectations::Results::StateBasedError)
13
+ Expectations::Expectation.new(1) { raise }.execute.is_a?(Expectations::Results::Error)
14
14
  end
15
15
 
16
16
  expect "undefined method `no_method' for Object:Class" do
@@ -15,7 +15,7 @@ Expectations do
15
15
  end
16
16
 
17
17
  expect "E" do
18
- Object.new.extend(Expectations::Results::BehaviorBasedError).char
18
+ Object.new.extend(Expectations::Results::Error).char
19
19
  end
20
20
 
21
21
  expect true do
@@ -31,7 +31,7 @@ Expectations do
31
31
  end
32
32
 
33
33
  expect false do
34
- Object.new.extend(Expectations::Results::BehaviorBasedError).fulfilled?
34
+ Object.new.extend(Expectations::Results::Error).fulfilled?
35
35
  end
36
36
 
37
37
  end
data/test/failures.rb ADDED
@@ -0,0 +1,112 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+
3
+ Expectations do
4
+
5
+ # State based expectation where a value equals another value # !> `&' interpreted as argument prefix
6
+ expect 2 do # !> `&' interpreted as argument prefix
7
+ 3
8
+ end
9
+
10
+ # State based expectation where an exception is expected. Simply expect the Class of the intended exception
11
+ expect ArgumentError do
12
+ Object.no_method
13
+ end
14
+
15
+ # Behavior based test using a traditional mock
16
+ expect mock.to_receive(:dial).with("2125551212").times(2) do |phone|
17
+ phone.dial("2125551212")
18
+ phone.dial("2125551212") # !> `&' interpreted as argument prefix
19
+ phone.dial("2125551212")
20
+ end
21
+
22
+ # Behavior based test using a traditional mock
23
+ expect mock.to_receive(:dial).with("2125551212").times(2) do |phone|
24
+ phone.dial("2125551212")
25
+ end
26
+
27
+ # Behavior based test on a concrete mock
28
+ expect Object.to_receive(:deal) do
29
+ Object.no_deal
30
+ end
31
+
32
+ # Behavior based test on a concrete mock
33
+ expect Object.to_receive(:deal) do
34
+ end
35
+
36
+ # State based test utilizing a stub
37
+ expect 2 do
38
+ stub(:two => 2).twos
39
+ end
40
+
41
+ # State based test utilizing a concrete mock
42
+ expect 2 do
43
+ Object.expects(:bar).returns 2
44
+ Object.barter
45
+ end
46
+
47
+ # Behavior based test utilizing a stub and a concrete mock
48
+ expect 1 do
49
+ Object.expects(:give_me_three).with(3).returns 1
50
+ Object.give_me_three(stub(:three=>3).threes)
51
+ end
52
+
53
+ end
54
+ # >> Expectations FE..EFEEE
55
+ # >> Finished in 0.00240 seconds
56
+ # >>
57
+ # >> Failure: 2 failed, 5 errors, 2 fulfilled
58
+ # >>
59
+ # >> --Errors--
60
+ # >> -:11:in `expect'
61
+ # >> file <->
62
+ # >> line <11>
63
+ # >> error <undefined method `no_method' for Object:Class>
64
+ # >> trace
65
+ # >> -:12
66
+ # >> -:3
67
+ # >> expected: <ArgumentError> got: <NoMethodError>
68
+ # >>
69
+ # >> -:28:in `expect'
70
+ # >> file <->
71
+ # >> line <28>
72
+ # >> error <undefined method `no_deal' for Object:Class>
73
+ # >> trace
74
+ # >> -:29:in `__instance_exec0'
75
+ # >> -:3
76
+ # >>
77
+ # >> -:37:in `expect'
78
+ # >> file <->
79
+ # >> line <37>
80
+ # >> error <#<Mock:0x66e57c>.twos() - expected calls: 0, actual calls: 1>
81
+ # >> trace
82
+ # >> -:38
83
+ # >> -:3
84
+ # >>
85
+ # >> -:42:in `expect'
86
+ # >> file <->
87
+ # >> line <42>
88
+ # >> error <undefined method `barter' for Object:Class>
89
+ # >> trace
90
+ # >> -:44
91
+ # >> -:3
92
+ # >>
93
+ # >> -:48:in `expect'
94
+ # >> file <->
95
+ # >> line <48>
96
+ # >> error <#<Mock:0x66caec>.threes() - expected calls: 0, actual calls: 1>
97
+ # >> trace
98
+ # >> -:50
99
+ # >> -:3
100
+ # >>
101
+ # >>
102
+ # >> --Failures--
103
+ # >> -:6:in `expect'
104
+ # >> file <->
105
+ # >> line <6>
106
+ # >> expected: <2> got: <3>
107
+ # >>
108
+ # >> -:33:in `expect'
109
+ # >> file <->
110
+ # >> line <33>
111
+ # >> #<Mock:0x66f120>.deal(any_parameters) - expected calls: 1, actual calls: 0
112
+ # >>
@@ -40,4 +40,34 @@ Expectations do
40
40
  Object.give_me_three(stub(:three=>3).three)
41
41
  end
42
42
 
43
+ # State based test matching a Regexp
44
+ expect /a string/ do
45
+ "a string"
46
+ end
47
+
48
+ # State based test checking if actual is in the expected Range
49
+ expect 1..5 do
50
+ 3
51
+ end
52
+
53
+ # State based test to determine if the object is an instance of the module
54
+ expect Enumerable do
55
+ []
56
+ end
57
+
58
+ # State based test to determine if the object is an instance of the class
59
+ expect String do
60
+ "a string"
61
+ end
62
+
63
+ # State based test to determine if the modules are the same
64
+ expect Enumerable do
65
+ Enumerable
66
+ end
67
+
68
+ # State based test to determine if the classes are the same
69
+ expect String do
70
+ String
71
+ end
72
+
43
73
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expectations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jay Fields
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-01-09 00:00:00 -08:00
12
+ date: 2008-01-15 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -26,7 +26,10 @@ files:
26
26
  - lib/expectations/expectation.rb
27
27
  - lib/expectations/mocha.rb
28
28
  - lib/expectations/mock_recorder.rb
29
+ - lib/expectations/module.rb
29
30
  - lib/expectations/object.rb
31
+ - lib/expectations/range.rb
32
+ - lib/expectations/regexp.rb
30
33
  - lib/expectations/results.rb
31
34
  - lib/expectations/state_based_expectation.rb
32
35
  - lib/expectations/string.rb
@@ -40,6 +43,7 @@ files:
40
43
  - test/expectations/string_test.rb
41
44
  - test/expectations/suite_results_test.rb
42
45
  - test/expectations/suite_test.rb
46
+ - test/failures.rb
43
47
  - test/sample_expectations_test.rb
44
48
  - test/silent.rb
45
49
  - test/test_helper.rb