expectations 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/lib/expectations.rb CHANGED
@@ -2,12 +2,10 @@ module Expectations
2
2
  end
3
3
 
4
4
  def Expectations(&block)
5
- begin
6
- Expectations::SuiteRunner.instance.suite_eval &block
7
- rescue
8
- Expectations::SuiteRunner.instance.do_not_run
9
- raise
10
- end
5
+ Expectations::SuiteRunner.suite_eval &block
6
+ rescue
7
+ Expectations::SuiteRunner.do_not_run
8
+ raise
11
9
  end
12
10
 
13
11
  require 'rubygems'
@@ -1,7 +1,7 @@
1
1
  class Range
2
2
 
3
3
  def expectations_equal_to(other)
4
- self === other
4
+ self === other || self == other
5
5
  end
6
6
 
7
7
  end
@@ -1,7 +1,7 @@
1
1
  class Regexp
2
2
 
3
3
  def expectations_equal_to(other)
4
- self === other
4
+ self === other || self == other
5
5
  end
6
6
 
7
7
  end
@@ -1,29 +1,25 @@
1
1
  class Expectations::Suite
2
-
2
+
3
3
  def mock
4
4
  Expectations::MockRecorder.new(Mocha::Mock.new)
5
5
  end
6
6
 
7
7
  def execute(out=STDOUT)
8
+ return true if @do_not_run
8
9
  suite_result = Expectations::SuiteResults.new(out)
9
- benchmark = Benchmark.measure do
10
- ENV["LINE"].nil? ? run_all(suite_result) : run_one(suite_result)
11
- end
10
+ benchmark = Benchmark.measure { ENV["LINE"].nil? ? run_all(suite_result) : run_one(suite_result) }
12
11
  suite_result.print_results(benchmark)
13
12
  suite_result.write_junit_xml(ENV["JUnitXmlPath"]) unless ENV["JUnitXmlPath"].nil?
14
- suite_result.result
13
+ yield suite_result if block_given?
14
+ suite_result.succeeded?
15
15
  end
16
16
 
17
17
  def run_all(suite_result)
18
- expectations.each do |expectation|
19
- suite_result << expectation.execute
20
- end
18
+ expectations.each { |expectation| suite_result << expectation.execute }
21
19
  end
22
20
 
23
21
  def run_one(suite_result)
24
- one = expectations.inject do |result, expectation|
25
- expectation.line > ENV["LINE"].to_i ? result : expectation
26
- end
22
+ one = expectations.inject { |result, expectation| expectation.line > ENV["LINE"].to_i ? result : expectation }
27
23
  suite_result << one.execute
28
24
  end
29
25
 
@@ -34,4 +30,8 @@ class Expectations::Suite
34
30
  def expect(expected, &block)
35
31
  self.expectations << Expectations::Expectation.new(expected, &block)
36
32
  end
33
+
34
+ def do_not_run
35
+ @do_not_run = true
36
+ end
37
37
  end
@@ -1,18 +1,21 @@
1
1
  class Expectations::SuiteResults
2
- attr_accessor :result, :out, :expectations
2
+ attr_accessor :out, :expectations
3
3
 
4
4
  def initialize(out)
5
- self.out, self.result, self.expectations = out, true, []
5
+ self.out, self.expectations = out, []
6
6
  out.print "Expectations "
7
7
  end
8
8
 
9
9
  def <<(expectation_result)
10
10
  out.print expectation_result.char
11
11
  self.expectations << expectation_result
12
- self.result &&= expectation_result.fulfilled?
13
12
  self
14
13
  end
15
14
 
15
+ def succeeded?
16
+ expectations.all? { |expectation| expectation.fulfilled? }
17
+ end
18
+
16
19
  def fulfilled
17
20
  expectations.select { |expectation| expectation.fulfilled? }
18
21
  end
@@ -29,7 +32,7 @@ class Expectations::SuiteResults
29
32
  run_time = benchmark.real
30
33
  run_time = 0.001 if run_time < 0.001
31
34
  out.puts "\nFinished in #{run_time.to_s.gsub(/(\d*)\.(\d{0,5}).*/,'\1.\2')} seconds"
32
- if result
35
+ if succeeded?
33
36
  out.puts "\nSuccess: #{fulfilled.size} fulfilled"
34
37
  else
35
38
  out.puts "\nFailure: #{failures.size} failed, #{errors.size} errors, #{fulfilled.size} fulfilled"
@@ -1,20 +1,22 @@
1
1
  class Expectations::SuiteRunner
2
2
  include Singleton
