minitest-ax_elements 1.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,12 @@
1
+ --no-cache
2
+ --no-output
3
+ --verbose
4
+ --markup markdown
5
+ --markup-provider redcarpet
6
+ --asset docs/images:images
7
+ --readme README.markdown
8
+ --hide-void-return
9
+ lib/**/*.rb
10
+ -
11
+ History.markdown
12
+
@@ -0,0 +1,4 @@
1
+ # 1.0.0
2
+
3
+ * Extracted from AXElements
4
+
@@ -0,0 +1,46 @@
1
+ # minitest-ax\_elements
2
+
3
+ minitest is a library for writing tests. AXElements is a library for
4
+ automating GUI interactions on OS X. When you combine them you get
5
+ `minitest-ax_elements`, a powerful tool for writing automated tests for
6
+ GUI applications on OS X.
7
+
8
+
9
+ ## Examples
10
+
11
+ TODO...
12
+
13
+
14
+ ## Documentation
15
+
16
+ TODO...
17
+
18
+
19
+ ## Copyright
20
+
21
+ Copyright (c) 2012, Mark Rada
22
+ All rights reserved.
23
+
24
+ Redistribution and use in source and binary forms, with or without
25
+ modification, are permitted provided that the following conditions are met:
26
+
27
+ * Redistributions of source code must retain the above copyright
28
+ notice, this list of conditions and the following disclaimer.
29
+ * Redistributions in binary form must reproduce the above copyright
30
+ notice, this list of conditions and the following disclaimer in the
31
+ documentation and/or other materials provided with the distribution.
32
+ * Neither the name of Mark Rada nor the names of its
33
+ contributors may be used to endorse or promote products derived
34
+ from this software without specific prior written permission.
35
+
36
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
37
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
38
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39
+ DISCLAIMED. IN NO EVENT SHALL Mark Rada BE LIABLE FOR ANY
40
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
41
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
42
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
43
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
44
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
45
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
46
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,40 @@
1
+ if defined? MACRUBY_REVISION
2
+ require 'rubygems'
3
+ def on_macruby?
4
+ true
5
+ end
6
+ else
7
+ def on_macruby?
8
+ false
9
+ end
10
+ end
11
+
12
+ def on_mri?
13
+ !on_macruby?
14
+ end
15
+
16
+ task :default => :test
17
+
18
+
19
+ # Testing
20
+
21
+ require 'rake/testtask'
22
+ Rake::TestTask.new do |t|
23
+ t.libs << '.'
24
+ t.pattern = "test/**/*_test.rb"
25
+ end
26
+
27
+
28
+ # Gem stuff
29
+
30
+ require 'rubygems/package_task'
31
+ SPEC = Gem::Specification.load('minitest-ax_elements.gemspec')
32
+
33
+ Gem::PackageTask.new(SPEC) { }
34
+
35
+ desc 'Build and install gem (not including deps)'
36
+ task :install => :gem do
37
+ require 'rubygems/installer'
38
+ Gem::Installer.new("pkg/#{SPEC.file_name}").install
39
+ end
40
+
@@ -0,0 +1,180 @@
1
+ require 'ax/element'
2
+ require 'accessibility/qualifier'
3
+ require 'accessibility/dsl'
4
+
5
+ ##
6
+ # AXElements assertions for MiniTest.
7
+ # [Learn more about minitest.](https://github.com/seattlerb/minitest)
8
+ class MiniTest::Assertions
9
+
10
+ ##
11
+ # Test that an element has a specific child. For example, test
12
+ # that a table has a row with certain contents. You can pass any
13
+ # filters that you normally would during a search, including a block.
14
+ #
15
+ # @example
16
+ #
17
+ # assert_has_child table, :row, static_text: { value: 'Mark' }
18
+ #
19
+ # @param parent [AX::Element]
20
+ # @param kind [#to_s]
21
+ # @param filters [Hash]
22
+ # @yield Optional block used for filtering
23
+ # @return [AX::Element]
24
+ def assert_has_child parent, kind, filters = {}, &block
25
+ msg = message {
26
+ child = ax_search_id kind, filters, block
27
+ "Expected #{parent.inspect} to have #{child} as a child"
28
+ }
29
+ result = ax_check_children parent, kind, filters, block
30
+ refute result.blank?, msg
31
+ result
32
+ end
33
+
34
+ ##
35
+ # Test that an element has a specifc descendent. For example, test
36
+ # that a window contains a specific label. You can pass any filters
37
+ # that you normally would during a search, including a block.
38
+ #
39
+ # @example
40
+ #
41
+ # assert_has_descendent window, :static_text, value: /Cake/
42
+ #
43
+ # @param ancestor [AX::Element]
44
+ # @param kind [#to_s]
45
+ # @param filters [Hash]
46
+ # @yield Optional block used for filtering
47
+ # @return [AX::Element]
48
+ def assert_has_descendent ancestor, kind, filters = {}, &block
49
+ msg = message {
50
+ descendent = ax_search_id kind, filters, block
51
+ "Expected #{ancestor.inspect} to have #{descendent} as a descendent"
52
+ }
53
+ result = ax_check_descendent ancestor, kind, filters, block
54
+ refute result.blank?, msg
55
+ result
56
+ end
57
+ alias_method :assert_has_descendant, :assert_has_descendent
58
+
59
+ ##
60
+ # Test that an element will have a child/descendent soon. This method
61
+ # will block until the element is found or a timeout occurs.
62
+ #
63
+ # This is a minitest front end to using {DSL#wait_for}, so any
64
+ # parameters you would normally pass to that method will work here.
65
+ # This also means that you must include either a `parent` key or an
66
+ # `ancestor` key as one of the filters.
67
+ #
68
+ # @param kind [#to_s]
69
+ # @param filters [Hash]
70
+ # @yield An optional block to be used in the search qualifier
71
+ def assert_shortly_has kind, filters = {}, &block
72
+ # need to know if parent/ancestor now because wait_for eats some keys
73
+ (ancest = filters[:ancestor]) || (parent = filters[:parent])
74
+ msg = message {
75
+ descend = ax_search_id kind, filters, block
76
+ if ancest
77
+ "Expected #{ancest.inspect} to have descendent #{descend} before a timeout occurred"
78
+ else
79
+ "Expected #{parent.inspect} to have child #{descend} before a timeout occurred"
80
+ end
81
+ }
82
+ result = wait_for kind, filters, &block
83
+ refute result.blank?, msg
84
+ result
85
+ end
86
+
87
+ ##
88
+ # Test that an element _does not_ have a specific child. For example,
89
+ # test that a row is no longer in a table. You can pass any filters
90
+ # that you normally would during a search, including a block.
91
+ #
92
+ # @example
93
+ #
94
+ # refute_has_child table, :row, id: 'MyRow'
95
+ #
96
+ # @param parent [AX::Element]
97
+ # @param kind [#to_s]
98
+ # @param filters [Hash]
99
+ # @yield An optional block to be used in the search qualifier
100
+ # @return [nil]
101
+ def refute_has_child parent, kind, filters = {}, &block
102
+ result = ax_check_children parent, kind, filters, block
103
+ msg = message {
104
+ "Expected #{parent.inspect} NOT to have #{result} as a child"
105
+ }
106
+ assert result.blank?, msg
107
+ result
108
+ end
109
+
110
+ ##
111
+ # Test that an element _does not_ have a specific descendent. For
112
+ # example, test that a window does not contain a spinning progress
113
+ # indicator anymore.
114
+ #
115
+ # @example
116
+ #
117
+ # refute_has_descendent window, :busy_indicator
118
+ #
119
+ # @param ancestor [AX::Element]
120
+ # @param kind [#to_s]
121
+ # @param filters [Hash]
122
+ # @yield An optional block to be used in the search qualifier
123
+ # @return [nil,Array()]
124
+ def refute_has_descendent ancestor, kind, filters = {}, &block
125
+ result = ax_check_descendent ancestor, kind, filters, block
126
+ msg = message {
127
+ "Expected #{ancestor.inspect} NOT to have #{result} as a descendent"
128
+ }
129
+ assert result.blank?, msg
130
+ result
131
+ end
132
+ alias_method :refute_has_descendant, :refute_has_descendent
133
+
134
+ ##
135
+ # @todo Does having this assertion make sense? I've only added it
136
+ # for the time being because OCD demands it.
137
+ #
138
+ # Test that an element will NOT have a child/descendent soon. This
139
+ # method will block until the element is found or a timeout occurs.
140
+ #
141
+ # This is a minitest front end to using {DSL#wait_for}, so any
142
+ # parameters you would normally pass to that method will work here.
143
+ # This also means that you must include either a `parent` key or an
144
+ # `ancestor` key as one of the filters.
145
+ #
146
+ # @param kind [#to_s]
147
+ # @param filters [Hash]
148
+ # @yield An optional block to be used in the search qualifier
149
+ # @return [nil]
150
+ def refute_shortly_has kind, filters = {}, &block
151
+ result = wait_for kind, filters, &block
152
+ msg = message {
153
+ if ancest = filters[:ancestor]
154
+ "Expected #{ancest.inspect} NOT to have #{result.inspect} as a descendent"
155
+ else
156
+ parent = filters[:parent]
157
+ "Expected #{parent.inspect} NOT to have #{result.inspect} as a child"
158
+ end
159
+ }
160
+ assert result.blank?, msg
161
+ result
162
+ end
163
+
164
+
165
+ private
166
+
167
+ def ax_search_id kind, filters, block
168
+ Accessibility::Qualifier.new(kind, filters, &block).describe
169
+ end
170
+
171
+ def ax_check_children parent, kind, filters, block
172
+ q = Accessibility::Qualifier.new(kind, filters, &block)
173
+ parent.children.find { |x| q.qualifies? x }
174
+ end
175
+
176
+ def ax_check_descendent ancestor, kind, filters, block
177
+ ancestor.search(kind, filters, &block)
178
+ end
179
+
180
+ end
@@ -0,0 +1,6 @@
1
+ module MiniTest
2
+ module Accessibility
3
+ VERSION = '1.0.0.beta'
4
+ end
5
+ end
6
+
@@ -0,0 +1,3 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minitest-ax_elements
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.beta
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Mark Rada
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: AXElements
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0.beta
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0.beta
30
+ - !ruby/object:Gem::Dependency
31
+ name: minitest
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '4.3'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '4.3'
46
+ - !ruby/object:Gem::Dependency
47
+ name: yard
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.8.3
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.8.3
62
+ - !ruby/object:Gem::Dependency
63
+ name: kramdown
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.14.1
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.14.1
78
+ description: ! 'MiniTest extensions for using AXElements
79
+
80
+ '
81
+ email: mrada@marketcircle.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - lib/minitest/ax_elements/version.rb
87
+ - lib/minitest/ax_elements.rb
88
+ - Rakefile
89
+ - README.markdown
90
+ - History.markdown
91
+ - .yardopts
92
+ - test/helper.rb
93
+ homepage: http://github.com/AXElements/minitest-ax_elements
94
+ licenses:
95
+ - BSD 3-clause
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>'
110
+ - !ruby/object:Gem::Version
111
+ version: 1.3.1
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 1.8.24
115
+ signing_key:
116
+ specification_version: 3
117
+ summary: MiniTest extensions for using AXElements
118
+ test_files:
119
+ - test/helper.rb