expectations 1.2.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +25 -7
- data/lib/expectations.rb +3 -0
- data/lib/expectations/blank_slate.rb +4 -3
- data/lib/expectations/delegate_recorder.rb +8 -8
- data/lib/expectations/expectation.rb +18 -8
- data/lib/expectations/recorder.rb +8 -8
- data/lib/expectations/state_based_expectation.rb +6 -2
- data/lib/expectations/state_based_recorder.rb +4 -3
- data/lib/expectations/state_based_recorder_for_expectations_without_block.rb +11 -0
- data/lib/expectations/suite.rb +12 -10
- data/lib/expectations/suite_results.rb +9 -9
- data/rakefile.rb +17 -15
- data/test/expectations/expectation_test.rb +18 -6
- data/test/expectations/expectation_without_block_test.rb +40 -0
- data/test/expectations/module_test.rb +4 -0
- data/test/expectations/range_test.rb +4 -0
- data/test/expectations/regexp_test.rb +4 -0
- data/test/expectations/results_test.rb +1 -0
- data/test/failures_test.rb +11 -17
- data/test/successes_test.rb +13 -0
- metadata +20 -6
data/README
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
= expectations
|
2
2
|
|
3
|
-
expectations is a lightweight unit testing framework. Tests (expectations) can be written as follows
|
3
|
+
expectations is a lightweight unit testing framework. Tests (expectations) can be written as follows
|
4
4
|
|
5
|
-
expect 2 do
|
6
|
-
1 + 1
|
7
|
-
end
|
5
|
+
expect 2 do
|
6
|
+
1 + 1
|
7
|
+
end
|
8
8
|
|
9
|
-
expect
|
10
|
-
|
9
|
+
expect(1 + 1) == 2
|
10
|
+
|
11
|
+
expect NoMethodError do
|
12
|
+
Object.invalid_method_call
|
11
13
|
end.
|
12
14
|
|
13
15
|
expectations is designed to encourage unit testing best practices such as
|
@@ -16,9 +18,12 @@ expectations is designed to encourage unit testing best practices such as
|
|
16
18
|
- provide one syntax for setting up state based or behavior based expectation
|
17
19
|
- focus on readability by providing no mechanism for describing an expectation other than the code in the expectation.
|
18
20
|
|
21
|
+
Works with ruby1.9.1, patches for 1.8 are welcome.
|
22
|
+
|
19
23
|
Mocking is done utilizing Mocha[http://mocha.rubyforge.org]
|
20
24
|
|
21
25
|
by {Jay Fields}[http://blog.jayfields.com]
|
26
|
+
maintained by {Holger Kohnen}[http://holgerkohnen.de]
|
22
27
|
|
23
28
|
== Download and Installation
|
24
29
|
|
@@ -27,7 +32,7 @@ You can download expectations from here[http://rubyforge.org/projects/expectatio
|
|
27
32
|
$ gem install expectations
|
28
33
|
|
29
34
|
== License
|
30
|
-
|
35
|
+
|
31
36
|
You may use, copy and redistribute this library under the same terms as Ruby itself (see http://www.ruby-lang.org/en/LICENSE.txt).
|
32
37
|
|
33
38
|
== TextMate
|
@@ -162,9 +167,22 @@ expectations can be used for state based and behavior based testing.
|
|
162
167
|
process.finished = true
|
163
168
|
end
|
164
169
|
|
170
|
+
expect Expectations::Results::Fulfilled do
|
171
|
+
suite = Expectations::Suite.new
|
172
|
+
suite.expect(NoMethodError) { Object.no_method }
|
173
|
+
suite.execute(Silent).expectations.first
|
174
|
+
end
|
175
|
+
|
165
176
|
expect nil.to.be.nil?
|
166
177
|
expect Object.not.to.be.nil?
|
167
178
|
|
179
|
+
# Shorthand style expectations
|
180
|
+
expect(1 + 1) == 2
|
181
|
+
expect(1 + 2) != 2
|
182
|
+
expect(1) < 2
|
183
|
+
expect(2) > 1
|
184
|
+
expect('foo bar') =~ /foo/
|
185
|
+
|
168
186
|
end
|
169
187
|
|
170
188
|
== Contributors
|
data/lib/expectations.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
$stdout.sync = true
|
2
|
+
|
1
3
|
module Expectations
|
2
4
|
end
|
3
5
|
|
@@ -20,6 +22,7 @@ require File.expand_path(File.dirname(__FILE__) + '/expectations/recorder')
|
|
20
22
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/delegate_recorder')
|
21
23
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/recorded_expectation')
|
22
24
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/state_based_recorder')
|
25
|
+
require File.expand_path(File.dirname(__FILE__) + '/expectations/state_based_recorder_for_expectations_without_block')
|
23
26
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/reverse_result')
|
24
27
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/xml_string')
|
25
28
|
require File.expand_path(File.dirname(__FILE__) + '/expectations/regexp')
|
@@ -20,10 +20,11 @@ class Expectations::BlankSlate
|
|
20
20
|
# Hide the method named +name+ in the BlankSlate class. Don't
|
21
21
|
# hide +instance_eval+ or any method beginning with "__".
|
22
22
|
def hide(name)
|
23
|
-
|
24
|
-
|
23
|
+
method_name = RUBY_VERSION < '1.9' ? name.to_s : name.to_sym
|
24
|
+
if instance_methods.include?(method_name) and
|
25
|
+
name !~ /^(__|instance_eval|extend|is_a?|object_id)/
|
25
26
|
@hidden_methods ||= {}
|
26
|
-
@hidden_methods[name.to_sym] = instance_method(
|
27
|
+
@hidden_methods[name.to_sym] = instance_method(method_name)
|
27
28
|
undef_method name
|
28
29
|
end
|
29
30
|
end
|
@@ -1,39 +1,39 @@
|
|
1
1
|
module Expectations::DelegateRecorder
|
2
2
|
attr_accessor :delegation_result
|
3
|
-
|
3
|
+
|
4
4
|
def delegate!(meth)
|
5
5
|
@meth = meth
|
6
6
|
recorder = self
|
7
7
|
mod = Module.new do
|
8
8
|
define_method meth do |*args|
|
9
|
-
recorder.delegation_result = super
|
9
|
+
recorder.delegation_result = super(*args)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
subject.extend mod
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def to(receiver)
|
16
16
|
@receiver = receiver
|
17
17
|
self
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def subject!
|
21
21
|
@subject_mock = Object.new
|
22
22
|
@subject_mock.expects(@meth).returns(:a_delegated_return_value)
|
23
23
|
subject.stubs(@receiver).returns(@subject_mock)
|
24
24
|
subject
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
def verify
|
28
28
|
:a_delegated_return_value == delegation_result
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def failure_message
|
32
32
|
"expected #{subject}.#{@meth} to return the value of #{subject}.#{@receiver}.#{@meth}; however, #{subject}.#{@meth} returned #{delegation_result.inspect}"
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def mocha_error_message(ex)
|
36
36
|
"expected #{subject} to delegate #{@meth} to #{@receiver}; however, #{subject}.#{@meth} was never called -- #{ex}"
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
39
|
end
|
@@ -1,21 +1,31 @@
|
|
1
1
|
class Expectations::Expectation
|
2
|
-
include Mocha::
|
2
|
+
include Mocha::API
|
3
3
|
attr_accessor :expected, :block, :file, :line, :actual
|
4
|
-
|
4
|
+
|
5
5
|
def initialize(expected, file, line, &block)
|
6
|
-
self.expected
|
6
|
+
self.expected = expected
|
7
|
+
self.block = block
|
7
8
|
self.file, self.line = file, line.to_i
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
|
10
|
+
if expected.is_a?(Expectations::Recorder)
|
11
|
+
extend(Expectations::RecordedExpectation)
|
12
|
+
elsif !block
|
13
|
+
extend(Expectations::RecordedExpectation)
|
14
|
+
self.expected = Expectations::Recorder.new(self.expected)
|
15
|
+
self.expected.extend(Expectations::StateBasedRecorder)
|
16
|
+
self.expected.extend(Expectations::StateBasedRecorderForExpectationsWithoutBlock)
|
17
|
+
self.expected.file = file
|
18
|
+
self.expected.line = line
|
19
|
+
else
|
20
|
+
extend(Expectations::StateBasedExpectation)
|
11
21
|
end
|
12
22
|
end
|
13
|
-
|
23
|
+
|
14
24
|
def mock(*args)
|
15
25
|
Expectations::StandardError.print "mock method called from #{caller.first.chomp(":in `__instance_exec0'")}\n"
|
16
26
|
super
|
17
27
|
end
|
18
|
-
|
28
|
+
|
19
29
|
def warn_for_expects
|
20
30
|
Object.__which_expects__ = ExpectationsExpectsMethod
|
21
31
|
yield
|
@@ -1,34 +1,34 @@
|
|
1
1
|
class Expectations::Recorder < Expectations::BlankSlate
|
2
|
-
|
2
|
+
|
3
3
|
attr_reader :subject
|
4
4
|
def initialize(subject)
|
5
5
|
@subject = subject
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def receive(meth)
|
9
9
|
extend Expectations::MockRecorder
|
10
10
|
receive!(meth)
|
11
11
|
self
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def have
|
15
15
|
extend Expectations::StateBasedRecorder
|
16
16
|
message_parts << "to have"
|
17
17
|
self
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def be
|
21
21
|
extend Expectations::StateBasedRecorder
|
22
22
|
message_parts << "to be"
|
23
23
|
self
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def delegate(method)
|
27
27
|
extend Expectations::DelegateRecorder
|
28
28
|
delegate!(method)
|
29
29
|
self
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
def subject!
|
33
33
|
subject
|
34
34
|
end
|
@@ -36,9 +36,9 @@ class Expectations::Recorder < Expectations::BlankSlate
|
|
36
36
|
def not!
|
37
37
|
extend Expectations::ReverseResult
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def verify!
|
41
41
|
verify
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
end
|
@@ -3,7 +3,11 @@ module Expectations::StateBasedExpectation
|
|
3
3
|
begin
|
4
4
|
mocha_setup
|
5
5
|
warn_for_expects do
|
6
|
-
|
6
|
+
unless block
|
7
|
+
self.actual = false
|
8
|
+
else
|
9
|
+
self.actual = instance_eval(&block)
|
10
|
+
end
|
7
11
|
end
|
8
12
|
mocha_verify
|
9
13
|
if expected.expectations_equal_to(actual)
|
@@ -14,7 +18,7 @@ module Expectations::StateBasedExpectation
|
|
14
18
|
rescue Exception => ex
|
15
19
|
return self.extend(Expectations::Results::Fulfilled) if expected == ex.class
|
16
20
|
self.extend(Expectations::Results::Error)
|
17
|
-
self.exception = ex
|
21
|
+
self.exception = ex
|
18
22
|
self.message = "expected: <#{expected.inspect}> got: <#{ex.class.inspect}>" if expected.is_a?(Class) && expected < StandardError
|
19
23
|
return self
|
20
24
|
ensure
|
@@ -3,7 +3,7 @@ module Expectations::StateBasedRecorder
|
|
3
3
|
def verify
|
4
4
|
method_stack.inject(subject) { |result, element| result.send element.first, *element.last }
|
5
5
|
end
|
6
|
-
|
6
|
+
|
7
7
|
def failure_message
|
8
8
|
"expected #{subject} #{@message_parts.join(" ")}"
|
9
9
|
end
|
@@ -11,12 +11,13 @@ module Expectations::StateBasedRecorder
|
|
11
11
|
def method_stack
|
12
12
|
@method_stack ||= []
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def message_parts
|
16
16
|
@message_parts ||= self.is_a?(Expectations::ReverseResult) ? [:not] : []
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def method_missing(sym, *args)
|
20
|
+
@message_parts ||= []
|
20
21
|
@message_parts << "#{sym}"
|
21
22
|
args.each { |arg| @message_parts << arg.inspect }
|
22
23
|
method_stack << [sym, args]
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Expectations::StateBasedRecorderForExpectationsWithoutBlock
|
2
|
+
|
3
|
+
attr_accessor :file, :line
|
4
|
+
|
5
|
+
def failure_message
|
6
|
+
"expected: <" +
|
7
|
+
File.read(file).split("\n")[line.to_i - 1].strip +
|
8
|
+
"> got: <#{subject} #{@message_parts.join(" ")}>"
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
data/lib/expectations/suite.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
class Expectations::Suite
|
2
|
-
|
3
|
-
include Mocha::
|
2
|
+
|
3
|
+
include Mocha::API
|
4
4
|
class << self
|
5
5
|
attr_accessor :silent
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def initialize
|
9
9
|
@do_not_run = false
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def xml(string)
|
13
13
|
Expectations::XmlString.new(string)
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def execute(out=STDOUT, suite_result = Expectations::SuiteResults.new(out))
|
17
17
|
return suite_result if @do_not_run
|
18
18
|
benchmark = Benchmark.measure do
|
@@ -22,15 +22,17 @@ class Expectations::Suite
|
|
22
22
|
suite_result.write_junit_xml(ENV["JUnitXmlPath"]) unless ENV["JUnitXmlPath"].nil?
|
23
23
|
suite_result
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def expect(expected, &block)
|
27
|
-
|
27
|
+
file, line = *caller.first.match(/\A(.+):(\d+)/)[1..2]
|
28
|
+
expectations << Expectations::Expectation.new(expected, file, line, &block)
|
29
|
+
expectations.last.expected
|
28
30
|
end
|
29
|
-
|
31
|
+
|
30
32
|
def do_not_run
|
31
33
|
@do_not_run = true
|
32
34
|
end
|
33
|
-
|
35
|
+
|
34
36
|
def expectations_for(line)
|
35
37
|
return expectations if line.nil?
|
36
38
|
[expectations.inject { |result, expectation| expectation.line > line.to_i ? result : expectation }]
|
@@ -39,5 +41,5 @@ class Expectations::Suite
|
|
39
41
|
def expectations
|
40
42
|
@expectations ||= []
|
41
43
|
end
|
42
|
-
|
44
|
+
|
43
45
|
end
|
@@ -27,18 +27,18 @@ class Expectations::SuiteResults
|
|
27
27
|
def failures
|
28
28
|
expectations.select { |expectation| expectation.failure? }
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def print_results(benchmark)
|
32
32
|
run_time = benchmark.real
|
33
33
|
run_time = 0.001 if run_time < 0.001
|
34
34
|
out.puts "\nFinished in #{run_time.to_s.gsub(/(\d*)\.(\d{0,5}).*/,'\1.\2')} seconds"
|
35
35
|
if succeeded?
|
36
|
-
print_success
|
36
|
+
print_success
|
37
37
|
else
|
38
38
|
print_fail
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
def print_success
|
43
43
|
out.puts "\nSuccess: #{fulfilled.size} fulfilled"
|
44
44
|
end
|
@@ -47,17 +47,17 @@ class Expectations::SuiteResults
|
|
47
47
|
out.puts "\nFailure: #{failures.size} failed, #{errors.size} errors, #{fulfilled.size} fulfilled"
|
48
48
|
out.puts "\n--Errors--" if errors.any?
|
49
49
|
errors.each do |error|
|
50
|
-
out.puts "
|
50
|
+
out.puts "#{error.file}:#{error.line}:in `expect'" if ENV["TM_MODE"]
|
51
51
|
out.puts "file <#{error.file}>"
|
52
52
|
out.puts "line <#{error.line}>"
|
53
53
|
out.puts "error <#{error.exception.message}>"
|
54
|
-
out.puts "trace #{filter_backtrace(error.exception.backtrace)}"
|
54
|
+
out.puts "trace #{filter_backtrace(error.exception.backtrace).join('')}"
|
55
55
|
out.puts "#{error.message}" if error.message && error.message.any?
|
56
56
|
out.puts "\n"
|
57
57
|
end
|
58
58
|
out.puts "\n--Failures--" if failures.any?
|
59
59
|
failures.each do |failure|
|
60
|
-
out.puts "
|
60
|
+
out.puts "#{failure.file}:#{failure.line}:in `expect'" if ENV["TM_MODE"]
|
61
61
|
out.puts "file <#{failure.file}>"
|
62
62
|
out.puts "line <#{failure.line}>"
|
63
63
|
out.puts "#{failure.message}\n\n"
|
@@ -67,7 +67,7 @@ class Expectations::SuiteResults
|
|
67
67
|
def write_junit_xml(path)
|
68
68
|
FileUtils.rm_rf path if File.exist?(path)
|
69
69
|
FileUtils.mkdir_p path
|
70
|
-
grouped_expectations = expectations.inject({}) do |result, expectation|
|
70
|
+
grouped_expectations = expectations.inject({}) do |result, expectation|
|
71
71
|
result[expectation.file] = [] if result[expectation.file].nil?
|
72
72
|
result[expectation.file] << expectation
|
73
73
|
result
|
@@ -91,12 +91,12 @@ class Expectations::SuiteResults
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def filter_backtrace(trace)
|
94
|
-
patterns_to_strip = [/\/expectations\/lib\/expectations\//, /\/lib\/ruby\/1\.
|
94
|
+
patterns_to_strip = [/\/expectations\/lib\/expectations\//, /\/lib\/ruby\/1\.[89]/]
|
95
95
|
result = patterns_to_strip.inject(trace) do |result, element|
|
96
96
|
result = result.select { |line| line !~ element}
|
97
97
|
end
|
98
98
|
result.collect do |line|
|
99
|
-
"\n
|
99
|
+
"\n#{line}"
|
100
100
|
end
|
101
101
|
end
|
102
102
|
end
|
data/rakefile.rb
CHANGED
@@ -9,7 +9,7 @@ task :default => [:test]
|
|
9
9
|
Rake::TestTask.new do |t|
|
10
10
|
t.libs << "test"
|
11
11
|
t.pattern = 'test/**/*_test.rb'
|
12
|
-
t.verbose =
|
12
|
+
t.verbose = false
|
13
13
|
end
|
14
14
|
|
15
15
|
desc 'Generate RDoc'
|
@@ -30,28 +30,30 @@ desc "Upload RDoc to RubyForge"
|
|
30
30
|
task :publish_rdoc do
|
31
31
|
Rake::Task[:readme].invoke
|
32
32
|
Rake::Task[:rdoc].invoke
|
33
|
-
Rake::SshDirPublisher.new("
|
33
|
+
Rake::SshDirPublisher.new("holgerkohnen@rubyforge.org", "/var/www/gforge-projects/expectations", "doc").upload
|
34
34
|
end
|
35
35
|
|
36
36
|
specification = Gem::Specification.new do |s|
|
37
37
|
s.name = "expectations"
|
38
|
-
s.summary = "A lightweight unit testing framework. Tests (expectations) will be written as follows
|
39
|
-
expect 2 do
|
40
|
-
1 + 1
|
41
|
-
end
|
38
|
+
s.summary = "A lightweight unit testing framework. Tests (expectations) will be written as follows
|
39
|
+
expect 2 do
|
40
|
+
1 + 1
|
41
|
+
end
|
42
42
|
|
43
|
-
expect NoMethodError do
|
44
|
-
Object.invalid_method_call
|
43
|
+
expect NoMethodError do
|
44
|
+
Object.invalid_method_call
|
45
45
|
end."
|
46
|
-
s.version = "
|
46
|
+
s.version = "2.0.0"
|
47
47
|
s.author = 'Jay Fields'
|
48
|
-
s.description = "A lightweight unit testing framework. Tests (expectations) will be written as follows
|
49
|
-
expect 2 do
|
50
|
-
1 + 1
|
51
|
-
end
|
48
|
+
s.description = "A lightweight unit testing framework. Tests (expectations) will be written as follows
|
49
|
+
expect 2 do
|
50
|
+
1 + 1
|
51
|
+
end
|
52
52
|
|
53
|
-
expect
|
54
|
-
|
53
|
+
expect(1 + 1) == 2
|
54
|
+
|
55
|
+
expect NoMethodError do
|
56
|
+
Object.invalid_method_call
|
55
57
|
end."
|
56
58
|
s.homepage = 'http://expectations.rubyforge.org'
|
57
59
|
s.rubyforge_project = 'expectations'
|
@@ -4,25 +4,37 @@ Expectations do
|
|
4
4
|
expect Expectations::Results::StateBasedFailure do
|
5
5
|
Expectations::Expectation.new(1, nil, nil) { 2 }.execute
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
expect Expectations::Results::Fulfilled do
|
9
9
|
Expectations::Expectation.new(1, nil, nil) { 1 }.execute
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
expect Expectations::Results::Error do
|
13
13
|
Expectations::Expectation.new(1, nil, nil) { raise }.execute
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
expect "undefined method `no_method' for Object:Class" do
|
17
17
|
Expectations::Expectation.new(ArgumentError, nil, nil) { Object.no_method }.execute.exception.to_s
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
expect Expectations::Results::Fulfilled do
|
21
21
|
Expectations::Expectation.new(NoMethodError, nil, nil) { Object.no_method }.execute
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
expect nil do
|
25
25
|
Expectations::Expectation.new(String, nil, nil) { Object.no_method }.execute.actual
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
|
+
expect Expectations::StateBasedRecorder do
|
29
|
+
''.to.have.to_s == ''
|
30
|
+
end
|
31
|
+
|
32
|
+
expect Expectations::Results::StateBasedFailure do
|
33
|
+
Expectations::Expectation.new('foo'.to.have.to_s == 'bar', nil, nil).execute
|
34
|
+
end
|
35
|
+
|
36
|
+
expect Expectations::Results::Fulfilled do
|
37
|
+
Expectations::Expectation.new('foo'.to.have.to_s == 'foo', nil, nil).execute
|
38
|
+
end
|
39
|
+
|
28
40
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
2
|
+
|
3
|
+
Expectations do
|
4
|
+
expect Expectations::Results::StateBasedFailure do
|
5
|
+
suite = Expectations::Suite.new
|
6
|
+
suite.expect(3) == 4
|
7
|
+
suite.execute(Silent)
|
8
|
+
suite.expectations.first
|
9
|
+
end
|
10
|
+
|
11
|
+
expect 'expected: <suite.expect(value) == 4> got: <3 == 4>' do
|
12
|
+
suite = Expectations::Suite.new
|
13
|
+
value = 3
|
14
|
+
suite.expect(value) == 4
|
15
|
+
suite.execute(Silent)
|
16
|
+
suite.expectations.first.message
|
17
|
+
end
|
18
|
+
|
19
|
+
expect Expectations::Results::Fulfilled do
|
20
|
+
suite = Expectations::Suite.new
|
21
|
+
suite.expect(3) == 3
|
22
|
+
suite.execute(Silent)
|
23
|
+
suite.expectations.first
|
24
|
+
end
|
25
|
+
|
26
|
+
expect Expectations::Results::Fulfilled do
|
27
|
+
suite = Expectations::Suite.new
|
28
|
+
suite.expect('foo bar') =~ /foo/
|
29
|
+
suite.execute(Silent)
|
30
|
+
suite.expectations.first
|
31
|
+
end
|
32
|
+
|
33
|
+
expect Expectations::Results::StateBasedFailure do
|
34
|
+
suite = Expectations::Suite.new
|
35
|
+
suite.expect('bar') =~ /foo/
|
36
|
+
suite.execute(Silent)
|
37
|
+
suite.expectations.first
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -5,6 +5,7 @@ Expectations do
|
|
5
5
|
expect Object.new.extend(Expectations::Results::StateBasedFailure).to.have.char == "F"
|
6
6
|
expect Object.new.extend(Expectations::Results::BehaviorBasedFailure).to.have.char == "F"
|
7
7
|
expect Object.new.extend(Expectations::Results::Error).to.have.char == "E"
|
8
|
+
|
8
9
|
expect Object.new.extend(Expectations::Results::Fulfilled).to.be.fulfilled?
|
9
10
|
expect Object.new.extend(Expectations::Results::StateBasedFailure).not.to.be.fulfilled?
|
10
11
|
expect Object.new.extend(Expectations::Results::BehaviorBasedFailure).not.to.be.fulfilled?
|
data/test/failures_test.rb
CHANGED
@@ -6,13 +6,7 @@ Expectations do
|
|
6
6
|
suite.expect(2) { 3 }
|
7
7
|
suite.execute(Silent).expectations.first
|
8
8
|
end
|
9
|
-
|
10
|
-
expect Expectations::Results::Error do
|
11
|
-
suite = Expectations::Suite.new
|
12
|
-
suite.expect(ArgumentError) { Object.no_method }
|
13
|
-
suite.execute(Silent).expectations.first
|
14
|
-
end
|
15
|
-
|
9
|
+
|
16
10
|
expect Expectations::Results::BehaviorBasedFailure do
|
17
11
|
Expectations::StandardError.silence
|
18
12
|
suite = Expectations::Suite.new
|
@@ -27,25 +21,25 @@ Expectations do
|
|
27
21
|
expect Expectations::Results::BehaviorBasedFailure do
|
28
22
|
Expectations::StandardError.stubs(:print)
|
29
23
|
suite = Expectations::Suite.new
|
30
|
-
suite.expect mock.to.receive(:dial).with("2125551212").times(2) do |phone|
|
24
|
+
suite.expect mock.to.receive(:dial).with("2125551212").times(2) do |phone|
|
31
25
|
phone.dial("2125551212")
|
32
26
|
end
|
33
27
|
suite.execute(Silent).expectations.first
|
34
28
|
end
|
35
|
-
|
29
|
+
|
36
30
|
expect Expectations::Results::BehaviorBasedFailure do
|
37
31
|
Expectations::StandardError.stubs(:print)
|
38
32
|
suite = Expectations::Suite.new
|
39
33
|
suite.expect(Object.to.receive(:deal)) { }
|
40
34
|
suite.execute(Silent).expectations.first
|
41
35
|
end
|
42
|
-
|
36
|
+
|
43
37
|
expect Expectations::Results::Error do
|
44
38
|
suite = Expectations::Suite.new
|
45
39
|
suite.expect(2) { stub(:two => 2).twos }
|
46
40
|
suite.execute(Silent).expectations.first
|
47
41
|
end
|
48
|
-
|
42
|
+
|
49
43
|
expect Expectations::Results::Error do
|
50
44
|
Expectations::StandardError.stubs(:print)
|
51
45
|
suite = Expectations::Suite.new
|
@@ -55,7 +49,7 @@ Expectations do
|
|
55
49
|
end
|
56
50
|
suite.execute(Silent).expectations.first
|
57
51
|
end
|
58
|
-
|
52
|
+
|
59
53
|
expect Expectations::Results::Error do
|
60
54
|
Expectations::StandardError.stubs(:print)
|
61
55
|
suite = Expectations::Suite.new
|
@@ -65,7 +59,7 @@ Expectations do
|
|
65
59
|
end
|
66
60
|
suite.execute(Silent).expectations.first
|
67
61
|
end
|
68
|
-
|
62
|
+
|
69
63
|
expect Expectations::Results::Error do
|
70
64
|
Expectations::StandardError.stubs(:print)
|
71
65
|
suite = Expectations::Suite.new
|
@@ -74,7 +68,7 @@ Expectations do
|
|
74
68
|
end
|
75
69
|
suite.execute(Silent).expectations.first
|
76
70
|
end
|
77
|
-
|
71
|
+
|
78
72
|
expect Expectations::Results::Error do
|
79
73
|
Expectations::StandardError.stubs(:print)
|
80
74
|
suite = Expectations::Suite.new
|
@@ -83,7 +77,7 @@ Expectations do
|
|
83
77
|
end
|
84
78
|
suite.execute(Silent).expectations.first
|
85
79
|
end
|
86
|
-
|
80
|
+
|
87
81
|
expect Expectations::Results::BehaviorBasedFailure do
|
88
82
|
Expectations::StandardError.stubs(:print)
|
89
83
|
suite = Expectations::Suite.new
|
@@ -93,7 +87,7 @@ Expectations do
|
|
93
87
|
end
|
94
88
|
suite.execute(Silent).expectations.first
|
95
89
|
end
|
96
|
-
|
90
|
+
|
97
91
|
expect Expectations::Results::BehaviorBasedFailure do
|
98
92
|
Expectations::StandardError.stubs(:print)
|
99
93
|
suite = Expectations::Suite.new
|
@@ -103,5 +97,5 @@ Expectations do
|
|
103
97
|
end
|
104
98
|
suite.execute(Silent).expectations.first
|
105
99
|
end
|
106
|
-
|
100
|
+
|
107
101
|
end
|
data/test/successes_test.rb
CHANGED
@@ -118,7 +118,20 @@ Expectations do
|
|
118
118
|
process.finished = true
|
119
119
|
end
|
120
120
|
|
121
|
+
expect Expectations::Results::Fulfilled do
|
122
|
+
suite = Expectations::Suite.new
|
123
|
+
suite.expect(NoMethodError) { Object.no_method }
|
124
|
+
suite.execute(Silent).expectations.first
|
125
|
+
end
|
126
|
+
|
121
127
|
expect nil.to.be.nil?
|
122
128
|
expect Object.not.to.be.nil?
|
123
129
|
|
130
|
+
# Shorthand style expectations
|
131
|
+
expect(1 + 1) == 2
|
132
|
+
expect(1 + 2) != 2
|
133
|
+
expect(1) < 2
|
134
|
+
expect(2) > 1
|
135
|
+
expect('foo bar') =~ /foo/
|
136
|
+
|
124
137
|
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:
|
4
|
+
version: 2.0.0
|
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:
|
12
|
+
date: 2010-02-13 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,7 +22,17 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.5.5
|
24
24
|
version:
|
25
|
-
description:
|
25
|
+
description: |-
|
26
|
+
A lightweight unit testing framework. Tests (expectations) will be written as follows
|
27
|
+
expect 2 do
|
28
|
+
1 + 1
|
29
|
+
end
|
30
|
+
|
31
|
+
expect(1 + 1) == 2
|
32
|
+
|
33
|
+
expect NoMethodError do
|
34
|
+
Object.invalid_method_call
|
35
|
+
end.
|
26
36
|
email: ruby@jayfields.com
|
27
37
|
executables: []
|
28
38
|
|
@@ -32,6 +42,7 @@ extra_rdoc_files:
|
|
32
42
|
- README
|
33
43
|
files:
|
34
44
|
- lib/expectations.rb
|
45
|
+
- lib/expectations/state_based_recorder_for_expectations_without_block.rb
|
35
46
|
- lib/expectations/range.rb
|
36
47
|
- lib/expectations/reverse_result.rb
|
37
48
|
- lib/expectations/blank_slate.rb
|
@@ -57,6 +68,7 @@ files:
|
|
57
68
|
- test/test_helper.rb
|
58
69
|
- test/successes_test.rb
|
59
70
|
- test/expectations/regexp_test.rb
|
71
|
+
- test/expectations/expectation_without_block_test.rb
|
60
72
|
- test/expectations/suite_runner_test.rb
|
61
73
|
- test/expectations/expectation_test.rb
|
62
74
|
- test/expectations/string_test.rb
|
@@ -72,6 +84,8 @@ files:
|
|
72
84
|
- README
|
73
85
|
has_rdoc: true
|
74
86
|
homepage: http://expectations.rubyforge.org
|
87
|
+
licenses: []
|
88
|
+
|
75
89
|
post_install_message:
|
76
90
|
rdoc_options:
|
77
91
|
- --title
|
@@ -96,9 +110,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
110
|
requirements: []
|
97
111
|
|
98
112
|
rubyforge_project: expectations
|
99
|
-
rubygems_version: 1.3.
|
113
|
+
rubygems_version: 1.3.5
|
100
114
|
signing_key:
|
101
|
-
specification_version:
|
102
|
-
summary: A lightweight unit testing framework. Tests (expectations) will be written as follows
|
115
|
+
specification_version: 3
|
116
|
+
summary: A lightweight unit testing framework. Tests (expectations) will be written as follows expect 2 do 1 + 1 end expect NoMethodError do Object.invalid_method_call end.
|
103
117
|
test_files: []
|
104
118
|
|