3
- attr_accessor :suite, :runnable
3
+ attr_accessor :suite
4
4
 
5
5
  def initialize
6
6
  self.suite = Expectations::Suite.new
7
- self.runnable = true
8
7
  at_exit do
9
- exit 1 unless runnable && suite.execute
8
+ suite.execute do |result|
9
+ exit 1 unless result.succeeded?
10
+ end
10
11
  end
11
12
  end
12
13
 
13
- def do_not_run
14
- self.runnable = false
14
+ def self.do_not_run
15
+ self.instance.suite.do_not_run
15
16
  end
16
17
 
17
- def suite_eval(&block)
18
- self.suite.instance_eval &block
18
+ def self.suite_eval(&block)
19
+ self.instance.suite.instance_eval &block
19
20
  end
21
+
20
22
  end
data/rakefile.rb CHANGED
@@ -2,9 +2,14 @@ require 'rubygems'
2
2
  require 'rake/gempackagetask'
3
3
  require 'rake/rdoctask'
4
4
  require 'rake/contrib/sshpublisher'
5
+ require 'rake/testtask'
5
6
 
6
- task :default do
7
- require File.dirname(__FILE__) + '/test/all_tests.rb'
7
+ task :default => [:test]
8
+
9
+ Rake::TestTask.new do |t|
10
+ t.libs << "test"
11
+ t.pattern = 'test/**/*_test.rb'
12
+ t.verbose = true
8
13
  end
9
14
 
10
15
  desc 'Generate RDoc'
@@ -41,7 +46,7 @@ specification = Gem::Specification.new do |s|
41
46
  expect NoMethodError do
42
47
  Object.invalid_method_call
43
48
  end."
44
- s.version = "0.1.3"
49
+ s.version = "0.1.4"
45
50
  s.author = 'Jay Fields'
46
51
  s.description = "A lightweight unit testing framework. Tests (expectations) will be written as follows
47
52
  expect 2 do
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + "/../test_helper"
2
+
3
+ Expectations do
4
+
5
+ expect Expectations::SuiteRunner.to_receive(:suite_eval) do |suite|
6
+ Expectations { }
7
+ end
8
+
9
+ expect Expectations::SuiteRunner.to_receive(:do_not_run) do |suite|
10
+ Expectations { Object.no_method_error_should_raise } rescue nil
11
+ end
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + "/../test_helper"
2
+
3
+ Expectations do
4
+ expect true do
5
+ (1..5).expectations_equal_to 3
6
+ end
7
+
8
+ expect true do
9
+ (1..5).expectations_equal_to 1..5
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + "/../test_helper"
2
+
3
+ Expectations do
4
+ expect true do
5
+ /foo/.expectations_equal_to "foo"
6
+ end
7
+
8
+ expect true do
9
+ /foo/.expectations_equal_to /foo/
10
+ end
11
+ end
@@ -13,21 +13,25 @@ Expectations do
13
13
  results.errors.size
14
14
  end
15
15
 
16
- expect true do
17
- results = Expectations::SuiteResults.new(Silent)
18
- results << Object.new.extend(Expectations::Results::Fulfilled)
19
- results.result
20
- end
21
-
22
16
  expect false do
23
17
  results = Expectations::SuiteResults.new(Silent)
24
18
  results << Object.new.extend(Expectations::Results::StateBasedFailure)
25
- results.result
19
+ results << Object.new.extend(Expectations::Results::Fulfilled)
20
+ results.succeeded?
26
21
  end
27
22
 
28
23
  expect false do
29
24
  results = Expectations::SuiteResults.new(Silent)
30
25
  results << Object.new.extend(Expectations::Results::BehaviorFailure)
31
- results.result
26
+ results << Object.new.extend(Expectations::Results::Fulfilled)
27
+ results.succeeded?
32
28
  end
29
+
30
+ expect true do
31
+ results = Expectations::SuiteResults.new(Silent)
32
+ results << Object.new.extend(Expectations::Results::Fulfilled)
33
+ results << Object.new.extend(Expectations::Results::Fulfilled)
34
+ results.succeeded?
35
+ end
36
+
33
37
  end
@@ -0,0 +1,13 @@
1
+ require File.dirname(__FILE__) + "/../test_helper"
2
+
3
+ Expectations do
4
+ expect mock.to_receive(:instance_eval) do |suite|
5
+ Expectations::SuiteRunner.stubs(:instance).returns stub(:suite => suite)
6
+ Expectations::SuiteRunner.suite_eval {}
7
+ end
8
+
9
+ expect mock.to_receive(:do_not_run) do |suite|
10
+ Expectations::SuiteRunner.stubs(:instance).returns stub(:suite => suite)
11
+ Expectations::SuiteRunner.do_not_run
12
+ end
13
+ end
@@ -12,10 +12,26 @@ Expectations do
12
12
  suite.execute(Silent)
