cucumber-wordpress 1.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENCE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright © 2009, The Dextrous Web
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for any
4
+ purpose with or without fee is hereby granted, provided that the above
5
+ copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
9
+ FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
+ PERFORMANCE OF THIS SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,38 @@
1
+ = cucumber-wordpress
2
+
3
+ Environment setup and step definitions for testing WordPress with Cucumber.
4
+
5
+ == Getting started
6
+
7
+ Install the gem:
8
+ gem install cucumber-wordpress --source http://gemcutter.org
9
+
10
+ Copy the examples/features/ directory into an existing WordPress installation:
11
+ cd wordpress-installation
12
+ cp /usr/lib/ruby/gems/1.8/gems/cucumber-wordpress-1.0/examples/features .
13
+
14
+ Configure wp-config variables:
15
+ vim features/support/config.yml
16
+
17
+ Run cucumber:
18
+ cucumber
19
+
20
+ == Caveats
21
+
22
+ * The WordPress installation you're testing must be being served over HTTP
23
+ somehow (see WEBHOST in config.yml). Eventually I want to be able to start a
24
+ Web server from within cucumber.
25
+ * wp-config.php gets copied elsewhere and overwritten, so you can't be running
26
+ this in a production environment.
27
+
28
+ == Patches
29
+
30
+ * Send me a pull request via GitHub or an email at tom@thedextrousweb.com.
31
+
32
+ == Author
33
+
34
+ * Tom Adams <tom@thedextrousweb.com>
35
+
36
+ == Copyright
37
+
38
+ Copyright (c) 2009 The Dextrous Web. See LICENCE for details.
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ begin
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |gem|
4
+ gem.version = "1.0"
5
+ gem.name = "cucumber-wordpress"
6
+ gem.summary = %Q{Environment setup and step definitions for testing WordPress with Cucumber}
7
+ gem.email = "tom@thedextrousweb.com"
8
+ gem.homepage = "http://github.com/dxw/cucumber-wordpress"
9
+ gem.authors = ["Tom Adams"]
10
+ gem.add_dependency "cucumber"
11
+ gem.add_dependency "webrat"
12
+ gem.add_dependency "mysql"
13
+ end
14
+ Jeweler::GemcutterTasks.new
15
+ rescue LoadError
16
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
17
+ end
@@ -0,0 +1,159 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
2
+
3
+ # Commonly used webrat steps
4
+ # http://github.com/brynary/webrat
5
+
6
+ Given /^I am on (.+)$/ do |page_name|
7
+ visit path_to(page_name)
8
+ end
9
+
10
+ When /^I go to (.+)$/ do |page_name|
11
+ visit path_to(page_name)
12
+ end
13
+
14
+ When /^I press "([^\"]*)"$/ do |button|
15
+ click_button(button)
16
+ end
17
+
18
+ When /^I follow "([^\"]*)"$/ do |link|
19
+ click_link(link)
20
+ end
21
+
22
+ When /^I follow "([^\"]*)" within "([^\"]*)"$/ do |link, parent|
23
+ click_link_within(parent, link)
24
+ end
25
+
26
+ When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
27
+ fill_in(field, :with => value)
28
+ end
29
+
30
+ # Use this to fill in an entire form with data from a table. Example:
31
+ #
32
+ # When I fill in the following:
33
+ # | Account Number | 5002 |
34
+ # | Expiry date | 2009-11-01 |
35
+ # | Note | Nice guy |
36
+ # | Wants Email? | |
37
+ #
38
+ # TODO: Add support for checkbox, select og option
39
+ # based on naming conventions.
40
+ #
41
+ When /^I fill in the following:$/ do |fields|
42
+ fields.rows_hash.each do |name, value|
43
+ When %{I fill in "#{name}" with "#{value}"}
44
+ end
45
+ end
46
+
47
+ When /^I select "([^\"]*)" from "([^\"]*)"$/ do |value, field|
48
+ select(value, :from => field)
49
+ end
50
+
51
+ # Use this step in conjunction with Rail's datetime_select helper. For example:
52
+ # When I select "December 25, 2008 10:00" as the date and time
53
+ When /^I select "([^\"]*)" as the date and time$/ do |time|
54
+ select_datetime(time)
55
+ end
56
+
57
+ # Use this step when using multiple datetime_select helpers on a page or
58
+ # you want to specify which datetime to select. Given the following view:
59
+ # <%= f.label :preferred %><br />
60
+ # <%= f.datetime_select :preferred %>
61
+ # <%= f.label :alternative %><br />
62
+ # <%= f.datetime_select :alternative %>
63
+ # The following steps would fill out the form:
64
+ # When I select "November 23, 2004 11:20" as the "Preferred" date and time
65
+ # And I select "November 25, 2004 10:30" as the "Alternative" date and time
66
+ When /^I select "([^\"]*)" as the "([^\"]*)" date and time$/ do |datetime, datetime_label|
67
+ select_datetime(datetime, :from => datetime_label)
68
+ end
69
+
70
+ # Use this step in conjunction with Rail's time_select helper. For example:
71
+ # When I select "2:20PM" as the time
72
+ # Note: Rail's default time helper provides 24-hour time-- not 12 hour time. Webrat
73
+ # will convert the 2:20PM to 14:20 and then select it.
74
+ When /^I select "([^\"]*)" as the time$/ do |time|
75
+ select_time(time)
76
+ end
77
+
78
+ # Use this step when using multiple time_select helpers on a page or you want to
79
+ # specify the name of the time on the form. For example:
80
+ # When I select "7:30AM" as the "Gym" time
81
+ When /^I select "([^\"]*)" as the "([^\"]*)" time$/ do |time, time_label|
82
+ select_time(time, :from => time_label)
83
+ end
84
+
85
+ # Use this step in conjunction with Rail's date_select helper. For example:
86
+ # When I select "February 20, 1981" as the date
87
+ When /^I select "([^\"]*)" as the date$/ do |date|
88
+ select_date(date)
89
+ end
90
+
91
+ # Use this step when using multiple date_select helpers on one page or
92
+ # you want to specify the name of the date on the form. For example:
93
+ # When I select "April 26, 1982" as the "Date of Birth" date
94
+ When /^I select "([^\"]*)" as the "([^\"]*)" date$/ do |date, date_label|
95
+ select_date(date, :from => date_label)
96
+ end
97
+
98
+ When /^I check "([^\"]*)"$/ do |field|
99
+ check(field)
100
+ end
101
+
102
+ When /^I uncheck "([^\"]*)"$/ do |field|
103
+ uncheck(field)
104
+ end
105
+
106
+ When /^I choose "([^\"]*)"$/ do |field|
107
+ choose(field)
108
+ end
109
+
110
+ When /^I attach the file at "([^\"]*)" to "([^\"]*)"$/ do |path, field|
111
+ attach_file(field, path)
112
+ end
113
+
114
+ Then /^I should see "([^\"]*)"$/ do |text|
115
+ response.should contain(text)
116
+ end
117
+
118
+ Then /^I should see \/([^\/]*)\/$/ do |regexp|
119
+ regexp = Regexp.new(regexp)
120
+ response.should contain(regexp)
121
+ end
122
+
123
+ Then /^I should not see "([^\"]*)"$/ do |text|
124
+ response.should_not contain(text)
125
+ end
126
+
127
+ Then /^I should not see \/([^\/]*)\/$/ do |regexp|
128
+ regexp = Regexp.new(regexp)
129
+ response.should_not contain(regexp)
130
+ end
131
+
132
+ Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
133
+ field_labeled(field).value.should =~ /#{value}/
134
+ end
135
+
136
+ Then /^the "([^\"]*)" field should not contain "([^\"]*)"$/ do |field, value|
137
+ field_labeled(field).value.should_not =~ /#{value}/
138
+ end
139
+
140
+ Then /^the "([^\"]*)" checkbox should be checked$/ do |label|
141
+ field_labeled(label).should be_checked
142
+ end
143
+
144
+ Then /^the "([^\"]*)" checkbox should not be checked$/ do |label|
145
+ field_labeled(label).should_not be_checked
146
+ end
147
+
148
+ Then /^I should be on (.+)$/ do |page_name|
149
+ uri = URI.parse(current_url)
150
+ if uri.query.blank?
151
+ uri.path.should == path_to(page_name)
152
+ else
153
+ "#{uri.path}?#{uri.query}".should include(path_to(page_name))
154
+ end
155
+ end
156
+
157
+ Then /^show me the page$/ do
158
+ save_and_open_page
159
+ end
@@ -0,0 +1,9 @@
1
+ ---
2
+ WEBHOST: localhost
3
+ DB_NAME: wordpress_test
4
+ DB_USER: root
5
+ DB_PASSWORD:
6
+ DB_HOST: localhost
7
+ DB_CHARSET: utf8
8
+ DB_COLLATE:
9
+ TABLE_PREFIX: wp_
@@ -0,0 +1,96 @@
1
+ #
2
+ # All the standard stuff
3
+ #
4
+
5
+ require 'spec/mocks'
6
+ require 'webrat'
7
+ Webrat.configure do |config|
8
+ config.mode = :mechanize
9
+ end
10
+ World do
11
+ session = Webrat::Session.new
12
+ session.extend(Webrat::Methods)
13
+ session.extend(Webrat::Matchers)
14
+ session
15
+ end
16
+
17
+ #
18
+ # WordPress stuff
19
+ #
20
+
21
+ require 'cucumber-wordpress'
22
+ require 'cucumber-wordpress/steps'
23
+
24
+ # Get the WordPress configuration for this site
25
+ WordPress.configure(YAML::load(open(File.join(File.dirname(__FILE__),'config.yml'))))
26
+
27
+ # Hide the original wp-config.php, and write our own
28
+ WordPress.write_config
29
+ WordPress.create_db
30
+
31
+ at_exit do
32
+ # Replace the original wp-config.php (if it existed)
33
+ WordPress.reset_config
34
+ WordPress.drop_db
35
+ end
36
+
37
+ # Before every scenario, reset the DB to how it was when it was first installed
38
+ Before do |scenario|
39
+ WordPress.reset_db
40
+ end
41
+
42
+ #
43
+ # And we're done!
44
+ # Apart from a couple of patches we need to apply to webrat...
45
+ #
46
+
47
+ # For some reason the MechanizeAdapter uses response_body instead of response.body.
48
+ # This is needed
49
+ module Webrat
50
+ class Session
51
+ include Spec::Mocks::ExampleMethods
52
+ def response
53
+ m = mock
54
+ m.should_receive(:body).any_number_of_times.and_return(response_body)
55
+ m
56
+ end
57
+ end
58
+ end
59
+
60
+ # Use XPath in click_link_within, etc.
61
+ # This is needed too
62
+ module Webrat
63
+ class Scope
64
+ protected
65
+
66
+ def xpath_scoped_dom
67
+ Webrat::XML.xpath_at(@scope.dom, @selector)
68
+ end
69
+
70
+ def scoped_dom
71
+ begin
72
+ Webrat::XML.css_at(@scope.dom, @selector)
73
+ rescue Nokogiri::CSS::SyntaxError, Nokogiri::XML::XPath::SyntaxError => e
74
+ begin
75
+ # That was not a css selector, mayby it's an xpath selector?
76
+ xpath_scoped_dom
77
+ rescue
78
+ # Raise original css syntax error if selector is not xpath either
79
+ raise e
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ # Fix attach_file so it works with mechanize
87
+ # Thanks: https://webrat.lighthouseapp.com/projects/10503/tickets/303-tiny-patch-for-attach_file-to-work-with-mechanize
88
+ # This is not needed for cucumber-wordpress (yet)
89
+ module Webrat
90
+ class FileField < Field
91
+ protected
92
+ def test_uploaded_file
93
+ open(@value)
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,21 @@
1
+ require 'cucumber-wordpress'
2
+
3
+ module NavigationHelpers
4
+ def path_to(page_name)
5
+
6
+ # Default WordPress paths
7
+ path = WordPress.path_to(page_name)
8
+ return path unless path.nil?
9
+
10
+ # Our own paths
11
+ partial = case page_name
12
+ when /^my special page$/
13
+ '/my-special-page.php'
14
+ else
15
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n"
16
+ end
17
+ URI::join("http://#{WordPress.WEBHOST}/", partial)
18
+ end
19
+ end
20
+
21
+ World(NavigationHelpers)
@@ -0,0 +1,18 @@
1
+ Feature: WordPress example
2
+ WordPress should be as easy to test as Rails.
3
+
4
+ Background:
5
+ Given WordPress is installed
6
+
7
+ Scenario: Submitting a post
8
+ Given I am logged in as "admin"
9
+ And I am on admin dashboard
10
+ When I follow "Add New" within "#menu-posts"
11
+ Then I should see "Add New Post"
12
+ When I fill in "title" with "hullo thar"
13
+ And I fill in "content" with "I &amp;lt;3 cucumber"
14
+ And I press "publish"
15
+ Then there should be 1 post
16
+ Given I am on homepage
17
+ Then I should see "hullo thar"
18
+ And I should see "I <3 cucumber"
@@ -0,0 +1,71 @@
1
+ Given /^WordPress is installed$/ do
2
+ visit path_to 'homepage'
3
+ title = 'A Very Boring Test Title'
4
+ if response.body.include? '<title>WordPress &rsaquo; Installation</title>'
5
+ fill_in('Blog Title', :with => title)
6
+ fill_in('Your E-mail', :with => 'test@wordpress.org')
7
+ click_button('Install WordPress')
8
+ WordPress.passwords = {'admin' => response.body.match(%r[<td><code>(.+)</code><br />])[1]}
9
+ end
10
+ visit path_to 'homepage'
11
+ unless response.body.include? "<title> #{title}</title>"
12
+ raise Exception
13
+ end
14
+
15
+ # Take this so we can reset the DB before each scenario
16
+ WordPress.original_contents = {}
17
+ %w[comments
18
+ links
19
+ options
20
+ postmeta
21
+ posts
22
+ term_relationships
23
+ term_taxonomy
24
+ terms
25
+ usermeta
26
+ users].each do |table|
27
+ WordPress.original_contents[table] = WordPress.mysql.query("select * from #{WordPress.TABLE_PREFIX}#{table}").map{|row|row}
28
+ end
29
+ end
30
+
31
+ Given /^I am logged in as "([^\"]*)"$/ do |user|
32
+ visit path_to 'login page'
33
+ fill_in('Username', :with => user)
34
+ fill_in('Password', :with => WordPress.passwords[user])
35
+ click_button('Log In')
36
+ end
37
+
38
+ Given /^plugin "([^\"]*)" is (enabled|disabled)$/ do |plugin,able|
39
+ Given 'I am logged in as "admin"'
40
+ visit path_to 'admin dashboard'
41
+ click_link('Plugins')
42
+ link = %Q&//a[contains(@href,"#{plugin}")]&
43
+ if dom.xpath("#{link}/child::text()").any?{|t|t.to_s == 'Activate'}
44
+ if able == 'enabled'
45
+ click_link_within("#{link}/..",'Activate')
46
+ else
47
+ click_link_within("#{link}/..",'Deactivate')
48
+ end
49
+ end
50
+ end
51
+
52
+ Then /^there should be (\d+) posts?$/ do |count|
53
+ WordPress.mysql.query("select count(*) from #{WordPress.TABLE_PREFIX}posts where ID != 1 and post_type = 'post'").fetch_row.first.to_i.should == count.to_i
54
+ end
55
+
56
+ Then /^there should be (\d+) categories?$/ do |count|
57
+ # Two initial categories, which we won't count: Uncategorized and Blogroll
58
+ WordPress.mysql.query("select count(*) from #{WordPress.TABLE_PREFIX}terms where term_id > 2").fetch_row.first.to_i.should == count.to_i
59
+ end
60
+
61
+ Then /^there should be a category called "([^\"]*)"$/ do |category|
62
+ WordPress.mysql.query("select count(*) > 0 from #{WordPress.TABLE_PREFIX}terms where name = '#{Mysql.escape_string(category)}' or slug = '#{Mysql.escape_string(category)}'").fetch_row.first.to_i.should == 1
63
+ end
64
+
65
+ Then /^there should be a post called "([^\"]*)"$/ do |post|
66
+ WordPress.mysql.query("select count(*) > 0 from #{WordPress.TABLE_PREFIX}posts where post_title = '#{Mysql.escape_string(post)}' or post_name = '#{Mysql.escape_string(post)}'").fetch_row.first.to_i.should == 1
67
+ end
68
+
69
+ Then /^there should be a post called "([^\"]*)" in the "([^\"]*)" category$/ do |post, category|
70
+ WordPress.mysql.query("select count(*) > 0 from #{WordPress.TABLE_PREFIX}terms join #{WordPress.TABLE_PREFIX}term_relationships join #{WordPress.TABLE_PREFIX}posts where (post_title = '#{Mysql.escape_string(post)}' or post_name = '#{Mysql.escape_string(post)}') and (name = '#{Mysql.escape_string(category)}' or slug = '#{Mysql.escape_string(category)}')").fetch_row.first.to_i.should == 1
71
+ end
@@ -0,0 +1,90 @@
1
+ require 'singleton'
2
+ require 'mysql'
3
+ Mysql::Result.send(:include, Enumerable)
4
+
5
+ class WordPress
6
+ include Singleton
7
+
8
+ def self.method_missing(method, *args)
9
+ self.instance.send(method, *args)
10
+ end
11
+
12
+ attr_accessor :passwords, :mysql, :original_contents
13
+ attr_accessor :WEBHOST, :DB_NAME, :DB_USER, :DB_PASSWORD, :DB_HOST, :DB_CHARSET, :DB_COLLATE, :TABLE_PREFIX
14
+
15
+ def configure(data)
16
+ @WEBHOST = data['WEBHOST'].to_s
17
+ @DB_NAME = data['DB_NAME'].to_s
18
+ @DB_USER = data['DB_USER'].to_s
19
+ @DB_PASSWORD = data['DB_PASSWORD'].to_s
20
+ @DB_HOST = data['DB_HOST'].to_s
21
+ @DB_CHARSET = data['DB_CHARSET'].to_s
22
+ @DB_COLLATE = data['DB_COLLATE'].to_s
23
+ @TABLE_PREFIX = data['TABLE_PREFIX'].to_s
24
+ end
25
+
26
+ def create_db
27
+ @mysql = Mysql::new(@DB_HOST, @DB_USER, @DB_PASSWORD)
28
+ @mysql.query("create database if not exists #{@DB_NAME} character set = #{@DB_CHARSET}#{@DB_COLLATE.present? ? " collate = #{@DB_COLLATE}" : ''}")
29
+ @mysql.query("use #{@DB_NAME}")
30
+ end
31
+
32
+ def drop_db
33
+ @mysql.query("drop database if exists #{@DB_NAME}")
34
+ end
35
+
36
+ def write_config
37
+ # Copy production DB elsewhere
38
+ @has_config = File.exist? 'wp-config.php'
39
+ FileUtils.cp 'wp-config.php', '.wp-config.php' if @has_config
40
+
41
+ # Write our own
42
+ open('wp-config.php','w+') do |f|
43
+ f.write <<HERE
44
+ <?php
45
+ define('DB_NAME', '#{@DB_NAME}');
46
+ define('DB_USER', '#{@DB_USER}');
47
+ define('DB_PASSWORD', '#{@DB_PASSWORD}');
48
+ define('DB_HOST', '#{@DB_HOST}');
49
+ define('DB_CHARSET', '#{@DB_CHARSET}');
50
+ define('DB_COLLATE', '#{@DB_COLLATE}');
51
+ $table_prefix = '#{@TABLE_PREFIX}';
52
+ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/');
53
+ require_once(ABSPATH . 'wp-settings.php');
54
+ HERE
55
+ end
56
+ end
57
+
58
+ def reset_config
59
+ FileUtils.rm 'wp-config.php'
60
+ FileUtils.mv '.wp-config.php', 'wp-config.php' if @has_config
61
+ end
62
+
63
+ def reset_db
64
+ @original_contents.nil? ? nil : @original_contents.each_pair do |table,contents|
65
+ @mysql.query("delete from #{@TABLE_PREFIX}#{table}")
66
+ contents.each do |row|
67
+ values = row.map{|v|"#{v.nil? ? 'null' : "'"+Mysql.escape_string(v)+"'"}"}.join(', ')
68
+ @mysql.query("insert into #{@TABLE_PREFIX}#{table} values (#{values})")
69
+ end
70
+ end
71
+ end
72
+
73
+ def path_to(page_name)
74
+ partial = case page_name
75
+ when /^homepage$/
76
+ '/'
77
+ when /^login page$/
78
+ '/wp-login.php'
79
+ when /^admin dashboard$/
80
+ '/wp-admin/'
81
+ when /^upload new consultation$/
82
+ '/wp-admin/consultation-new.php'
83
+ when /^media library$/
84
+ "/wp-admin/upload.php"
85
+ else
86
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n"
87
+ end
88
+ URI::join("http://#{@WEBHOST}/", partial)
89
+ end
90
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cucumber-wordpress
3
+ version: !ruby/object:Gem::Version
4
+ version: "1.0"
5
+ platform: ruby
6
+ authors:
7
+ - Tom Adams
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-19 00:00:00 +00:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: cucumber
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: webrat
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: mysql
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ description:
46
+ email: tom@thedextrousweb.com
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - README.rdoc
53
+ files:
54
+ - LICENCE
55
+ - README.rdoc
56
+ - Rakefile
57
+ - examples/features/step_definitions/webrat_steps.rb
58
+ - examples/features/support/config.yml
59
+ - examples/features/support/env.rb
60
+ - examples/features/support/paths.rb
61
+ - examples/features/wordpress.feature
62
+ - lib/cucumber-wordpress.rb
63
+ - lib/cucumber-wordpress/steps.rb
64
+ has_rdoc: true
65
+ homepage: http://github.com/dxw/cucumber-wordpress
66
+ licenses: []
67
+
68
+ post_install_message:
69
+ rdoc_options:
70
+ - --charset=UTF-8
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ version:
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: "0"
84
+ version:
85
+ requirements: []
86
+
87
+ rubyforge_project:
88
+ rubygems_version: 1.3.5
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: Environment setup and step definitions for testing WordPress with Cucumber
92
+ test_files:
93
+ - examples/features/support/paths.rb
94
+ - examples/features/support/env.rb
95
+ - examples/features/step_definitions/webrat_steps.rb