kelp 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kelp (0.1.6)
4
+ kelp (0.1.7)
5
5
  capybara (>= 0.4.0)
6
6
 
7
7
  GEM
data/History.md CHANGED
@@ -1,6 +1,13 @@
1
1
  Kelp History
2
2
  ============
3
3
 
4
+ 0.1.7
5
+ -----
6
+
7
+ - Fixed bug with dropdown_should_include, caused by Rails string monkeypatching
8
+ - Allow should_see and should_not_see to check all strings before failing
9
+
10
+
4
11
  0.1.6
5
12
  -----
6
13
 
data/README.md CHANGED
@@ -147,15 +147,16 @@ file used by the Rails generator. Run via:
147
147
 
148
148
  $ rake cucumber
149
149
 
150
- This self-test is a single scenario that exercises scenarios in
151
- `examples/sinatra_app/features`, and ensures that they perform as expected.
150
+ This self-test includes high-level scenarios that exercise more detailed
151
+ scenarios in `examples/sinatra_app/features`, ensuring that the generated step
152
+ definitions perform as expected.
152
153
 
153
154
 
154
155
  Future plans
155
156
  ------------
156
157
 
157
158
  * Generator for Rails 3
158
- * Support other stuff besides Capybara
159
+ * Support Webrat
159
160
 
160
161
 
161
162
  Copyright
@@ -5,9 +5,18 @@ Feature: Visibility
5
5
 
6
6
  Scenario: Should or shouldn't see
7
7
  Then I should see the following:
8
+ | Homepage |
8
9
  | Hello world |
9
10
  | Goodbye world |
10
11
 
12
+ And I should see the following:
13
+ """
14
+ First
15
+ Second
16
+ Third
17
+ About Us
18
+ """
19
+
11
20
  And I should not see the following:
12
21
  | Goodbye cruel world |
13
22
 
@@ -0,0 +1,27 @@
1
+ Feature: Visibility failures
2
+
3
+ Background:
4
+ Given I visit "/home"
5
+
6
+ Scenario: Should see - failure
7
+ Then I should see the following:
8
+ """
9
+ First
10
+ Missing
11
+ Second
12
+ Uh-oh
13
+ Third
14
+ Not there
15
+ """
16
+
17
+ Scenario: Should not see - failure
18
+ Then I should not see the following:
19
+ """
20
+ First
21
+ Missing
22
+ Second
23
+ Uh-oh
24
+ Third
25
+ Not there
26
+ """
27
+
@@ -20,17 +20,17 @@
20
20
  <p>
21
21
  <label for="height">Height</label>
22
22
  <select id="height">
23
- <option value="1">Short</option>
24
- <option value="2" selected="selected">Average</option>
25
- <option value="3" >Tall</option>
23
+ <option value="short">Short</option>
24
+ <option value="average" selected="selected">Average</option>
25
+ <option value="tall" >Tall</option>
26
26
  </select>
27
27
  </p>
28
28
  <p>
29
29
  <label for="weight">Weight</label>
30
30
  <select id="weight">
31
- <option value="1">Light</option>
32
- <option value="2">Medium</option>
33
- <option value="3">Heavy</option>
31
+ <option value="light">Light</option>
32
+ <option value="medium">Medium</option>
33
+ <option value="heavy">Heavy</option>
34
34
  </select>
35
35
  </p>
36
36
  <p>
@@ -8,7 +8,7 @@ Feature: Kelp Step Definitions
8
8
 
9
9
  Scenario: Checkbox test
10
10
  When I run cucumber on "checkbox.feature"
11
- Then the results should be:
11
+ Then the results should include:
12
12
  """
13
13
  2 scenarios (2 passed)
14
14
  6 steps (6 passed)
@@ -16,7 +16,7 @@ Feature: Kelp Step Definitions
16
16
 
17
17
  Scenario: Dropdown test
18
18
  When I run cucumber on "dropdown.feature"
19
- Then the results should be:
19
+ Then the results should include:
20
20
  """
21
21
  3 scenarios (3 passed)
22
22
  11 steps (11 passed)
@@ -24,7 +24,7 @@ Feature: Kelp Step Definitions
24
24
 
25
25
  Scenario: Field test
26
26
  When I run cucumber on "field.feature"
27
- Then the results should be:
27
+ Then the results should include:
28
28
  """
29
29
  2 scenarios (2 passed)
30
30
  7 steps (7 passed)
@@ -32,9 +32,24 @@ Feature: Kelp Step Definitions
32
32
 
33
33
  Scenario: Visibility test
34
34
  When I run cucumber on "visibility.feature"
35
- Then the results should be:
35
+ Then the results should include:
36
36
  """
37
37
  3 scenarios (3 passed)
