coulda 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY CHANGED
@@ -70,3 +70,8 @@ Cleanup
70
70
  - Coulda::Features created from the Kernel::Feature method now create and return a subclass of Test::Unit::TestCase (or a subclass of the specified :testcase_class).
71
71
  - The block passed to Kernel::Feature changes self to be the Test::Unit::TestCase subclass. That way, it's virtually identical to a "class Foo < Test::Unit::TestCase"
72
72
  - Removed dependency on Jeremy McAnally's "pending" gem in favor of an implementation targetted specifically to Coulda's needs (File names and line numbers of the Given/When/Then/And that is unimplemented)
73
+
74
+ 0.5.1
75
+ -----
76
+ - Adds support for call-by-name/symbol (i.e., "Given :some_method invokes the 'some_method' method")
77
+ - Mocked pending within test Scenarios so that the test suite passes instead of incorrectly reporting pending tests
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.5.1
data/coulda.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{coulda}
8
- s.version = "0.5.0"
8
+ s.version = "0.5.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Evan David Light"]
@@ -31,10 +31,14 @@ module Test
31
31
  def self.#{stmt}(text, &block)
32
32
  step = nil
33
33
  if block_given?
34
- current_scenario.steps << step = block
34
+ step = block
35
35
  end
36
36
  caller[0] =~ (/(.*):(.*)(:in)?/)
37
- current_scenario.statements << { :type => :#{stmt}, :text => text, :block => step, :file => $1, :line => $2}
37
+ stmt = { :type => :#{stmt}, :text => text, :block => step, :file => $1, :line => $2 }
38
+ if text.is_a? Symbol
39
+ stmt[:method] = text
40
+ end
41
+ current_scenario.statements << stmt
38
42
  end
39
43
  HERE
40
44
  end
@@ -2,26 +2,19 @@ module Coulda
2
2
  # A factory for Test::Unit::TestCase test methods
3
3
  class Scenario
4
4
  attr_reader :name, :test_class
5
- attr_accessor :steps, :statements
5
+ attr_accessor :statements
6
6
 
7
7
  def initialize(name, my_feature, &block)
8
8
  raise Exception.new("Scenario must have a name") unless name
9
9
  @name = name
10
10
  @statements = []
11
- @steps = []
12
- @pending = false
13
11
  @my_feature = my_feature
14
- if block_given?
15
- create_and_provision_test_method_using &block
16
- else
17
- @pending = true
18
- define_test_method_using { pending }
19
- end
12
+ create_and_provision_test_method_using &block
20
13
  end
21
14
 
22
15
  # Predicate indicating if the Scenario was provided with an example
23
16
  def pending?
24
- @pending
17
+ statements.empty? || has_pending_statements?
25
18
  end
26
19
 
27
20
  private
@@ -30,7 +23,13 @@ module Coulda
30
23
  collect_scenario_statements_from &block
31
24
  define_test_method_using do
32
25
  self.class.current_scenario.statements.each do |stmt|
33
- if stmt[:block]
26
+ if stmt[:method]
27
+ if stmt[:block]
28
+ raise Exception.new "Passing a block to a method called-by-name is currently unhandle"
29
+ else
30
+ self.__send__(stmt[:method])
31
+ end
32
+ elsif stmt[:block]
34
33
  self.instance_eval &(stmt[:block])
35
34
  else
36
35
  pending self.class.current_scenario, stmt
@@ -42,15 +41,21 @@ module Coulda
42
41
 
43
42
  def collect_scenario_statements_from(&block)
44
43
  @my_feature.current_scenario = self
45
- @my_feature.instance_eval &block
44
+ if block_given?
45
+ @my_feature.instance_eval &block
46
+ end
46
47
  end
47
48
 
48
49
  def define_test_method_using(&block)
49
50
  scenario = self
50
51
  @my_feature.send(:define_method, "test_#{@name.downcase.super_custom_underscore}") do
51
52
  self.class.current_scenario = scenario
52
- self.instance_eval &block
53
+ self.instance_eval &block if block
53
54
  end
54
55
  end
56
+
57
+ def has_pending_statements?
58
+ statements.find { |s| s[:block].nil? && s[:method].nil? }
59
+ end
55
60
  end
56
61
  end
@@ -9,6 +9,8 @@ Feature "Using Coulda", :testcase_class => Test::Unit::TestCase do
9
9
  as_a "developer"
10
10
  i_want_to "have typical Coulda usage work"
11
11
 
12
+ def some_method; end
13
+
12
14
  def prove_methods_from_then_invokes_method_on_feature
13
15
  assert true
14
16
  end
@@ -42,4 +44,14 @@ Feature "Using Coulda", :testcase_class => Test::Unit::TestCase do
42
44
  Then "something else" do; end
43
45
  And "should pass" do; end
44
46
  end
47
+
48
+ Scenario "A scenario that invokes a method by name" do
49
+ Given "a method" do
50
+ mock(self).some_method
51
+ end
52
+
53
+ When :some_method
54
+
55
+ Then "'some_method' should have been called" do; end
56
+ end
45
57
  end
@@ -13,11 +13,11 @@ class PendingScenariosTest < Test::Unit::TestCase
13
13
  include RR::Adapters::TestUnit
14
14
 
15
15
  @scenario = Scenario "my scenario" do
16
- Given "something"
17
- When "the when"
18
- Then "the then" do
16
+ Given "this scenario that will call #pending because it has a pending step" do
19
17
  mock(self).pending
20
18
  end
19
+ When "I have this pending step"
20
+ Then "the test should pass anyway because I mocked pending"
21
21
  end
22
22
  @@counter += 1
23
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coulda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan David Light