commonwatir 1.6.5 → 1.6.6.rc1

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.
Files changed (56) hide show
  1. data/CHANGES +461 -0
  2. data/{README.txt → LICENSE} +22 -48
  3. data/Rakefile +13 -11
  4. data/VERSION +1 -0
  5. data/lib/commonwatir.rb +3 -3
  6. data/lib/watir.rb +7 -6
  7. data/lib/watir/assertions.rb +44 -44
  8. data/lib/watir/browser.rb +149 -149
  9. data/lib/watir/browsers.rb +13 -12
  10. data/lib/watir/exceptions.rb +47 -47
  11. data/lib/watir/matches.rb +17 -17
  12. data/lib/watir/options.rb +53 -52
  13. data/lib/watir/testcase.rb +97 -58
  14. data/lib/watir/waiter.rb +91 -91
  15. data/unittests/attach_to_existing_window_test.rb +71 -0
  16. data/unittests/browser_test.rb +18 -0
  17. data/unittests/buttons_test.rb +224 -0
  18. data/unittests/dd_test.rb +70 -0
  19. data/unittests/dl_test.rb +68 -0
  20. data/unittests/dt_test.rb +68 -0
  21. data/unittests/element_collections_test.rb +22 -0
  22. data/unittests/em_test.rb +67 -0
  23. data/unittests/form2_test.rb +22 -0
  24. data/unittests/html/blankpage.html +12 -0
  25. data/unittests/html/buttons1.html +41 -0
  26. data/unittests/html/buttons2.html +61 -0
  27. data/unittests/html/definition_lists.html +48 -0
  28. data/unittests/html/emphasis.html +12 -0
  29. data/unittests/html/entertainment_com.html +668 -0
  30. data/unittests/html/frame_buttons.html +4 -0
  31. data/unittests/html/images/button.jpg +0 -0
  32. data/unittests/html/pass.html +10 -0
  33. data/unittests/html/phrase_elements.html +15 -0
  34. data/unittests/html/select_lists.html +18 -0
  35. data/unittests/html/utf8.html +12 -0
  36. data/unittests/html/visibility.html +90 -0
  37. data/unittests/html/watir_unit_tests.css +64 -0
  38. data/unittests/html/whitespace.html +29 -0
  39. data/unittests/inspect_test.rb +29 -0
  40. data/unittests/options.yml.example +13 -0
  41. data/unittests/select_list_test.rb +19 -0
  42. data/unittests/setup.rb +17 -0
  43. data/unittests/setup/browser.rb +14 -0
  44. data/unittests/setup/capture_io_helper.rb +17 -0
  45. data/unittests/setup/filter.rb +24 -0
  46. data/unittests/setup/lib.rb +22 -0
  47. data/unittests/setup/options.rb +29 -0
  48. data/unittests/setup/testUnitAddons.rb +8 -0
  49. data/unittests/setup/watir-unittest.rb +74 -0
  50. data/unittests/strong_test.rb +32 -0
  51. data/unittests/utf8_test.rb +24 -0
  52. data/unittests/visibility_test.rb +47 -0
  53. data/unittests/whitespace_test.rb +40 -0
  54. metadata +121 -39
  55. data/History.txt +0 -5
  56. data/Manifest.txt +0 -14
