AXElements 0.6.0beta2 → 0.7.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/.yardopts +1 -2
  2. data/README.markdown +152 -88
  3. data/Rakefile +8 -103
  4. data/docs/Debugging.markdown +9 -2
  5. data/docs/KeyboardEvents.markdown +114 -49
  6. data/docs/Setting.markdown +1 -0
  7. data/docs/images/next_version.png +0 -0
  8. data/ext/accessibility/key_coder/extconf.rb +22 -0
  9. data/ext/accessibility/key_coder/key_coder.c +113 -0
  10. data/lib/AXElements.rb +2 -0
  11. data/lib/accessibility/core.rb +897 -0
  12. data/lib/accessibility/debug.rb +168 -0
  13. data/lib/accessibility/dsl.rb +697 -0
  14. data/lib/accessibility/enumerators.rb +104 -0
  15. data/lib/accessibility/errors.rb +32 -0
  16. data/lib/accessibility/factory.rb +153 -0
  17. data/lib/accessibility/graph.rb +150 -0
  18. data/lib/{ax_elements/inspector.rb → accessibility/pp_inspector.rb} +39 -28
  19. data/lib/accessibility/qualifier.rb +158 -0
  20. data/lib/accessibility/string.rb +494 -0
  21. data/lib/accessibility/translator.rb +178 -0
  22. data/lib/accessibility/version.rb +7 -0
  23. data/lib/accessibility.rb +79 -0
  24. data/lib/ax/application.rb +234 -0
  25. data/lib/{ax_elements/elements → ax}/button.rb +2 -0
  26. data/lib/ax/element.rb +518 -0
  27. data/lib/{ax_elements/elements → ax}/radio_button.rb +2 -0
  28. data/lib/ax/row.rb +37 -0
  29. data/lib/{ax_elements/elements → ax}/static_text.rb +2 -0
  30. data/lib/ax/systemwide.rb +86 -0
  31. data/lib/ax_elements/awesome_print.rb +25 -0
  32. data/lib/ax_elements/exception_workaround.rb +8 -0
  33. data/lib/ax_elements/nsarray_compat.rb +64 -0
  34. data/lib/ax_elements/vendor/inflection_data.rb +65 -0
  35. data/lib/ax_elements/vendor/inflections.rb +172 -0
  36. data/lib/ax_elements/vendor/inflector.rb +306 -0
  37. data/lib/ax_elements.rb +14 -25
  38. data/lib/minitest/ax_elements.rb +112 -12
  39. data/lib/mouse.rb +72 -46
  40. data/lib/rspec/expectations/ax_elements.rb +133 -6
  41. data/rakelib/doc.rake +13 -0
  42. data/rakelib/ext.rake +61 -0
  43. data/rakelib/gem.rake +28 -0
  44. data/rakelib/test.rake +53 -0
  45. data/test/helper.rb +11 -97
  46. data/test/integration/accessibility/test_core.rb +18 -0
  47. data/test/integration/accessibility/test_debug.rb +44 -0
  48. data/test/integration/accessibility/test_dsl.rb +225 -0
  49. data/test/integration/accessibility/test_enumerators.rb +122 -0
  50. data/test/integration/accessibility/test_errors.rb +38 -0
  51. data/test/integration/accessibility/test_notifications.rb +22 -0
  52. data/test/integration/accessibility/test_qualifier.rb +148 -0
  53. data/test/integration/ax/test_application.rb +56 -0
  54. data/test/integration/ax/test_element.rb +46 -0
  55. data/test/integration/ax/test_row.rb +23 -0
  56. data/test/integration/ax_elements/test_nsarray_compat.rb +43 -0
  57. data/test/integration/minitest/test_ax_elements.rb +98 -0
  58. data/test/integration/rspec/expectations/test_ax_elements.rb +58 -0
  59. data/test/integration/test_mouse.rb +35 -0
  60. data/test/sanity/accessibility/test_core.rb +553 -0
  61. data/test/sanity/accessibility/test_debug.rb +63 -0
  62. data/test/sanity/accessibility/test_dsl.rb +75 -0
  63. data/test/sanity/accessibility/test_errors.rb +10 -0
  64. data/test/sanity/accessibility/test_factory.rb +88 -0
  65. data/test/sanity/accessibility/test_pp_inspector.rb +110 -0
  66. data/test/sanity/accessibility/test_qualifier.rb +13 -0
  67. data/test/sanity/accessibility/test_string.rb +238 -0
  68. data/test/sanity/accessibility/test_translator.rb +145 -0
  69. data/test/sanity/ax/test_application.rb +90 -0
  70. data/test/sanity/ax/test_element.rb +80 -0
  71. data/test/sanity/ax/test_systemwide.rb +66 -0
  72. data/test/sanity/ax_elements/test_nsarray_compat.rb +16 -0
  73. data/test/sanity/ax_elements/test_nsobject_inspect.rb +11 -0
  74. data/test/sanity/minitest/test_ax_elements.rb +15 -0
  75. data/test/sanity/rspec/expectations/test_ax_elements.rb +12 -0
  76. data/test/sanity/test_ax_elements.rb +10 -0
  77. data/test/sanity/test_mouse.rb +19 -0
  78. metadata +111 -93
  79. data/LICENSE.txt +0 -25
  80. data/ext/key_coder/extconf.rb +0 -6
  81. data/ext/key_coder/key_coder.m +0 -77
  82. data/lib/ax_elements/accessibility/enumerators.rb +0 -104
  83. data/lib/ax_elements/accessibility/graph.rb +0 -118
  84. data/lib/ax_elements/accessibility/language.rb +0 -347
  85. data/lib/ax_elements/accessibility/qualifier.rb +0 -73
  86. data/lib/ax_elements/accessibility.rb +0 -166
  87. data/lib/ax_elements/core.rb +0 -541
  88. data/lib/ax_elements/element.rb +0 -593
  89. data/lib/ax_elements/elements/application.rb +0 -88
  90. data/lib/ax_elements/elements/row.rb +0 -30
  91. data/lib/ax_elements/elements/systemwide.rb +0 -46
  92. data/lib/ax_elements/macruby_extensions.rb +0 -255
  93. data/lib/ax_elements/notification.rb +0 -37
  94. data/lib/ax_elements/version.rb +0 -9
  95. data/test/elements/test_application.rb +0 -72
  96. data/test/elements/test_row.rb +0 -27
  97. data/test/elements/test_systemwide.rb +0 -38
  98. data/test/test_accessibility.rb +0 -127
  99. data/test/test_blankness.rb +0 -26
  100. data/test/test_core.rb +0 -448
  101. data/test/test_element.rb +0 -939
  102. data/test/test_enumerators.rb +0 -81
  103. data/test/test_inspector.rb +0 -130
  104. data/test/test_language.rb +0 -157
  105. data/test/test_macruby_extensions.rb +0 -303
  106. data/test/test_mouse.rb +0 -5
  107. 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