domkey 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0468e0993e03c228863792b2979fc0518aea17db
4
- data.tar.gz: d36475ac117f17891905d01328dadca7bc08fe90
3
+ metadata.gz: e93f5beddbdb0fad6ae8e499a06a46dc177c23b3
4
+ data.tar.gz: 4a77a3c0434d61e3ce656babba4abfdfe2eb9853
5
5
  SHA512:
6
- metadata.gz: ef11d67c2261cc2e7f4228bbe1f2466a1d82f4ebb8eedd895850c9e48d109080506ae91f6a40055184308e04f24395aedc5c81d0f48d5d7ba866d23b78a4e45d
7
- data.tar.gz: 5b613799843aedb4959c422fe4dfcf91c28740903c78e4e86dc4b40e971ff803a77567df785e066ae702069bcc5becdb56246c98a7feba1012bc0e96b8cf49e4
6
+ metadata.gz: 3cc26e517caf10802fc411947b2de31ea5dc2ca06d6b4467fd8a4a81bc5f21ce7443f5dc17baac0836a84a193f630f028fae9375b550837660d6c5fe490ca1ab
7
+ data.tar.gz: 88deffe102eb2fa60e364cf7a59bdbd07b81997a54dda072d56653702f757909622fe77c9e3ffe55f8194136f18d915899fac384988fb019fa62e392a2b3ac41
@@ -1,3 +1,3 @@
1
1
  module Domkey
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -3,7 +3,7 @@ require 'domkey/view/page_object_collection'
3
3
  require 'domkey/view/radio_group'
4
4
  require 'domkey/view/checkbox_group'
5
5
  require 'domkey/view/select_list'
6
- require 'domkey/view/cargo'
6
+ require 'domkey/view/binder'
7
7
 
8
8
  module Domkey
9
9
 
@@ -25,10 +25,10 @@ module Domkey
25
25
  end
26
26
  end
27
27
 
28
- # build Cargo with model and view
29
- # @return [Domkey::View::Cargo]
30
- def cargo model, browser: nil
31
- Cargo.new model: model, view: self.new(browser)
28
+ # build Binder with model and view
29
+ # @return [Domkey::View::Binder]
30
+ def binder model, browser: nil
31
+ Binder.new model: model, view: self.new(browser)
32
32
  end
33
33
 
34
34
  end
@@ -52,7 +52,7 @@ module Domkey
52
52
  end
53
53
 
54
54
  def set value
55
- Cargo.new(model: value, view: self).set
55
+ Binder.new(model: value, view: self).set
56
56
  end
57
57
 
58
58
  # @param [Hash{Symbol => Object}] view data where Symbol is semantic descriptor for a pageobject in the view
@@ -71,7 +71,7 @@ module Domkey
71
71
  when Hash
72
72
  value
73
73
  end
74
- Cargo.new(model: value, view: self).value
74
+ Binder.new(model: value, view: self).value
75
75
  end
76
76
 
77
77
  end
@@ -2,11 +2,11 @@ module Domkey
2
2
 
3
3
  module View
4
4
 
5
- # Data shipping between Model and View
5
+ # Data transfer facilitator for the view
6
6
  # Sends data to view. Grabs data from view
7
- #
8
- # For specialized transfer object a client would sublcass this Cargo,
9
- # by default View.cargo factory method is provided for regular data transfer object
7
+ # Data is a model of the view
8
+ # For specialized transfer object a client would sublcass this Binder,
9
+ # by default View.binder factory method is provided for regular data transfer object
10
10
  #
11
11
  # @usage
12
12
  #
@@ -20,21 +20,21 @@ module Domkey
20
20
  # end
21
21
  # end
22
22
  #
23
- # model = {city: 'Austin', fruit: 'tomato'}
24
- # cargo = MyView.cargo model
25
- # cargo.set #=> sets view.city with model[:city] and view.fruit with model[:fruit]
26
- # cargo.value #=> returns {city: 'Austing', fruit: 'tomato'}
23
+ # model = {city: 'Austin', fruit: 'tomato'}
24
+ # binder = MyView.binder model
25
+ # binder.set #=> sets view.city with model[:city] and view.fruit with view_model[:fruit]
26
+ # binder.value #=> returns {city: 'Austing', fruit: 'tomato'}
27
27
  #
