bret-watircraft 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/BUGS.txt +11 -0
- data/History.txt +209 -0
- data/Manifest.txt +103 -0
- data/README.rdoc +75 -0
- data/VERSION.yml +4 -0
- data/app_generators/watircraft/USAGE +11 -0
- data/app_generators/watircraft/templates/config.yml.erb +3 -0
- data/app_generators/watircraft/templates/feature_helper.rb +12 -0
- data/app_generators/watircraft/templates/initialize.rb.erb +10 -0
- data/app_generators/watircraft/templates/rakefile.rb +3 -0
- data/app_generators/watircraft/templates/script/console +5 -0
- data/app_generators/watircraft/templates/script/console.cmd +1 -0
- data/app_generators/watircraft/templates/site_start.rb.erb +12 -0
- data/app_generators/watircraft/templates/spec_helper.rb +9 -0
- data/app_generators/watircraft/templates/spec_initialize.rb +16 -0
- data/app_generators/watircraft/templates/world.rb +12 -0
- data/app_generators/watircraft/watircraft_generator.rb +108 -0
- data/bin/watircraft +17 -0
- data/lib/extensions/array.rb +10 -0
- data/lib/extensions/hash.rb +5 -0
- data/lib/extensions/object.rb +24 -0
- data/lib/extensions/string.rb +17 -0
- data/lib/extensions/watir.rb +41 -0
- data/lib/taza/browser.rb +45 -0
- data/lib/taza/entity.rb +34 -0
- data/lib/taza/fixture.rb +66 -0
- data/lib/taza/flow.rb +40 -0
- data/lib/taza/page.rb +259 -0
- data/lib/taza/settings.rb +80 -0
- data/lib/taza/site.rb +227 -0
- data/lib/taza/tasks.rb +30 -0
- data/lib/taza.rb +35 -0
- data/lib/watircraft/generator_helper.rb +27 -0
- data/lib/watircraft/table.rb +56 -0
- data/lib/watircraft/version.rb +3 -0
- data/lib/watircraft.rb +1 -0
- data/spec/array_spec.rb +16 -0
- data/spec/browser_spec.rb +68 -0
- data/spec/entity_spec.rb +9 -0
- data/spec/fake_table.rb +34 -0
- data/spec/fixture_spec.rb +34 -0
- data/spec/fixtures_spec.rb +21 -0
- data/spec/hash_spec.rb +12 -0
- data/spec/object_spec.rb +29 -0
- data/spec/page_generator_spec.rb +111 -0
- data/spec/page_spec.rb +342 -0
- data/spec/project_generator_spec.rb +103 -0
- data/spec/sandbox/config/config.yml +1 -0
- data/spec/sandbox/config/environments.yml +4 -0
- data/spec/sandbox/config/simpler.yml +1 -0
- data/spec/sandbox/config/simpler_site.yml +2 -0
- data/spec/sandbox/config.yml +2 -0
- data/spec/sandbox/fixtures/examples.yml +8 -0
- data/spec/sandbox/fixtures/users.yml +2 -0
- data/spec/sandbox/flows/batman.rb +5 -0
- data/spec/sandbox/flows/robin.rb +4 -0
- data/spec/sandbox/pages/foo/bar_page.rb +9 -0
- data/spec/sandbox/pages/foo/partials/partial_the_reckoning.rb +2 -0
- data/spec/settings_spec.rb +103 -0
- data/spec/site_generator_spec.rb +62 -0
- data/spec/site_spec.rb +249 -0
- data/spec/spec_generator_helper.rb +40 -0
- data/spec/spec_generator_spec.rb +24 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/steps_generator_spec.rb +29 -0
- data/spec/string_spec.rb +17 -0
- data/spec/table_spec.rb +32 -0
- data/spec/taza_spec.rb +12 -0
- data/spec/watircraft_bin_spec.rb +14 -0
- data/watircraft.gemspec +53 -0
- data/watircraft_generators/page/USAGE +11 -0
- data/watircraft_generators/page/page_generator.rb +65 -0
- data/watircraft_generators/page/templates/page.rb.erb +8 -0
- data/watircraft_generators/site/site_generator.rb +51 -0
- data/watircraft_generators/site/templates/environments.yml.erb +4 -0
- data/watircraft_generators/site/templates/site.rb.erb +10 -0
- data/watircraft_generators/spec/USAGE +8 -0
- data/watircraft_generators/spec/spec_generator.rb +54 -0
- data/watircraft_generators/spec/templates/spec.rb.erb +17 -0
- data/watircraft_generators/steps/USAGE +13 -0
- data/watircraft_generators/steps/steps_generator.rb +62 -0
- data/watircraft_generators/steps/templates/steps.rb.erb +12 -0
- metadata +229 -0
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'taza'
|
4
|
+
|
5
|
+
describe Taza::Settings do
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
ENV['ENVIRONMENT'] = 'test'
|
9
|
+
ENV['BROWSER'] = nil
|
10
|
+
ENV['DRIVER'] = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should use environment variable for browser settings" do
|
14
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
15
|
+
ENV['BROWSER'] = 'foo'
|
16
|
+
Taza::Settings.config('SiteName')[:browser].should eql(:foo)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should use environment variable for driver settings" do
|
20
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
21
|
+
ENV['DRIVER'] = 'bar'
|
22
|
+
Taza::Settings.config('SiteName')[:driver].should eql(:bar)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should provide default values if no config file or environment settings provided" do
|
26
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
27
|
+
Taza::Settings.config('SiteName')[:driver].should eql(:watir)
|
28
|
+
Taza::Settings.config('SiteName')[:browser].should eql(:firefox)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be able to load the site yml" do
|
32
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
33
|
+
Taza::Settings.config("SiteName")[:url].should eql('http://google.com')
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should be able to load a alternate site url" do
|
37
|
+
ENV['ENVIRONMENT'] = 'clown_shoes'
|
38
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
39
|
+
Taza::Settings.config("SiteName")[:url].should eql('http://clownshoes.com')
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should use the config file's variable for browser settings if no environment variable is set" do
|
43
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
44
|
+
Taza::Settings.expects(:config_file).returns({:browser => :fu})
|
45
|
+
Taza::Settings.config('SiteName')[:browser].should eql(:fu)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should use the config file's variable for driver settings if no environment variable is set" do
|
49
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
50
|
+
Taza::Settings.stubs(:config_file).returns({:driver => :fun})
|
51
|
+
Taza::Settings.config('SiteName')[:driver].should eql(:fun)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should use the ENV variables if specified instead of config files" do
|
55
|
+
ENV['BROWSER'] = 'opera'
|
56
|
+
Taza::Settings.expects(:config_file).returns({:browser => :fu})
|
57
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
58
|
+
Taza::Settings.config('SiteName')[:browser].should eql(:opera)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should use the correct config file" do
|
62
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
63
|
+
Taza::Settings.stubs(:config_file_path).returns('spec/sandbox/config.yml')
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should raise error when the config file does not exist" do
|
67
|
+
Taza::Settings.stubs(:path).returns('spec/no_such_directory')
|
68
|
+
lambda {Taza::Settings.config}.should raise_error
|
69
|
+
end
|
70
|
+
|
71
|
+
class SiteName < Taza::Site
|
72
|
+
end
|
73
|
+
|
74
|
+
it "a site should be able to load its settings" do
|
75
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
76
|
+
browser = stub()
|
77
|
+
browser.stubs(:goto)
|
78
|
+
SiteName.new(:browser => browser).config[:url].should eql('http://google.com')
|
79
|
+
end
|
80
|
+
|
81
|
+
it "setting keys can be specified as strings (i.e. without a colon) in the config file" do
|
82
|
+
Taza::Settings.stubs(:config_file_path).returns("spec/sandbox/config/simpler.yml")
|
83
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
84
|
+
Taza::Settings.config('SiteName')[:browser].should eql(:opera)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "setting keys can be specified as strings (i.e. without a colon) in the config file" do
|
88
|
+
Taza::Settings.stubs(:path).returns("spec/sandbox")
|
89
|
+
Taza::Settings.stubs(:environment_file).returns('config/simpler_site.yml')
|
90
|
+
Taza::Settings.config('SimplerSite')[:url].should eql('http://makezine.com')
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should be able to convert string keys to symbol keys" do
|
94
|
+
result = Taza::Settings.convert_string_keys_to_symbols 'browser' => :foo
|
95
|
+
result.should == {:browser => :foo}
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should provide an empty hash when the config file doesn't exist" do
|
99
|
+
Taza::Settings.stubs(:config_file_path).returns('spec/sandbox/config/no_such_file.yml')
|
100
|
+
Taza::Settings.config_file.should == {}
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/spec_generator_helper'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'taza'
|
6
|
+
|
7
|
+
describe "Site Generation" do
|
8
|
+
include RubiGen::GeneratorTestHelper
|
9
|
+
include Helpers::Generator
|
10
|
+
include Helpers::Taza
|
11
|
+
|
12
|
+
before :all do
|
13
|
+
@spec_helper = File.join(TMP_ROOT,PROJECT_NAME,'spec','spec_helper.rb')
|
14
|
+
@site_name = "WikipediaFoo"
|
15
|
+
@site_file = File.join(PROJECT_FOLDER,'lib', "wikipedia_foo.rb")
|
16
|
+
@site_folder = File.join(PROJECT_FOLDER,'lib')
|
17
|
+
@page_folder = File.join(@site_folder, 'pages')
|
18
|
+
end
|
19
|
+
|
20
|
+
before :each do
|
21
|
+
bare_setup
|
22
|
+
run_generator('watircraft', [APP_ROOT], generator_sources)
|
23
|
+
end
|
24
|
+
|
25
|
+
after :each do
|
26
|
+
bare_teardown
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should generate configuration file for a site" do
|
30
|
+
run_generator('site', [@site_name], generator_sources)
|
31
|
+
File.exists?(File.join(PROJECT_FOLDER,'config','environments.yml')).should be_true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should generate a site path for pages" do
|
35
|
+
run_generator('site', [@site_name], generator_sources)
|
36
|
+
File.directory?(@site_folder).should be_true
|
37
|
+
File.directory?(@page_folder).should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should generate a site path even if the site name is given with spaces" do
|
41
|
+
run_generator('site', ["Wikipedia Foo"], generator_sources)
|
42
|
+
File.directory?(@site_folder).should be_true
|
43
|
+
File.directory?(@page_folder).should be_true
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should generate a site path even if the site name is given with underscores" do
|
47
|
+
run_generator('site', ["wikipedia_foo"], generator_sources)
|
48
|
+
File.directory?(@site_folder).should be_true
|
49
|
+
File.directory?(@page_folder).should be_true
|
50
|
+
end
|
51
|
+
|
52
|
+
it "generated site that uses the block given in new" do
|
53
|
+
@site_class = generate_site(@site_name)
|
54
|
+
stub_settings
|
55
|
+
stub_browser
|
56
|
+
foo = nil
|
57
|
+
@site_class.new {|site| foo = site}
|
58
|
+
foo.should_not be_nil
|
59
|
+
foo.should be_a_kind_of(Taza::Site)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
data/spec/site_spec.rb
ADDED
@@ -0,0 +1,249 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'taza'
|
4
|
+
|
5
|
+
describe do
|
6
|
+
|
7
|
+
before :all do
|
8
|
+
@pages_path = File.join("spec","sandbox","pages","foo","**","*.rb")
|
9
|
+
@flows_path = File.join("spec","sandbox","flows","*.rb")
|
10
|
+
@foo_class = Class.new(Taza::Site)
|
11
|
+
end
|
12
|
+
|
13
|
+
before :each do
|
14
|
+
ENV['BROWSER'] = nil
|
15
|
+
ENV['DRIVER'] = nil
|
16
|
+
@foo_class.any_instance.stubs(:pages_path).returns(@pages_path)
|
17
|
+
Taza::Settings.stubs(:config_file).returns({})
|
18
|
+
Taza::Settings.stubs(:environment_settings).returns({})
|
19
|
+
Taza::Site.before_browser_closes {}
|
20
|
+
@browser = stub_browser
|
21
|
+
Taza::Browser.stubs(:create).returns(@browser)
|
22
|
+
@site = @foo_class.new
|
23
|
+
end
|
24
|
+
|
25
|
+
def stub_browser
|
26
|
+
browser = stub()
|
27
|
+
browser.stubs(:close)
|
28
|
+
browser.stubs(:goto)
|
29
|
+
browser
|
30
|
+
end
|
31
|
+
|
32
|
+
shared_examples_for "an execution context" do
|
33
|
+
it "should yield an instance of a page class" do
|
34
|
+
barzor = nil
|
35
|
+
@context.bar_page do |bar|
|
36
|
+
barzor = bar
|
37
|
+
end
|
38
|
+
barzor.should be_an_instance_of(BarPage)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return a page by name" do
|
42
|
+
# Bar is a page on the site
|
43
|
+
@context.bar_page.should be_an_instance_of(BarPage)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should return a page by method" do
|
47
|
+
@context.page('bar').should be_an_instance_of(BarPage)
|
48
|
+
@context.page('Bar').should be_an_instance_of(BarPage)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should yield to a page" do
|
52
|
+
the_page = nil
|
53
|
+
@context.page('Bar') {|page| the_page = page }
|
54
|
+
the_page.should be_an_instance_of(BarPage)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should pass the site browser instance to its pages " do
|
58
|
+
@context.bar_page.browser.should eql(@browser)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should provide direct access to the site" do
|
62
|
+
@context.site.should == @site
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should all access to the site origin" do
|
66
|
+
Taza::Settings.expects(:environment_settings).returns({:url => 'http://www.zoro.com'}).at_least_once
|
67
|
+
@context.site.origin.should == 'http://www.zoro.com'
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
it "should go to a relative url" do
|
72
|
+
@browser.expects(:goto).with('http://www.foo.com/page.html')
|
73
|
+
Taza::Settings.stubs(:config).returns(:url => 'http://www.foo.com')
|
74
|
+
@context.goto 'page.html'
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should go to the site origin" do
|
78
|
+
@browser.expects(:goto).with('http://www.foo.com/')
|
79
|
+
Taza::Settings.stubs(:config).returns(:url => 'http://www.foo.com')
|
80
|
+
@context.goto ''
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should allow pages to access the site" do
|
84
|
+
@context.bar_page.site.should == @site
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should list the site's pages" do
|
88
|
+
@context.pages.should == ["bar_page", "partial_the_reckoning"]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe Taza::Site do
|
93
|
+
it_should_behave_like "an execution context"
|
94
|
+
|
95
|
+
before :each do
|
96
|
+
@context = @site
|
97
|
+
end
|
98
|
+
|
99
|
+
it "pages_path should not contain the site class name" do
|
100
|
+
Bax = Class.new(Taza::Site)
|
101
|
+
Bax.new.send(:pages_path).should eql(APP_ROOT + "/lib/pages/**/*.rb")
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should have flows defined as instance methods" do
|
105
|
+
Barz = Class.new(Taza::Site)
|
106
|
+
Barz.any_instance.stubs(:path).returns('spec/sandbox')
|
107
|
+
Barz.any_instance.stubs(:flows_path).returns(@flows_path)
|
108
|
+
Barz.new.batman_flow.should == "i am batman"
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should open watir browsers at the configuration URL" do
|
112
|
+
@browser.expects(:goto).with('a_url')
|
113
|
+
Taza::Settings.stubs(:config).returns(:url => 'a_url')
|
114
|
+
@foo_class.new
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should accept a browser instance" do
|
118
|
+
provided_browser = stub_browser
|
119
|
+
site = @foo_class.new(:browser => provided_browser)
|
120
|
+
site.browser.should eql(provided_browser)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should create a browser instance if one is not provided" do
|
124
|
+
site = @foo_class.new
|
125
|
+
site.browser.should eql(@browser)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should still close browser if an error is raised" do
|
129
|
+
@browser.expects(:close)
|
130
|
+
lambda { @foo_class.new { |site| raise StandardError}}.should raise_error
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should not close browser if block not given" do
|
134
|
+
@browser.expects(:close).never
|
135
|
+
@foo_class.new
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should not close browser if an error is raised on browser goto" do
|
139
|
+
@browser.stubs(:goto).raises(StandardError,"ErrorOnBrowserGoto")
|
140
|
+
@browser.expects(:close).never
|
141
|
+
lambda { @foo_class.new }.should raise_error(StandardError,"ErrorOnBrowserGoto")
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should raise browser close error if no other errors" do
|
145
|
+
@browser.expects(:close).raises(StandardError,"BrowserCloseError")
|
146
|
+
lambda { @foo_class.new {}}.should raise_error(StandardError,"BrowserCloseError")
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should raise error inside block if both it and browser.close throws an error" do
|
150
|
+
@browser.expects(:close).raises(StandardError,"BrowserCloseError")
|
151
|
+
lambda { @foo_class.new { |site| raise StandardError, "innererror" }}.should raise_error(StandardError,"innererror")
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should close a browser if block given (and it did not make it)" do
|
155
|
+
@browser.expects(:close)
|
156
|
+
@foo_class.new {}
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should yield itself upon initialization" do
|
160
|
+
foo = nil
|
161
|
+
f = @foo_class.new { |site| foo = site }
|
162
|
+
foo.should eql(f)
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should yield after page methods have been setup" do
|
166
|
+
klass = Class::new(Taza::Site)
|
167
|
+
klass.any_instance.stubs(:pages_path).returns(@pages_path)
|
168
|
+
klass.new do |site|
|
169
|
+
site.should respond_to(:bar_page)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should yield after browser has been setup" do
|
174
|
+
klass = Class::new(Taza::Site)
|
175
|
+
klass.any_instance.stubs(:pages_path).returns(@pages_path)
|
176
|
+
klass.new do |site|
|
177
|
+
site.browser.should_not be_nil
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should add partials defined under the pages directory" do
|
182
|
+
klass = Class::new(Taza::Site)
|
183
|
+
klass.any_instance.stubs(:pages_path).returns(@pages_path)
|
184
|
+
klass.new do |site|
|
185
|
+
site.partial_the_reckoning
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
it "should have a way to evaluate a block of code before site closes the browser" do
|
190
|
+
browser_state = states('browser_open_state').starts_as('on')
|
191
|
+
@browser.expects(:close).then(browser_state.is('off'))
|
192
|
+
@browser.expects(:doit).when(browser_state.is('on'))
|
193
|
+
Taza::Site.before_browser_closes { |browser| browser.doit }
|
194
|
+
@foo_class.new {}
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should have a way to evaluate a block of code before site closes the browser if an error occurs" do
|
198
|
+
browser_state = states('browser_open_state').starts_as('on')
|
199
|
+
@browser.expects(:close).then(browser_state.is('off'))
|
200
|
+
@browser.expects(:doit).when(browser_state.is('on'))
|
201
|
+
Taza::Site.before_browser_closes { |browser| browser.doit }
|
202
|
+
lambda { @foo_class.new { |site| raise StandardError, "innererror" }}.should raise_error(StandardError,"innererror")
|
203
|
+
end
|
204
|
+
|
205
|
+
it "should still close its browser if #before_browser_closes raises an exception" do
|
206
|
+
@browser.expects(:close)
|
207
|
+
Taza::Site.before_browser_closes { |browser| raise StandardError, 'foo error' }
|
208
|
+
lambda { @foo_class.new {} }.should raise_error(StandardError,'foo error')
|
209
|
+
end
|
210
|
+
|
211
|
+
it "should not close a browser it did not make" do
|
212
|
+
@browser.expects(:close).never
|
213
|
+
@foo_class.new(:browser => @browser) {}
|
214
|
+
end
|
215
|
+
|
216
|
+
module Zoro
|
217
|
+
class Zoro < ::Taza::Site
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should pass in the class name to settings config" do
|
222
|
+
Taza::Settings.expects(:config).with('Zoro').returns({}).at_least_once
|
223
|
+
Zoro::Zoro.new
|
224
|
+
end
|
225
|
+
|
226
|
+
it "should return the configured site url" do
|
227
|
+
Taza::Settings.expects(:environment_settings).returns({:url => 'http://www.zoro.com'}).at_least_once
|
228
|
+
@site.origin.should == 'http://www.zoro.com'
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
233
|
+
describe "Rspec Context" do
|
234
|
+
it_should_behave_like "an execution context"
|
235
|
+
before do
|
236
|
+
# this code replicates what is in spec_initialize.rb
|
237
|
+
@context = Spec::Example::ExampleGroup.new "sample"
|
238
|
+
@site.initialize_context!(@context)
|
239
|
+
end
|
240
|
+
|
241
|
+
end
|
242
|
+
|
243
|
+
describe "Site#execution_context (aka irb START)" do
|
244
|
+
it_should_behave_like "an execution context"
|
245
|
+
before do
|
246
|
+
@context = @site.execution_context
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#### Rubigen helpers
|
2
|
+
require 'rubigen'
|
3
|
+
require 'rubigen/helpers/generator_test_helper'
|
4
|
+
|
5
|
+
|
6
|
+
def generator_sources
|
7
|
+
[RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__), "..", "app_generators")),
|
8
|
+
RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__), "..", "watircraft_generators"))]
|
9
|
+
end
|
10
|
+
|
11
|
+
module Helpers
|
12
|
+
module Generator
|
13
|
+
def generate_site(site_name)
|
14
|
+
site_name = "#{site_name}#{Time.now.to_i}"
|
15
|
+
run_generator('site', [site_name], generator_sources)
|
16
|
+
site_file_path = File.join(PROJECT_FOLDER,'lib',"#{site_name.underscore}.rb")
|
17
|
+
require site_file_path
|
18
|
+
"::#{site_name.camelize}::#{site_name.camelize}".constantize.any_instance.stubs(:base_path).returns(PROJECT_FOLDER)
|
19
|
+
site_name.camelize.constantize
|
20
|
+
end
|
21
|
+
def generate_project
|
22
|
+
run_generator('watircraft', [APP_ROOT], generator_sources)
|
23
|
+
::Taza::Settings.stubs(:path).returns(APP_ROOT)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Taza
|
28
|
+
def stub_settings
|
29
|
+
::Taza::Settings.stubs(:config).returns({})
|
30
|
+
end
|
31
|
+
|
32
|
+
def stub_browser
|
33
|
+
stub_browser = stub()
|
34
|
+
stub_browser.stubs(:goto)
|
35
|
+
stub_browser.stubs(:close)
|
36
|
+
::Taza::Browser.stubs(:create).returns(stub_browser)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
#### Rubigen helpers end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/spec_generator_helper'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'taza'
|
6
|
+
|
7
|
+
describe "Spec Generation" do
|
8
|
+
include RubiGen::GeneratorTestHelper
|
9
|
+
include Helpers::Generator
|
10
|
+
include Helpers::Taza
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
generate_project
|
14
|
+
end
|
15
|
+
|
16
|
+
after :each do
|
17
|
+
bare_teardown
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should be able to generate a spec" do
|
21
|
+
run_generator('spec', ['add penguin'], generator_sources)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
require 'mocha'
|
4
|
+
require 'config/vendorized_gems'
|
5
|
+
lib_path = File.expand_path("#{File.dirname(__FILE__)}/../lib")
|
6
|
+
$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
|
7
|
+
|
8
|
+
# Must set before requiring generator libs.
|
9
|
+
TMP_ROOT = File.join(File.dirname(__FILE__),"sandbox","generated")
|
10
|
+
PROJECT_NAME = 'example'
|
11
|
+
PROJECT_FOLDER = File.join(TMP_ROOT,PROJECT_NAME)
|
12
|
+
APP_ROOT = File.join(TMP_ROOT, PROJECT_NAME)
|
13
|
+
|
14
|
+
Spec::Runner.configure do |config|
|
15
|
+
config.mock_with :mocha
|
16
|
+
end
|
17
|
+
|
18
|
+
def null_device
|
19
|
+
File.exists?('/dev/null') ? '/dev/null' : 'NUL'
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/spec_generator_helper'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'taza'
|
6
|
+
|
7
|
+
describe "Step Generation" do
|
8
|
+
include RubiGen::GeneratorTestHelper
|
9
|
+
include Helpers::Generator
|
10
|
+
include Helpers::Taza
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
generate_project
|
14
|
+
end
|
15
|
+
|
16
|
+
after :each do
|
17
|
+
bare_teardown
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should give you usage if you provide no arguments" do
|
21
|
+
lambda { run_generator('steps', [], generator_sources) }.
|
22
|
+
should raise_error(RubiGen::UsageError)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should be able to generate a steps file" do
|
26
|
+
lambda{run_generator('steps', ['simple'], generator_sources)}.
|
27
|
+
should_not raise_error
|
28
|
+
end
|
29
|
+
end
|
data/spec/string_spec.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'extensions/string'
|
3
|
+
|
4
|
+
describe "string extensions" do
|
5
|
+
it "should pluralize and to sym a string" do
|
6
|
+
"apple".pluralize_to_sym.should eql(:apples)
|
7
|
+
end
|
8
|
+
it "should computerize a string with a space" do
|
9
|
+
"count down".computerize.should == "count_down"
|
10
|
+
end
|
11
|
+
it "should computerize a string that is capitalized" do
|
12
|
+
"Count Down".computerize.should == "count_down"
|
13
|
+
end
|
14
|
+
it "should computerize a string that is in CamelCase" do
|
15
|
+
"CountDown".computerize.should == "count_down"
|
16
|
+
end
|
17
|
+
end
|
data/spec/table_spec.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'taza/page'
|
3
|
+
require 'taza/site'
|
4
|
+
require 'spec/fake_table'
|
5
|
+
|
6
|
+
describe FakeTable do
|
7
|
+
|
8
|
+
it "has rows" do
|
9
|
+
@fake_table = FakeTable.new [{},{}]
|
10
|
+
@fake_table.rows.length.should == 2
|
11
|
+
end
|
12
|
+
|
13
|
+
it "has fake rows" do
|
14
|
+
@fake_table = FakeTable.new [{:name => 'apple'}]
|
15
|
+
@fake_table.rows[0].should be_a(FakeRow)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Note: the way it fakes out elements is the least
|
19
|
+
# authentic aspect of this scheme
|
20
|
+
it "has rows with elements and display values" do
|
21
|
+
@fake_table = FakeTable.new [{:name => 'apple'}]
|
22
|
+
@fake_table.rows[0].element(:name).display_value.should == 'apple'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "has rows with elements that can be set" do
|
26
|
+
@fake_table = FakeTable.new [{:name => 'apple', :color => 'blue'}]
|
27
|
+
@fake_table.rows[0].element(:color).set 'red'
|
28
|
+
@fake_table.rows[0].element(:color).display_value.should == 'red'
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
data/spec/taza_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'taza'
|
5
|
+
|
6
|
+
describe "WatirCraft project generator script" do
|
7
|
+
|
8
|
+
it "should have an executable script" do
|
9
|
+
path = 'spec/sandbox/generators'
|
10
|
+
taza_bin = "#{File.expand_path(File.dirname(__FILE__)+'/../bin/watircraft')} #{path}"
|
11
|
+
system("ruby -c #{taza_bin} > #{null_device}").should be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
data/watircraft.gemspec
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{watircraft}
|
5
|
+
s.version = "0.4.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Bret Pettichord", "Jim Matthews", "Charley Baker", "Adam Anderson"]
|
9
|
+
s.date = %q{2009-02-24}
|
10
|
+
s.default_executable = %q{watircraft}
|
11
|
+
s.description = %q{WatirCraft is a framework for web testing.}
|
12
|
+
s.email = %q{bret@pettichord.com}
|
13
|
+
s.executables = ["watircraft"]
|
14
|
+
s.extra_rdoc_files = ["History.txt", "README.rdoc"]
|
15
|
+
s.files = ["BUGS.txt", "History.txt", "Manifest.txt", "README.rdoc", "VERSION.yml", "watircraft.gemspec", "bin/watircraft", "lib/extensions", "lib/extensions/array.rb", "lib/extensions/hash.rb", "lib/extensions/object.rb", "lib/extensions/string.rb", "lib/extensions/watir.rb", "lib/taza", "lib/taza/browser.rb", "lib/taza/entity.rb", "lib/taza/fixture.rb", "lib/taza/flow.rb", "lib/taza/page.rb", "lib/taza/settings.rb", "lib/taza/site.rb", "lib/taza/tasks.rb", "lib/taza.rb", "lib/watircraft", "lib/watircraft/generator_helper.rb", "lib/watircraft/table.rb", "lib/watircraft/version.rb", "lib/watircraft.rb", "spec/array_spec.rb", "spec/browser_spec.rb", "spec/entity_spec.rb", "spec/fake_table.rb", "spec/fixtures_spec.rb", "spec/fixture_spec.rb", "spec/hash_spec.rb", "spec/object_spec.rb", "spec/page_generator_spec.rb", "spec/page_spec.rb", "spec/project_generator_spec.rb", "spec/sandbox", "spec/sandbox/config", "spec/sandbox/config/config.yml", "spec/sandbox/config/environments.yml", "spec/sandbox/config/simpler.yml", "spec/sandbox/config/simpler_site.yml", "spec/sandbox/config.yml", "spec/sandbox/fixtures", "spec/sandbox/fixtures/examples.yml", "spec/sandbox/fixtures/users.yml", "spec/sandbox/flows", "spec/sandbox/flows/batman.rb", "spec/sandbox/flows/robin.rb", "spec/sandbox/pages", "spec/sandbox/pages/foo", "spec/sandbox/pages/foo/bar_page.rb", "spec/sandbox/pages/foo/partials", "spec/sandbox/pages/foo/partials/partial_the_reckoning.rb", "spec/settings_spec.rb", "spec/site_generator_spec.rb", "spec/site_spec.rb", "spec/spec_generator_helper.rb", "spec/spec_generator_spec.rb", "spec/spec_helper.rb", "spec/steps_generator_spec.rb", "spec/string_spec.rb", "spec/table_spec.rb", "spec/taza_spec.rb", "spec/watircraft_bin_spec.rb", "app_generators/watircraft", "app_generators/watircraft/templates", "app_generators/watircraft/templates/config.yml.erb", "app_generators/watircraft/templates/feature_helper.rb", "app_generators/watircraft/templates/initialize.rb.erb", "app_generators/watircraft/templates/rakefile.rb", "app_generators/watircraft/templates/script", "app_generators/watircraft/templates/script/console", "app_generators/watircraft/templates/script/console.cmd", "app_generators/watircraft/templates/site_start.rb.erb", "app_generators/watircraft/templates/spec_helper.rb", "app_generators/watircraft/templates/spec_initialize.rb", "app_generators/watircraft/templates/world.rb", "app_generators/watircraft/USAGE", "app_generators/watircraft/watircraft_generator.rb", "watircraft_generators/page", "watircraft_generators/page/page_generator.rb", "watircraft_generators/page/templates", "watircraft_generators/page/templates/page.rb.erb", "watircraft_generators/page/USAGE", "watircraft_generators/site", "watircraft_generators/site/site_generator.rb", "watircraft_generators/site/templates", "watircraft_generators/site/templates/environments.yml.erb", "watircraft_generators/site/templates/site.rb.erb", "watircraft_generators/spec", "watircraft_generators/spec/spec_generator.rb", "watircraft_generators/spec/templates", "watircraft_generators/spec/templates/spec.rb.erb", "watircraft_generators/spec/USAGE", "watircraft_generators/steps", "watircraft_generators/steps/steps_generator.rb", "watircraft_generators/steps/templates", "watircraft_generators/steps/templates/steps.rb.erb", "watircraft_generators/steps/USAGE"]
|
16
|
+
s.has_rdoc = true
|
17
|
+
s.rdoc_options = ["--main", "README.rdoc"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubyforge_project = %q{watir}
|
20
|
+
s.rubygems_version = %q{1.3.1}
|
21
|
+
s.summary = %q{WatirCraft is a framework for web testing.}
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
|
+
s.specification_version = 2
|
26
|
+
|
27
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
|
+
s.add_runtime_dependency(%q<watir>, [">= 1.6.2"])
|
29
|
+
s.add_runtime_dependency(%q<taglob>, [">= 1.1.1"])
|
30
|
+
s.add_runtime_dependency(%q<rake>, [">= 0.8.3"])
|
31
|
+
s.add_runtime_dependency(%q<mocha>, [">= 0.9.3"])
|
32
|
+
s.add_runtime_dependency(%q<rubigen>, [">= 1.4.0"])
|
33
|
+
s.add_runtime_dependency(%q<rspec>, ["= 1.1.12"])
|
34
|
+
s.add_runtime_dependency(%q<cucumber>, ["= 0.1.16"])
|
35
|
+
else
|
36
|
+
s.add_dependency(%q<watir>, [">= 1.6.2"])
|
37
|
+
s.add_dependency(%q<taglob>, [">= 1.1.1"])
|
38
|
+
s.add_dependency(%q<rake>, [">= 0.8.3"])
|
39
|
+
s.add_dependency(%q<mocha>, [">= 0.9.3"])
|
40
|
+
s.add_dependency(%q<rubigen>, [">= 1.4.0"])
|
41
|
+
s.add_dependency(%q<rspec>, ["= 1.1.12"])
|
42
|
+
s.add_dependency(%q<cucumber>, ["= 0.1.16"])
|
43
|
+
end
|
44
|
+
else
|
45
|
+
s.add_dependency(%q<watir>, [">= 1.6.2"])
|
46
|
+
s.add_dependency(%q<taglob>, [">= 1.1.1"])
|
47
|
+
s.add_dependency(%q<rake>, [">= 0.8.3"])
|
48
|
+
s.add_dependency(%q<mocha>, [">= 0.9.3"])
|
49
|
+
s.add_dependency(%q<rubigen>, [">= 1.4.0"])
|
50
|
+
s.add_dependency(%q<rspec>, ["= 1.1.12"])
|
51
|
+
s.add_dependency(%q<cucumber>, ["= 0.1.16"])
|
52
|
+
end
|
53
|
+
end
|