AXElements 0.6.0beta2 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +1 -2
- data/README.markdown +152 -88
- data/Rakefile +8 -103
- data/docs/Debugging.markdown +9 -2
- data/docs/KeyboardEvents.markdown +114 -49
- data/docs/Setting.markdown +1 -0
- data/docs/images/next_version.png +0 -0
- data/ext/accessibility/key_coder/extconf.rb +22 -0
- data/ext/accessibility/key_coder/key_coder.c +113 -0
- data/lib/AXElements.rb +2 -0
- data/lib/accessibility/core.rb +897 -0
- data/lib/accessibility/debug.rb +168 -0
- data/lib/accessibility/dsl.rb +697 -0
- data/lib/accessibility/enumerators.rb +104 -0
- data/lib/accessibility/errors.rb +32 -0
- data/lib/accessibility/factory.rb +153 -0
- data/lib/accessibility/graph.rb +150 -0
- data/lib/{ax_elements/inspector.rb → accessibility/pp_inspector.rb} +39 -28
- data/lib/accessibility/qualifier.rb +158 -0
- data/lib/accessibility/string.rb +494 -0
- data/lib/accessibility/translator.rb +178 -0
- data/lib/accessibility/version.rb +7 -0
- data/lib/accessibility.rb +79 -0
- data/lib/ax/application.rb +234 -0
- data/lib/{ax_elements/elements → ax}/button.rb +2 -0
- data/lib/ax/element.rb +518 -0
- data/lib/{ax_elements/elements → ax}/radio_button.rb +2 -0
- data/lib/ax/row.rb +37 -0
- data/lib/{ax_elements/elements → ax}/static_text.rb +2 -0
- data/lib/ax/systemwide.rb +86 -0
- data/lib/ax_elements/awesome_print.rb +25 -0
- data/lib/ax_elements/exception_workaround.rb +8 -0
- data/lib/ax_elements/nsarray_compat.rb +64 -0
- data/lib/ax_elements/vendor/inflection_data.rb +65 -0
- data/lib/ax_elements/vendor/inflections.rb +172 -0
- data/lib/ax_elements/vendor/inflector.rb +306 -0
- data/lib/ax_elements.rb +14 -25
- data/lib/minitest/ax_elements.rb +112 -12
- data/lib/mouse.rb +72 -46
- data/lib/rspec/expectations/ax_elements.rb +133 -6
- data/rakelib/doc.rake +13 -0
- data/rakelib/ext.rake +61 -0
- data/rakelib/gem.rake +28 -0
- data/rakelib/test.rake +53 -0
- data/test/helper.rb +11 -97
- data/test/integration/accessibility/test_core.rb +18 -0
- data/test/integration/accessibility/test_debug.rb +44 -0
- data/test/integration/accessibility/test_dsl.rb +225 -0
- data/test/integration/accessibility/test_enumerators.rb +122 -0
- data/test/integration/accessibility/test_errors.rb +38 -0
- data/test/integration/accessibility/test_notifications.rb +22 -0
- data/test/integration/accessibility/test_qualifier.rb +148 -0
- data/test/integration/ax/test_application.rb +56 -0
- data/test/integration/ax/test_element.rb +46 -0
- data/test/integration/ax/test_row.rb +23 -0
- data/test/integration/ax_elements/test_nsarray_compat.rb +43 -0
- data/test/integration/minitest/test_ax_elements.rb +98 -0
- data/test/integration/rspec/expectations/test_ax_elements.rb +58 -0
- data/test/integration/test_mouse.rb +35 -0
- data/test/sanity/accessibility/test_core.rb +553 -0
- data/test/sanity/accessibility/test_debug.rb +63 -0
- data/test/sanity/accessibility/test_dsl.rb +75 -0
- data/test/sanity/accessibility/test_errors.rb +10 -0
- data/test/sanity/accessibility/test_factory.rb +88 -0
- data/test/sanity/accessibility/test_pp_inspector.rb +110 -0
- data/test/sanity/accessibility/test_qualifier.rb +13 -0
- data/test/sanity/accessibility/test_string.rb +238 -0
- data/test/sanity/accessibility/test_translator.rb +145 -0
- data/test/sanity/ax/test_application.rb +90 -0
- data/test/sanity/ax/test_element.rb +80 -0
- data/test/sanity/ax/test_systemwide.rb +66 -0
- data/test/sanity/ax_elements/test_nsarray_compat.rb +16 -0
- data/test/sanity/ax_elements/test_nsobject_inspect.rb +11 -0
- data/test/sanity/minitest/test_ax_elements.rb +15 -0
- data/test/sanity/rspec/expectations/test_ax_elements.rb +12 -0
- data/test/sanity/test_ax_elements.rb +10 -0
- data/test/sanity/test_mouse.rb +19 -0
- metadata +111 -93
- data/LICENSE.txt +0 -25
- data/ext/key_coder/extconf.rb +0 -6
- data/ext/key_coder/key_coder.m +0 -77
- data/lib/ax_elements/accessibility/enumerators.rb +0 -104
- data/lib/ax_elements/accessibility/graph.rb +0 -118
- data/lib/ax_elements/accessibility/language.rb +0 -347
- data/lib/ax_elements/accessibility/qualifier.rb +0 -73
- data/lib/ax_elements/accessibility.rb +0 -166
- data/lib/ax_elements/core.rb +0 -541
- data/lib/ax_elements/element.rb +0 -593
- data/lib/ax_elements/elements/application.rb +0 -88
- data/lib/ax_elements/elements/row.rb +0 -30
- data/lib/ax_elements/elements/systemwide.rb +0 -46
- data/lib/ax_elements/macruby_extensions.rb +0 -255
- data/lib/ax_elements/notification.rb +0 -37
- data/lib/ax_elements/version.rb +0 -9
- data/test/elements/test_application.rb +0 -72
- data/test/elements/test_row.rb +0 -27
- data/test/elements/test_systemwide.rb +0 -38
- data/test/test_accessibility.rb +0 -127
- data/test/test_blankness.rb +0 -26
- data/test/test_core.rb +0 -448
- data/test/test_element.rb +0 -939
- data/test/test_enumerators.rb +0 -81
- data/test/test_inspector.rb +0 -130
- data/test/test_language.rb +0 -157
- data/test/test_macruby_extensions.rb +0 -303
- data/test/test_mouse.rb +0 -5
- data/test/test_search_semantics.rb +0 -143
@@ -1,143 +0,0 @@
|
|
1
|
-
##
|
2
|
-
# Integration level tests that make sure search semantics are working,
|
3
|
-
# these are effectively the tests for Accessibility::Qualifier.
|
4
|
-
class TestSearchSemantics < TestAX
|
5
|
-
|
6
|
-
def app
|
7
|
-
@@app ||= AX::Application.new REF, AX.attrs_of_element(REF)
|
8
|
-
end
|
9
|
-
|
10
|
-
def window
|
11
|
-
@@window ||= app.attribute(:main_window)
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_finds_things_one_level_deep
|
15
|
-
assert_equal window, app.search(:standard_window)
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_finds_things_two_levels_deep
|
19
|
-
expected = app.attribute(:main_window).attribute(:close_button)
|
20
|
-
assert_equal expected, app.search(:close_button)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_finds_even_with_no_filters
|
24
|
-
assert_equal app.attribute(:menu_bar), app.search(:menu_bar)
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_finds_with_a_filter
|
28
|
-
assert_equal 'Yes', window.search(:button, title: 'Yes').attribute(:title)
|
29
|
-
assert_equal 'No', window.search(:button, title: 'No') .attribute(:title)
|
30
|
-
assert_equal 'Maybe So', window.search(:button, enabled: false).attribute(:title)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_uses_all_filters
|
34
|
-
assert_nil window.search(:button, title: 'Maybe So', enabled: true)
|
35
|
-
assert_equal 'Yes', window.search(:button, title: 'Yes', enabled: true).attribute(:title)
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_returns_element_when_found
|
39
|
-
assert_kind_of AX::Button, window.search(:button)
|
40
|
-
assert_kind_of AX::Button, window.search(:buttons).first
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_returns_nil_when_nothing_found
|
44
|
-
assert_nil window.search(:what_you_call_it)
|
45
|
-
assert_empty window.search(:what_you_call_its)
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_searching_for_superclass_will_also_find_subclasses
|
49
|
-
ret = window.search(:buttons).map &:class
|
50
|
-
assert_includes ret, AX::CloseButton
|
51
|
-
assert_includes ret, AX::FullScreenButton
|
52
|
-
assert_includes ret, AX::SortButton
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_searching_for_subclasses_will_not_find_superclasses
|
56
|
-
ret = window.search(:full_screen_buttons)
|
57
|
-
assert_equal 1, ret.size
|
58
|
-
assert_instance_of AX::FullScreenButton, ret.first
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_does_not_fault_when_element_does_not_respond_to_filter
|
62
|
-
expected = window.attribute(:close_button)
|
63
|
-
actual = window.search(:button, subrole: KAXCloseButtonSubrole)
|
64
|
-
assert_equal expected, actual
|
65
|
-
end
|
66
|
-
|
67
|
-
# @note test is kind of lame since we only have one window
|
68
|
-
# @note this test exists for legacy purposes, the actual
|
69
|
-
# logic has since moved elsewhere but behavior should
|
70
|
-
# remain
|
71
|
-
def test_title_ui_element_filtering
|
72
|
-
# case 1: classes match
|
73
|
-
text = window.attribute(:children).find do |child|
|
74
|
-
child.class == AX::StaticText
|
75
|
-
end
|
76
|
-
actual = app.search(:window, title_ui_element: text)
|
77
|
-
assert_equal window, actual
|
78
|
-
|
79
|
-
# case 2: classes do not match
|
80
|
-
actual = app.search(:window, title_ui_element: 'AXElementsTester')
|
81
|
-
assert_equal window, actual
|
82
|
-
end
|
83
|
-
|
84
|
-
# @note this test exists for legacy purposes, the actual
|
85
|
-
# logic has since moved elsewhere but behavior should
|
86
|
-
# remain
|
87
|
-
def test_table_header_filtering
|
88
|
-
area = window.attribute(:children).find do |child|
|
89
|
-
child.class == AX::ScrollArea &&
|
90
|
-
child.attributes.include?(KAXIdentifierAttribute) &&
|
91
|
-
child.attribute(:identifier) == 'table'
|
92
|
-
end
|
93
|
-
table = area.attribute(:children).find { |child| child.class == AX::Table }
|
94
|
-
|
95
|
-
# case 1: classes match
|
96
|
-
column = table.attribute(:columns).first
|
97
|
-
button = column.attribute(:header)
|
98
|
-
search_result = table.search(:column, header: button)
|
99
|
-
assert_equal column, search_result
|
100
|
-
|
101
|
-
# case 2: classes do not match
|
102
|
-
assert_equal 'One', table.search(:column, header: 'One').attribute(:header).attribute(:title)
|
103
|
-
end
|
104
|
-
|
105
|
-
# @note another legacy test
|
106
|
-
def test_true_false_class_mismatch
|
107
|
-
# since search does a class comparison to try and infer things,
|
108
|
-
# it does not work with boolean values since they have different
|
109
|
-
# classes, so we have another workaround for that case
|
110
|
-
assert_nil window.search(:button, title: 'Maybe So', enabled: true)
|
111
|
-
assert_nil window.search(:button, title: 'Really Long Button Title')
|
112
|
-
end
|
113
|
-
|
114
|
-
# @note another legacy test
|
115
|
-
def test_nil_attribute_is_handled_as_special_case
|
116
|
-
# some attributes store nil as their value, but the filter
|
117
|
-
# might have been expecting string types, similar to how
|
118
|
-
# we need to handle true/false classness...
|
119
|
-
|
120
|
-
# case 0: expected and actual are nil
|
121
|
-
assert_equal window, app.search(:window, default_button: nil)
|
122
|
-
|
123
|
-
# case 1: actual value is nil does not explode
|
124
|
-
button = window.attribute(:close_button)
|
125
|
-
assert_nil app.search(:window, default_button: button)
|
126
|
-
|
127
|
-
# case 2: expected value is nil does not explode
|
128
|
-
assert_nil window.search(:button, parent: nil)
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_nested_search_passes_filters_through
|
132
|
-
filters = { title: 'Yes' }
|
133
|
-
assert_equal window, app.search(:standard_window, button: filters)
|
134
|
-
assert_equal window, app.search(:standard_windows, button: filters).first
|
135
|
-
assert_equal window, app.search(:standard_window, button: NSDictionary.dictionary)
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_nested_search_triggered_for_hash_filters # when filter is also an attribute
|
139
|
-
assert_equal window, app.search(:standard_window, close_button: { enabled: true })
|
140
|
-
assert_nil app.search(:standard_window, close_button: { enabled: false })
|
141
|
-
end
|
142
|
-
|
143
|
-
end
|