@@ -1,12 +1,13 @@
1
- # watir/browsers
2
- # Define browsers supported by Watir
3
-
4
- Watir::Browser.support :name => 'ie', :class => 'Watir::IE',
5
- :library => 'watir/ie', :gem => 'watir',
6
- :options => [:speed, :visible]
7
-
8
- Watir::Browser.support :name => 'firefox', :class => 'FireWatir::Firefox',
9
- :library => 'firewatir'
10
-
11
- Watir::Browser.support :name => 'safari', :class => 'Watir::Safari',
12
- :library => 'safariwatir'
1
+ #--
2
+ # watir/browsers
3
+ # Define browsers supported by Watir
4
+
5
+ Watir::Browser.support :name => 'ie', :class => 'Watir::IE',
6
+ :library => 'watir/ie', :gem => 'watir',
7
+ :options => [:speed, :visible]
8
+
9
+ Watir::Browser.support :name => 'firefox', :class => 'FireWatir::Firefox',
10
+ :library => 'firewatir'
11
+
12
+ Watir::Browser.support :name => 'safari', :class => 'Watir::Safari',
13
+ :library => 'safariwatir'
@@ -1,48 +1,48 @@
1
- module Watir
2
- module Exception
3
-
4
- # Root class for all Watir Exceptions
5
- class WatirException < RuntimeError
6
- def initialize(message="")
7
- super(message)
8
- end
9
- end
10
-
11
- # This exception is thrown if an attempt is made to access an object that doesn't exist
12
- class UnknownObjectException < WatirException; end
13
- # This exception is thrown if an attempt is made to access an object that is in a disabled state
14
- class ObjectDisabledException < WatirException; end
15
- # This exception is thrown if an attempt is made to access a frame that cannot be found
16
- class UnknownFrameException< WatirException; end
17
- # This exception is thrown if an attempt is made to access a form that cannot be found
18
- class UnknownFormException< WatirException; end
19
- # This exception is thrown if an attempt is made to access an object that is in a read only state
20
- class ObjectReadOnlyException < WatirException; end
21
- # This exception is thrown if an attempt is made to access an object when the specified value cannot be found
22
- class NoValueFoundException < WatirException; end
23
- # This exception gets raised if part of finding an object is missing
24
- class MissingWayOfFindingObjectException < WatirException; end
25
- # this exception is raised if an attempt is made to access a table cell that doesnt exist
26
- class UnknownCellException < WatirException; end
27
- # This exception is thrown if the window cannot be found
28
- class NoMatchingWindowFoundException < WatirException; end
29
- # This exception is thrown if an attemp is made to acces the status bar of the browser when it doesnt exist
30
- class NoStatusBarException < WatirException; end
31
- # This exception is thrown if an http error, such as a 404, 500 etc is encountered while navigating
32
- class NavigationException < WatirException; end
33
- # This exception is raised if a timeout is exceeded
34
- class TimeOutException < WatirException
35
- def initialize(duration, timeout)
36
- @duration, @timeout = duration, timeout
37
- end
38
- attr_reader :duration, :timeout
39
- end
40
-
41
- # Return an error message for when unable to locate the element
42
- def self.message_for_unable_to_locate(how, what)
43
- result = "using #{how.inspect}"
44
- result << ", #{what.inspect}" if what
45
- "Unable to locate element, #{result}"
46
- end
47
- end
1
+ module Watir
2
+ module Exception
3
+
4
+ # Root class for all Watir Exceptions
5
+ class WatirException < RuntimeError
6
+ def initialize(message="")
7
+ super(message)
8
+ end
9
+ end
10
+
11
+ # This exception is raised if an attempt is made to access an object that doesn't exist
12
+ class UnknownObjectException < WatirException; end
13
+ # This exception is raised if an attempt is made to access an object that is in a disabled state
14
+ class ObjectDisabledException < WatirException; end
15
+ # This exception is raised if an attempt is made to access a frame that cannot be found
16
+ class UnknownFrameException< WatirException; end
17
+ # This exception is raised if an attempt is made to access a form that cannot be found
18
+ class UnknownFormException< WatirException; end
19
+ # This exception is raised if an attempt is made to access an object that is in a read only state
20
+ class ObjectReadOnlyException < WatirException; end
21
+ # This exception is raised if an attempt is made to access an object when the specified value cannot be found
22
+ class NoValueFoundException < WatirException; end
23
+ # This exception gets raised if part of finding an object is missing
24
+ class MissingWayOfFindingObjectException < WatirException; end
25
+ # this exception is raised if an attempt is made to access a table cell that doesnt exist
26
+ class UnknownCellException < WatirException; end
27
+ # This exception is raised if the window cannot be found
28
+ class NoMatchingWindowFoundException < WatirException; end
29
+ # This exception is raised if an attemp is made to acces the status bar of the browser when it doesnt exist
30
+ class NoStatusBarException < WatirException; end
31
+ # This exception is raised if an http error, such as a 404, 500 etc is encountered while navigating
32
+ class NavigationException < WatirException; end
33
+ # This exception is raised if a timeout is exceeded
34
+ class TimeOutException < WatirException
35
+ def initialize(duration, timeout)
36
+ @duration, @timeout = duration, timeout
37
+ end
38
+ attr_reader :duration, :timeout
39
+ end
40
+
41
+ # Return an error message for when unable to locate the element
42
+ def self.message_for_unable_to_locate(how, what)
43
+ result = "using #{how.inspect}"
44
+ result << ", #{what.inspect}" if what
45
+ "Unable to locate element, #{result}"
46
+ end
47
+ end
48
48
  end
