elight-coulda 0.1.4 → 0.2.0

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/HISTORY CHANGED
@@ -9,3 +9,9 @@ Corrections for github gem build process
9
9
  0.1.2 && 0.1.3
10
10
  --------------
11
11
  Cleanup
12
+
13
+ 0.2.0
14
+ -----
15
+ - Fixed issue 1 which prevented "extract method" on calls to Given/When/Then
16
+ - Refactored Feature and Scenario accordingly assigning more responsibility to Feature
17
+ - No longer enforcing order/presence of Given/When/Then within Scenarios
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.2.0
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{coulda}
8
- s.version = "0.1.4"
8
+ s.version = "0.2.0"
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"]
@@ -30,15 +30,8 @@ module Coulda
30
30
 
31
31
  def Scenario(name, &test_implementation)
32
32
  raise SyntaxError.new("A scenario requires a name") unless name
33
- method_name = "test_#{name.sub(/\s/, "_").downcase}"
34
- @scenarios ||= []
35
- @scenarios << scenario = Scenario.new(name, &test_implementation)
36
- if scenario.pending?
37
- define_method(method_name) { pending }
38
- else
39
- define_method(method_name, &test_implementation)
40
- end
41
- scenario
33
+ create_test_method_for(name, &test_implementation)
34
+ create_scenario_for(name, &test_implementation)
42
35
  end
43
36
 
44
37
  def scenarios
@@ -48,6 +41,29 @@ module Coulda
48
41
  def pending?
49
42
  @scenarios.all? { |s| !s.pending? }
50
43
  end
44
+
45
+ private
46
+
47
+ def create_test_method_for(name, &test_implementation)
48
+ method_name = "test_#{name.sub(/\s+/, "_").downcase}"
49
+ @scenarios ||= []
50
+ if block_given?
51
+ define_method(method_name, &test_implementation)
52
+ else
53
+ define_method(method_name) { pending }
54
+ end
55
+ end
56
+
57
+ def create_scenario_for(name, &test_implementation)
58
+ @scenarios ||= []
59
+ if block_given?
60
+ scenario = Scenario.new(name, &test_implementation)
61
+ else
62
+ scenario = Scenario.new(name)
63
+ end
64
+ @scenarios << scenario
65
+ scenario
66
+ end
51
67
  end
52
68
 
53
69
  # Scenario-less features should be pending
@@ -59,7 +75,7 @@ module Coulda
59
75
  %w[Given When Then].each do |statement|
60
76
  eval <<-HERE
61
77
  def #{statement}(name, &block)
62
- block.call
78
+ block.call if block_given?
63
79
  end
64
80
  HERE
65
81
  end
@@ -8,8 +8,7 @@ module Coulda
8
8
  @name = name.to_s
9
9
  @block = block
10
10
  @statements = []
11
- check_statements
12
- @pending = @statements.empty? || @statements.any? { |s| s.block.nil? }
11
+ @pending = !block_given?
13
12
  end
14
13
 
15
14
  %w[Given When Then].each do |statement|
@@ -23,38 +22,5 @@ module Coulda
23
22
  def pending?
24
23
  @pending
25
24
  end
26
-
27
- private
28
-
29
- def check_statements
30
- if @block
31
- instance_eval &@block
32
- assert_statements
33
- end
34
- end
35
-
36
- def assert_statements
37
- if !pending? && @statements
38
- assert_presence_of_statements
39
- assert_order_of_statements
40
- end
41
- end
42
-
43
- def assert_presence_of_statements
44
- givens_present = @statements.any? { |s| s.type == :Given }
45
- raise SyntaxError.new("No Givens are present") unless givens_present
46
- whens_present = @statements.any? { |s| s.type == :When }
47
- raise SyntaxError.new("No Whens are present") unless whens_present
48
- thens_present = @statements.any? { |s| s.type == :Then }
49
- raise SyntaxError.new("No Thens are present") unless thens_present
50
- end
51
-
52
- def assert_order_of_statements
53
- stmt_types = @statements.collect { |s| s.type }
54
- unless stmt_types.rindex(:Given) < stmt_types.index(:When) &&
55
- stmt_types.rindex(:When) < stmt_types.index(:Then)
56
- raise SyntaxError.new("Given, Whens, Thens are out of order")
57
- end
58
- end
59
25
  end
60
26
  end
@@ -1,18 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), "test_helper")
2
2
 
3
3
  class FeatureTest < Test::Unit::TestCase
4
- def run_feature(feature)
5
- if Object::RUBY_VERSION =~ /^1.9/
6
- result = MiniTest::Unit.autorun
7
- else
8
- # Assume 1.8.x
9
- result = Test::Unit::TestResult.new
10
- p = Proc.new {}
11
- feature.suite.run(result, &p)
12
- end
13
- result
14
- end
15
-
16
4
  context "A Feature class" do
17
5
  should "have Test::Unit::TestCase as an ancestor" do
18
6
  assert(Feature.ancestors.include?(Test::Unit::TestCase))
@@ -85,7 +73,7 @@ class FeatureTest < Test::Unit::TestCase
85
73
 
