mattscilipoti_cucumber-rails 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/.gitignore +3 -0
  2. data/History.txt +84 -0
  3. data/README.rdoc +38 -0
  4. data/Rakefile +19 -0
  5. data/VERSION +1 -0
  6. data/cucumber-rails.gemspec +84 -0
  7. data/generators/cucumber/USAGE +14 -0
  8. data/generators/cucumber/cucumber_generator.rb +196 -0
  9. data/generators/cucumber/templates/config/cucumber.yml.erb +7 -0
  10. data/generators/cucumber/templates/environments/cucumber.rb.erb +37 -0
  11. data/generators/cucumber/templates/script/cucumber +10 -0
  12. data/generators/cucumber/templates/step_definitions/capybara_steps.rb.erb +187 -0
  13. data/generators/cucumber/templates/step_definitions/web_steps_cs.rb.erb +136 -0
  14. data/generators/cucumber/templates/step_definitions/web_steps_de.rb.erb +136 -0
  15. data/generators/cucumber/templates/step_definitions/web_steps_es.rb.erb +136 -0
  16. data/generators/cucumber/templates/step_definitions/web_steps_no.rb.erb +114 -0
  17. data/generators/cucumber/templates/step_definitions/web_steps_pt-BR.rb.erb +140 -0
  18. data/generators/cucumber/templates/step_definitions/webrat_steps.rb.erb +258 -0
  19. data/generators/cucumber/templates/support/_rails_each_run.rb +29 -0
  20. data/generators/cucumber/templates/support/_rails_prefork.rb.erb +10 -0
  21. data/generators/cucumber/templates/support/capybara.rb +9 -0
  22. data/generators/cucumber/templates/support/edit_warning.txt +5 -0
  23. data/generators/cucumber/templates/support/paths.rb +27 -0
  24. data/generators/cucumber/templates/support/rails.rb.erb +4 -0
  25. data/generators/cucumber/templates/support/rails_spork.rb.erb +13 -0
  26. data/generators/cucumber/templates/support/webrat.rb +8 -0
  27. data/generators/cucumber/templates/tasks/cucumber.rake.erb +42 -0
  28. data/generators/feature/USAGE +12 -0
  29. data/generators/feature/feature_generator.rb +41 -0
  30. data/generators/feature/templates/feature.erb +59 -0
  31. data/generators/feature/templates/steps.erb +14 -0
  32. data/lib/cucumber/rails/action_controller.rb +65 -0
  33. data/lib/cucumber/rails/active_record.rb +35 -0
  34. data/lib/cucumber/rails/capybara_javascript_emulation.rb +61 -0
  35. data/lib/cucumber/rails/rspec.rb +10 -0
  36. data/lib/cucumber/rails/test_unit.rb +9 -0
  37. data/lib/cucumber/rails/world.rb +47 -0
  38. data/lib/cucumber/web/tableish.rb +75 -0
  39. data/spec/cucumber/web/tableish_spec.rb +160 -0
  40. data/spec/spec_helper.rb +6 -0
  41. data/tasks/rspec.rake +13 -0
  42. metadata +107 -0
