operawatir 0.6.pre1-jruby → 0.7.pre1-jruby

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock ADDED
@@ -0,0 +1,58 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ BlueCloth (1.0.1)
5
+ builder (3.0.0)
6
+ ci_reporter (1.7.0)
7
+ builder (>= 2.1.2)
8
+ clipboard (1.0.1)
9
+ deprecated (3.0.0)
10
+ diff-lcs (1.1.3)
11
+ gem_plugin (0.2.3)
12
+ git (1.2.5)
13
+ jeweler (1.8.3)
14
+ bundler (~> 1.0)
15
+ git (>= 1.2.5)
16
+ rake
17
+ rdoc
18
+ json (1.6.5-java)
19
+ mongrel (1.1.5-java)
20
+ gem_plugin (>= 0.2.3)
21
+ rack (1.4.1)
22
+ rack-protection (1.2.0)
23
+ rack
24
+ rake (0.8.7)
25
+ rdoc (3.12)
26
+ json (~> 1.4)
27
+ rr (1.0.4)
28
+ rspec (2.6.0)
29
+ rspec-core (~> 2.6.0)
30
+ rspec-expectations (~> 2.6.0)
31
+ rspec-mocks (~> 2.6.0)
32
+ rspec-core (2.6.4)
33
+ rspec-expectations (2.6.0)
34
+ diff-lcs (~> 1.1.2)
35
+ rspec-mocks (2.6.0)
36
+ sinatra (1.3.2)
37
+ rack (~> 1.3, >= 1.3.6)
38
+ rack-protection (~> 1.2)
39
+ tilt (~> 1.3, >= 1.3.3)
40
+ tilt (1.3.3)
41
+ yard (0.7.5)
42
+
43
+ PLATFORMS
44
+ java
45
+
46
+ DEPENDENCIES
47
+ BlueCloth (= 1.0.1)
48
+ builder
49
+ bundler (~> 1.0.0)
50
+ ci_reporter
51
+ clipboard
52
+ deprecated
53
+ jeweler
54
+ mongrel (>= 1.1.5)
55
+ rr
56
+ rspec (~> 2.6.0)
57
+ sinatra (>= 1.1)
58
+ yard
data/Rakefile CHANGED
@@ -4,10 +4,20 @@ require 'jeweler'
4
4
  require 'rspec/core/rake_task'
5
5
  require 'yard'
6
6
  require 'ci/reporter/rake/rspec'
7
+ require 'rake'
8
+
7
9
 
8
10
  require './lib/operawatir/version'
9
11
 
10
12
  Jeweler::Tasks.new do |gem|
13
+
14
+ gem.files = FileList['utils/**/*.rb', '.*', 'lib/operadriver/*LICENSE.txt', 'spec/**/*.rb', 'spec/**/**/*.*', 'lib/**/*.rb', 'lib/**/*.jar', 'bin/*', '[A-Z]*', 'test/**/*'].to_a
15
+ gem.files.exclude '*.gem'
16
+ gem.files.exclude '.gitignore'
17
+ gem.files.exclude '*.xml'
18
+ gem.files.exclude '*.bat'
19
+ gem.files.exclude '*.py'
20
+
11
21
  gem.name = 'operawatir'
12
22
  gem.version = OperaWatir.version
13
23
  gem.date = Date.today.to_s
@@ -43,7 +53,6 @@ EOF
43
53
  gem.add_development_dependency 'rr'
44
54
  gem.add_development_dependency 'clipboard'
45
55
 
46
- gem.files.exclude '.gitignore'
47
56
  end
48
57
 
49
58
  CLEAN.add 'pkg'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.pre1
1
+ 0.7.pre1
Binary file
Binary file
Binary file
data/lib/operawatir.rb CHANGED
@@ -5,17 +5,15 @@ require 'java'
5
5
  include Java
6
6
 