28
- # class MyCargo < Domkey::View::Cargo
28
+ # class MyBinder < Domkey::View::Binder
29
29
  #
30
30
  # end
31
31
  #
32
32
  # model = {city: 'Mordor'}
33
33
  # view = MyView.new
34
- # cargo = MyCargo.new view: view, model: model
35
- # cargo.set
34
+ # binder = MyBinder.new view: view, model: model
35
+ # binder.set
36
36
  #
37
- class Cargo
37
+ class Binder
38
38
 
39
39
  attr_accessor :view, :model
40
40
 
@@ -4,7 +4,7 @@ module Domkey
4
4
 
5
5
  # clears all options and sets only the desired value(s)
6
6
  # @param [String, Regexp] sets default designated option by String or Regexp
7
- # @param [Array<String, Regexp>] sets each String, Regexp
7
+ # @param [Array<String, Regexp>] set more than one option by default strategy
8
8
  # @param [False] unselects all options
9
9
  # @param [Hash{how => value}] selects by how strategy where how is a symbol :label, :index, :text, :value
10
10
  # Clients need to implement individual strategy for each 'how' => 'value' pair based on what it means to be selected by what
@@ -13,17 +13,17 @@ module Domkey
13
13
  set_strategy value
14
14
  end
15
15
 
16
- # @param [] opts. Represents a qualifier of what types of options to return. defaults to empty
17
- # @return [Array<String>] when opts param emtpy returns array of default strings implemented by client
18
- # @param [Symbol,Array<Symbol>] symbols represents what option selector to return
19
- # @return [Array<Hash{what => value}] where what is a symbol for option selector, :index, :value, :text, :label
16
+ # @param opts [Symbol, Array<Symbol>] defaults to empty []. Represents a qualifier how to present selected options.
17
+ # @return [Array<String>] When opts param empty? array of default strings implemented by client as a presentation of options selected
18
+ # @param opts [Symbol,Array<Symbol>] ask for representation of options by 'what'
19
+ # @return [Array<Hash{what => value}] Whe opts is a list of symbols :index, :value, :text, :label corresponding to 'what' key
20
20
  def value *opts
21
21
  opts = opts.flatten
22
22
  return value_by_default if (opts.empty? || opts.find { |e| e.kind_of?(String) })
23
23
  value_by_options opts
24
24
  end
25
25
 
26
- # similar strategy to value but returns all options and not only selected ones
26
+ # @see +value+ returns all options and not only selected ones
27
27
  def options *opts
28
28
  opts = opts.flatten
29
29
  return options_by_default if opts.empty?
@@ -55,19 +55,15 @@ module Domkey
55
55
  # strategy for selecting OptionSelectable object
56
56
  def set_strategy value
57
57
  case value
58
- when String
59
- set_by_string(value)
60
- when Regexp
61
- set_by_regexp(value)
58
+ when String, Regexp
59
+ set_by_value(value)
62
60
  when Array
63
61
  value.each { |v| set_strategy(v) }
64
62
  when Hash
65
63
  value.each_pair do |how, value|
66
64
  case how
67
- when :label
65
+ when :label, :text
68
66
  set_by_label(value)
69
- when :text
70
- set_strategy(value)
71
67
  when :index
72
68
  set_by_index(value)
73
69
  when :value
@@ -77,26 +73,21 @@ module Domkey
77
73
  end
78
74
  end
79
75
 
80
- def set_by_string value
81
- fail Exception::NotImplementedError, "Subclass responsible for implementing"
82
- end
83
-
84
- def set_by_regexp value
76
+ # default strategy. set by value attribute
77
+ def set_by_value value
85
78
  fail Exception::NotImplementedError, "Subclass responsible for implementing"
86
79
  end
87
80
 
81
+ # by visible text, label of the control
88
82
  def set_by_label value
89
83
  fail Exception::NotImplementedError, "Subclass responsible for implementing"
90
84
  end
91
85
 
86
+ # set by position in an index of options
92
87
  def set_by_index value
93
88
  fail Exception::NotImplementedError, "Subclass responsible for implementing"
94
89
  end
95
90
 
96
- def set_by_value value
97
- fail Exception::NotImplementedError, "Subclass responsible for implementing"
98
- end
99
-
100
91
  end
101
92
  end
102
93
  end
@@ -10,26 +10,25 @@ module Domkey
10
10
  include OptionSelectable
11
11
 