13
13
  end
14
14
 
15
+ expect true do
16
+ suite = Expectations::Suite.new
17
+ suite.expect(1) { 2 }
18
+ suite.do_not_run
19
+ suite.execute(Silent)
20
+ end
21
+
15
22
  expect false do
16
23
  suite = Expectations::Suite.new
17
24
  suite.expect(1) { 2 }
18
25
  suite.execute(Silent)
19
26
  end
27
+
28
+ expect true do
29
+ suite = Expectations::Suite.new
30
+ result=nil
31
+ suite.execute(Silent) do |yielded_value|
32
+ result = yielded_value.succeeded?
33
+ end
34
+ result
35
+ end
20
36
 
21
37
  end
@@ -0,0 +1,70 @@
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(2) { 3 }
7
+ suite.execute(Silent)
8
+ suite.expectations.first
9
+ end
10
+
11
+ expect Expectations::Results::Error do
12
+ suite = Expectations::Suite.new
13
+ suite.expect(ArgumentError) { Object.no_method }
14
+ suite.execute(Silent)
15
+ suite.expectations.first
16
+ end
17
+
18
+ expect Expectations::Results::BehaviorFailure do
19
+ suite = Expectations::Suite.new
20
+ suite.expect(mock.to_receive(:dial).with("2125551212").times(2)) do |phone|
21
+ phone.dial("2125551212")
22
+ phone.dial("2125551212")
23
+ phone.dial("2125551212")
24
+ end
25
+ suite.execute(Silent)
26
+ suite.expectations.first
27
+ end
28
+
29
+ expect Expectations::Results::BehaviorFailure do
30
+ suite = Expectations::Suite.new
31
+ suite.expect(mock.to_receive(:dial).with("2125551212").times(2)) { |phone| phone.dial("2125551212") }
32
+ suite.execute(Silent)
33
+ suite.expectations.first
34
+ end
35
+
36
+ expect Expectations::Results::BehaviorFailure do
37
+ suite = Expectations::Suite.new
38
+ suite.expect(Object.to_receive(:deal)) { }
39
+ suite.execute(Silent)
40
+ suite.expectations.first
41
+ end
42
+
43
+ expect Expectations::Results::Error do
44
+ suite = Expectations::Suite.new
45
+ suite.expect(2) { stub(:two => 2).twos }
46
+ suite.execute(Silent)
47
+ suite.expectations.first
48
+ end
49
+
50
+ expect Expectations::Results::Error do
51
+ suite = Expectations::Suite.new
52
+ suite.expect(2) do
53
+ Object.expects(:bar).returns 2
54
+ Object.barter
55
+ end
56
+ suite.execute(Silent)
57
+ suite.expectations.first
58
+ end
59
+
60
+ expect Expectations::Results::Error do
61
+ suite = Expectations::Suite.new
62
+ suite.expect(1) do
63
+ Object.expects(:give_me_three).with(3).returns 1
64
+ Object.give_me_three(stub(:three=>3).threes)
65
+ end
66
+ suite.execute(Silent)
67
+ suite.expectations.first
68
+ end
69
+
70
+ 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.3
4
+ version: 0.1.4
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-18 00:00:00 -08:00
12
+ date: 2008-01-21 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -39,11 +39,15 @@ files:
39
39
  - lib/expectations.rb
40
40
  - test/all_tests.rb
41
41
  - test/expectations/expectation_test.rb
42
+ - test/expectations/expectations_test.rb
43
+ - test/expectations/range_test.rb
44
+ - test/expectations/regexp_test.rb
42
45
  - test/expectations/results_test.rb
43
46
  - test/expectations/string_test.rb
44
47
  - test/expectations/suite_results_test.rb
48
+ - test/expectations/suite_runner_test.rb
45
49
  - test/expectations/suite_test.rb
46
- - test/failures.rb
50
+ - test/failures_test.rb
47
51
  - test/sample_expectations_test.rb
48
52
  - test/silent.rb
49
53
  - test/test_helper.rb
data/test/failures.rb DELETED
@@ -1,53 +0,0 @@
1
- require File.dirname(__FILE__) + "/test_helper"
2
-
3
- Expectations do
4
-
5
- # State based expectation where a value equals another value
6
- expect 2 do
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