7
7
  %w(commons-jxpath-1.3.jar commons-exec-1.1.jar protobuf-java-2.4.1.jar
8
- selenium-java-2.13.0.jar operalaunchers-0.3.jar operadriver-v0.8.1.jar
9
- guava-10.0.1.jar).each { |jar| require "operadriver/#{jar}" }
8
+ selenium-java-2.17.jar operalaunchers-0.6.jar operadriver-v0.11.jar
9
+ guava-11.0.1.jar ini4j-0.5.2.jar json-20080701.jar).each { |jar| require "operadriver/#{jar}" }
10
10
 
11
11
  include_class org.openqa.selenium.WebDriver
12
12
  include_class org.openqa.selenium.remote.RemoteWebElement
13
13
  include_class org.openqa.selenium.NoSuchElementException
14
- include_class org.openqa.selenium.interactions.Actions
15
14
  include_class org.openqa.selenium.remote.DesiredCapabilities
16
15
  include_class com.opera.core.systems.OperaDriver
17
16
  include_class com.opera.core.systems.OperaWebElement
18
- include_class com.opera.core.systems.settings.OperaDriverSettings
19
17
 
20
18
  # Desktop stuff
21
19
  include_class com.opera.core.systems.OperaDesktopDriver
@@ -63,7 +63,7 @@ class OperaWatir::Actions
63
63
  end
64
64
 
65
65
  def double_click(element = nil)
66
- element ? @actions.double_click(element.node) : @actions.double_click()
66
+ element ? @actions.doubleClick(element.node) : @actions.doubleClick()
67
67
  self
68
68
  end
69
69
 
@@ -2,7 +2,7 @@
2
2
  class OperaWatir::Browser
3
3
  include Deprecated
4
4
 
5
- attr_accessor :driver, :active_window, :preferences, :keys, :spatnav, :utils
5
+ attr_reader :driver, :active_window, :preferences, :keys, :spatnav, :utils
6
6
 
7
7
  def self.settings=(settings={})
8
8
  @desired_capabilities = nil # Bust cache
@@ -22,12 +22,12 @@ class OperaWatir::Browser
22
22
  def initialize
23
23
  OperaWatir.compatibility! unless OperaWatir.api >= 3
24
24
 
25
- self.driver = OperaDriver.new(self.class.desired_capabilities)
26
- self.active_window = OperaWatir::Window.new(self)
27
- self.preferences = OperaWatir::Preferences.new(self)
28
- self.keys = OperaWatir::Keys.new(self)
29
- self.spatnav = OperaWatir::Spatnav.new(self)
30
- self.utils = OperaWatir::Utils.new(self)
25
+ @driver = OperaDriver.new(self.class.desired_capabilities)
26
+ @active_window = OperaWatir::Window.new(self)
27
+ @preferences = OperaWatir::Preferences.new(driver)
28
+ @keys = OperaWatir::Keys.new(self)
29
+ @spatnav = OperaWatir::Spatnav.new(self)
30
+ @utils = OperaWatir::Utils.new(self)
31
31
  end
32
32
 
33
33
  alias_method :window, :active_window
@@ -168,28 +168,33 @@ class OperaWatir::Browser
168
168
  # Keyboard
169
169
 
170
170
  def key(key)
171
- driver.key(key)
171
+ keys.key(key)
172
+
173
+ if key =~ /enter/
174
+ sleep Java::ComOperaCoreSystems::OperaIntervals.EXEC_SLEEP.getValue
175
+ driver.waitForLoadToComplete
176
+ end
172
177
  end
173
178
 
174
179
  deprecated :key, 'browser.keys.send'
175
180
 
176
181
  def key_down(key)
177
- driver.keyDown(key)
182
+ keys.down(key)
178
183
  end
179
184
 
180
- deprecated :key, 'browser.keys.down'
185
+ deprecated :key_down, 'browser.keys.down'
181
186
 
182
187
  def key_up(key)