12
12
  def set_by_index value
13
- [*value].each do |i|
14
- self[i.to_i].set(true)
15
- end
13
+ [*value].each { |i| self[i.to_i].set(true) }
16
14
  end
17
15
 
18
16
  def set_by_label value
19
17
  to_labeled.__send__(:set_strategy, value)
20
18
  end
21
19
 
22
- def set_by_regexp value
23
- o = find { |o| o.value.match(value) }
24
- o ? o.element.set : fail(Exception::NotFoundError, "Element not found with value: #{v.inspect}")
25
- end
26
-
27
- def set_by_string value
28
- o = find { |o| o.value == value }
20
+ def set_by_value value
21
+ o = case value
22
+ when String
23
+ find { |o| o.value == value }
24
+ when Regexp
25
+ find { |o| o.value.match(value) }
26
+ else
27
+ false
28
+ end
29
29
  o ? o.element.set : fail(Exception::NotFoundError, "Element not found with value: #{v.inspect}")
30
30
  end
31
31
 
32
-
33
32
  def value_by_default
34
33
  validate_scope
35
34
  find_all { |e| e.element.set? }.map { |e| e.value }
@@ -77,6 +77,23 @@ module Domkey
77
77
  Hash[package.map { |key, pageobject| [key, pageobject.options] }]
78
78
  end
79
79
 
80
+
81
+ # @api private
82
+ # delegate to element when element responds to message
83
+ def method_missing(message, *args, &block)
84
+ if respond_to_missing?(message, false)
85
+ element.__send__(message, *args, &block)
86
+ else
87
+ super
88
+ end
89
+ end
90
+
91
+ # @api private
92
+ # ruturn true when element.respond_to? message so we can delegate with confidence
93
+ def respond_to_missing?(message, include_private = false)
94
+ element.respond_to?(message) ? true : false
95
+ end
96
+
80
97
  private
81
98
 
82
99
  # wrap instantiator with strategy for setting and getting value for underlying object
@@ -7,32 +7,19 @@ module Domkey
7
7
 
8
8
  include OptionSelectable
9
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
-
10
+ # by position in options array
18
11
  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
12
+ [*value].each { |i| element.options[i].select }
27
13
  end
28
14
 
15
+ # by value attribute of the option
29
16
  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
17
+ [*value].each { |v| element.select_value(v) }
18
+ end
19
+
20
+ # by visible text for the option (visible to the user)
21
+ def set_by_label value
22
+ [*value].each { |v| element.select(v) }
36
23
  end
37
24
 
38
25
  def value_by_options opts
@@ -42,21 +29,20 @@ module Domkey
42
29
  end
43
30
 
44
31
  def value_by_default
45
- element.selected_options.map { |e| e.text }
32
+ element.selected_options.map { |e| e.value }
33
+ end
34
+
35
+ def options_by_default
36
+ element.options.map { |e| e.value }
46
37
  end
47
38
 
48
- # iffy
49
- def options
39
+ def options_by opts
50
40
  element.options.map do |o|
51
- {text: o.text,
52
- value: o.value,
53
- index: o.index}
41
+ Hash[opts.map { |opt| [opt, o.send(opt)] }]
54
42
  end
55
43
  end
56
44
 
57
45
 
58
- private
59
-
60
46
  def before_set
61
47
  element.clear if element.multiple?
62
48
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Domkey::View::Cargo do
3
+ describe Domkey::View::Binder do
4
4
 
5
5
  class AddressView
6
6
  include Domkey::View
@@ -43,9 +43,9 @@ describe Domkey::View::Cargo do
43
43
  model = {city: 'Austin',
44
44
  street: 'Lamar'}
45
45
 
46
- cargo = Domkey::View::Cargo.new model: model, view: AddressView.new
47
- cargo.set
48
- extracted = cargo.value
46
+ binder = Domkey::View::Binder.new model: model, view: AddressView.new
47
+ binder.set
48
+ extracted = binder.value
49
49
  extracted.should eql model
50
50
  end
51
51
 
@@ -56,9 +56,9 @@ describe Domkey::View::Cargo do
56
56
  street: 'Austin'}
57
57
  }
58
58
 
59
- cargo = Domkey::View::Cargo.new model: model, view: AddressView.new
60
- cargo.set
61
- extracted = cargo.value
59
+ binder = Domkey::View::Binder.new model: model, view: AddressView.new
60
+ binder.set
61
+ extracted = binder.value
62
62
  extracted.should eql model
