kookaburra 0.25.0 → 0.26.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/Gemfile +1 -0
- data/Gemfile.lock +30 -26
- data/VERSION +1 -1
- data/kookaburra.gemspec +7 -2
- data/lib/kookaburra/ui_driver/has_ui_components.rb +28 -0
- data/lib/kookaburra/ui_driver/ui_component.rb +15 -1
- data/lib/kookaburra/ui_driver.rb +2 -12
- data/spec/integration/test_a_rack_application_spec.rb +31 -26
- data/spec/kookaburra/json_api_driver_spec.rb +2 -2
- data/spec/kookaburra/ui_driver/ui_component_spec.rb +3 -0
- data/spec/kookaburra/ui_driver_spec.rb +2 -15
- data/spec/support/shared_examples/it_can_have_ui_components.rb +18 -0
- metadata +21 -3
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
addressable (2.2
|
|
4
|
+
addressable (2.3.2)
|
|
5
5
|
capybara (1.1.2)
|
|
6
6
|
mime-types (>= 1.16)
|
|
7
7
|
nokogiri (>= 1.3.3)
|
|
@@ -9,23 +9,24 @@ GEM
|
|
|
9
9
|
rack-test (>= 0.5.4)
|
|
10
10
|
selenium-webdriver (~> 2.0)
|
|
11
11
|
xpath (~> 0.1.4)
|
|
12
|
-
childprocess (0.3.
|
|
13
|
-
ffi (~> 1.0.6)
|
|
12
|
+
childprocess (0.3.4)
|
|
13
|
+
ffi (~> 1.0, >= 1.0.6)
|
|
14
14
|
diff-lcs (1.1.3)
|
|
15
|
-
ffi (1.0
|
|
15
|
+
ffi (1.1.0)
|
|
16
|
+
find_a_port (1.0.1)
|
|
16
17
|
git (1.2.5)
|
|
17
|
-
jeweler (1.8.
|
|
18
|
+
jeweler (1.8.4)
|
|
18
19
|
bundler (~> 1.0)
|
|
19
20
|
git (>= 1.2.5)
|
|
20
21
|
rake
|
|
21
22
|
rdoc
|
|
22
|
-
json (1.
|
|
23
|
-
json_pure (1.7.
|
|
24
|
-
libwebsocket (0.1.
|
|
23
|
+
json (1.7.4)
|
|
24
|
+
json_pure (1.7.4)
|
|
25
|
+
libwebsocket (0.1.5)
|
|
25
26
|
addressable
|
|
26
|
-
mime-types (1.
|
|
27
|
-
multi_json (1.
|
|
28
|
-
nokogiri (1.5.
|
|
27
|
+
mime-types (1.19)
|
|
28
|
+
multi_json (1.3.6)
|
|
29
|
+
nokogiri (1.5.5)
|
|
29
30
|
patron (0.4.18)
|
|
30
31
|
rack (1.4.1)
|
|
31
32
|
rack-protection (1.2.0)
|
|
@@ -36,31 +37,33 @@ GEM
|
|
|
36
37
|
rdoc (3.12)
|
|
37
38
|
json (~> 1.4)
|
|
38
39
|
redcarpet (1.17.2)
|
|
39
|
-
reek (1.2.
|
|
40
|
-
|
|
40
|
+
reek (1.2.12)
|
|
41
|
+
ripper_ruby_parser (~> 0.0.7)
|
|
42
|
+
ruby2ruby (~> 1.2.5)
|
|
41
43
|
ruby_parser (~> 2.0)
|
|
42
44
|
sexp_processor (~> 3.0)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
rspec-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
ripper_ruby_parser (0.0.8)
|
|
46
|
+
sexp_processor (~> 3.0)
|
|
47
|
+
rspec (2.11.0)
|
|
48
|
+
rspec-core (~> 2.11.0)
|
|
49
|
+
rspec-expectations (~> 2.11.0)
|
|
50
|
+
rspec-mocks (~> 2.11.0)
|
|
51
|
+
rspec-core (2.11.1)
|
|
52
|
+
rspec-expectations (2.11.2)
|
|
49
53
|
diff-lcs (~> 1.1.3)
|
|
50
|
-
rspec-mocks (2.
|
|
51
|
-
ruby2ruby (1.
|
|
54
|
+
rspec-mocks (2.11.1)
|
|
55
|
+
ruby2ruby (1.2.5)
|
|
52
56
|
ruby_parser (~> 2.0)
|
|
53
57
|
sexp_processor (~> 3.0)
|
|
54
58
|
ruby_parser (2.3.1)
|
|
55
59
|
sexp_processor (~> 3.0)
|
|
56
|
-
rubyzip (0.9.
|
|
57
|
-
selenium-webdriver (2.
|
|
60
|
+
rubyzip (0.9.9)
|
|
61
|
+
selenium-webdriver (2.25.0)
|
|
58
62
|
childprocess (>= 0.2.5)
|
|
59
|
-
ffi (~> 1.0)
|
|
60
63
|
libwebsocket (~> 0.1.3)
|
|
61
64
|
multi_json (~> 1.0)
|
|
62
65
|
rubyzip
|
|
63
|
-
sexp_processor (3.
|
|
66
|
+
sexp_processor (3.2.0)
|
|
64
67
|
sinatra (1.3.2)
|
|
65
68
|
rack (~> 1.3, >= 1.3.6)
|
|
66
69
|
rack-protection (~> 1.2)
|
|
@@ -68,13 +71,14 @@ GEM
|
|
|
68
71
|
tilt (1.3.3)
|
|
69
72
|
xpath (0.1.4)
|
|
70
73
|
nokogiri (~> 1.3)
|
|
71
|
-
yard (0.
|
|
74
|
+
yard (0.8.2.1)
|
|
72
75
|
|
|
73
76
|
PLATFORMS
|
|
74
77
|
ruby
|
|
75
78
|
|
|
76
79
|
DEPENDENCIES
|
|
77
80
|
capybara
|
|
81
|
+
find_a_port (>= 1.0.1)
|
|
78
82
|
jeweler
|
|
79
83
|
json_pure
|
|
80
84
|
patron
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.26.0
|
data/kookaburra.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = "kookaburra"
|
|
8
|
-
s.version = "0.
|
|
8
|
+
s.version = "0.26.0"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["John Wilger", "Sam Livingston-Gray", "Ravi Gadad"]
|
|
12
|
-
s.date = "2012-07-
|
|
12
|
+
s.date = "2012-07-27"
|
|
13
13
|
s.description = "Cucumber + Capybara = Kookaburra? It made sense at the time."
|
|
14
14
|
s.email = "johnwilger@gmail.com"
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -40,6 +40,7 @@ Gem::Specification.new do |s|
|
|
|
40
40
|
"lib/kookaburra/mental_model_matcher.rb",
|
|
41
41
|
"lib/kookaburra/test_helpers.rb",
|
|
42
42
|
"lib/kookaburra/ui_driver.rb",
|
|
43
|
+
"lib/kookaburra/ui_driver/has_ui_components.rb",
|
|
43
44
|
"lib/kookaburra/ui_driver/ui_component.rb",
|
|
44
45
|
"lib/kookaburra/ui_driver/ui_component/address_bar.rb",
|
|
45
46
|
"spec/integration/test_a_rack_application_spec.rb",
|
|
@@ -53,6 +54,7 @@ Gem::Specification.new do |s|
|
|
|
53
54
|
"spec/kookaburra/ui_driver/ui_component_spec.rb",
|
|
54
55
|
"spec/kookaburra/ui_driver_spec.rb",
|
|
55
56
|
"spec/kookaburra_spec.rb",
|
|
57
|
+
"spec/support/shared_examples/it_can_have_ui_components.rb",
|
|
56
58
|
"spec/support/shared_examples/it_can_make_assertions.rb",
|
|
57
59
|
"spec/support/shared_examples/it_has_a_dependency_accessor.rb"
|
|
58
60
|
]
|
|
@@ -75,6 +77,7 @@ Gem::Specification.new do |s|
|
|
|
75
77
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
|
76
78
|
s.add_development_dependency(%q<reek>, [">= 0"])
|
|
77
79
|
s.add_development_dependency(%q<sinatra>, [">= 0"])
|
|
80
|
+
s.add_development_dependency(%q<find_a_port>, [">= 1.0.1"])
|
|
78
81
|
else
|
|
79
82
|
s.add_dependency(%q<patron>, [">= 0"])
|
|
80
83
|
s.add_dependency(%q<json_pure>, [">= 0"])
|
|
@@ -85,6 +88,7 @@ Gem::Specification.new do |s|
|
|
|
85
88
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
86
89
|
s.add_dependency(%q<reek>, [">= 0"])
|
|
87
90
|
s.add_dependency(%q<sinatra>, [">= 0"])
|
|
91
|
+
s.add_dependency(%q<find_a_port>, [">= 1.0.1"])
|
|
88
92
|
end
|
|
89
93
|
else
|
|
90
94
|
s.add_dependency(%q<patron>, [">= 0"])
|
|
@@ -96,6 +100,7 @@ Gem::Specification.new do |s|
|
|
|
96
100
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
|
97
101
|
s.add_dependency(%q<reek>, [">= 0"])
|
|
98
102
|
s.add_dependency(%q<sinatra>, [">= 0"])
|
|
103
|
+
s.add_dependency(%q<find_a_port>, [">= 1.0.1"])
|
|
99
104
|
end
|
|
100
105
|
end
|
|
101
106
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class Kookaburra
|
|
2
|
+
class UIDriver
|
|
3
|
+
# Classes that can contain reerences to {UIComponent} instances
|
|
4
|
+
# (i.e. {UIDriver} and {UIDriver::UIComponent} subclasses are
|
|
5
|
+
# extended by this module in order to set up those references.
|
|
6
|
+
# `UIDriver` and `UIComponent` are already extended, so you
|
|
7
|
+
# shouldn't need to do so elsewhere.
|
|
8
|
+
#
|
|
9
|
+
# Instances of the extending class must define a `#configuration`
|
|
10
|
+
# method that returns the current Kookaburra::Configuration
|
|
11
|
+
module HasUIComponents
|
|
12
|
+
|
|
13
|
+
# Tells the extending UIDriver or UIComponent about your {UIComponent} subclasses.
|
|
14
|
+
#
|
|
15
|
+
# @param [Symbol] component_name Will create an instance method of this
|
|
16
|
+
# name that returns an instance of the component_class
|
|
17
|
+
# @param [Class] component_class The {UIComponent} subclass that defines
|
|
18
|
+
# this component.
|
|
19
|
+
# @param [Hash] options An extra options hash that will be passed
|
|
20
|
+
# to the `UIComponent` on initialization.
|
|
21
|
+
def ui_component(component_name, component_class, options = {})
|
|
22
|
+
define_method(component_name) do
|
|
23
|
+
component_class.new(configuration, options)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'kookaburra/exceptions'
|
|
2
2
|
require 'kookaburra/assertion'
|
|
3
|
+
require 'kookaburra/ui_driver/has_ui_components'
|
|
3
4
|
|
|
4
5
|
class Kookaburra
|
|
5
6
|
class UIDriver
|
|
@@ -67,6 +68,15 @@ class Kookaburra
|
|
|
67
68
|
# override the {#component_path} method.
|
|
68
69
|
class UIComponent
|
|
69
70
|
include Assertion
|
|
71
|
+
extend HasUIComponents
|
|
72
|
+
|
|
73
|
+
# The {Kookaburra::Configuration} with which the component
|
|
74
|
+
# instance was instantiated.
|
|
75
|
+
attr_reader :configuration
|
|
76
|
+
|
|
77
|
+
# The options Hash with which the component instance was
|
|
78
|
+
# instantiated.
|
|
79
|
+
attr_reader :options
|
|
70
80
|
|
|
71
81
|
# New UIComponent instances are typically created for you by your
|
|
72
82
|
# {Kookaburra::UIDriver} instance.
|
|
@@ -74,7 +84,11 @@ class Kookaburra
|
|
|
74
84
|
# @see Kookaburra::UIDriver.ui_component
|
|
75
85
|
#
|
|
76
86
|
# @param [Kookaburra::Configuration] configuration
|
|
77
|
-
|
|
87
|
+
# @param [Hash] options An options hash that can be used to
|
|
88
|
+
# further configure a `UIComponent`'s behavior.
|
|
89
|
+
def initialize(configuration, options = {})
|
|
90
|
+
@configuration = configuration
|
|
91
|
+
@options = options
|
|
78
92
|
@browser = configuration.browser
|
|
79
93
|
@app_host = configuration.app_host
|
|
80
94
|
@server_error_detection = configuration.server_error_detection
|
data/lib/kookaburra/ui_driver.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'forwardable'
|
|
2
2
|
require 'kookaburra/assertion'
|
|
3
|
+
require 'kookaburra/ui_driver/has_ui_components'
|
|
3
4
|
require 'kookaburra/ui_driver/ui_component'
|
|
4
5
|
require 'kookaburra/ui_driver/ui_component/address_bar'
|
|
5
6
|
|
|
@@ -60,20 +61,9 @@ class Kookaburra
|
|
|
60
61
|
class UIDriver
|
|
61
62
|
include Assertion
|
|
62
63
|
extend Forwardable
|
|
64
|
+
extend HasUIComponents
|
|
63
65
|
|
|
64
66
|
class << self
|
|
65
|
-
# Tells the UIDriver about your {UIComponent} subclasses.
|
|
66
|
-
#
|
|
67
|
-
# @param [Symbol] component_name Will create an instance method of this
|
|
68
|
-
# name that returns an instance of the component_class
|
|
69
|
-
# @param [Class] component_class The {UIComponent} subclass that defines
|
|
70
|
-
# this component.
|
|
71
|
-
def ui_component(component_name, component_class)
|
|
72
|
-
define_method(component_name) do
|
|
73
|
-
component_class.new(@configuration)
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
67
|
# Tells the UIDriver about sub-drivers (other {UIDriver} subclasses).
|
|
78
68
|
#
|
|
79
69
|
# @param [Symbol] driver_name Will create an instance method of this
|
|
@@ -2,22 +2,14 @@ require 'kookaburra/test_helpers'
|
|
|
2
2
|
require 'kookaburra/json_api_driver'
|
|
3
3
|
require 'capybara'
|
|
4
4
|
require 'thwait'
|
|
5
|
+
require 'find_a_port'
|
|
5
6
|
|
|
6
7
|
# These are required for the Rack app used for testing
|
|
7
8
|
require 'sinatra/base'
|
|
8
9
|
require 'json'
|
|
9
10
|
|
|
10
|
-
# You'd think there would be a better way to do this, but if there is, I
|
|
11
|
-
# can't find it.
|
|
12
|
-
def find_available_port
|
|
13
|
-
server = TCPServer.new('127.0.0.1', 0)
|
|
14
|
-
server.addr[1]
|
|
15
|
-
ensure
|
|
16
|
-
server.close if server
|
|
17
|
-
end
|
|
18
|
-
|
|
19
11
|
# The server port to which the application server will attach
|
|
20
|
-
APP_PORT =
|
|
12
|
+
APP_PORT = FindAPort.available_port
|
|
21
13
|
|
|
22
14
|
describe "testing a Rack application with Kookaburra" do
|
|
23
15
|
describe "with an HTML interface" do
|
|
@@ -234,7 +226,33 @@ describe "testing a Rack application with Kookaburra" do
|
|
|
234
226
|
end
|
|
235
227
|
end
|
|
236
228
|
|
|
229
|
+
class WidgetDataContainer
|
|
230
|
+
def initialize(element)
|
|
231
|
+
@element = element
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def to_hash
|
|
235
|
+
{
|
|
236
|
+
'id' => @element.find('.id').text,
|
|
237
|
+
'name' => @element.find('.name').text
|
|
238
|
+
}
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
class LastWidgetCreated < Kookaburra::UIDriver::UIComponent
|
|
243
|
+
def component_locator
|
|
244
|
+
@options[:component_locator]
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def data
|
|
248
|
+
raise "Foo" unless visible?
|
|
249
|
+
WidgetDataContainer.new(self).to_hash
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
237
253
|
class WidgetList < Kookaburra::UIDriver::UIComponent
|
|
254
|
+
ui_component :last_widget_created, LastWidgetCreated, :component_locator => '#widget_list .last_widget.created'
|
|
255
|
+
|
|
238
256
|
def component_path
|
|
239
257
|
'/widgets'
|
|
240
258
|
end
|
|
@@ -245,15 +263,10 @@ describe "testing a Rack application with Kookaburra" do
|
|
|
245
263
|
|
|
246
264
|
def widgets
|
|
247
265
|
all('.widget_summary').map do |el|
|
|
248
|
-
|
|
266
|
+
WidgetDataContainer.new(el).to_hash
|
|
249
267
|
end
|
|
250
268
|
end
|
|
251
269
|
|
|
252
|
-
def last_widget_created
|
|
253
|
-
element = find('.last_widget.created')
|
|
254
|
-
extract_widget_data(element)
|
|
255
|
-
end
|
|
256
|
-
|
|
257
270
|
def choose_to_create_new_widget
|
|
258
271
|
click_on 'New Widget'
|
|
259
272
|
end
|
|
@@ -261,15 +274,6 @@ describe "testing a Rack application with Kookaburra" do
|
|
|
261
274
|
def choose_to_delete_widget(widget_data)
|
|
262
275
|
find("#delete_#{widget_data['id']}").click_button('Delete')
|
|
263
276
|
end
|
|
264
|
-
|
|
265
|
-
private
|
|
266
|
-
|
|
267
|
-
def extract_widget_data(element)
|
|
268
|
-
{
|
|
269
|
-
'id' => element.find('.id').text,
|
|
270
|
-
'name' => element.find('.name').text
|
|
271
|
-
}
|
|
272
|
-
end
|
|
273
277
|
end
|
|
274
278
|
|
|
275
279
|
class WidgetForm < Kookaburra::UIDriver::UIComponent
|
|
@@ -301,7 +305,7 @@ describe "testing a Rack application with Kookaburra" do
|
|
|
301
305
|
assert widget_list.visible?, "Widget list is not visible!"
|
|
302
306
|
widget_list.choose_to_create_new_widget
|
|
303
307
|
widget_form.submit('name' => 'My Widget')
|
|
304
|
-
mental_model.widgets[name] = widget_list.last_widget_created
|
|
308
|
+
mental_model.widgets[name] = widget_list.last_widget_created.data
|
|
305
309
|
end
|
|
306
310
|
|
|
307
311
|
def delete_widget(name)
|
|
@@ -352,6 +356,7 @@ describe "testing a Rack application with Kookaburra" do
|
|
|
352
356
|
|
|
353
357
|
ui.create_new_widget(:widget_c, :name => 'Bar')
|
|
354
358
|
|
|
359
|
+
|
|
355
360
|
# As above, these are equivalent, but the second line is preferred.
|
|
356
361
|
ui.widget_list.widgets.should == k.get_data(:widgets).values_at(:widget_a, :widget_b, :widget_c)
|
|
357
362
|
ui.widget_list.widgets.should match_mental_model_of(:widgets)
|
|
@@ -50,7 +50,7 @@ describe Kookaburra::JsonApiDriver do
|
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
it 'returns the JSON-decoded response body' do
|
|
53
|
-
json.post('/foo',
|
|
53
|
+
json.post('/foo', :bar => :baz).should == {'foo' => 'bar'}
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
56
|
|
|
@@ -63,7 +63,7 @@ describe Kookaburra::JsonApiDriver do
|
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
it 'returns the JSON-decoded response body' do
|
|
66
|
-
json.put('/foo',
|
|
66
|
+
json.put('/foo', :bar => :baz).should == {'foo' => 'bar'}
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
69
|
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
require 'kookaburra/ui_driver/ui_component'
|
|
2
2
|
require 'support/shared_examples/it_can_make_assertions'
|
|
3
|
+
require 'support/shared_examples/it_can_have_ui_components'
|
|
3
4
|
|
|
4
5
|
describe Kookaburra::UIDriver::UIComponent do
|
|
5
6
|
let(:configuration) { stub('Configuration', :browser => nil, :app_host => nil, :server_error_detection => nil) }
|
|
6
7
|
let(:component) { Kookaburra::UIDriver::UIComponent.new(configuration) }
|
|
7
8
|
|
|
9
|
+
it_behaves_like :it_can_have_ui_components, Kookaburra::UIDriver::UIComponent
|
|
10
|
+
|
|
8
11
|
describe '#respond_to?' do
|
|
9
12
|
let(:component) do
|
|
10
13
|
klass = Class.new(Kookaburra::UIDriver::UIComponent) do
|
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
require 'kookaburra/ui_driver'
|
|
2
2
|
require 'support/shared_examples/it_has_a_dependency_accessor'
|
|
3
3
|
require 'support/shared_examples/it_can_make_assertions'
|
|
4
|
+
require 'support/shared_examples/it_can_have_ui_components'
|
|
4
5
|
|
|
5
6
|
describe Kookaburra::UIDriver do
|
|
6
|
-
|
|
7
|
-
it 'adds an accessor method for the named component that defaults to an instance of the specified class' do
|
|
8
|
-
foo_component_class = mock(Class)
|
|
9
|
-
foo_component_class.should_receive(:new) \
|
|
10
|
-
.with(:configuration) \
|
|
11
|
-
.and_return(:a_foo_component)
|
|
12
|
-
|
|
13
|
-
ui_driver_class = Class.new(Kookaburra::UIDriver) do
|
|
14
|
-
ui_component :foo, foo_component_class
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
ui = ui_driver_class.new(:configuration)
|
|
18
|
-
ui.foo.should == :a_foo_component
|
|
19
|
-
end
|
|
20
|
-
end
|
|
7
|
+
it_behaves_like :it_can_have_ui_components, Kookaburra::UIDriver
|
|
21
8
|
|
|
22
9
|
describe '.ui_driver' do
|
|
23
10
|
it 'adds an accessor method for the named driver that defaults to an instance of the specified class' do
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
shared_examples_for :it_can_have_ui_components do |subject_class|
|
|
2
|
+
describe '.ui_component' do
|
|
3
|
+
it 'adds an accessor method for the named component that defaults to an instance of the specified class' do
|
|
4
|
+
configuration = stub('Kookaburra::Configuration').as_null_object
|
|
5
|
+
foo_component_class = mock(Class)
|
|
6
|
+
foo_component_class.should_receive(:new) \
|
|
7
|
+
.with(configuration, :option => :value) \
|
|
8
|
+
.and_return(:a_foo_component)
|
|
9
|
+
|
|
10
|
+
component_container_class = Class.new(subject_class) do
|
|
11
|
+
ui_component :foo, foo_component_class, :option => :value
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
component_container = component_container_class.new(configuration)
|
|
15
|
+
component_container.foo.should == :a_foo_component
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kookaburra
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.26.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2012-07-
|
|
14
|
+
date: 2012-07-27 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: patron
|
|
@@ -157,6 +157,22 @@ dependencies:
|
|
|
157
157
|
- - ! '>='
|
|
158
158
|
- !ruby/object:Gem::Version
|
|
159
159
|
version: '0'
|
|
160
|
+
- !ruby/object:Gem::Dependency
|
|
161
|
+
name: find_a_port
|
|
162
|
+
requirement: !ruby/object:Gem::Requirement
|
|
163
|
+
none: false
|
|
164
|
+
requirements:
|
|
165
|
+
- - ! '>='
|
|
166
|
+
- !ruby/object:Gem::Version
|
|
167
|
+
version: 1.0.1
|
|
168
|
+
type: :development
|
|
169
|
+
prerelease: false
|
|
170
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
171
|
+
none: false
|
|
172
|
+
requirements:
|
|
173
|
+
- - ! '>='
|
|
174
|
+
- !ruby/object:Gem::Version
|
|
175
|
+
version: 1.0.1
|
|
160
176
|
description: Cucumber + Capybara = Kookaburra? It made sense at the time.
|
|
161
177
|
email: johnwilger@gmail.com
|
|
162
178
|
executables: []
|
|
@@ -188,6 +204,7 @@ files:
|
|
|
188
204
|
- lib/kookaburra/mental_model_matcher.rb
|
|
189
205
|
- lib/kookaburra/test_helpers.rb
|
|
190
206
|
- lib/kookaburra/ui_driver.rb
|
|
207
|
+
- lib/kookaburra/ui_driver/has_ui_components.rb
|
|
191
208
|
- lib/kookaburra/ui_driver/ui_component.rb
|
|
192
209
|
- lib/kookaburra/ui_driver/ui_component/address_bar.rb
|
|
193
210
|
- spec/integration/test_a_rack_application_spec.rb
|
|
@@ -201,6 +218,7 @@ files:
|
|
|
201
218
|
- spec/kookaburra/ui_driver/ui_component_spec.rb
|
|
202
219
|
- spec/kookaburra/ui_driver_spec.rb
|
|
203
220
|
- spec/kookaburra_spec.rb
|
|
221
|
+
- spec/support/shared_examples/it_can_have_ui_components.rb
|
|
204
222
|
- spec/support/shared_examples/it_can_make_assertions.rb
|
|
205
223
|
- spec/support/shared_examples/it_has_a_dependency_accessor.rb
|
|
206
224
|
homepage: http://github.com/projectdx/kookaburra
|
|
@@ -218,7 +236,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
218
236
|
version: '0'
|
|
219
237
|
segments:
|
|
220
238
|
- 0
|
|
221
|
-
hash: -
|
|
239
|
+
hash: -40301256200075417
|
|
222
240
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
223
241
|
none: false
|
|
224
242
|
requirements:
|