183
- driver.keyUp(key)
188
+ keys.up(key)
184
189
  end
185
190
 
186
- deprecated :key, 'browser.keys.up or browser.keys.release'
191
+ deprecated :key_up, 'browser.keys.up or browser.keys.release'
187
192
 
188
193
  def type(text)
189
- driver.type(text)
194
+ keys.send(text)
190
195
  end
191
196
 
192
- deprecated :key, 'browser.keys.send'
197
+ deprecated :type, 'browser.keys.send'
193
198
 
194
199
  # actions
195
200
 
@@ -197,6 +202,10 @@ class OperaWatir::Browser
197
202
  OperaWatir::Actions.new(browser)
198
203
  end
199
204
 
205
+ def inspect
206
+ "#<OperaWatir::Browser:#{object_id}>" # @settings=#{@settings.insepct}, @active_window=#{@active_window.inspect}"
207
+ end
208
+
200
209
  private
201
210
 
202
211
  def self.desired_capabilities(desktopwatir = false)
@@ -39,7 +39,7 @@ class OperaWatir::Element
39
39
 
40
40
  def text
41
41
  if node.tag_name =~ /input|textarea|select/i
42
- node.value.strip
42
+ node.getAttribute('value').strip
43
43
  else
44
44
  node.getText.strip
45
45
  end
@@ -9,6 +9,7 @@ require 'rspec'
9
9
  require 'rbconfig'
10
10
 
11
11
  require File.expand_path('../../../spec/operawatir/matchers', __FILE__)
12
+ $LOAD_PATH.unshift File.expand_path('../../../utils/formatters', __FILE__)
12
13
 
13
14
  module OperaWatir::DesktopHelper
14
15
  extend self
@@ -1,8 +1,10 @@
1
1
  class OperaWatir::Element
2
2
  extend Forwardable
3
3
 
4
+ attr_reader :node
5
+
4
6
  def initialize(node)
5
- self.node = node
7
+ @node = node
6
8
  end
7
9
 
8
10
  # TODO Need support for this in Webdriver
@@ -68,9 +70,12 @@ class OperaWatir::Element
68
70
  def_delegator :node, :getText, :text
69
71
  def_delegator :node, :getHTML, :html
70
72
 
71
- def_delegator :node, :getElementName, :tag_name
72
73
  def_delegator :node, :clear, :clear
73
74
 
75
+ def tag_name
76
+ node.callMethod('locator.nodeName')
77
+ end
78
+
74
79
  # On elements of type `input`, `textarea` or `select` it will fetch
75
80
  # the texteditable `value` attribute, on every other element type it
76
81
  # returns the DOM attribute `value`.
@@ -87,7 +92,8 @@ class OperaWatir::Element
87
92
  end
88
93
  =end
89
94
 
90
- node.getValue
95
+ #node.getValue
96
+ attr('value')
91
97
  end
92
98
 
93
99
  #
@@ -232,8 +238,6 @@ class OperaWatir::Element
232
238
 
233
239
  private
234
240
 
235
- attr_accessor :node
236
-
237
241
  # Finders
238
242
 
239
243
  def find_elements_by_id(value)
@@ -24,7 +24,7 @@ class OperaWatir::Keys
24
24
  #
25
25
 
26
26
  def down(*args)
27
- args.each { |key| driver.keyDown(key) }
27
+ args.each { |key| key_down(key) }
28
28
  end
29
29
 
30
30
  #
@@ -40,7 +40,7 @@ class OperaWatir::Keys
40
40
  #
41
41
 
42
42
  def up(*args)
43
- args.each { |key| driver.keyUp(key) }
43
+ args.each { |key| key_up(key) }
44
44
  end
45
45
 
46
46
  #
@@ -52,7 +52,7 @@ class OperaWatir::Keys
52
52
  #
53
53
 
54
54
  def release
55
- driver.releaseKeys
55
+ exec.releaseKeys
56
56
  end