@@ -0,0 +1,10 @@
1
+ require 'cucumber/rails/world'
2
+ require 'spec/expectations'
3
+ require 'spec/rails'
4
+
5
+ [Cucumber::Rails::World, ActionController::Integration::Session].each do |klass|
6
+ klass.class_eval do
7
+ include Spec::Matchers
8
+ include Spec::Rails::Matchers
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ begin
2
+ require 'test/unit/testresult'
3
+ rescue LoadError => e
4
+ e.message << "\nYou must gem install test-unit. For more info see https://rspec.lighthouseapp.com/projects/16211/tickets/292"
5
+ e.message << "\nAlso make sure you have rack 1.0.0 or higher."
6
+ raise e
7
+ end
8
+ # So that Test::Unit doesn't launch at the end - makes it think it has already been run.
9
+ Test::Unit.run = true if Test::Unit.respond_to?(:run=)
@@ -0,0 +1,47 @@
1
+ unless defined?(Test)
2
+ begin
3
+ require 'spec/test/unit'
4
+ rescue LoadError => ignore_if_rspec_not_installed
5
+ end
6
+ end
7
+
8
+ if defined?(ActiveRecord::Base)
9
+ require 'test_help'
10
+ else
11
+ # I can't do rescue LoadError because in this files could be loaded
12
+ # from rails gem (ie. load actionpack 2.3.5 if rubygems are not disabled)
13
+ if Rails.version.to_f < 3.0
14
+ require 'action_controller/test_process'
15
+ require 'action_controller/integration'
16
+ else
17
+ require 'action_dispatch/testing/test_process'
18
+ require 'action_dispatch/testing/integration'
19
+ end
20
+ end
21
+
22
+ require 'cucumber/rails/test_unit'
23
+ require 'cucumber/rails/action_controller'
24
+
25
+
26
+ if (::Rails.respond_to?(:application) && !(::Rails.application.config.cache_classes)) ||
27
+ (!(::Rails.respond_to?(:application)) && ::Rails.respond_to?(:configuration) && !(::Rails.configuration.cache_classes))
28
+ warn "WARNING: You have set Rails' config.cache_classes to false (most likely in config/environments/cucumber.rb). This setting is known to break Cucumber's use_transactional_fixtures method. Set config.cache_classes to true if you want to use transactional fixtures. For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165."
29
+ end
30
+
31
+ module Cucumber #:nodoc:
32
+ module Rails
33
+ class World < ActionController::IntegrationTest
34
+ include ActiveSupport::Testing::SetupAndTeardown if ActiveSupport::Testing.const_defined?("SetupAndTeardown")
35
+ cattr_accessor :clean_database_after
36
+ World.clean_database_after = true
37
+
38
+ def initialize #:nodoc:
39
+ @_result = Test::Unit::TestResult.new
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ World do
46
+ Cucumber::Rails::World.new
47
+ end
@@ -0,0 +1,75 @@
1
+ require 'nokogiri'
2
+
3
+ module Cucumber
4
+ module Tableish
5
+ # This method returns an Array of Array of String, using CSS3 selectors.
6
+ # This is particularly handy when using Cucumber's Table#diff! method.
7
+ #
8
+ # The +row_selector+ argument must be a String, and picks out all the rows
9
+ # from the web page's DOM. If the number of cells in each row differs, it
10
+ # will be constrained by (or padded with) the number of cells in the first row
11
+ #
12
+ # The +column_selectors+ argument must be a String or a Proc, picking out
13
+ # cells from each row. If you pass a Proc, it will be yielded an instance
14
+ # of Nokogiri::HTML::Element.
15
+ #
16
+ # == Example with a table
17
+ #
18
+ # <table id="tools">
19
+ # <tr>
20
+ # <th>tool</th>
21
+ # <th>dude</th>
22
+ # </tr>
23
+ # <tr>
24
+ # <td>webrat</td>
25
+ # <td>bryan</td>
26
+ # </tr>
27
+ # <tr>
28
+ # <td>cucumber</td>
29
+ # <td>aslak</td>
30
+ # </tr>
31
+ # </table>
32
+ #
33
+ # t = tableish('table#tools tr', 'td,th')
34
+ #
35
+ # == Example with a dl
36
+ #
37
+ # <dl id="tools">
38
+ # <dt>webrat</dt>
39
+ # <dd>bryan</dd>
40
+ # <dt>cucumber</dt>
41
+ # <dd>aslak</dd>
42
+ # </dl>
43
+ #
44
+ # t = tableish('dl#tools dt', lambda{|dt| [dt, dt.next.next]})
45
+ #
46
+ def tableish(row_selector, column_selectors)
47
+ html = defined?(Capybara) ? body : response_body
48
+ _tableish(html, row_selector, column_selectors)
49
+ end
50
+
51
+ def _tableish(html, row_selector, column_selectors) #:nodoc
52
+ doc = Nokogiri::HTML(html)
53
+ column_count = nil
54
+ doc.search(row_selector).map do |row|
55
+ cells = case(column_selectors)
56
+ when String
57
+ row.search(column_selectors)
58
+ when Proc
59
+ column_selectors.call(row)
60
+ end
61
+ column_count ||= cells.length
62
+ (0...column_count).map do |n|
63
+ cell = cells[n]
64
+ case(cell)
65
+ when String then cell.strip
66
+ when nil then ''
67
+ else cell.text.strip
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+
75
+ World(Cucumber::Tableish)
@@ -0,0 +1,160 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ def World(*a); end
4
+ require 'cucumber/web/tableish'
5
+
6
+ module Cucumber
7
+ module Web
8
+ describe Tableish do
9
+ include Tableish
10
+
11
+ unless RUBY_PLATFORM =~ /java/
12
+ it "should convert a table" do
13
+ html = <<-HTML
14
+ <table id="tools">
15
+ <tr>
16
+ <th>tool</th>
17
+ <th>dude</th>
18
+ </tr>
19
+ <tr>
20
+ <td>webrat</td>
21
+ <td>bryan</td>
22
+ </tr>
23
+ <tr>
24
+ <td>cucumber</td>
25
+ <td>aslak</td>
26
+ </tr>
27
+ </table>
28
+ HTML
29
+
30
+ _tableish(html, 'table#tools tr', 'td,th').should == [
31
+ %w{tool dude},
32
+ %w{webrat bryan},
33
+ %w{cucumber aslak}
34
+ ]
35
+ end
36
+
37
+ it "should size to the first row" do
38
+ html = <<-HTML
39
+ <table id="tools">
40
+ <tr>
41
+ <th>tool</th>
42
+ <th>dude</th>
43
+ </tr>
44
+ <tr>
45
+ <td>webrat</td>
46
+ <td>bryan</td>
47
+ <td>crapola</td>
48
+ </tr>
49
+ <tr>
50
+ <td>cucumber</td>
51
+ <td>aslak</td>
52
+ <td>gunk</td>
53
+ <td>filth</td>
54
+ </tr>
55
+ </table>
56
+ HTML
57
+
58
+ _tableish(html, 'table#tools tr', 'td,th').should == [
59
+ %w{tool dude},
60
+ %w{webrat bryan},
61
+ %w{cucumber aslak}
62
+ ]
63
+ end
64
+
65
+ it "should pad with empty Strings if some rows are shorter" do
66
+ html = <<-HTML
67
+ <table id="tools">
68
+ <tr>
69
+ <th>tool</th>
70
+ <th>dude</th>
71
+ </tr>
72
+ <tr>
73
+ <td>webrat</td>
74
+ <td>bryan</td>
75
+ </tr>
76
+ <tr>
77
+ <td>cucumber</td>
78
+ </tr>
79
+ </table>
80
+ HTML
81
+
82
+ _tableish(html, 'table#tools tr', 'td,th').should == [
83
+ %w{tool dude},
84
+ %w{webrat bryan},
85
+ ['cucumber', '']
86
+ ]
87
+ end
88
+
89
+ it "should convert a dl" do
90
+ html = <<-HTML
91
+ <dl id="tools">
92
+ <dt>webrat</dt>
93
+ <dd>bryan</dd>
94
+ <dt>cucumber</dt>
95
+ <dd>aslak</dd>
96
+ </dl>
97
+ HTML
98
+
99
+ _tableish(html, 'dl#tools dt', lambda{|dt| [dt, dt.next.next]}).should == [
100
+ %w{webrat bryan},
101
+ %w{cucumber aslak}
102
+ ]
103
+ end
104
+
105
+ it "should convert a ul" do
106
+ html = <<-HTML
107
+ <ul id="phony">
108
+ <li>nope</li>
109
+ </ul>
110
+
111
+ <ul id="yes">
112
+ <li>webrat</li>
113
+ <li>bryan</li>
114
+ <li>cucumber</li>
115
+ <li>aslak</li>
116
+ </ul>
117
+ HTML
118
+
119
+ _tableish(html, 'ul#yes li', lambda{|li| [li]}).should == [
120
+ %w{webrat},
121
+ %w{bryan},
122
+ %w{cucumber},
123
+ %w{aslak},
124
+ ]
125
+ end
126
+
127
+ it "should do complex shit" do
128
+ html = <<-HTML
129
+ <form method="post" action="/invoices/10/approve" class="button-to">
130
+ <div>
131
+ <input id="approve_invoice_10" type="submit" value="Approve" />
132
+ <input name="authenticity_token" type="hidden" value="WxKGVy3Y5zcvFEiFe66D/odoc3CicfMdAup4vzQfiZ0=" />
133
+ <span>Hello&nbsp;World<span>
134
+ </div>
135
+ </form>
136
+ <form method="post" action="/invoices/10/delegate" class="button-to">
137
+ <div>
138
+ <input id="delegate_invoice_10" type="submit" value="Delegate" />
139
+ <input name="authenticity_token" type="hidden" value="WxKGVy3Y5zcvFEiFe66D/odoc3CicfMdAup4vzQfiZ0=" />
140
+ <span>Hi There<span>
141
+ </div>
142
+ </form>
143
+ HTML
144
+
145
+ selectors = lambda do |form|
146
+ [
147
+ form.css('div input:nth-child(1)').first.attributes['value'],
148
+ form.css('span').first.text.gsub(/\302\240/, ' ')
149
+ ]
150
+ end
151
+
152
+ _tableish(html, 'form', selectors).should == [
153
+ ['Approve', "Hello World"],
154
+ ['Delegate', 'Hi There']
155
+ ]
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ gem 'rspec'
3
+ require 'spec'
4
+ require 'spec/autorun'
5
+
6
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
data/tasks/rspec.rake ADDED
@@ -0,0 +1,13 @@
1
+ begin
2
+ require 'spec/rake/spectask'
3
+
4
+ desc "Run RSpec"
5
+ Spec::Rake::SpecTask.new do |t|
6
+ t.spec_opts = %w{--color --diff --format profile}
7
+ t.spec_files = FileList['spec/**/*_spec.rb']
8
+ t.rcov = ENV['RCOV']
9
+ t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/}
10
+ end
11
+ rescue LoadError
12
+ task :spec
13
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mattscilipoti_cucumber-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.4
5
+ platform: ruby
6
+ authors:
7
+ - "Dennis Bl\xC3\xB6te"
8
+ - "Aslak Helles\xC3\xB8y"
9
+ - Rob Holland
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2010-01-25 00:00:00 -05:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: cucumber
19
+ type: :runtime
20
+ version_requirement:
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 0.6.2
26
+ version:
27
+ description: Cucumber Generators and Runtime for Rails
28
+ email: cukes@googlegroups.com
29
+ executables: []
30
+
31
+ extensions: []
32
+
33
+ extra_rdoc_files:
34
+ - README.rdoc
35
+ files:
36
+ - .gitignore
37
+ - History.txt
38
+ - README.rdoc
39
+ - Rakefile
40
+ - VERSION
41
+ - cucumber-rails.gemspec
42
+ - generators/cucumber/USAGE
43
+ - generators/cucumber/cucumber_generator.rb
44
+ - generators/cucumber/templates/config/cucumber.yml.erb
45
+ - generators/cucumber/templates/environments/cucumber.rb.erb
46
+ - generators/cucumber/templates/script/cucumber
47
+ - generators/cucumber/templates/step_definitions/capybara_steps.rb.erb
48
+ - generators/cucumber/templates/step_definitions/web_steps_cs.rb.erb
49
+ - generators/cucumber/templates/step_definitions/web_steps_de.rb.erb
50
+ - generators/cucumber/templates/step_definitions/web_steps_es.rb.erb
51
+ - generators/cucumber/templates/step_definitions/web_steps_no.rb.erb
52
+ - generators/cucumber/templates/step_definitions/web_steps_pt-BR.rb.erb
53
+ - generators/cucumber/templates/step_definitions/webrat_steps.rb.erb
54
+ - generators/cucumber/templates/support/_rails_each_run.rb
55
+ - generators/cucumber/templates/support/_rails_prefork.rb.erb
56
+ - generators/cucumber/templates/support/capybara.rb
57
+ - generators/cucumber/templates/support/edit_warning.txt
58
+ - generators/cucumber/templates/support/paths.rb
59
+ - generators/cucumber/templates/support/rails.rb.erb
60
+ - generators/cucumber/templates/support/rails_spork.rb.erb
61
+ - generators/cucumber/templates/support/webrat.rb
62
+ - generators/cucumber/templates/tasks/cucumber.rake.erb
63
+ - generators/feature/USAGE
64
+ - generators/feature/feature_generator.rb
65
+ - generators/feature/templates/feature.erb
66
+ - generators/feature/templates/steps.erb
67
+ - lib/cucumber/rails/action_controller.rb
68
+ - lib/cucumber/rails/active_record.rb
69
+ - lib/cucumber/rails/capybara_javascript_emulation.rb
70
+ - lib/cucumber/rails/rspec.rb
71
+ - lib/cucumber/rails/test_unit.rb
72
+ - lib/cucumber/rails/world.rb
73
+ - lib/cucumber/web/tableish.rb
74
+ - spec/cucumber/web/tableish_spec.rb
75
+ - spec/spec_helper.rb
76
+ - tasks/rspec.rake
77
+ has_rdoc: true
78
+ homepage: http://github.com/aslakhellesoy/cucumber-rails
79
+ licenses: []
80
+
81
+ post_install_message:
82
+ rdoc_options:
83
+ - --charset=UTF-8
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ version:
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: "0"
97
+ version:
98
+ requirements: []
99
+
100
+ rubyforge_project:
101
+ rubygems_version: 1.3.5
102
+ signing_key:
103
+ specification_version: 3
104
+ summary: Cucumber Generators and Runtime for Rails
105
+ test_files:
106
+ - spec/cucumber/web/tableish_spec.rb
107
+ - spec/spec_helper.rb