bret-watircraft 0.4.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/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,111 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/spec_generator_helper'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'taza'
|
6
|
+
|
7
|
+
describe "Page Generation" do
|
8
|
+
include RubiGen::GeneratorTestHelper
|
9
|
+
include Helpers::Generator
|
10
|
+
include Helpers::Taza
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
generate_project
|
14
|
+
@site_class = generate_site('Gap')
|
15
|
+
@site_name = @site_class.to_s.underscore
|
16
|
+
end
|
17
|
+
|
18
|
+
after :each do
|
19
|
+
bare_teardown
|
20
|
+
end
|
21
|
+
|
22
|
+
# Negative
|
23
|
+
|
24
|
+
it "should give you usage if you provide no arguments" do
|
25
|
+
lambda { run_generator('page', [], generator_sources) }.
|
26
|
+
should raise_error(RubiGen::UsageError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should give you usage if you provide two arguments" do
|
30
|
+
lambda { run_generator('page', ['simple', 'extra'], generator_sources) }.
|
31
|
+
should raise_error(RubiGen::UsageError)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should display an error if no site is specified in the config.yml" do
|
35
|
+
PageGenerator.any_instance.stubs(:configured_site).returns(nil)
|
36
|
+
lambda { run_generator('page', ['simple'], generator_sources) }.
|
37
|
+
should raise_error(RubiGen::UsageError, "Error. A site must first be specified in config.yml")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should display an error if the site in config.yml can't be found" do
|
41
|
+
PageGenerator.any_instance.stubs(:configured_site).returns('no_such_site')
|
42
|
+
lambda { run_generator('page', ['simple'], generator_sources) }.
|
43
|
+
should raise_error(RubiGen::UsageError, /Error\. Site file .*lib\/no_such_site.rb not found\./)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Positive
|
47
|
+
|
48
|
+
it "should be able to access the generated page from the site" do
|
49
|
+
PageGenerator.any_instance.stubs(:configured_site).returns(@site_name)
|
50
|
+
run_generator('page', ['simple'], generator_sources)
|
51
|
+
stub_settings
|
52
|
+
stub_browser
|
53
|
+
@site_class.new.simple_page
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should be able to access the generated page when it has a space" do
|
57
|
+
PageGenerator.any_instance.stubs(:configured_site).returns(@site_name)
|
58
|
+
run_generator('page', ['check out'], generator_sources)
|
59
|
+
stub_settings
|
60
|
+
stub_browser
|
61
|
+
@site_class.new.check_out_page
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be able to access the generated page when it has an underscore" do
|
65
|
+
PageGenerator.any_instance.stubs(:configured_site).returns(@site_name)
|
66
|
+
run_generator('page', ['check_any'], generator_sources)
|
67
|
+
stub_settings
|
68
|
+
stub_browser
|
69
|
+
@site_class.new.check_any_page
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should be able to generate a page using the project default" do
|
73
|
+
lambda{run_generator('page', ['simple'], generator_sources)}.
|
74
|
+
should_not raise_error
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should provide the module name of the site" do
|
78
|
+
PageGenerator.any_instance.stubs(:configured_site).returns(@site_name)
|
79
|
+
generator = PageGenerator.new(['sample'])
|
80
|
+
generator.site_module.should == @site_class.to_s
|
81
|
+
end
|
82
|
+
it "should provide the name of the page class" do
|
83
|
+
PageGenerator.any_instance.stubs(:configured_site).returns(@site_name)
|
84
|
+
generator = PageGenerator.new(['sample'])
|
85
|
+
generator.page_class.should == 'SamplePage'
|
86
|
+
generator.page_file.should == 'sample_page.rb'
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should work when when the provided page name includes a space" do
|
90
|
+
PageGenerator.any_instance.stubs(:configured_site).returns(@site_name)
|
91
|
+
generator = PageGenerator.new(['check out'])
|
92
|
+
generator.page_class.should == 'CheckOutPage'
|
93
|
+
generator.page_file.should == 'check_out_page.rb'
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should work when when the provided page name includes an underscore" do
|
97
|
+
PageGenerator.any_instance.stubs(:configured_site).returns(@site_name)
|
98
|
+
generator = PageGenerator.new(['check_out'])
|
99
|
+
generator.page_class.should == 'CheckOutPage'
|
100
|
+
generator.page_file.should == 'check_out_page.rb'
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should work when when the provided page is in camel case" do
|
104
|
+
PageGenerator.any_instance.stubs(:configured_site).returns(@site_name)
|
105
|
+
generator = PageGenerator.new(['CheckOut'])
|
106
|
+
generator.page_class.should == 'CheckOutPage'
|
107
|
+
generator.page_file.should == 'check_out_page.rb'
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
end
|
data/spec/page_spec.rb
ADDED
@@ -0,0 +1,342 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'taza/page'
|
3
|
+
require 'taza/site'
|
4
|
+
|
5
|
+
describe Taza::Page do
|
6
|
+
before :each do
|
7
|
+
@page_class = Class.new(Taza::Page)
|
8
|
+
end
|
9
|
+
|
10
|
+
class ElementAndFilterContextExample < Taza::Page
|
11
|
+
element(:sample_element) {browser}
|
12
|
+
filter:sample_filter, :sample_element
|
13
|
+
def sample_filter
|
14
|
+
browser
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class RecursiveFilterExample < Taza::Page
|
19
|
+
element(:foo) {}
|
20
|
+
filter :sample_filter
|
21
|
+
def sample_filter
|
22
|
+
foo
|
23
|
+
true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should not enter a infinite loop if you call a filtered element inside of a filter" do
|
28
|
+
page = RecursiveFilterExample.new
|
29
|
+
lambda { page.foo }.should_not raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should execute an element's block with the params provided for its method" do
|
33
|
+
@page_class.element(:boo){|baz| baz}
|
34
|
+
@page_class.new.boo("rofl").should == "rofl"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should execute elements and filters in the context of the page instance" do
|
38
|
+
page = ElementAndFilterContextExample.new
|
39
|
+
page.browser = :something
|
40
|
+
page.sample_element.should eql(:something)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should add a filter to the classes filters" do
|
44
|
+
ElementAndFilterContextExample.filters.size.should eql(1)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should store the block given to the element method in a method with the name of the parameter" do
|
48
|
+
@page_class.element(:foo) do
|
49
|
+
"bar"
|
50
|
+
end
|
51
|
+
@page_class.new.foo.should == "bar"
|
52
|
+
end
|
53
|
+
|
54
|
+
class FilterAllElements < Taza::Page
|
55
|
+
element(:foo) {}
|
56
|
+
element(:apple) {}
|
57
|
+
filter :false_filter
|
58
|
+
|
59
|
+
def false_filter
|
60
|
+
false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should filter all elements if element argument is not provided" do
|
65
|
+
lambda { FilterAllElements.new.apple }.should raise_error(Taza::FilterError)
|
66
|
+
lambda { FilterAllElements.new.foo }.should raise_error(Taza::FilterError)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should have empty elements on a new class" do
|
70
|
+
foo = @page_class
|
71
|
+
foo.elements.should_not be_nil
|
72
|
+
foo.elements.should be_empty
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should have empty filters on a new class" do
|
76
|
+
foo = @page_class
|
77
|
+
foo.filters.should_not be_nil
|
78
|
+
foo.filters.should be_empty
|
79
|
+
end
|
80
|
+
|
81
|
+
class FilterAnElement < Taza::Page
|
82
|
+
attr_accessor :called_element_method
|
83
|
+
element(:false_item) { @called_element_method = true}
|
84
|
+
filter :false_filter, :false_item
|
85
|
+
|
86
|
+
def false_filter
|
87
|
+
false
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should raise a error if an elements is called and its filter returns false" do
|
92
|
+
lambda { FilterAnElement.new.false_item }.should raise_error(Taza::FilterError)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should not call element block if filters fail" do
|
96
|
+
page = FilterAnElement.new
|
97
|
+
lambda { page.false_item }.should raise_error
|
98
|
+
page.called_element_method.should_not be_true
|
99
|
+
end
|
100
|
+
|
101
|
+
class CheckOutPage < Taza::Page
|
102
|
+
url 'check_out'
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should goto the url relative to the site url" do
|
106
|
+
browser = stub
|
107
|
+
browser.expects(:goto).with('http://www.llamas.com')
|
108
|
+
browser.expects(:goto).with('http://www.llamas.com/check_out')
|
109
|
+
Taza::Settings.stubs(:config).returns(:url => 'http://www.llamas.com')
|
110
|
+
page = CheckOutPage.new
|
111
|
+
page.site = Class.new(Taza::Site).new(:browser => browser)
|
112
|
+
page.goto
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should report the full url of the page" do
|
116
|
+
browser = stub
|
117
|
+
browser.stubs(:goto)
|
118
|
+
Taza::Settings.stubs(:config).returns(:url => 'http://www.llamas.com')
|
119
|
+
page = CheckOutPage.new
|
120
|
+
page.site = Class.new(Taza::Site).new(:browser => browser)
|
121
|
+
page.full_url.should == 'http://www.llamas.com/check_out'
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should create elements for fields" do
|
125
|
+
@page_class.field(:foo) {'element'}
|
126
|
+
@page_class.new.foo_field.should == 'element'
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should allow you to override the suffix for fields" do
|
130
|
+
@page_class.field(:foo, 'link') {'link element'}
|
131
|
+
@page_class.new.foo_link.should == 'link element'
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should return the display_value of the field's element" do
|
135
|
+
element = stub
|
136
|
+
element.stubs(:display_value).with().returns('tomorrow')
|
137
|
+
@page_class.field(:foo) {element}
|
138
|
+
page = @page_class.new
|
139
|
+
page.foo_field.display_value.should == 'tomorrow'
|
140
|
+
page.foo.should == 'tomorrow'
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should call the set method of the element when the field= method is called" do
|
144
|
+
element = stub
|
145
|
+
element.stubs(:set).with('never').returns(nil)
|
146
|
+
@page_class.field(:end_date) {element}
|
147
|
+
page = @page_class.new
|
148
|
+
page.end_date = 'never'
|
149
|
+
end
|
150
|
+
|
151
|
+
def uses_soldier_page
|
152
|
+
name_element = stub
|
153
|
+
rank_element = stub
|
154
|
+
serial_no_element = stub
|
155
|
+
@page_class.class_eval do
|
156
|
+
field(:name){name_element}
|
157
|
+
field(:rank){rank_element}
|
158
|
+
field(:serial_no){serial_no_element}
|
159
|
+
end
|
160
|
+
@soldier_page = @page_class.new
|
161
|
+
@soldier_page.name_field.stubs(:display_value).returns('Zachary Taylor')
|
162
|
+
@soldier_page.rank_field.stubs(:display_value).returns('General')
|
163
|
+
@soldier_page.serial_no_field.stubs(:display_value).returns('unknown')
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should populate the fields corresponding to the keys in the hash" do
|
167
|
+
uses_soldier_page
|
168
|
+
@soldier_page.name_field.expects(:set).with('Zachary Taylor')
|
169
|
+
@soldier_page.rank_field.expects(:set).with('General')
|
170
|
+
@soldier_page.populate :name => 'Zachary Taylor', :rank => 'General'
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should validate a page" do
|
174
|
+
uses_soldier_page
|
175
|
+
@soldier_page.validate :name => 'Zachary Taylor', :rank => 'General'
|
176
|
+
end
|
177
|
+
|
178
|
+
it "should allow you to define elements using human-form names" do
|
179
|
+
@page_class.element('User Name'){'Tertulian'}
|
180
|
+
@page_class.new.user_name.should == 'Tertulian'
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should allow you to define fields using human-form names" do
|
184
|
+
@page_class.field('User Name'){'Tertulian'}
|
185
|
+
@page_class.new.user_name_field.should == 'Tertulian'
|
186
|
+
end
|
187
|
+
|
188
|
+
def simple_page
|
189
|
+
@page_class.class_eval do
|
190
|
+
element(:link){}
|
191
|
+
field(:name){}
|
192
|
+
end
|
193
|
+
@page_class.new
|
194
|
+
end
|
195
|
+
|
196
|
+
it "should list the page's elements" do
|
197
|
+
simple_page.elements.should == ['link', 'name_field']
|
198
|
+
end
|
199
|
+
|
200
|
+
it "should list the page's fields" do
|
201
|
+
simple_page.fields.should == ['name']
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should list the values of all the fields" do
|
205
|
+
uses_soldier_page
|
206
|
+
@soldier_page.values.should ==
|
207
|
+
{:name => 'Zachary Taylor', :rank => 'General', :serial_no => 'unknown'}
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should list the values of the specified fields" do
|
211
|
+
uses_soldier_page
|
212
|
+
@soldier_page.values(['name', 'rank']).should ==
|
213
|
+
{:name => 'Zachary Taylor', :rank => 'General'}
|
214
|
+
end
|
215
|
+
|
216
|
+
def exists_page
|
217
|
+
link1_element = stub
|
218
|
+
link1_element.stubs(:exist?).returns(true)
|
219
|
+
link2_element = stub
|
220
|
+
link2_element.stubs(:exist?).returns(false)
|
221
|
+
@page_class.class_eval do
|
222
|
+
element(:link1){link1_element}
|
223
|
+
element(:link2){link2_element}
|
224
|
+
end
|
225
|
+
@page_class.new
|
226
|
+
end
|
227
|
+
|
228
|
+
it "should determine whether an element exists" do
|
229
|
+
page = exists_page
|
230
|
+
page.element_exists?(:link1).should be_true
|
231
|
+
page.element_exist?(:link1).should be_true
|
232
|
+
page.element_exists?(:link2).should be_false
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should report which defined elements exist" do
|
236
|
+
page = exists_page
|
237
|
+
expectation = {:link1 => true, :link2 => false}
|
238
|
+
page.elements_exist?.should == expectation
|
239
|
+
page.elements_exists?.should == expectation
|
240
|
+
end
|
241
|
+
|
242
|
+
it "should report whether selected elements exist" do
|
243
|
+
page = exists_page
|
244
|
+
expectation = {:link1 => true}
|
245
|
+
page.elements_exist?([:link1]).should == expectation
|
246
|
+
end
|
247
|
+
|
248
|
+
it "should report that elements don't exist when not found errors are thrown" do
|
249
|
+
link3_element = stub
|
250
|
+
link3_element.stubs(:exist?).raises(Watir::Exception::UnknownFrameException)
|
251
|
+
link4_element = stub
|
252
|
+
link4_element.stubs(:exist?).raises(Watir::Exception::UnknownObjectException)
|
253
|
+
@page_class.class_eval do
|
254
|
+
element(:link3){link3_element}
|
255
|
+
element(:link4){link4_element}
|
256
|
+
end
|
257
|
+
page = @page_class.new
|
258
|
+
page.element_exists?(:link3).should == false
|
259
|
+
page.element_exists?(:link4).should == false
|
260
|
+
end
|
261
|
+
|
262
|
+
describe "tables" do
|
263
|
+
|
264
|
+
it "you should be able to create and reference" do
|
265
|
+
@page_class.class_eval do
|
266
|
+
element(:results_table){}
|
267
|
+
table(:results) {}
|
268
|
+
end
|
269
|
+
@page_class.new.results.should be_a(WatirCraft::Table)
|
270
|
+
end
|
271
|
+
|
272
|
+
require 'spec/fake_table'
|
273
|
+
it "should report whether a table has a specified row" do
|
274
|
+
@page_class.class_eval do
|
275
|
+
element(:results_table){FakeTable.new [:name => 'x']}
|
276
|
+
table(:results) do
|
277
|
+
field(:name){@row.element(:name)}
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
@page_class.new.results.row(:name => 'x').should_not be_nil
|
282
|
+
end
|
283
|
+
|
284
|
+
def uses_table_page
|
285
|
+
fake_table = FakeTable.new [
|
286
|
+
{:letter => 'x', :number => 1},
|
287
|
+
{:letter => 'y', :number => 2}
|
288
|
+
]
|
289
|
+
@page_class.class_eval do
|
290
|
+
element(:results_table) {fake_table}
|
291
|
+
table(:results) do
|
292
|
+
field(:name){@row.element(:letter)}
|
293
|
+
field(:phone){@row.element(:number)}
|
294
|
+
end
|
295
|
+
end
|
296
|
+
@table_page = @page_class.new
|
297
|
+
@fake_table = fake_table
|
298
|
+
end
|
299
|
+
|
300
|
+
it "should allow you to reference another field in a selected row" do
|
301
|
+
uses_table_page
|
302
|
+
@table_page.results.row(:name => 'x').phone.should == 1
|
303
|
+
@table_page.results.row(:phone => 2).name.should == 'y'
|
304
|
+
end
|
305
|
+
|
306
|
+
it "fields should have underlying elements" do
|
307
|
+
uses_table_page
|
308
|
+
@table_page.results.row(:name => 'x').phone_element.should exist
|
309
|
+
end
|
310
|
+
|
311
|
+
it "should have elements" do
|
312
|
+
@page_class.class_eval do
|
313
|
+
element(:results_table) do FakeTable.new [
|
314
|
+
{:letter => 'x', :number => 1},
|
315
|
+
{:letter => 'y', :number => 2}
|
316
|
+
]
|
317
|
+
end
|
318
|
+
table(:results) do
|
319
|
+
field(:name){@row.element(:letter)}
|
320
|
+
element(:phone){@row.element(:number)}
|
321
|
+
end
|
322
|
+
end
|
323
|
+
@table_page = @page_class.new
|
324
|
+
@table_page.results.row(:name => 'x').phone.should be_a(FakeElement)
|
325
|
+
end
|
326
|
+
|
327
|
+
it "should allow you to set a field in a row" do
|
328
|
+
uses_table_page
|
329
|
+
@table_page.results.row(:name => 'x').phone = '22'
|
330
|
+
@fake_table.rows[0].element(:number).display_value.should == '22'
|
331
|
+
end
|
332
|
+
|
333
|
+
it "rows should exist" do
|
334
|
+
uses_table_page
|
335
|
+
@table_page.results.row(:name => 'x').should exist
|
336
|
+
end
|
337
|
+
|
338
|
+
|
339
|
+
|
340
|
+
end
|
341
|
+
|
342
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
require 'spec/spec_generator_helper'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rake'
|
5
|
+
require 'fileutils'
|
6
|
+
require 'taza'
|
7
|
+
|
8
|
+
describe "Project Generator" do
|
9
|
+
include RubiGen::GeneratorTestHelper
|
10
|
+
|
11
|
+
def project_file relative_path
|
12
|
+
File.join(TMP_ROOT, PROJECT_NAME, relative_path)
|
13
|
+
end
|
14
|
+
|
15
|
+
before :each do
|
16
|
+
@spec_helper = project_file 'test/specs/spec_helper.rb'
|
17
|
+
@initializer = project_file 'lib/initialize.rb'
|
18
|
+
ENV['ENVIRONMENT'] = nil
|
19
|
+
bare_setup
|
20
|
+
end
|
21
|
+
|
22
|
+
after :each do
|
23
|
+
bare_teardown
|
24
|
+
end
|
25
|
+
|
26
|
+
def should_be_loadable file, options=[]
|
27
|
+
options = [options] unless options.is_a? Array
|
28
|
+
generator_args = [APP_ROOT] + options
|
29
|
+
run_generator('watircraft', generator_args, generator_sources)
|
30
|
+
load_path = File.dirname(__FILE__) + '/../lib'
|
31
|
+
system("ruby -I#{load_path} #{file} > #{null_device}").should be_true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should generate a spec helper that can be required even when site name is different" do
|
35
|
+
should_be_loadable @spec_helper, ['--site=another_name', '--driver=fake']
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should generate a feature helper that can be required" do
|
39
|
+
feature_helper = project_file 'test/features/feature_helper.rb'
|
40
|
+
should_be_loadable feature_helper, '--driver=fake'
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should generate a world file that can be required" do
|
44
|
+
world = project_file 'lib/steps/world.rb'
|
45
|
+
should_be_loadable world, '--driver=fake'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should generate a rakefile that can be required" do
|
49
|
+
rakefile = project_file 'rakefile'
|
50
|
+
should_be_loadable rakefile
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should generate an initializer that can be required" do
|
54
|
+
should_be_loadable @initializer
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should be able to update an existing project and figure out the site name" do
|
58
|
+
run_generator('watircraft', [APP_ROOT, '--site=crazy'], generator_sources)
|
59
|
+
run_generator('watircraft', [APP_ROOT], generator_sources)
|
60
|
+
Taza::Settings.config[:site].should == 'crazy'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "initializer should set the ENVIRONMENT variable if it is not provided" do
|
64
|
+
run_generator('watircraft', [APP_ROOT], generator_sources)
|
65
|
+
load @initializer
|
66
|
+
ENV['ENVIRONMENT'].should eql("test")
|
67
|
+
end
|
68
|
+
|
69
|
+
it "initializer should not override the ENVIRONMENT variable if was provided" do
|
70
|
+
ENV['ENVIRONMENT'] = 'orange pie? is there such a thing?'
|
71
|
+
run_generator('watircraft', [APP_ROOT], generator_sources)
|
72
|
+
load @initializer
|
73
|
+
ENV['ENVIRONMENT'].should eql('orange pie? is there such a thing?')
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should configure a project for watir, implicitly" do
|
77
|
+
run_generator('watircraft', [APP_ROOT], generator_sources)
|
78
|
+
Taza::Settings.stubs(:path).returns(APP_ROOT)
|
79
|
+
ENV['ENVIRONMENT'] = 'test'
|
80
|
+
Taza::Settings.config[:driver].should == :watir
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should allow a site name to be specified" do
|
84
|
+
run_generator('watircraft', [APP_ROOT, '--site=site_name'], generator_sources)
|
85
|
+
Taza::Settings.stubs(:path).returns(APP_ROOT)
|
86
|
+
ENV['ENVIRONMENT'] = 'test'
|
87
|
+
Taza::Settings.config[:site].should == 'site_name'
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should allow a browser driver to be specified" do
|
91
|
+
run_generator('watircraft', [APP_ROOT, '--driver=nine_iron'], generator_sources)
|
92
|
+
Taza::Settings.stubs(:path).returns(APP_ROOT)
|
93
|
+
ENV['ENVIRONMENT'] = 'test'
|
94
|
+
Taza::Settings.config[:driver].should == :nine_iron
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should generate a script/console" do
|
98
|
+
run_generator('watircraft', [APP_ROOT], generator_sources)
|
99
|
+
File.exist?(project_file('script/console')).should be_true
|
100
|
+
File.exist?(project_file('script/console.cmd')).should be_true
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
:nothing: :something
|
@@ -0,0 +1 @@
|
|
1
|
+
browser: opera
|