57
57
 
58
58
  #
@@ -92,7 +92,7 @@ class OperaWatir::Keys
92
92
  when :access
93
93
  access_key item[index + 1]
94
94
  when Symbol
95
- down key
95
+ key_down key
96
96
  else
97
97
  key key
98
98
  end
@@ -106,24 +106,37 @@ class OperaWatir::Keys
106
106
  end
107
107
  end
108
108
 
109
+ def key(key)
110
+ key_down(key)
111
+ key_up(key)
112
+ end
113
+
109
114
  private
110
115
 
111
- def driver
112
- browser.driver
116
+ def key_down(key)
117
+ exec.key(key.to_s, false)
113
118
  end
114
119
 
115
- def key(key)
116
- driver.key key
120
+ def key_up(key)
121
+ exec.key(key.to_s, true)
117
122
  end
118
123
 
119
124
  def type(text)
120
- driver.type text
125
+ exec.type(text.to_s)
121
126
  end
122
127
 
123
128
  def access_key(key)
124
129
  driver.operaAction 'Enter access key mode'
125
- send key
130
+ send key.to_s
126
131
  driver.operaAction 'Leave access key mode'
127
132
  end
128
133
 
129
- end
134
+ def exec
135
+ driver.getExecService
136
+ end
137
+
138
+ def driver
139
+ browser.driver
140
+ end
141
+
142
+ end
@@ -1,31 +1,38 @@
1
1
  # -*- coding: utf-8 -*-
2
- class String
2
+ class Array
3
3
 
4
4
  #
5
- # Translates an Opera preferences key string into a Ruby method name.
6
- # It will remove tabs and spaces at beginning of string, replace
7
- # further spaces with an underscore and make the string lower-case.
8
- #
9
- # The method extends the String object and can be called as a regular
10
- # method on any string in Ruby.
5
+ # Gets the unique entries in an array.
11
6
  #
12
7
 
13
- def methodize
14
- self.gsub(/^\\t(\s+)/, '').gsub(/\s+/, '_').downcase
8
+ def uniq_by(&blk)
9
+ transforms = {}
10
+ select do |el|
11
+ t = blk[el]
12
+ should_keep = !transforms[t]
13
+ transforms[t] = true
14
+ should_keep
15
+ end
15
16
  end
16
17
 
18
+ end
19
+
20
+ class String
21
+
17
22
  #
18
- # Translates a previously keyized Opera preferences method string into
19
- # an Opera preferences key string. This is done by replacing
20
- # underscores with spaces and capitalizing each word in the string.
23
+ # Translates a preference key into a Ruby method name. It will
24
+ # remove tabs and spaces at beginning and the end of the string, remove
25
+ # paranthesis, replace further spaces and dots with underscores and make
26
+ # the final string lower-case.
21
27
  #
22
28
  # The method extends the String object and can be called as a regular
23
29
  # method on any string in Ruby.
24
30
  #
25
31
 