63
63
  end
64
64
 
@@ -71,19 +71,19 @@ describe Domkey::View::Cargo do
71
71
  delivery_date: {month: 'delivery thing'}}
72
72
  }
73
73
 
74
- cargo = Domkey::View::Cargo.new model: model, view: AddressView.new
75
- cargo.set
76
- extracted = cargo.value
74
+ binder = Domkey::View::Binder.new model: model, view: AddressView.new
75
+ binder.set
76
+ extracted = binder.value
77
77
  extracted.should eql model
78
78
  end
79
79
 
80
- it 'cargo' do
80
+ it 'binder' do
81
81
  model = {city: 'Mordor'}
82
82
 
83
83
  view = AddressView.new
84
- cargo = Domkey::View::Cargo.new view: view, model: model
85
- cargo.set
86
- scraped_model = cargo.value
84
+ binder = Domkey::View::Binder.new view: view, model: model
85
+ binder.set
86
+ scraped_model = binder.value
87
87
 
88
88
  scraped_model.should eql model
89
89
  end
@@ -91,14 +91,14 @@ describe Domkey::View::Cargo do
91
91
  it 'pageobject' do
92
92
 
93
93
  model = {city: 'Austin', fruit: ['tomato', 'other']}
94
- cargo = AddressView.cargo model
94
+ binder = AddressView.binder model
95
95
 
96
96
  # default values when page loads before setting the values
97
97
  default_page_values = {:city=>"id city class city", :fruit=>["other"]}
98
- cargo.value.should eql default_page_values
99
- cargo.set
98
+ binder.value.should eql default_page_values
99
+ binder.set
100
100
 
101
- extracted_model = cargo.value
101
+ extracted_model = binder.value
102
102
  extracted_model.should eql model
103
103
 
104
104
  end
@@ -10,48 +10,106 @@ describe Domkey::View::OptionSelectable do
10
10
  @widget = OptionSelectableFaker.new
11
11
  end
12
12
 