38
- 11 steps (11 passed)
38
+ 12 steps (12 passed)
39
+ """
40
+
41
+ @focus
42
+ Scenario: Visibility failure test
43
+ When I run cucumber on "visibility_fail.feature"
44
+ Then the results should include:
45
+ """
46
+ Expected to see: ["First", "Missing", "Second", "Uh-oh", "Third", "Not there"]
47
+ Did not see: ["Missing", "Uh-oh", "Not there"] (Kelp::Unexpected)
39
48
  """
49
+ And the results should include:
50
+ """
51
+ Expected not to see: ["First", "Missing", "Second", "Uh-oh", "Third", "Not there"]
52
+ Did see: ["First", "Second", "Third"] (Kelp::Unexpected)
53
+ """
54
+
40
55
 
@@ -24,8 +24,11 @@ When /^I run cucumber on "(.+)"$/ do |feature|
24
24
  end
25
25
 
26
26
 
27
- Then /^the results should be:$/ do |expected_results|
28
- if !@output.include?(expected_results)
27
+ Then /^the results should include:$/ do |expected_results|
28
+ # Remove leading whitespace before comparison
29
+ got = @output.gsub(/^\s*/, '')
30
+ want = expected_results.gsub(/^\s*/, '')
31
+ if !got.include?(want)
29
32
  got = @output.collect {|line| " #{line}"}.join
30
33
  want = expected_results.collect {|line| " #{line}"}.join
31
34
  raise("Expected:\n#{want}\nGot:\n#{got}")
data/kelp.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "kelp"
5
- s.version = "0.1.6"
5
+ s.version = "0.1.7"
6
6
  s.summary = "Cucumber helper methods"
7
7
  s.description = <<-EOS
8
8
  Kelp is a collection of helper methods for Cucumber to ease the process of
data/lib/kelp/dropdown.rb CHANGED
@@ -28,10 +28,14 @@ module Kelp
28
28
  # See if there's a 'selected' option
29
29
  begin
30
30
  selected = field.find(:xpath, ".//option[@selected='selected']")
31
- # If not, find the option matching the first field value
31
+ # If not, find the option matching the field's 'value' attribute
32
32
  rescue Capybara::ElementNotFound
33
- first_value = xpath_sanitize(field.value.first)
34
- selected = field.find(:xpath, ".//option[@value=#{first_value}]")
33
+ # FIXME: Find a way to support multiple-selection dropdowns
34
+ if field.value.class == Array
35
+ raise Exception, "Multiple-selection dropdowns are not supported"
36
+ end
37
+ field_value = xpath_sanitize(field.value)
38
+ selected = field.find(:xpath, ".//option[@value=#{field_value}]")
35
39
  end
36
40
  selected.text.should =~ /#{value}/
37
41
  end
@@ -0,0 +1,5 @@
1
+ module Kelp
2
+ class Unexpected < RuntimeError
3
+ end
4
+ end
5
+
@@ -1,5 +1,6 @@
1
1
  require 'kelp/scoping'
2
2
  require 'kelp/xpath'
3
+ require 'kelp/exceptions'
3
4
 
4
5
  module Kelp
5
6
  # This module defines methods for verifying the visibility (or invisibility)
@@ -25,11 +26,20 @@ module Kelp
25
26
  #
26
27
  def should_see(texts, scope={})
27
28
  texts = [texts] if (texts.class == String || texts.class == Regexp)
29
+ unexpected = []
28
30
  in_scope(scope) do
29
31
  texts.each do |text|
30
- page_should_contain text
32
+ begin
33
+ page_should_contain text
34
+ rescue RSpec::Expectations::ExpectationNotMetError
35
+ unexpected << text
36
+ end
31
37
  end
32
38
  end
39
+ if !unexpected.empty?
40
+ raise Kelp::Unexpected,
41
+ "Expected to see: #{texts.inspect}\nDid not see: #{unexpected.inspect}"
42
+ end
33
43
  end
34
44
 
35
45
 
@@ -43,11 +53,20 @@ module Kelp
43
53
  #
44
54
  def should_not_see(texts, scope={})
45
55
  texts = [texts] if (texts.class == String || texts.class == Regexp)
56
+ unexpected = []
46
57
  in_scope(scope) do
47
58
  texts.each do |text|
48
- page_should_not_contain text
59
+ begin
60
+ page_should_not_contain text
61
+ rescue RSpec::Expectations::ExpectationNotMetError
62
+ unexpected << text
63
+ end
49
64
  end
50
65
  end
66
+ if !unexpected.empty?
67
+ raise Kelp::Unexpected,
68
+ "Expected not to see: #{texts.inspect}\nDid see: #{unexpected.inspect}"
69
+ end
51
70
  end
52
71
 
53
72
 
@@ -144,16 +144,16 @@ describe Kelp::Dropdown, "dropdown_value_should_equal" do
144
144
 
145
145
  context "passes when" do
146
146
  it "the option with the 'selected' attribute has the given value" do
147
- dropdown_value_should_equal "Height", "2"
147
+ dropdown_value_should_equal "Height", "average"
148
148
  end
149
149
 
150
150
  it "the first option selected by default has the given value" do
151
- dropdown_value_should_equal "Weight", "1"
151
+ dropdown_value_should_equal "Weight", "light"
152
152
  end
153
153
 
154
154
  it "the programmatically chosen option has the given value" do
155
155
  select "Tall", :from => "Height"
156
- dropdown_value_should_equal "Height", "3"
156
+ dropdown_value_should_equal "Height", "tall"
157
157
  end
158
158
  end
159
159
 
@@ -50,7 +50,7 @@ describe Kelp::Visibility, "should_see" do
50
50
  it "does not exist" do
51
51
  lambda do
52
52
  should_see "Goodbye cruel world"
53
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
53
+ end.should raise_error(Kelp::Unexpected)
54
54
  end
55
55
 
56
56
  it "any of several do not exist" do
@@ -60,19 +60,19 @@ describe Kelp::Visibility, "should_see" do
60
60
  "Goodbye world",
61
61
  "Hello, nurse!"
62
62
  ]
63
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
63
+ end.should raise_error(Kelp::Unexpected)
64
64
  end
65
65
 
66
66
  it "is not within a given CSS scope" do
67
67
  lambda do
68
68
  should_see "Goodbye world", :within => "#greeting"
69
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
69
+ end.should raise_error(Kelp::Unexpected)
70
70
  end
71
71
 
72
72
  it "is not within a given XPath scope" do
73
73
  lambda do
74
74
  should_see "Goodbye world", :within => "//div[@id='greeting']"
75
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
75
+ end.should raise_error(Kelp::Unexpected)
76
76
  end
77
77
 
78
78
  it "is given a nonexistent XPath scope" do
@@ -86,13 +86,13 @@ describe Kelp::Visibility, "should_see" do
86
86
  it "does not match" do
87
87
  lambda do
88
88
  should_see /(Yo|Wazzup) world/
89
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
89
+ end.should raise_error(Kelp::Unexpected)
90
90
  end
91
91
 
92
92
  it "matches but is not within the scope" do
93
93
  lambda do
94
94
  should_see /Goodbye world/, :within => "#greeting"
95
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
95
+ end.should raise_error(Kelp::Unexpected)
96
96
  end
97
97
  end
98
98
  end
@@ -151,7 +151,7 @@ describe Kelp::Visibility, "should_not_see" do
151
151
  it "exists" do
152
152
  lambda do
153
153
  should_not_see "Hello world"
154
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
154
+ end.should raise_error(Kelp::Unexpected)
155
155
  end
156
156
 
157
157
  it "any of several exist" do
@@ -161,19 +161,19 @@ describe Kelp::Visibility, "should_not_see" do
161
161
  "Goodbye cruel world",
162
162
  "Goodbye world"
163
163
  ]
164
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
164
+ end.should raise_error(Kelp::Unexpected)
165
165
  end
166
166
 
167
167
  it "exists within the given CSS scope" do
168
168
  lambda do
169
169
  should_not_see "Hello world", :within => "#greeting"
170
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
170
+ end.should raise_error(Kelp::Unexpected)
171
171
  end
172
172
 
173
173
  it "exists within the given XPath scope" do
174
174
  lambda do
175
175
  should_not_see "Hello world", :within => "//div[@id='greeting']"
176
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
176
+ end.should raise_error(Kelp::Unexpected)
177
177
  end
178
178
  end
179
179
 
@@ -181,7 +181,7 @@ describe Kelp::Visibility, "should_not_see" do
181
181
  it "matches" do
182
182
  lambda do
183
183
  should_not_see /(Hello|Goodbye) world/
184
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
184
+ end.should raise_error(Kelp::Unexpected)
185
185
  end
186
186
 
187
187
  it "any of several regexps match" do
@@ -191,13 +191,13 @@ describe Kelp::Visibility, "should_not_see" do
191
191
  /(Ciao|Later) world/,
192
192
  /(Hello|Goodbye) world/
193
193
  ]
194
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
194
+ end.should raise_error(Kelp::Unexpected)
195
195
  end
196
196
 
197
197
  it "matches within the scope" do
198
198
  lambda do
199
199
  should_not_see /(Hello|Goodbye) world/, :within => "#greeting"
200
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
200
+ end.should raise_error(Kelp::Unexpected)
201
201
  end
202
202
  end
203
203
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kelp
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 6
10
- version: 0.1.6
9
+ - 7
10
+ version: 0.1.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Eric Pierce
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-20 00:00:00 -06:00
18
+ date: 2011-04-25 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -144,6 +144,7 @@ files:
144
144
  - examples/sinatra_app/features/field.feature
145
145
  - examples/sinatra_app/features/support/env.rb
146
146
  - examples/sinatra_app/features/visibility.feature
147
+ - examples/sinatra_app/features/visibility_fail.feature
147
148
  - examples/sinatra_app/features/web_steps.rb
148
149
  - examples/sinatra_app/views/about.erb
149
150
  - examples/sinatra_app/views/edit1.erb
@@ -160,6 +161,7 @@ files:
160
161
  - lib/kelp/attribute.rb
161
162
  - lib/kelp/checkbox.rb
162
163
  - lib/kelp/dropdown.rb
164
+ - lib/kelp/exceptions.rb
163
165
  - lib/kelp/field.rb
164
166
  - lib/kelp/helper.rb
165
167
  - lib/kelp/navigation.rb