@@ -1,17 +1,17 @@
1
- class String
2
- def matches(x)
3
- return self == x
4
- end
5
- end
6
-
7
- class Regexp
8
- def matches(x)
9
- return self.match(x)
10
- end
11
- end
12
-
13
- class Integer
14
- def matches(x)
15
- return self == x
16
- end
17
- end
1
+ class String
2
+ def matches(x)
3
+ return self == x
4
+ end
5
+ end
6
+
7
+ class Regexp
8
+ def matches(x)
9
+ return self.match(x)
10
+ end
11
+ end
12
+
13
+ class Integer
14
+ def matches(x)
15
+ return self == x
16
+ end
17
+ end
@@ -1,52 +1,53 @@
1
- # watir/options
2
- require 'rubygems'
3
-
4
- require 'user-choices'
5
-
6
- module Watir
7
- @@options_file = nil
8
- @@options = nil
9
- class << self
10
- # Specify the location of a yaml file containing Watir options. Must be
11
- # specified before the options are parsed.
12
- def options_file= file
13
- @@options_file = file
14
- end
15
- def options_file
16
- @@options_file
17
- end
18
- def options= x
19
- @@options = x
20
- end
21
- # Return the Watir options, as a hash. If they haven't been parsed yet,
22
- # they will be now.
23
- def options
24
- @@options ||= Watir::Options.new.execute
25
- end
26
- end
27
-
28
- class Options < UserChoices::Command
29
- include UserChoices
30
- def add_sources builder
31
- builder.add_source EnvironmentSource, :with_prefix, 'watir_'
32
- if Watir.options_file
33
- builder.add_source YamlConfigFileSource, :from_complete_path,
34
- Watir.options_file
35
- end
36
- end
37
- def add_choices builder
38
- builder.add_choice :browser,
39
- :type => Watir::Browser.browser_names,
40
- :default => Watir::Browser.default
41
- builder.add_choice :speed,
42
- :type => ['slow', 'fast', 'zippy'],
43
- :default => 'fast'
44
- builder.add_choice :visible,
45
- :type => :boolean
46
- end
47
- def execute
48
- @user_choices[:speed] = @user_choices[:speed].to_sym
49
- @user_choices
50
- end
51
- end
52
- end
1
+ #--
2
+ # watir/options
3
+ require 'rubygems'
4
+
5
+ require 'user-choices'
6
+
7
+ module Watir
8
+ @@options_file = nil
9
+ @@options = nil
10
+ class << self
11
+ # Specify the location of a yaml file containing Watir options. Must be
12
+ # specified before the options are parsed.
13
+ def options_file= file
14
+ @@options_file = file
15
+ end
16
+ def options_file
17
+ @@options_file
18
+ end
19
+ def options= x
20
+ @@options = x
21
+ end
22
+ # Return the Watir options, as a hash. If they haven't been parsed yet,
23
+ # they will be now.
24
+ def options
25
+ @@options ||= Watir::Options.new.execute
26
+ end
27
+ end
28
+
29
+ class Options < UserChoices::Command
30
+ include UserChoices
31
+ def add_sources builder
32
+ builder.add_source EnvironmentSource, :with_prefix, 'watir_'
33
+ if Watir.options_file
34
+ builder.add_source YamlConfigFileSource, :from_complete_path,
35
+ Watir.options_file
36
+ end
37
+ end
38
+ def add_choices builder
39
+ builder.add_choice :browser,
40
+ :type => Watir::Browser.browser_names,
41
+ :default => Watir::Browser.default
42
+ builder.add_choice :speed,
43
+ :type => ['slow', 'fast', 'zippy'],
44
+ :default => 'fast'
45
+ builder.add_choice :visible,
46
+ :type => :boolean
47
+ end
48
+ def execute
49
+ @user_choices[:speed] = @user_choices[:speed].to_sym
50
+ @user_choices
51
+ end
52
+ end
53
+ end
@@ -1,58 +1,97 @@
1
- require 'test/unit'
2
- require 'watir/assertions'
3
-
4
- module Watir
5
-
6
- class TestCase < Test::Unit::TestCase
7
- include Watir::Assertions
8
- @@order = :sequentially
9
- def initialize name
10
- throw :invalid_test if name == :default_test && self.class == Watir::TestCase
11
- super
12
- end
13
- class << self
14
- attr_accessor :test_methods, :order
15
- def test_methods
16
- @test_methods ||= []
17
- end
18
- def order
19
- @order || @@order
20
- end
21
- def default_order= order
22
- @@order = order
23
- end
24
- def sorted_test_methods
25
- case order
26
- when :alphabetically then test_methods.sort
27
- when :sequentially then test_methods
28
- when :reversed_sequentially then test_methods.reverse
29
- when :reversed_alphabetically then test_methods.sort.reverse
30
- else raise ArgumentError, "Execute option not supported: #{@order}"
31
- end
32
- end
33
- def suite
34
- suite = Test::Unit::TestSuite.new(name)
35
- sorted_test_methods.each do |test|
36
- catch :invalid_test do
37
- suite << new(test)
38
- end
39
- end
40
- if (suite.empty?)
41
- catch :invalid_test do
42
- suite << new(:default_test)
43
- end
44
- end
45
- return suite
46
- end
47
- def method_added id
48
- name = id.id2name
49
- test_methods << name if name =~ /^test./
50
- end
51
- def execute order
52
- @order = order
53
- end
54
- end
55
- public :add_assertion
56
- end
57
-
58
- end
1
+ require 'test/unit'
2
+ require 'watir/assertions'
3
+
4
+ module Watir
5
+
6
+ # This is a 'test/unit' testcase customized to exeucte test methods sequentially by default
7
+ # and extra assertions
8
+ #
9
+ # Example Usage
10
+ #
11
+ # require 'watir/testcase'
12
+ #
13
+ # class MyTestCase < Watir::TestCase
14
+ #
15
+ # # some helpers
16
+ # @@browser = nil
17
+ # def browser
18
+ # @browser ||= Watir::IE.start(:url, 'http://watir.com/")
19
+ # end
20
+ #
21
+ # # TESTS
22
+ # def test_text
23
+ # browser.goto "http://watir.com/"
24
+ # verify_match "Web Application Testing in Ruby", browser.text
25
+ # end
26
+ #
27
+ # def test_title
28
+ # verify browser.title == 'Watir'
29
+ # end
30
+ #
31
+ # def test_link
32
+ # verify_match 'watir.com', browser.link(:text, 'Home').href
33
+ # end
34
+ #
35
+ # def test_navigate_to_examples
36
+ # browser.div(:id, 'nav').link(:text, 'Examples').click
37
+ # end
38
+ #
39
+ # def test_url
40
+ # verify_equal browser.url, 'http://watir.com/examples/'
41
+ # end
42
+ #
43
+ # end
44
+ #
45
+ class TestCase < Test::Unit::TestCase
46
+ include Watir::Assertions
47
+ @@order = :sequentially
48
+ def initialize name
49
+ throw :invalid_test if name == :default_test && self.class == Watir::TestCase
50
+ super
51
+ end
52
+ class << self
53
+ attr_accessor :test_methods, :order
54
+ def test_methods
55
+ @test_methods ||= []
56
+ end
57
+ def order
58
+ @order || @@order
59
+ end
60
+ def default_order= order
61
+ @@order = order
62
+ end
63
+ def sorted_test_methods
64
+ case order
65
+ when :alphabetically then test_methods.sort
66
+ when :sequentially then test_methods
67
+ when :reversed_sequentially then test_methods.reverse
68
+ when :reversed_alphabetically then test_methods.sort.reverse
69
+ else raise ArgumentError, "Execute option not supported: #{@order}"
70
+ end
71
+ end
72
+ def suite
73
+ suite = Test::Unit::TestSuite.new(name)
74
+ sorted_test_methods.each do |test|
75
+ catch :invalid_test do
76
+ suite << new(test)
77
+ end
78
+ end
79
+ if (suite.empty?)
80
+ catch :invalid_test do
81
+ suite << new(:default_test)
82
+ end
83
+ end
84
+ return suite
85
+ end
86
+ def method_added id
87
+ name = id.id2name
88
+ test_methods << name if name =~ /^test./
89
+ end
90
+ def execute order
91
+ @order = order
92
+ end
93
+ end
94
+ public :add_assertion
95
+ end
96
+
97
+ end
@@ -1,92 +1,92 @@
1
- require 'watir/exceptions'
2
-
3
- module Watir
4
-
5
- def wait_until(*args)
6
- Waiter.wait_until(*args) {yield}
7
- end
8
-
9
- class TimeKeeper
10
- attr_reader :sleep_time
11
- def initialize
12
- @sleep_time = 0.0
13
- end
14
- def sleep seconds
15
- @sleep_time += Kernel.sleep seconds
16
- end
17
- def now
18
- Time.now
19
- end
20
- end
21
-
22
- class Waiter
23
- # This is an interface to a TimeKeeper which proxies
24
- # calls to "sleep" and "Time.now".
25
- # Useful for unit testing Waiter.
26
- attr_accessor :timer
27
-
28
- # How long to wait between each iteration through the wait_until
29
- # loop. In seconds.
30
- attr_accessor :polling_interval
31
-
32
- # Timeout for wait_until.
33
- attr_accessor :timeout
34
-
35
- @@default_polling_interval = 0.5
36
- @@default_timeout = 60.0
37
-
38
- def initialize(timeout=@@default_timeout,
39
- polling_interval=@@default_polling_interval)
40
- @timeout = timeout
41
- @polling_interval = polling_interval
42
- @timer = TimeKeeper.new
43
- end
44
-
45
- # Execute the provided block until either (1) it returns true, or
46
- # (2) the timeout (in seconds) has been reached. If the timeout is reached,
47
- # a TimeOutException will be raised. The block will always
48
- # execute at least once.
49
- #
50
- # waiter = Waiter.new(5)
51
- # waiter.wait_until {puts 'hello'}
52
- #
53
- # This code will print out "hello" for five seconds, and then raise a
54
- # Watir::TimeOutException.
55
- def wait_until # block
56
- start_time = now
57
- until yield do
58
- if (duration = now - start_time) > @timeout
59
- raise Watir::Exception::TimeOutException.new(duration, @timeout),
60
- "Timed out after #{duration} seconds."
61
- end
62
- sleep @polling_interval
63
- end
64
- end
65
-
66
- # Execute the provided block until either (1) it returns true, or
67
- # (2) the timeout (in seconds) has been reached. If the timeout is reached,
68
- # a TimeOutException will be raised. The block will always
69
- # execute at least once.
70
- #
71
- # Waiter.wait_until(5) {puts 'hello'}
72
- #
73
- # This code will print out "hello" for five seconds, and then raise a
74
- # Watir::TimeOutException.
75
-
76
- # IDEA: wait_until: remove defaults from Waiter.wait_until
77
- def self.wait_until(timeout=@@default_timeout,
78
- polling_interval=@@default_polling_interval)
79
- waiter = new(timeout, polling_interval)
80
- waiter.wait_until { yield }
81
- end
82
-
83
- private
84
- def sleep seconds
85
- @timer.sleep seconds
86
- end
87
- def now
88
- @timer.now
89
- end
90
- end
91
-
1
+ require 'watir/exceptions'
2
+
3
+ module Watir
4
+
5
+ def wait_until(*args)
6
+ Waiter.wait_until(*args) {yield}
7
+ end
8
+
9
+ class TimeKeeper
10
+ attr_reader :sleep_time
11
+ def initialize
12
+ @sleep_time = 0.0
13
+ end
14
+ def sleep seconds
15
+ @sleep_time += Kernel.sleep seconds
16
+ end
17
+ def now
18
+ Time.now
19
+ end
20
+ end
21
+
22
+ class Waiter
23
+ # This is an interface to a TimeKeeper which proxies
24
+ # calls to "sleep" and "Time.now".
25
+ # Useful for unit testing Waiter.
26
+ attr_accessor :timer
27
+
28
+ # How long to wait between each iteration through the wait_until
29
+ # loop. In seconds.
30
+ attr_accessor :polling_interval
31
+
32
+ # Timeout for wait_until.
33
+ attr_accessor :timeout
34
+
35
+ @@default_polling_interval = 0.5
36
+ @@default_timeout = 60.0
37
+
38
+ def initialize(timeout=@@default_timeout,
39
+ polling_interval=@@default_polling_interval)
40
+ @timeout = timeout
41
+ @polling_interval = polling_interval
42
+ @timer = TimeKeeper.new
43
+ end
44
+
45
+ # Execute the provided block until either (1) it returns true, or
46
+ # (2) the timeout (in seconds) has been reached. If the timeout is reached,
47
+ # a TimeOutException will be raised. The block will always
48
+ # execute at least once.
49
+ #
50
+ # waiter = Waiter.new(5)
51
+ # waiter.wait_until {puts 'hello'}
52
+ #
53
+ # This code will print out "hello" for five seconds, and then raise a
54
+ # Watir::TimeOutException.
55
+ def wait_until # block
56
+ start_time = now
57
+ until yield do
58
+ if (duration = now - start_time) > @timeout
59
+ raise Watir::Exception::TimeOutException.new(duration, @timeout),
60
+ "Timed out after #{duration} seconds."
61
+ end
62
+ sleep @polling_interval
63
+ end
64
+ end
65
+
66
+ # Execute the provided block until either (1) it returns true, or
67
+ # (2) the timeout (in seconds) has been reached. If the timeout is reached,
68
+ # a TimeOutException will be raised. The block will always
69
+ # execute at least once.
70
+ #
71
+ # Waiter.wait_until(5) {puts 'hello'}
72
+ #
73
+ # This code will print out "hello" for five seconds, and then raise a
74
+ # Watir::TimeOutException.
75
+
76
+ # IDEA: wait_until: remove defaults from Waiter.wait_until
77
+ def self.wait_until(timeout=@@default_timeout,
78
+ polling_interval=@@default_polling_interval)
79
+ waiter = new(timeout, polling_interval)
80
+ waiter.wait_until { yield }
81
+ end
82
+
83
+ private
84
+ def sleep seconds
85
+ @timer.sleep seconds
86
+ end
87
+ def now
88
+ @timer.now
89
+ end
90
+ end
91
+
92
92
  end # module