13
- it 'set string' do
14
- expect { @widget.set('fake') }.to raise_error(Domkey::Exception::NotImplementedError)
15
- end
13
+ context 'set' do
14
+
15
+ it 'set string' do
16
+ expect(@widget).to receive(:set_by_value)
17
+ @widget.set('fake')
18
+ end
19
+
20
+ it 'set regex' do
21
+ expect(@widget).to receive(:set_by_value)
22
+ @widget.set(/fake/)
23
+ end
24
+
25
+ it 'set :value' do
26
+ expect(@widget).to receive(:set_by_value)
27
+ @widget.set(:value => 'fake')
28
+ end
29
+
30
+ it 'set :label' do
31
+ expect(@widget).to receive(:set_by_label)
32
+ @widget.set(:label => 'fake')
33
+ end
34
+
35
+ it 'set :text' do
36
+ expect(@widget).to receive(:set_by_label)
37
+ @widget.set(:text => 'fake')
38
+ end
39
+
40
+ it 'set :index' do
41
+ expect(@widget).to receive(:set_by_index)
42
+ @widget.set(:index => 3)
43
+ end
44
+
45
+ it 'string' do
46
+ expect { @widget.set('fake') }.to raise_error(Domkey::Exception::NotImplementedError)
47
+ end
48
+
49
+ it 'regex' do
50
+ expect { @widget.set(/fake/) }.to raise_error(Domkey::Exception::NotImplementedError)
51
+ end
52
+
53
+ it ':label' do
54
+ expect { @widget.set(:label => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
55
+ end
56
+
57
+ it ':text' do
58
+ expect { @widget.set(:text => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
59
+ end
60
+
61
+ it ':index' do
62
+ expect { @widget.set(:index => 3) }.to raise_error(Domkey::Exception::NotImplementedError)
63
+ end
64
+
65
+ it ':value' do
66
+ expect { @widget.set(:value => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
67
+ end
16
68
 
17
- it 'set regex' do
18
- expect { @widget.set(/fake/) }.to raise_error(Domkey::Exception::NotImplementedError)
19
69
  end
20
70
 
21
- it 'set :label' do
22
- expect { @widget.set(:label => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
23
- end
71
+ context 'value' do
24
72
 
25
- it 'set :text' do
26
- expect { @widget.set(:text => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
27
- end
73
+ it 'value default' do
74
+ expect(@widget).to receive(:value_by_default)
75
+ @widget.value
76
+ end
28
77
 
29
- it 'set :index' do
30
- expect { @widget.set(:index => 3) }.to raise_error(Domkey::Exception::NotImplementedError)
31
- end
78
+ it 'value option' do
79
+ expect(@widget).to receive(:value_by_options)
80
+ @widget.value(:foo)
81
+ end
32
82
 
33
- it 'set :value' do
34
- expect { @widget.set(:value => 'fake') }.to raise_error(Domkey::Exception::NotImplementedError)
35
- end
83
+ it 'default' do
84
+ expect { @widget.value }.to raise_error(Domkey::Exception::NotImplementedError)
85
+ end
36
86
 
37
- it 'value default' do
38
- expect { @widget.value }.to raise_error(Domkey::Exception::NotImplementedError)
39
- end
87
+ it 'option' do
88
+ expect { @widget.value(:foo) }.to raise_error(Domkey::Exception::NotImplementedError)
89
+ end
40
90
 
41
- it 'value option' do
42
- expect { @widget.value(:foo) }.to raise_error(Domkey::Exception::NotImplementedError)
43
- end
44
91
 
45
- it 'options default' do
46
- expect { @widget.options }.to raise_error(Domkey::Exception::NotImplementedError)
47
92
  end
48
93
 
49
- it 'options opt' do
50
- expect { @widget.options(:foo) }.to raise_error(Domkey::Exception::NotImplementedError)
51
- end
94
+ context 'options' do
52
95
 
53
- end
96
+ it 'options default' do
97
+ expect(@widget).to receive(:options_by_default)
98
+ @widget.options
99
+ end
54
100
 
101
+ it 'options opt' do
102
+ expect(@widget).to receive(:options_by)
103
+ @widget.options(:foo)
104
+ end
55
105
 
106
+ it 'default' do
107
+ expect { @widget.options }.to raise_error(Domkey::Exception::NotImplementedError)
108
+ end
56
109
 
110
+ it 'opts' do
111
+ expect { @widget.options(:foo) }.to raise_error(Domkey::Exception::NotImplementedError)
112
+ end
57
113
 
114
+ end
115
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ # methods each pageobject should have
4
+ # set value options elements
5
+
6
+ describe Domkey::View::PageObject do
7
+
8
+ before :all do
9
+ goto_html("test.html")
10
+ end
11
+
12
+ context 'delegate to element for missing methods' do
13
+ before :all do
14
+ @o = Domkey::View::PageObject.new -> { text_field(id: 'city1') }
15
+ end
16
+
17
+ it 'should delegate to element when element responds' do
18
+ @o.should respond_to(:id)
19
+ @o.id.should eql 'city1'
20
+
21
+ @o.should respond_to(:click)
22
+ @o.click
23
+ end
24
+
25
+ it 'should not delegate to element when element does not repsond' do
26
+ @o.should_not respond_to(:textaramabada)
27
+ expect { @o.textaramabada }.to raise_error(NoMethodError)
28
+ end
29
+ end
30
+ end
@@ -28,14 +28,14 @@ describe Domkey::View::SelectList do
28
28
  end
29
29
 
30
30
  it 'initial value on the test page' do
31
- @widget.value.should eql ["English", "Norwegian"]
31
+ @widget.value.should eql ["2", "3"]
32
32
  end
33
33
 
34
34
  it 'initial value by keys on the test page' do
35
35
  # array
36
36
  @widget.value([:index, :text, :value]).should eql [{:index=>1, :text=>"English", :value=>"2"}, {:index=>2, :text=>"Norwegian", :value=>"3"}]
37
37
  # splat list
38
- @widget.value(:index, :text).should eql [{:index=>1, :text=>"English"}, {:index=>2, :text=>"Norwegian"}]
38
+ @widget.value(:index, :label).should eql [{:index=>1, :label=>"English"}, {:index=>2, :label=>"Norwegian"}]
39
39
 
40
40
  # one element array
41
41
  @widget.value([:index]).should eql [{:index=>1}, {:index=>2}]
@@ -44,14 +44,14 @@ describe Domkey::View::SelectList do
44
44
 
45
45
  end
46
46
 
47
- it 'set string' do
48
- @widget.set 'Polish'
47
+ it 'set value string' do
48
+ @widget.set '1'
49
+ @widget.value.should eql ['1']
49
50
  end
50
51
 
51
- it 'set array string or regexp' do
52
- # texts are items visible to the user [text or label of select list option]
53
- @widget.set ['Polish', 'Norwegian']
54
- @widget.value.should eql ["Norwegian", "Polish"]
52
+ it 'set value array string' do
53
+ @widget.set ['1', '3']
54
+ @widget.value.should eql ['1', '3']
55
55
  end
56
56
 
57
57
  it 'set false clears all. value is empty array' do
@@ -64,149 +64,158 @@ describe Domkey::View::SelectList do
64
64
  @widget.value.should eql []
65
65
  end
66
66
 
67
- it 'set string clears all. sets one text item. value is one item' do
68
- @widget.set 'Polish'
69
- @widget.value.should eql ["Polish"]
70
- end
71
-
72
67
  it 'set string' do
73
68
  @widget.set text: 'Polish'
74
- @widget.value.should eql ["Polish"]
69
+ @widget.value.should eql [""] #option has no value attribute defined
75
70
  end
76
71
 
77
72
  it 'set regexp' do
78
- @widget.set text: /olish/
79
- @widget.value.should eql ["Polish"]
73
+ @widget.set /2/
74
+ @widget.value.should eql ["2"]
80
75
  end
81
76
 
82
77
  it 'set by array of texts' do
83
78
  @widget.set text: ['Polish', /orwegia/]
84
- @widget.value.should eql ["Norwegian", "Polish"]
79
+ @widget.value.should eql ["3", ""]
85
80
  end
86
81
 
87
82
  it 'set index by option position' do
88
83
  @widget.set index: 1
89
- @widget.value.should eql ['English']
84
+ @widget.value.should eql ['2']
90
85
  @widget.value(:index, :value).should eql [{index: 1, value: '2'}]
91
86
  end
92
87
 
93
88
  it 'set index array of option positions' do
94
89
  @widget.set index: [0, 2]
95
- @widget.value.should eql ["Danish", "Norwegian"]
90
+ @widget.value.should eql ["1", "3"]
96
91
  end
97
92
 
98
93
  it 'set value attribute string' do
99
94
  @widget.set value: '2'
100
- @widget.value.should eql ['English']
95
+ @widget.value.should eql ['2']
101
96
  end
102
97
 
103
98
  it 'set value attribute array of strings' do
104
99
  @widget.set value: ['2', '1']
105
- @widget.value.should eql ["Danish", "English"]
100
+ @widget.value.should eql ["1", "2"]
106
101
  end
107
102
 
108
103
  it 'set by many qualifiers at once' do
109
104
  @widget.set value: ['2', '1'],
110
105
  text: 'Swedish',
111
106
  index: 3
112
- @widget.value.should eql ['Danish', 'English', 'Polish', 'Swedish']
107
+ @widget.value.should eql ["1", "2", "", "Swedish"]
113
108
  end
114
109
 
115
- it 'options' do
116
- @widget.options.should eql [{:text=>"Danish", :value=>"1", :index=>0},
117
- {:text=>"English", :value=>"2", :index=>1},
118
- {:text=>"Norwegian", :value=>"3", :index=>2},
119
- {:text=>"Polish", :value=>"", :index=>3},
120
- {:text=>"Swedish", :value=>"Swedish", :index=>4}]
110
+ it 'options by default' do
111
+ @widget.options.should eql ["1", "2", "3", "", "Swedish"]
121
112
  end
122
113
 
123
- context "Single" do
114
+ it 'options by opts' do
124
115
 
125
- before :all do
126
- view = SelectListExampleView.new
127
- @widget = view.singlelist
128
- end
116
+ expected = [{:text=>"Danish", :value=>"1", :index=>0},
117
+ {:text=>"English", :value=>"2", :index=>1},
118
+ {:text=>"Norwegian", :value=>"3", :index=>2},
119
+ {:text=>"Polish", :value=>"", :index=>3},
120
+ {:text=>"Swedish", :value=>"Swedish", :index=>4}]
129
121
 
130
- before :each do
131
- goto_html("test.html")
132
- end
122
+ @widget.options(:text, :value, :index).should eql expected
123
+
124
+ end
125
+ end
126
+
127
+ context "Single" do
128
+
129
+ before :all do
130
+ view = SelectListExampleView.new
131
+ @widget = view.singlelist
132
+ end
133
133
 
134
- it 'initial value is text visible to the user' do
135
- @widget.value.should eql ['Default']
136
- end
134
+ before :each do
135
+ goto_html("test.html")
136
+ end
137
137
 
138
- it 'value keys' do
139
- @widget.value([:index, :value, :text]).should eql [{index: 3, value: 'Default', text: 'Default'}]
140
- end
138
+ it 'initial value' do
139
+ @widget.value.should eql ['Default']
140
+ end
141
141
 
142
- it 'set string selects visible text. value is visible text to the user' do
143
- @widget.set 'Tomato'
144
- @widget.value.should eql ['Tomato']
142
+ it 'value keys' do
143
+ @widget.value([:index, :value, :text]).should eql [{index: 3, value: 'Default', text: 'Default'}]
144
+ end
145
145
 
146
- @widget.set 'Other'
147
- @widget.value.should eql ['Other']
148
- end
146
+ it 'set string selects value' do
147
+ @widget.set 'tomato'
148
+ @widget.value.should eql ['tomato']
149
149
 
150
- it 'set array of text or label' do
151
- @widget.set ['Other', 'Tomato'] #cycle on single select list
152
- @widget.value.should eql ['Tomato'] # the last one set
153
- end
150
+ @widget.set 'gurken'
151
+ @widget.value.should eql ['gurken']
152
+ end
154
153
 
155
- it 'set by array of text' do
156
- @widget.set text: ['Other', 'Tomato']
157
- @widget.value.should eql ['Tomato']
158
- end
154
+ it 'set when value not present should error' do
155
+ expect { @widget.set '' }.to raise_error(Watir::Exception::NoValueFoundException)
156
+ @widget.value.should eql ['Default'] #interesting quirk
157
+ end
159
158
 
160
- it 'set false has no effect. value is selected item text' do
161
- @widget.set false
162
- @widget.value.should eql ['Default']
163
- end
159
+ it 'set array of text' do
160
+ @widget.set ['gurken', 'tomato'] #cycle on single select list
161
+ @widget.value.should eql ['tomato'] # the last one set
162
+ end
164
163
 
165
- it 'set empty array has no effect. value is selected item text' do
166
- @widget.set []
167
- @widget.value.should eql ['Default']
168
- end
164
+ it 'set by array of text' do
165
+ @widget.set text: ['Other', 'Tomato']
166
+ @widget.value.should eql ['tomato']
167
+ end
169
168
 
170
- it 'set index position' do
171
- @widget.set index: 1
172
- @widget.value.should eql ['Cucumber']
173
- end
169
+ it 'set false has no effect. value is selected item text' do
170
+ @widget.set false
171
+ @widget.value.should eql ['Default']
172
+ end
174
173
 
175
- it 'set index array' do
176
- @widget.set index: [0, 2]
177
- @widget.value.should eql ['Other'] # the last one wins
178
- end
174
+ it 'set empty array has no effect. value is selected item text' do
175
+ @widget.set []
176
+ @widget.value.should eql ['Default']
177
+ end
179
178
 
180
- it 'set value attribute string' do
181
- @widget.set value: 'tomato'
182
- @widget.value.should eql ['Tomato']
183
- end
179
+ it 'set index position' do
180
+ @widget.set index: 1
181
+ @widget.value.should eql ['gurken']
182
+ end
184
183
 
185
- it 'set value attribute array of strings' do
186
- @widget.set value: ['tomato', 'gurken']
187
- @widget.value.should eql ['Cucumber']
188
- end
184
+ it 'set index array' do
185
+ @widget.set index: [2, 1]
186
+ @widget.value.should eql ['gurken'] # the last one wins
187
+ end
189
188
 
190
- it 'set by many qualifiers at once' do
191
- @widget.set value: ['gurken'],
192
- text: 'Tomato',
193
- index: 2
194
- @widget.value.should eql ['Other']
195
- end
189
+ it 'set value attribute string' do
190
+ @widget.set value: 'tomato'
191
+ @widget.value.should eql ['tomato']
192
+ end
196
193
 
197
- it 'options' do
194
+ it 'set value attribute array of strings' do
195
+ @widget.set value: ['tomato', 'gurken']
196
+ @widget.value.should eql ['gurken']
197
+ end
198
198
 
199
- expected = [{:text=>"Tomato", :value=>"tomato", :index=>0},
200
- {:text=>"Cucumber", :value=>"gurken", :index=>1},
201
- {:text=>"Other", :value=>"", :index=>2},
202
- {:text=>"Default", :value=>"Default", :index=>3}]
199
+ it 'set by many qualifiers at once' do
200
+ @widget.set value: ['gurken'],
201
+ text: 'Tomato',
202
+ index: 2
203
+ @widget.value.should eql ['']
204
+ end
203
205
 
204
- @widget.options.should eql(expected)
206
+ it 'options default' do
205
207
 
206
- end
208
+ @widget.options.should eql ['tomato', 'gurken', '', 'Default']
207
209
 
208
210
  end
209
211
 
210
- end
212
+ it 'options by specifiers' do
213
+ expected = [{:text=>"Tomato", :value=>"tomato", :index=>0},
214
+ {:text=>"Cucumber", :value=>"gurken", :index=>1},
215
+ {:text=>"Other", :value=>"", :index=>2},
216
+ {:text=>"Default", :value=>"Default", :index=>3}]
211
217
 
212
- end
218
+ @widget.options(:text, :value, :index).should eql expected
219
+ end
220
+ end
221
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: domkey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - rubytester
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-06 00:00:00.000000000 Z
12
+ date: 2014-04-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: watir-webdriver
@@ -103,7 +103,7 @@ files:
103
103
  - lib/domkey/exception.rb
104
104
  - lib/domkey/version.rb
105
105
  - lib/domkey/view.rb
106
- - lib/domkey/view/cargo.rb
106
+ - lib/domkey/view/binder.rb
107
107
  - lib/domkey/view/checkbox_group.rb
108
108
  - lib/domkey/view/label_mapper.rb
109
109
  - lib/domkey/view/labeled_group.rb
@@ -115,6 +115,7 @@ files:
115
115
  - lib/domkey/view/select_list.rb
116
116
  - lib/domkey/view/widgetry/dispatcher.rb
117
117
  - lib/domkey/view/widgetry/package.rb
118
+ - spec/binder_spec.rb
118
119
  - spec/browser_spec.rb
119
120
  - spec/checkbox_group_spec.rb
120
121
  - spec/html/test.html
@@ -122,13 +123,13 @@ files:
122
123
  - spec/option_selectable_spec.rb
123
124
  - spec/page_object_collection_spec.rb
124
125
  - spec/page_object_decorators_spec.rb
126
+ - spec/page_object_delegates_spec.rb
125
127
  - spec/page_object_spec.rb
126
128
  - spec/page_spec.rb
127
129
  - spec/radio_group_spec.rb
128
130
  - spec/select_list_spec.rb
129
131
  - spec/selenium_webdriver_api_example.rb
130
132
  - spec/spec_helper.rb
131
- - spec/view_cargo_spec.rb
132
133
  - spec/view_dom_spec.rb
133
134
  - spec/view_doms_spec.rb
134
135
  - spec/watirspec_pageobjects/watirspec_spec.rb
@@ -157,6 +158,7 @@ signing_key:
157
158
  specification_version: 4
158
159
  summary: Domain Specifc PageObject for Selenium Watir-Webdriver
159
160
  test_files:
161
+ - spec/binder_spec.rb
160
162
  - spec/browser_spec.rb
161
163
  - spec/checkbox_group_spec.rb
162
164
  - spec/html/test.html
@@ -164,13 +166,13 @@ test_files:
164
166
  - spec/option_selectable_spec.rb
165
167
  - spec/page_object_collection_spec.rb
166
168
  - spec/page_object_decorators_spec.rb
169
+ - spec/page_object_delegates_spec.rb
167
170
  - spec/page_object_spec.rb
168
171
  - spec/page_spec.rb
169
172
  - spec/radio_group_spec.rb
170
173
  - spec/select_list_spec.rb
171
174
  - spec/selenium_webdriver_api_example.rb
172
175
  - spec/spec_helper.rb
173
- - spec/view_cargo_spec.rb
174
176
  - spec/view_dom_spec.rb
175
177
  - spec/view_doms_spec.rb
176
178
  - spec/watirspec_pageobjects/watirspec_spec.rb