26
- def keyize
27
- self.gsub(/_/, ' ').gsub(/\b('?[a-z])/) { $1.capitalize }
32
+ def methodize
33
+ self.strip.gsub(/\(|\)/, '').gsub(/\s+|-+|\./, '_').downcase
28
34
  end
35
+
29
36
  end
30
37
 
31
38
  #
@@ -104,8 +111,6 @@ class OperaWatir::Preferences
104
111
  extend Forwardable
105
112
  include Enumerable
106
113
 
107
- attr_accessor :browser, :driver
108
-
109
114
  #
110
115
  # The OperaWatir::Preferences object is created automatically when you
111
116
  # create an OperaWatir::Browser object, and is available as
@@ -118,55 +123,53 @@ class OperaWatir::Preferences
118
123
  # @param [Object] browser An OperaWatir::Browser object.
119
124
  #
120
125
 
121
- def initialize(browser)
122
- self.browser, self.driver = browser, browser.driver
123
-
124
- raw_prefs = driver.listAllPrefs.to_a
125
- @_prefs = {}
126
- @_prefs = raw_prefs.map { |s| Section.new(self, s) }.sort_by { |s| s.key }
126
+ def initialize(driver)
127
+ raw_prefs = driver.preferences.all.to_a
127
128
 
128
- @old_prefs = _prefs
129
+ @sections = []
130
+ raw_prefs.collect { |p| p.get_section }.uniq.each do |section|
131
+ @sections << Section.new(raw_prefs.find_all { |p| p.get_section == section })
132
+ end
129
133
  end
130
134
 
131
- def_delegators :_prefs, :[],
132
- :each,
133
- :length,
134
- :size,
135
- :first,
136
- :last,
137
- :empty?
135
+ def_delegators :@sections, :[],
136
+ :each,
137
+ :length,
138
+ :size,
139
+ :first,
140
+ :last,
141
+ :empty?
138
142
 
139
143
  #
140
- # When calling Preferences#any_method_name, the `any_method_name` will
141
- # be caught by this method.
144
+ # When calling Preferences#any_method_name the `any_method_name` will
145
+ # be caught by this meta method.
142
146
  #
143
147
  # This is the standard way of looking up sections. `any_method_name`
144
- # should be replaced by a methodized version of the section as it
148
+ # should be replaced by a methodize version of the secion as it
145
149
  # appears in the Opera preferences list which you can find at
146
150
  # `opera:config`.
147
151
  #
148
152
  # @example
149
153
  #
150
154
  # browser.preferences.interface_colors
151
- # # will return section Interface Colors
155
+ # # will return section "Interface Colors"
152
156
  #
153
- # @param section method to look up in preferences
154
- # @return [Object] a Preferences::Section object
157
+ # @param section method to look up in preferences
158
+ # @return [Object] a Preferences::Section object
159
+ # @throws PreferencesException if section does not exist
155
160
  #
156
161
 
157
162
  def method_missing(method)
158
163
  method = method.to_s
159
-
160
- if _prefs.any? { |s| s.method == method }
161
- _prefs.find { |s| s.method == method }
162
- end
164
+ raise OperaWatir::Exceptions::PreferencesException, "Section does not exist: #{method}" unless @sections.any? { |s| s.method == method }
165
+ @sections.find { |s| s.method == method }
163
166
  end
164
167
 
165
168
  #
166
169
  # Retrieves a human-readable list of Opera preferences available.
167
170
  # This is used for convenience and should never be parsed. Consider
168
- # using the built-in Ruby iterator #each (with friends) or
169
- # Preferences#to_a for that.
171
+ # using the iterator #each (with friends) or Preferences#to_a for
172
+ # that.
170
173
  #
171
174
  # @return [String] list of preferences
172
175
  #
@@ -174,12 +177,11 @@ class OperaWatir::Preferences
174
177
  def to_s
175
178
  text = ''
176
179
 
177
- _prefs.each do |s|
180
+ @sections.each do |s|
178
181
  text << "#{s.method}\n"
179
182
 
180
183
  s.each do |k|
181
184
  text << " #{k.method}\n"
182
- text << " type: #{k.type.inspect}\n"
183
185
  text << " value: #{k.value.inspect}\n"
184
186
  text << " default: #{k.default.inspect}\n"
185
187
  text << " enabled: #{k.enabled?.inspect}\n"
@@ -192,16 +194,16 @@ class OperaWatir::Preferences
192
194
  end
193
195
 
194
196
  #
195
- # Returns a list of all preferences in array form. This can be used
196
- # for external parsing. If you wish to manipulate or iterate through
197
- # the list of preferences, consider using the built-in Ruby iterator
198
- # #each (with friends).
197
+ # Returns a duplicate list of all preferences in array form. This
198
+ # can be used for external parsing. If you wish to manipulate or
199
+ # iterate through the list of preferences, consider using the
200
+ # iterator #each (with friends).
199
201
  #
200
202
  # @return [Array] list of preferences
201
203
  #
202
204
 
203
205
  def to_a
204
- _prefs.dup
206
+ @sections.dup
205
207
  end
206
208
 
207
209
  #
@@ -212,36 +214,13 @@ class OperaWatir::Preferences
212
214
  #
213
215
 
214
216
  def exists?
215
- !_prefs.empty?
217
+ !@sections.empty?
216
218
  end
217
219
 
218
220
  alias_method :exist?, :exists? # LOL Ruby
219
221
 
220
- =begin
221
- def cleanup
222
- @old_prefs.dup
223
- end
224
-
225
- def cleanup!
226
- @old_prefs.each do |old_section|
227
- old_section.each do |old_key|
228
- #self.send(old_section.method).send(old_key.method).send(:value, old_key.value)
229
- puts "#{old_section.method}.#{old_key.method}.value = #{old_key.value}"
230
- end
231
- end
232
-
233
- _prefs
234
- end
235
- =end
236
-
237
- private
238
-
239
- def _prefs
240
- @_prefs
241
- end
242
-
243
222
  #
244
- # OperaWatir::Preferences::Section represents a section in Opera
223
+ # OperaWatir::Preferences::Section represents a section in the Opera
245
224
  # configuration.
246
225
  #
247
226
 
@@ -249,30 +228,29 @@ private
249
228
  extend Forwardable
250
229
  include Enumerable
251
230
 
252
- attr_accessor :parent, :driver, :method, :key
231
+ attr_reader :key, :method
253
232
 
254
- def initialize(parent, raw_section)
255
- self.parent, self.driver = parent, parent.driver
256
- self.method, self.key = raw_section.first.methodize, raw_section.first
257
-
258
- @_keys = raw_section[1].map { |k| Key.new(self, k) }.sort_by { |k| k.key }
233
+ def initialize(raw_section)
234
+ @key = raw_section.first.get_section
235
+ @method = @key.methodize
236
+ @keys ||= raw_section.collect { |p| Key.new(self, p) }.sort_by { |p| p.key }
259
237
  end
260
238
 
261
- def_delegators :_keys, :[],
262
- :length,
263
- :size,
264
- :first,
265
- :last,
266
- :empty?
239
+ def_delegators :@keys, :[],
240
+ :length,
241
+ :size,
242
+ :first,
243
+ :last,
244
+ :empty?
267
245
 
268
246
  def each
269
247
  return unless block_given?
270
- _keys.each { |k| yield k }
248
+ @keys.each { |k| yield k }
271
249
  end
272
250
 
273
251
  #
274
252
  # When calling Preferences::Section#any_method_name, the
275
- # `any_method_name` will be caught by this method.
253
+ # `any_method_name` will be caught by this meta method.
276
254
  #
277
255
  # This is the standard way of looking up preference entries.
278
256
  # `any_method_name` should be replaced by a methodized version of
@@ -284,68 +262,58 @@ private
284
262
  # browser.preferences.interface_colors.background
285
263
  # # will return the “Background” entry in section “Interface Colors”
286
264
  #
287
- # @param method method to look up in section
288
- # @return [Object] a Preferences::Section::Key (entry) object
265
+ # @param method method to look up in section
266
+ # @return [Object] a Preferences::Section::Key (entry) object
267
+ # @throws PreferencesException if key does not exist
289
268
  #
290
269
 
291
- def method_missing(method)
292
- method = method.to_s
293
-
294
- if _keys.any? { |k| k.method == method }
295
- _keys.find { |k| k.method == method }
296
- end
270
+ def method_missing(m)
271
+ m = m.to_s
272
+ raise OperaWatir::Exceptions::PreferencesException, "No such preference: #{method}.#{m}" unless @keys.any? { |k| k.method == m }
273
+ @keys.find { |k| k.method == m }
297
274
  end
298
275
 
299
- private
300
-
301
- def _keys
302
- @_keys
276
+ def inspect
277
+ "#<OperaWatir::Preferences::Section:#{object_id}> @key=#{key.inspect}, @method=#{method.to_sym.inspect}, @keys=[...]"
303
278
  end
304
279
 
305
280
  class Key
306
281
  extend Forwardable
307
282
  include Enumerable
308
283
 
309
- attr_accessor :parent, :driver, :method, :key, :type, :value
284
+ attr_reader :parent, :method
310
285
 
311
- def initialize(parent, raw_key)
312
- self.parent, self.driver = parent, parent.driver
313
- self.method, self.key = raw_key.first.methodize, raw_key.first
314
- raw_data = raw_key[1].to_s
286
+ def initialize(parent, raw_pref)
287
+ @parent = parent
288
+ @pref = raw_pref
289
+ @method = key.methodize
290
+ end
315
291
 
316
- raw_data =~ /^type: ([A-Z]+)$/
317
- self.type = $1.to_s.capitalize
292
+ def method
293
+ @method
294
+ end
318
295
 
319
- raw_data =~ /^value: \"(.*)\"$/
320
- @value = $1.to_s
296
+ def_delegator :@pref, :get_key, :key
321
297
 
322
- # Ruby doesn't support attr_accessor's with question mark in their
323
- # name.
324
- raw_data =~ /^enabled: (true|false)$/
325
- @enabled = $1.truthy?
298
+ def value
299
+ ruby_idiomatic(@pref.get_value)
326
300
  end
327
301
 
328
302
  #
329
- # Whether the current key entry is enabled inside Opera or not.
303
+ # Sets the key's value to the specified string.
330
304
  #
331
- # @return [Boolean] true if enabled, false if otherwise
305
+ # @param [String] value the value you wish to set for the key
332
306
  #
333
307
 
334
- def enabled?
335
- !!@enabled
336
- end
308
+ def_delegator :@pref, :set_value, :value=
337
309
 
338
310
  #
339
- # Sets the key's value to the specified string.
311
+ # Whether the current key entry is enabled inside Opera or not.
340
312
  #
341
- # @param [String] value the value you wish to set for the key
313
+ # @return [Boolean] true if enabled, false if otherwise
342
314
  #
343
315
 
344
- def value=(value)
345
- value = value.truthy? ? '1' : '0' if type.include?('Boolean')
346
- driver.setPref parent.key, key, value.to_s
347
- @value = value
348
- end
316
+ def_delegator :@pref, :is_enabled, :enabled?
349
317
 
350
318
  #
351
319
  # Returns key's default value.
@@ -354,7 +322,7 @@ private
354
322
  #
355
323
 
356
324
  def default
357
- @default ||= driver.getDefaultPref parent.key, key
325
+ ruby_idiomatic(@pref.get_default_value)
358
326
  end
359
327
 
360
328
  #
@@ -364,9 +332,29 @@ private
364
332
  #
365
333
 
366
334
  def default!
367
- self.value=(default)
335
+ @pref.reset
336
+ @pref.value
368
337
  end
338
+
339
+ def inspect
340
+ "#<OperaWatir::Preferences::Section::Key:#{object_id}> @key=#{key.inspect}, @method=#{method.to_sym.inspect}, @parent=#{parent.inspect}, @value=#{value.inspect}, @enabled=#{enabled?.inspect}, @default=#{default.inspect}"
341
+ end
342
+
343
+ private
344
+
345
+ def ruby_idiomatic(value)
346
+ case @pref.get_type.to_string
347
+ when /Integer/:
348
+ value.to_i
349
+ when /Boolean/:
350
+ !!value
351
+ else
352
+ value.to_s
353
+ end
354
+ end
355
+
369
356
  end
357
+
370
358
  end
371
359
 
372
- end
360
+ end