86
74
  should "not have any errors when run" do
87
75
  result = run_feature @feature_without_scenarios
88
- Object::RUBY_VERSION =~ /^1.9/ ? assert(result.inspect) : assert(result)
76
+ Object::RUBY_VERSION =~ /^1.9/ ? assert(result) : assert(result.passed?)
89
77
  end
90
78
  end
91
79
 
@@ -22,117 +22,6 @@ class ScenarioTest < Test::Unit::TestCase
22
22
  assert(@scenario.pending?)
23
23
  end
24
24
  end
25
-
26
- context "with a block" do
27
- context "when validating the semantics of the code in the block" do
28
- should "raise a DSL syntax error if no givens are present" do
29
- assert_raises Coulda::SyntaxError do
30
- Scenario.new "foo" do
31
- When "bar"
32
- Then "blech"
33
- end
34
- end
35
- end
36
-
37
- should "raise a DSL syntax error if no whens are present" do
38
- assert_raises Coulda::SyntaxError do
39
- Scenario.new "foo" do
40
- Given "bar"
41
- Then "blech"
42
- end
43
- end
44
- end
45
-
46
- should "raise a DSL syntax error if no thens are present" do
47
- assert_raises Coulda::SyntaxError do
48
- Scenario.new "foo" do
49
- Given "bar"
50
- When "blech"
51
- end
52
- end
53
- end
54
-
55
- context "and all givens occur before all whens" do
56
- context "and all whens occur before all thens" do
57
- should "not raise an error" do
58
- assert_nothing_raised do
59
- Scenario.new "foo" do
60
- Given "bar"
61
- When "blech"
62
- Then "baz"
63
- end
64
- end
65
- end
66
- end
67
-
68
- context "and all whens do not occur before all thens" do
69
- should "raise a DSL syntax error" do
70
- assert_raises Coulda::SyntaxError do
71
- Scenario.new "foo" do
72
- Given "bar"
73
- When "blech"
74
- Then "baz"
75
- When "foobarblech"
76
- end
77
- end
78
- end
79
- end
80
- end
81
-
82
- context "where not all givens occur before all whens" do
83
- context "and all whens occur before all thens" do
84
- should "raise a DSL syntax error" do
85
- assert_raises Coulda::SyntaxError do
86
- Scenario.new "foo" do
87
- Given "bar"
88
- When "blech"
89
- Given "foobarblech"
90
- Then "baz"
91
- end
92
- end
93
- end
94
- end
95
-
96
- context "and all whens do not occur before all thens" do
97
- should "raise a DSL syntax error" do
98
- assert_raises Coulda::SyntaxError do
99
- Scenario.new "foo" do
100
- Given "bar"
101
- When "blech"
102
- Given "barblech"
103
- Then "baz"
104
- When "foobarblech"
105
- end
106
- end
107
- end
108
- end
109
- end
110
-
111
- context "where givens, whens, are present and in the correct order" do
112
- context "but a Given does not have a block" do
113
- should "declare the scenario pending" do
114
- scenario = Scenario.new "foo" do
115
- Given "bar"
116
- When "blech" do; end
117
- Then "baz" do; end
118
- end
119
- assert(scenario.pending?)
120
- end
121
- end
122
-
123
- context "and the givens, whens, and thens have blocks" do
124
- should "not be pending" do
125
- scenario = Scenario.new "foo" do
126
- Given "bar" do; end
127
- When "blech" do; end
128
- Then "baz" do; end
129
- end
130
- assert(!scenario.pending?)
131
- end
132
- end
133
- end
134
- end
135
- end
136
25
  end
137
26
  end
138
27
  end
@@ -6,3 +6,23 @@ $LOAD_PATH << File.join(File.dirname(__FILE__), "..", "lib")
6
6
  require 'coulda'
7
7
 
8
8
  include Coulda
9
+
10
+ def run_feature(feature)
11
+ if Object::RUBY_VERSION =~ /^1.9/
12
+ result = MiniTest::Unit.autorun
13
+ else
14
+ # Assume 1.8.x
15
+ result = Test::Unit::TestResult.new
16
+ p = Proc.new {}
17
+ feature.suite.run(result, &p)
18
+ end
19
+ result
20
+ end
21
+
22
+ def pendings_are_errors
23
+ Feature.class_eval do
24
+ def pending
25
+ raise Exception.new
26
+ end
27
+ end
28
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elight-coulda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan David Light
@@ -48,6 +48,7 @@ files:
48
48
  - test/test_helper.rb
49
49
  has_rdoc: false
50
50
  homepage: http://evan.tiggerpalace.com/
51
+ licenses:
51
52
  post_install_message:
52
53
  rdoc_options:
53
54
  - --charset=UTF-8
@@ -68,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
69
  requirements: []
69
70
 
70
71
  rubyforge_project:
71
- rubygems_version: 1.2.0
72
+ rubygems_version: 1.3.5
72
73
  signing_key:
73
74
  specification_version: 3
74
75
  summary: Behaviour Driven Development derived from Cucumber but as an internal DSL with methods for reuse