domkey 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/lib/domkey/exception.rb +4 -0
- data/lib/domkey/version.rb +1 -1
- data/lib/domkey/view.rb +1 -0
- data/lib/domkey/view/checkbox_group.rb +12 -63
- data/lib/domkey/view/label_mapper.rb +7 -1
- data/lib/domkey/view/labeled_group.rb +22 -11
- data/lib/domkey/view/option_selectable.rb +102 -0
- data/lib/domkey/view/option_selectable_group.rb +120 -0
- data/lib/domkey/view/page_object.rb +11 -11
- data/lib/domkey/view/page_object_collection.rb +1 -1
- data/lib/domkey/view/radio_group.rb +9 -58
- data/lib/domkey/view/select_list.rb +67 -0
- data/lib/domkey/view/widgetry/dispatcher.rb +51 -0
- data/lib/domkey/view/widgetry/package.rb +49 -0
- data/spec/checkbox_group_spec.rb +81 -5
- data/spec/option_selectable_spec.rb +57 -0
- data/spec/radio_group_spec.rb +62 -4
- data/spec/select_list_spec.rb +212 -0
- metadata +11 -6
- data/lib/domkey/view/watir_widget.rb +0 -106
- data/lib/domkey/view/widgetry_package.rb +0 -48
- data/spec/watir_widget_select_spec.rb +0 -176
@@ -1,69 +1,20 @@
|
|
1
|
-
require 'domkey/view/
|
1
|
+
require 'domkey/view/option_selectable_group'
|
2
|
+
|
2
3
|
module Domkey
|
3
4
|
|
4
5
|
module View
|
5
6
|
|
6
7
|
# RadioGroup allows you to interact with PageObjectCollection of radios as a single PageObject
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
# @param [String] match text in value attribute and set that radio
|
13
|
-
def set value
|
14
|
-
validate_scope
|
15
|
-
return unless value
|
16
|
-
[*value].each do |v|
|
17
|
-
e = case v
|
18
|
-
when String
|
19
|
-
element.find { |e| e.value == v }
|
20
|
-
when Regexp
|
21
|
-
element.find { |e| e.value.match(v) }
|
22
|
-
end
|
23
|
-
e ? e.set : fail(Exception::Error, "RadioGroup value not found: #{v.inspect}")
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# @return [String] text in value attribute of currently set
|
28
|
-
def value
|
29
|
-
validate_scope
|
30
|
-
element.find_all { |r| r.set? }.map { |e| e.value }
|
31
|
-
end
|
32
|
-
|
33
|
-
def options
|
34
|
-
validate_scope
|
35
|
-
element.map { |e| e.value }
|
36
|
-
end
|
37
|
-
|
38
|
-
# convert to LabeledGroup settable by corresponding label text
|
39
|
-
def to_labeled
|
40
|
-
LabeledGroup.new(self)
|
41
|
-
end
|
42
|
-
|
43
|
-
# @yield [PageObject]
|
44
|
-
def each(&blk)
|
45
|
-
validate_scope
|
46
|
-
super(&blk)
|
47
|
-
end
|
48
|
-
|
49
|
-
# @return [Array<PageObject>]
|
50
|
-
def to_a
|
51
|
-
validate_scope
|
52
|
-
super
|
53
|
-
end
|
8
|
+
# Acts like OptionSelectable
|
9
|
+
# Radios collection is constrained by the same name attribute
|
10
|
+
# Behaves like a single Select list.
|
11
|
+
# It has one radio selected at all times
|
12
|
+
class RadioGroup < OptionSelectableGroup
|
54
13
|
|
55
14
|
private
|
56
15
|
|
57
|
-
|
58
|
-
|
59
|
-
# @raise [Exception::Error] when where is more than one unique name attribute
|
60
|
-
# --
|
61
|
-
# returns true on subsequent unless magically more radios show up after initial validation
|
62
|
-
def validate_scope
|
63
|
-
return if @validated
|
64
|
-
groups = element.map { |e| e.name }.uniq
|
65
|
-
fail(Exception::Error, "RadioGroup definition scope too broad: Found #{groups.count} radio groups with names: #{groups}") unless (groups.size == 1)
|
66
|
-
@validated = true
|
16
|
+
def before_set
|
17
|
+
validate_scope
|
67
18
|
end
|
68
19
|
end
|
69
20
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'domkey/view/option_selectable'
|
2
|
+
|
3
|
+
module Domkey
|
4
|
+
module View
|
5
|
+
|
6
|
+
class SelectList < PageObject
|
7
|
+
|
8
|
+
include OptionSelectable
|
9
|
+
|
10
|
+
def set_by_string value
|
11
|
+
element.select value
|
12
|
+
end
|
13
|
+
|
14
|
+
def set_by_regexp value
|
15
|
+
element.select value
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_by_index value
|
19
|
+
case value
|
20
|
+
when Fixnum
|
21
|
+
element.options[value].select
|
22
|
+
when Array
|
23
|
+
value.each do |i|
|
24
|
+
element.options[i].select
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def set_by_value value
|
30
|
+
case value
|
31
|
+
when String
|
32
|
+
element.select_value value
|
33
|
+
when Array
|
34
|
+
value.each { |v| element.select_value v }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def value_by_options opts
|
39
|
+
element.selected_options.map do |o|
|
40
|
+
Hash[opts.map { |opt| [opt, o.send(opt)] }]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def value_by_default
|
45
|
+
element.selected_options.map { |e| e.text }
|
46
|
+
end
|
47
|
+
|
48
|
+
# iffy
|
49
|
+
def options
|
50
|
+
element.options.map do |o|
|
51
|
+
{text: o.text,
|
52
|
+
value: o.value,
|
53
|
+
index: o.index}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def before_set
|
61
|
+
element.clear if element.multiple?
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Domkey
|
2
|
+
module View
|
3
|
+
module Widgetry
|
4
|
+
|
5
|
+
# Dispatcher chooser for a given Element
|
6
|
+
# @param object [Element] thing that needs to be interacted with, i.e. Watir::Select, Watir::CheckBox, Selenium::Element etc...
|
7
|
+
# @return [Widgetry::Dispatcher] (or subclass of) that handles the strategy for interacting with the element
|
8
|
+
def self.dispatcher(object)
|
9
|
+
object_class_name = object.class.name.split('::').last
|
10
|
+
if const_defined? object_class_name.to_sym
|
11
|
+
const_get("#{self}::#{object_class_name}").new(object)
|
12
|
+
else
|
13
|
+
Dispatcher.new(object)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Widgetry::Dispatcher is a communication object responsible for
|
18
|
+
# receiving and transmitting messages to PageObject Element.
|
19
|
+
# Client should subclass and provide desired interaction strategy that may differ from provided by default
|
20
|
+
class Dispatcher < SimpleDelegator
|
21
|
+
|
22
|
+
# @param [Element] thing that needs to be set i.e. Watir::Select, Watir::CheckBox etc...
|
23
|
+
def initialize(object)
|
24
|
+
__setobj__(object)
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [Element] subclasses use this to interact with original Elment wrapped by Dispacher
|
28
|
+
def original
|
29
|
+
__getobj__
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [Array<Option>] defaults to [] if original.options.empty?
|
33
|
+
def options
|
34
|
+
o = original.options
|
35
|
+
o.count == 0 ? [] : o
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
class Radio < Dispatcher
|
41
|
+
|
42
|
+
# because radio.set does not take args
|
43
|
+
def set value
|
44
|
+
original.set
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Domkey
|
2
|
+
module View
|
3
|
+
module Widgetry
|
4
|
+
|
5
|
+
module Package
|
6
|
+
|
7
|
+
attr_accessor :package, :container
|
8
|
+
|
9
|
+
# initialize PageObject or PageObjectCollection
|
10
|
+
# for PageObject expects WebdriverElement a single element definition i.e text_field, checkbox
|
11
|
+
# for PageObjectCollection expects WebdriverElement a collection definition i.e. text_fields, checkboxes
|
12
|
+
# @param package [Proc(WebdriverElement)]
|
13
|
+
# @param package [PageObject]
|
14
|
+
# @param package [Hash{Symbol => Proc(WebdriverElement)]
|
15
|
+
# @param package [Hash{Symbol => PageObject]
|
16
|
+
def initialize package, container=lambda { Domkey.browser }
|
17
|
+
@container = container
|
18
|
+
@package = initialize_this package
|
19
|
+
end
|
20
|
+
|
21
|
+
# access widgetry of watir elements composing this page object
|
22
|
+
# @param [Symbol] (false)
|
23
|
+
# @return [Hash{Symbol => WebdriverElement}]
|
24
|
+
# @return [Element] raw element, i.e. Watir::Select, Watir::CheckBox (not wrapped with Dispatcher strategy)
|
25
|
+
def element(key=false)
|
26
|
+
return instantiator unless package.respond_to?(:each_pair)
|
27
|
+
return package.fetch(key).element if key
|
28
|
+
Hash[package.map { |key, package| [key, package.element] }]
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
# talks to the browser
|
34
|
+
# returns runtime element in a specified container
|
35
|
+
# @return [WebdriverElement]
|
36
|
+
def instantiator
|
37
|
+
container_instantiator.instance_exec(&package)
|
38
|
+
end
|
39
|
+
|
40
|
+
# talks to the browser
|
41
|
+
# returns runtime container element in a browser/driver
|
42
|
+
# @return [WebdriverElement]
|
43
|
+
def container_instantiator
|
44
|
+
container.respond_to?(:call) ? container.call : container.send(:instantiator)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/spec/checkbox_group_spec.rb
CHANGED
@@ -39,16 +39,20 @@ describe Domkey::View::CheckboxGroup do
|
|
39
39
|
|
40
40
|
it 'initial value on test page' do
|
41
41
|
@v.group.value.should eql ['other']
|
42
|
+
@v.group.value(:value, :index, :label).should eql [value: 'other', index: 2, label: 'Other']
|
42
43
|
end
|
43
44
|
|
44
|
-
it 'set
|
45
|
+
it 'set string' do
|
45
46
|
@v.group.set 'tomato'
|
46
47
|
@v.group.value.should eql ['tomato']
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'set regexp' do
|
47
51
|
@v.group.set /^othe/
|
48
52
|
@v.group.value.should eql ['other']
|
49
53
|
end
|
50
54
|
|
51
|
-
it 'set array of
|
55
|
+
it 'set array of strings or regexp' do
|
52
56
|
@v.group.set ['tomato']
|
53
57
|
@v.group.value.should eql ['tomato']
|
54
58
|
|
@@ -56,12 +60,12 @@ describe Domkey::View::CheckboxGroup do
|
|
56
60
|
@v.group.value.should eql ['tomato', 'other']
|
57
61
|
end
|
58
62
|
|
59
|
-
it 'set false clears all
|
63
|
+
it 'set false clears all' do
|
60
64
|
@v.group.set false
|
61
65
|
@v.group.value.should eql []
|
62
66
|
end
|
63
67
|
|
64
|
-
it 'set empty array clears all
|
68
|
+
it 'set empty array clears all' do
|
65
69
|
@v.group.set []
|
66
70
|
@v.group.value.should eql []
|
67
71
|
end
|
@@ -74,8 +78,80 @@ describe Domkey::View::CheckboxGroup do
|
|
74
78
|
expect { @v.group.set /balaba/ }.to raise_error
|
75
79
|
end
|
76
80
|
|
77
|
-
it '
|
81
|
+
it 'set by index single' do
|
82
|
+
@v.group.set index: 1
|
83
|
+
@v.group.value.should eql ['tomato']
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'set by index array' do
|
87
|
+
@v.group.set index: [0, 2, 1]
|
88
|
+
@v.group.value.should eql ['cucumber', 'tomato', 'other']
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'set by label string' do
|
92
|
+
@v.group.set label: 'Tomatorama'
|
93
|
+
@v.group.value.should eql ['tomato']
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'set by label regexp' do
|
97
|
+
@v.group.set label: /umberama/
|
98
|
+
@v.group.value([:index, :value, :text, :label]).should eql [{:index=>0, :value=>"cucumber", :text=>"Cucumberama", :label=>"Cucumberama"}]
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
it 'set by index array string, regex' do
|
103
|
+
@v.group.set label: ['Cucumberama', /atorama/]
|
104
|
+
@v.group.value.should eql ['cucumber', 'tomato']
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
it 'value options single selected' do
|
109
|
+
@v.group.set [/tomat/]
|
110
|
+
@v.group.value.should eql ['tomato']
|
111
|
+
|
112
|
+
@v.group.value(:label).should eql [{:label=>"Tomatorama"}]
|
113
|
+
@v.group.value([:label]).should eql [{:label=>"Tomatorama"}]
|
114
|
+
@v.group.value(:label, :value, :index).should eql [{:label=>"Tomatorama", :value=>"tomato", :index=>1}]
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'value options many selected' do
|
118
|
+
@v.group.set ['other', /tomat/, /cucum/]
|
119
|
+
@v.group.value.should eql ['cucumber', 'tomato', 'other']
|
120
|
+
|
121
|
+
@v.group.value(:label).should eql [{:label=>"Cucumberama"}, {:label=>"Tomatorama"}, {:label=>"Other"}]
|
122
|
+
@v.group.value(:label, :index, :value).should eql [{:label=>"Cucumberama", :index=>0, :value=>"cucumber"},
|
123
|
+
{:label=>"Tomatorama", :index=>1, :value=>"tomato"},
|
124
|
+
{:label=>"Other", :index=>2, :value=>"other"}]
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'value options none selected' do
|
128
|
+
@v.group.set []
|
129
|
+
@v.group.value.should eql []
|
130
|
+
@v.group.value(:label).should eql []
|
131
|
+
@v.group.value(:label, :index, :value).should eql []
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'options by default' do
|
78
135
|
@v.group.options.should eql ["cucumber", "tomato", "other"]
|
79
136
|
end
|
137
|
+
|
138
|
+
it 'options by opts single' do
|
139
|
+
@v.group.options(:value).should eql [{:value=>"cucumber"}, {:value=>"tomato"}, {:value=>"other"}]
|
140
|
+
@v.group.options([:value]).should eql [{:value=>"cucumber"}, {:value=>"tomato"}, {:value=>"other"}]
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'options by label' do
|
144
|
+
@v.group.options(:label).should eql [{:label=>"Cucumberama"}, {:label=>"Tomatorama"}, {:label=>"Other"}]
|
145
|
+
@v.group.options([:label]).should eql [{:label=>"Cucumberama"}, {:label=>"Tomatorama"}, {:label=>"Other"}]
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'options by opts many' do
|
149
|
+
expected = [{:value=>"cucumber", :index=>0, :label=>"Cucumberama", :text=>"Cucumberama"},
|
150
|
+
{:value=>"tomato", :index=>1, :label=>"Tomatorama", :text=>"Tomatorama"},
|
151
|
+
{:value=>"other", :index=>2, :label=>"Other", :text=>"Other"}]
|
152
|
+
|
153
|
+
@v.group.options(:value, :index, :label, :text).should eql expected
|
154
|
+
@v.group.options([:value, :index, :label, :text]).should eql expected
|
155
|
+
end
|
80
156
|
end
|
81
157
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Domkey::View::OptionSelectable do
|
4
|
+
|
5
|
+
class OptionSelectableFaker
|
6
|
+
include Domkey::View::OptionSelectable
|
7
|
+
end
|
8
|
+
|
9
|
+
before :all do
|
10
|
+
@widget = OptionSelectableFaker.new
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'set string' do
|
14
|
+
expect { @widget.set('fake') }.to raise_error(Domkey::Exception::NotImplementedError)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'set regex' do
|
18
|
+
expect { @widget.set(/fake/) }.to raise_error(Domkey::Exception::NotImplementedError)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'set :label' do
|
22
|
+
expect { @widget.set(:label => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'set :text' do
|
26
|
+
expect { @widget.set(:text => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'set :index' do
|
30
|
+
expect { @widget.set(:index => 3) }.to raise_error(Domkey::Exception::NotImplementedError)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'set :value' do
|
34
|
+
expect { @widget.set(:value => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'value default' do
|
38
|
+
expect { @widget.value }.to raise_error(Domkey::Exception::NotImplementedError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'value option' do
|
42
|
+
expect { @widget.value(:foo) }.to raise_error(Domkey::Exception::NotImplementedError)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'options default' do
|
46
|
+
expect { @widget.options }.to raise_error(Domkey::Exception::NotImplementedError)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'options opt' do
|
50
|
+
expect { @widget.options(:foo) }.to raise_error(Domkey::Exception::NotImplementedError)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
|
data/spec/radio_group_spec.rb
CHANGED
@@ -41,11 +41,19 @@ describe Domkey::View::RadioGroup do
|
|
41
41
|
|
42
42
|
it 'initial value on test page' do
|
43
43
|
@v.group.value.should eql ['other']
|
44
|
+
@v.group.value(:index, :value, :label, :text).should eql [{:index=>2, :value=>"other", :label=>"Other", :text=>"Other"}]
|
45
|
+
@v.group.value([:index, :value, :label, :text]).should eql [{:index=>2, :value=>"other", :label=>"Other", :text=>"Other"}]
|
46
|
+
@v.group.value([:index]).should eql [{:index=>2}]
|
47
|
+
@v.group.value([:value]).should eql [{:value=>'other'}]
|
44
48
|
end
|
45
49
|
|
46
|
-
it 'set
|
50
|
+
it 'set string' do
|
47
51
|
@v.group.set 'tomato'
|
48
52
|
@v.group.value.should eql ['tomato']
|
53
|
+
@v.group.value(:value).should eql [{value: 'tomato'}]
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'set regexp' do
|
49
57
|
@v.group.set /^oth/
|
50
58
|
@v.group.value.should eql ['other']
|
51
59
|
end
|
@@ -56,14 +64,15 @@ describe Domkey::View::RadioGroup do
|
|
56
64
|
|
57
65
|
@v.group.set ['other', 'tomato', /cucu/]
|
58
66
|
@v.group.value.should eql ['cucumber']
|
67
|
+
@v.group.value([:index, :label]).should eql [{:index=>0, :label=>"Cucumber"}]
|
59
68
|
end
|
60
69
|
|
61
|
-
it 'set false has no effect
|
70
|
+
it 'set false has no effect' do
|
62
71
|
@v.group.set false
|
63
72
|
@v.group.value.should eql ['other']
|
64
73
|
end
|
65
74
|
|
66
|
-
it 'set empty array
|
75
|
+
it 'set empty array has no effect' do
|
67
76
|
@v.group.set []
|
68
77
|
@v.group.value.should eql ['other']
|
69
78
|
end
|
@@ -76,10 +85,59 @@ describe Domkey::View::RadioGroup do
|
|
76
85
|
expect { @v.group.set /balaba/ }.to raise_error
|
77
86
|
end
|
78
87
|
|
79
|
-
|
88
|
+
|
89
|
+
it 'set by index single' do
|
90
|
+
@v.group.set index: 1
|
91
|
+
@v.group.value.should eql ['tomato']
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'set by index array' do
|
95
|
+
@v.group.set index: [0, 2, 1]
|
96
|
+
@v.group.value.should eql ['tomato']
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'set by label string' do
|
100
|
+
@v.group.set label: 'Tomato'
|
101
|
+
@v.group.value.should eql ['tomato']
|
102
|
+
@v.group.value(:text).should eql [{text: 'Tomato'}]
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'set by label regexp' do
|
106
|
+
@v.group.set label: /umber/
|
107
|
+
@v.group.value.should eql ['cucumber']
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
it 'set by index array string, regex' do
|
112
|
+
@v.group.set label: ['Cucumber', /mato/]
|
113
|
+
@v.group.value.should eql ['tomato']
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'options by default' do
|
80
117
|
@v.group.options.should eql ["cucumber", "tomato", "other"]
|
81
118
|
end
|
82
119
|
|
120
|
+
it 'options by opts single' do
|
121
|
+
@v.group.options(:value).should eql [{:value=>"cucumber"}, {:value=>"tomato"}, {:value=>"other"}]
|
122
|
+
@v.group.options([:value]).should eql [{:value=>"cucumber"}, {:value=>"tomato"}, {:value=>"other"}]
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'options by label' do
|
126
|
+
expected = [{:label=>"Cucumber"}, {:label=>"Tomato"}, {:label=>"Other"}]
|
127
|
+
@v.group.options(:label).should eql expected
|
128
|
+
@v.group.options([:label]).should eql expected
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'options by opts many' do
|
132
|
+
expected = [{:value=>"cucumber", :index=>0, :label=>"Cucumber", :text=>"Cucumber"},
|
133
|
+
{:value=>"tomato", :index=>1, :label=>"Tomato", :text=>"Tomato"},
|
134
|
+
{:value=>"other", :index=>2, :label=>"Other", :text=>"Other"}]
|
135
|
+
|
136
|
+
@v.group.options(:value, :index, :label, :text).should eql expected
|
137
|
+
@v.group.options([:value, :index, :label, :text]).should eql expected
|
138
|
+
end
|
139
|
+
|
140
|
+
|
83
141
|
end
|
84
142
|
|
85
143
|
end
|