mohawk 0.2.1 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog +5 -0
- data/lib/mohawk/accessors.rb +16 -0
- data/lib/mohawk/adapters/uia/text_box.rb +5 -1
- data/lib/mohawk/adapters/uia/window.rb +12 -7
- data/lib/mohawk/version.rb +1 -1
- data/mohawk.gemspec +2 -2
- data/spec/lib/mohawk/button_spec.rb +14 -0
- data/spec/lib/mohawk/checkbox_spec.rb +23 -0
- data/spec/lib/mohawk/combo_box_spec.rb +52 -0
- data/spec/lib/mohawk/control_spec.rb +17 -0
- data/spec/lib/mohawk/label_spec.rb +8 -0
- data/spec/lib/mohawk/link_spec.rb +16 -0
- data/spec/lib/mohawk/menu_spec.rb +20 -0
- data/spec/lib/mohawk/navigation_spec.rb +25 -0
- data/spec/lib/mohawk/radio_spec.rb +22 -0
- data/spec/lib/mohawk/spinner_spec.rb +31 -0
- data/spec/lib/mohawk/text_spec.rb +40 -0
- data/spec/lib/mohawk/tree_view_spec.rb +54 -0
- data/spec/lib/mohawk/window_spec.rb +84 -0
- data/spec/lib/mohawk_spec.rb +25 -0
- data/spec/screens/about.rb +7 -0
- data/spec/screens/data_entry_form.rb +4 -0
- data/spec/screens/main_form.rb +32 -0
- data/spec/spec_helper.rb +19 -1
- data/spec/tabs_spec.rb +26 -0
- metadata +44 -68
- data/features/button.feature +0 -10
- data/features/checkbox.feature +0 -12
- data/features/combo_box.feature +0 -44
- data/features/control.feature +0 -9
- data/features/label.feature +0 -4
- data/features/link.feature +0 -9
- data/features/menu.feature +0 -13
- data/features/mohawk.feature +0 -25
- data/features/navigation.feature +0 -9
- data/features/radio.feature +0 -5
- data/features/spinner.feature +0 -12
- data/features/step_definitions/button_steps.rb +0 -15
- data/features/step_definitions/checkbox_steps.rb +0 -19
- data/features/step_definitions/combo_box_steps.rb +0 -48
- data/features/step_definitions/control_steps.rb +0 -11
- data/features/step_definitions/label_steps.rb +0 -3
- data/features/step_definitions/link_steps.rb +0 -3
- data/features/step_definitions/menu_steps.rb +0 -10
- data/features/step_definitions/mohawk_steps.rb +0 -35
- data/features/step_definitions/navigation_steps.rb +0 -15
- data/features/step_definitions/radio_steps.rb +0 -7
- data/features/step_definitions/spinner_steps.rb +0 -18
- data/features/step_definitions/tabs_steps.rb +0 -23
- data/features/step_definitions/text_steps.rb +0 -15
- data/features/step_definitions/tree_view_steps.rb +0 -35
- data/features/tabs.feature +0 -22
- data/features/text.feature +0 -18
- data/features/tree_view.feature +0 -52
- data/spec/ffi_stub.rb +0 -16
data/Changelog
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
=== Version 0.3 / 2014-05-23
|
2
|
+
* Enhancements
|
3
|
+
* bumping uia dependency to speed up element access when they do not have
|
4
|
+
a window handle (i.e. SelectList items, Table rows, etc.)
|
5
|
+
|
1
6
|
=== Version 0.2.1 / 2014-05-14
|
2
7
|
* Enhancements
|
3
8
|
* bumped uia dependency to make menu item selection faster
|
data/lib/mohawk/accessors.rb
CHANGED
@@ -16,6 +16,19 @@ module Mohawk
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
def required_controls(*controls)
|
20
|
+
define_method(:wait_until_present) do
|
21
|
+
controls.each do |control|
|
22
|
+
super()
|
23
|
+
begin
|
24
|
+
wait_until { send("#{control}_view").exist? }
|
25
|
+
rescue Mohawk::Waiter::WaitTimeout
|
26
|
+
raise "Control #{control} was not found on the #{self.class} screen"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
19
32
|
#
|
20
33
|
# Defines a locator indicating a child container that is a descendant of
|
21
34
|
# the top-level window
|
@@ -358,6 +371,9 @@ module Mohawk
|
|
358
371
|
define_method("#{name}_items") do
|
359
372
|
adapter.tab_control(locator).items
|
360
373
|
end
|
374
|
+
define_method("#{name}_view") do
|
375
|
+
adapter.tab_control(locator)
|
376
|
+
end
|
361
377
|
end
|
362
378
|
|
363
379
|
def control(name, locator)
|
@@ -14,11 +14,7 @@ module Mohawk
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def element
|
17
|
-
@element ||=
|
18
|
-
if @element && @container
|
19
|
-
@element = @element.find(@container) || @element
|
20
|
-
end
|
21
|
-
@element
|
17
|
+
@element ||= locate_element
|
22
18
|
end
|
23
19
|
|
24
20
|
def send_keys(*keys)
|
@@ -40,7 +36,7 @@ module Mohawk
|
|
40
36
|
end
|
41
37
|
|
42
38
|
def handle
|
43
|
-
element.handle
|
39
|
+
(locate_element && element.handle) || 0
|
44
40
|
end
|
45
41
|
|
46
42
|
def title
|
@@ -52,12 +48,21 @@ module Mohawk
|
|
52
48
|
end
|
53
49
|
|
54
50
|
def present?
|
55
|
-
|
51
|
+
locate_element != nil
|
56
52
|
end
|
57
53
|
|
58
54
|
def wait_until_present
|
59
55
|
wait_until { element }
|
60
56
|
end
|
57
|
+
|
58
|
+
private
|
59
|
+
def locate_element
|
60
|
+
element = Uia.find_element(@locator)
|
61
|
+
if element && @container
|
62
|
+
element = element.find(@container) || element
|
63
|
+
end
|
64
|
+
element
|
65
|
+
end
|
61
66
|
end
|
62
67
|
end
|
63
68
|
end
|
data/lib/mohawk/version.rb
CHANGED
data/mohawk.gemspec
CHANGED
@@ -18,10 +18,10 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
gem.add_dependency 'uia', '
|
21
|
+
gem.add_dependency 'uia', '>= 0.4.4'
|
22
22
|
gem.add_dependency 'require_all'
|
23
23
|
gem.add_dependency 'page_navigation', '>= 0.7'
|
24
|
-
gem.add_dependency 'childprocess', '~> 0.
|
24
|
+
gem.add_dependency 'childprocess', '~> 0.5'
|
25
25
|
|
26
26
|
gem.add_development_dependency 'cucumber'
|
27
27
|
gem.add_development_dependency 'rspec', '>= 2.12.0'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'buttons' do
|
4
|
+
Given(:main_form) { start_app }
|
5
|
+
|
6
|
+
context 'pressing' do
|
7
|
+
When { main_form.data_entry_form }
|
8
|
+
Then { expect(on(DataEntryForm)).to be_present }
|
9
|
+
end
|
10
|
+
|
11
|
+
context '#value' do
|
12
|
+
Then { main_form.data_entry_form_value == 'Data Entry Form' }
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'checkboxes' do
|
4
|
+
Given(:main_screen) { start_app }
|
5
|
+
|
6
|
+
Then { main_screen.checkbox_value == 'checkBox' }
|
7
|
+
Then { main_screen.checkbox_view.class == Mohawk::Adapters::UIA::CheckBox }
|
8
|
+
|
9
|
+
context 'setting' do
|
10
|
+
Given(:uncheck) { main_screen.checkbox = false }
|
11
|
+
Given(:check) { main_screen.checkbox = true }
|
12
|
+
|
13
|
+
context 'checking' do
|
14
|
+
When { check }
|
15
|
+
Then { main_screen.checkbox == true }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'un-checking' do
|
19
|
+
When { check; uncheck }
|
20
|
+
Then { main_screen.checkbox == false }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'combo boxes' do
|
4
|
+
Given(:main_form) { start_app }
|
5
|
+
|
6
|
+
context '#combo_box= / #combo_box' do
|
7
|
+
context 'by index' do
|
8
|
+
When { main_form.fruits = 2 }
|
9
|
+
Then { main_form.fruits == 'Coconut' }
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'by value' do
|
13
|
+
When { main_form.fruits = 'Coconut' }
|
14
|
+
Then { main_form.fruits == 'Coconut' }
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'by Regex' do
|
18
|
+
When { main_form.fruits = /[Or]an/ }
|
19
|
+
Then { main_form.fruits == 'Orange' }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'multi-select' do
|
23
|
+
Given { main_form.toggle_multi }
|
24
|
+
When { (0..2).each {|n| main_form.select_fruits_list n } }
|
25
|
+
|
26
|
+
Then { main_form.fruits_list_selections == ['Apple', 'Orange', 'Mango'] }
|
27
|
+
|
28
|
+
context '#clear_' do
|
29
|
+
context 'by index' do
|
30
|
+
When { main_form.clear_fruits_list 2 }
|
31
|
+
Then { main_form.fruits_list_selections == ['Apple', 'Orange'] }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'by value' do
|
35
|
+
When { main_form.clear_fruits_list 'Orange' }
|
36
|
+
Then { main_form.fruits_list_selections == ['Apple', 'Mango'] }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'by Regex' do
|
40
|
+
When { main_form.clear_fruits_list /p{2}/ }
|
41
|
+
Then { main_form.fruits_list_selections == ['Orange', 'Mango'] }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'list boxes' do
|
48
|
+
# ListBox controls are special with regard to raising events
|
49
|
+
When { main_form.fruits_list = 'Orange' }
|
50
|
+
Then { main_form.fruits_label == 'Orange' }
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'controls' do
|
4
|
+
Given(:main_screen) { start_app }
|
5
|
+
|
6
|
+
Then { main_screen.month_calendar_view.class == Mohawk::Adapters::UIA::ValueControl }
|
7
|
+
|
8
|
+
context '#control=' do
|
9
|
+
When { main_screen.month_calendar = '9/28/1979' }
|
10
|
+
Then { main_screen.month_calendar_value == '9/28/1979 12:00:00 AM' }
|
11
|
+
end
|
12
|
+
|
13
|
+
context '#click_' do
|
14
|
+
When { main_screen.click_about_control }
|
15
|
+
Then { on(About) != nil }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'links' do
|
4
|
+
Given(:main_form) { start_app }
|
5
|
+
|
6
|
+
Then { main_form.link_label_view.class == Mohawk::Adapters::UIA::Control }
|
7
|
+
|
8
|
+
context '#link_text' do
|
9
|
+
Then { main_form.link_label_text == 'linkLabel1' }
|
10
|
+
end
|
11
|
+
|
12
|
+
context '#click_link' do
|
13
|
+
When { main_form.click_link_label }
|
14
|
+
Then { main_form.link_label_text == 'linkLabel1 (clicked 1 times)' }
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'menus' do
|
4
|
+
Given(:main_form) { start_app }
|
5
|
+
|
6
|
+
context 'by text' do
|
7
|
+
When { main_form.menu_item_by_text }
|
8
|
+
Then { on(About).active? }
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'by path' do
|
12
|
+
When { main_form.menu_item_by_path }
|
13
|
+
Then { on(About).active? }
|
14
|
+
end
|
15
|
+
|
16
|
+
context '#click_menu_item' do
|
17
|
+
When { main_form.click_menu_item_by_path }
|
18
|
+
Then { on(About).active? }
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mohawk::Navigation do
|
4
|
+
context '#on with extra info' do
|
5
|
+
When { start_app }
|
6
|
+
Then { on(MainForm, pid: Mohawk.app.pid).present? }
|
7
|
+
end
|
8
|
+
|
9
|
+
context '#navigate_to' do
|
10
|
+
Given do
|
11
|
+
Mohawk::Navigation.routes = {
|
12
|
+
:default => [
|
13
|
+
[MainForm, :about],
|
14
|
+
[About, :close],
|
15
|
+
[MainForm, :data_entry_form],
|
16
|
+
[DataEntryForm]
|
17
|
+
]
|
18
|
+
}
|
19
|
+
start_app
|
20
|
+
end
|
21
|
+
|
22
|
+
When(:data_entry_form) { navigate_to(DataEntryForm) }
|
23
|
+
Then { expect(data_entry_form).to be_present }
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'radio buttons' do
|
4
|
+
Given(:screen) do
|
5
|
+
start_app
|
6
|
+
on(Class.new do
|
7
|
+
include Mohawk
|
8
|
+
window title: /MainForm/
|
9
|
+
|
10
|
+
radio(:radio_one, id: 'radioButton1')
|
11
|
+
label(:status, id: 'radioButtonLabel')
|
12
|
+
end)
|
13
|
+
end
|
14
|
+
|
15
|
+
Then { screen.radio_one_view.class == Mohawk::Adapters::UIA::Radio }
|
16
|
+
|
17
|
+
context '#radio' do
|
18
|
+
When { screen.radio_one }
|
19
|
+
Then { screen.status == 'Option 1 selected' }
|
20
|
+
And { screen.radio_one? == true }
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'spinners' do
|
4
|
+
Given(:screen) do
|
5
|
+
start_app
|
6
|
+
on(Class.new do
|
7
|
+
include Mohawk
|
8
|
+
window(title: /MainForm/)
|
9
|
+
|
10
|
+
spinner(:spinner, id: 'numericUpDown1')
|
11
|
+
end)
|
12
|
+
end
|
13
|
+
|
14
|
+
Then { screen.spinner_view.class == Mohawk::Adapters::UIA::Spinner }
|
15
|
+
|
16
|
+
context '#spinner=' do
|
17
|
+
When { screen.spinner = 50.8 }
|
18
|
+
Then { screen.spinner == 50.8 }
|
19
|
+
end
|
20
|
+
|
21
|
+
context '#increment_spinner' do
|
22
|
+
When { 5.times { screen.increment_spinner} }
|
23
|
+
Then { screen.spinner == 5.0 }
|
24
|
+
end
|
25
|
+
|
26
|
+
context '#decrement_spinner' do
|
27
|
+
Given { screen.spinner = 10.0 }
|
28
|
+
When { 3.times { screen.decrement_spinner } }
|
29
|
+
Then { screen.spinner == 7.0 }
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'text controls' do
|
4
|
+
Given(:main_form) { start_app }
|
5
|
+
|
6
|
+
Then { main_form.text_field_view.class == Mohawk::Adapters::UIA::TextBox }
|
7
|
+
|
8
|
+
context '#text= / #text' do
|
9
|
+
context 'edit controls' do
|
10
|
+
When { main_form.text_field = 'text we set it to' }
|
11
|
+
Then { main_form.text_field == 'text we set it to' }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'multi-line text fields' do
|
15
|
+
When { main_form.multiline_text_field = 'multi-line text we set it to' }
|
16
|
+
Then { main_form.multiline_text_field == 'multi-line text we set it to' }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context '#clear_text' do
|
21
|
+
context 'edit controls' do
|
22
|
+
Given { main_form.text_field = 'text to be cleared' }
|
23
|
+
When { main_form.clear_text_field }
|
24
|
+
Then { main_form.text_field == '' }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'multi-line text fields' do
|
28
|
+
Given { main_form.multiline_text_field = 'multiline text to be cleared' }
|
29
|
+
When { main_form.clear_multiline_text_field }
|
30
|
+
Then { main_form.multiline_text_field == '' }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context '#enter_text' do
|
35
|
+
context 'masked edit controls' do
|
36
|
+
When { main_form.enter_masked_text_field 'abc12345willnotgoin6789' }
|
37
|
+
Then { main_form.masked_text_field == '123-45-6789' }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'tree views' do
|
4
|
+
Given(:main_screen) { start_app }
|
5
|
+
|
6
|
+
Then { main_screen.tree_view_view.class == Mohawk::Adapters::UIA::TreeView }
|
7
|
+
|
8
|
+
context '#tree_view=' do
|
9
|
+
context 'by index' do
|
10
|
+
When { main_screen.tree_view = 1 }
|
11
|
+
Then { main_screen.tree_view == 'Parent Two' }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'by value' do
|
15
|
+
When { main_screen.tree_view = 'Parent Two' }
|
16
|
+
Then { main_screen.tree_view == 'Parent Two' }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context '#tree_view_items' do
|
21
|
+
Then { main_screen.tree_view_items == ['Parent One', 'Parent Two'] }
|
22
|
+
end
|
23
|
+
|
24
|
+
context '#expand/collapse_tree_view' do
|
25
|
+
Given(:original_items) { ['Parent One', 'Parent Two'] }
|
26
|
+
Given(:expected_items) { ['Parent One', 'Child 1', 'Child 2', 'Parent Two'] }
|
27
|
+
|
28
|
+
context 'by index' do
|
29
|
+
When { main_screen.expand_tree_view_item 0 }
|
30
|
+
|
31
|
+
context 'expand' do
|
32
|
+
Then { main_screen.tree_view_items == expected_items}
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'collapse' do
|
36
|
+
When { main_screen.collapse_tree_view_item 0 }
|
37
|
+
Then { main_screen.tree_view_items == original_items }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'by value' do
|
42
|
+
When { main_screen.expand_tree_view_item 'Parent One' }
|
43
|
+
|
44
|
+
context 'expand' do
|
45
|
+
Then { main_screen.tree_view_items == expected_items}
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'collapse' do
|
49
|
+
When { main_screen.collapse_tree_view_item 'Parent One' }
|
50
|
+
Then { main_screen.tree_view_items == original_items}
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mohawk::Adapters::UIA::Window do
|
4
|
+
Given(:main_form) { start_app }
|
5
|
+
Given!(:not_created_form) { MainForm.new }
|
6
|
+
Given(:about) { main_form.about; on(About) }
|
7
|
+
|
8
|
+
context 'container' do
|
9
|
+
Given(:container) do
|
10
|
+
start_app
|
11
|
+
on(Class.new do
|
12
|
+
include Mohawk
|
13
|
+
window(title: /MainForm/)
|
14
|
+
parent(id: 'numericUpDown')
|
15
|
+
end)
|
16
|
+
end
|
17
|
+
|
18
|
+
Then { container.adapter.window.title == 'linkLabel1' }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'children_only' do
|
22
|
+
Given(:limit_scope) do
|
23
|
+
start_app.data_grid_view
|
24
|
+
on(Class.new do
|
25
|
+
include Mohawk
|
26
|
+
window(title: /DataGridViewForm/, children_only: true)
|
27
|
+
|
28
|
+
button(:close, :value => 'Close')
|
29
|
+
end)
|
30
|
+
end
|
31
|
+
|
32
|
+
When(:time_it_took) { Benchmark.measure { limit_scope.close } }
|
33
|
+
Then { time_it_took.real < 2 }
|
34
|
+
end
|
35
|
+
|
36
|
+
context '#active?' do
|
37
|
+
Then { not_created_form.active? == false }
|
38
|
+
Then { main_form.active? == true }
|
39
|
+
|
40
|
+
context 'inactive --> active' do
|
41
|
+
Given { about }
|
42
|
+
When { about.close; Mohawk::Waiter.wait_until { !about.present? } }
|
43
|
+
Then { not_created_form.active? == true }
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'active --> inactive' do
|
47
|
+
Given { expect(main_form).to be_active }
|
48
|
+
When { about }
|
49
|
+
Then { main_form.active? == false }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context '#present?' do
|
54
|
+
Then { about.present? == true }
|
55
|
+
|
56
|
+
context 'closing / opening' do
|
57
|
+
When { about.close }
|
58
|
+
Then { about.present? == false }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context '#exist?' do
|
63
|
+
Then { not_created_form.exist? == false }
|
64
|
+
|
65
|
+
context 'not there --> there' do
|
66
|
+
When { start_app }
|
67
|
+
Then { not_created_form.exist? == true }
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'there --> not there' do
|
71
|
+
Given { main_form }
|
72
|
+
When { main_form.close }
|
73
|
+
Then { main_form.exist? == false }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context '#has_text?' do
|
78
|
+
Then { expect(main_form).to have_text 'Assorted UI Elements' }
|
79
|
+
end
|
80
|
+
|
81
|
+
context '#wait_for_control' do
|
82
|
+
Then { main_form.wait_for_control value: 'Data Entry Form' }
|
83
|
+
end
|
84
|
+
end
|
data/spec/lib/mohawk_spec.rb
CHANGED
@@ -103,6 +103,31 @@ describe Mohawk do
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
106
|
+
context '#required_controls' do
|
107
|
+
Given { start_app; Mohawk.timeout = 1 }
|
108
|
+
Given(:has_controls) do
|
109
|
+
Class.new do
|
110
|
+
include Mohawk
|
111
|
+
window title: /MainForm/
|
112
|
+
required_controls :about, :data_grid_view
|
113
|
+
button(:about, value: 'About')
|
114
|
+
button(:data_grid_view, value: 'Data Grid View')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
Given(:missing_controls) do
|
118
|
+
Class.new do
|
119
|
+
include Mohawk
|
120
|
+
window title: /MainForm/
|
121
|
+
required_controls :something
|
122
|
+
|
123
|
+
button(:something, id: 'notThere')
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
Then { on(has_controls) != nil }
|
128
|
+
Then { expect { on(missing_controls) }.to raise_error /Control something was not found on the #<Class:0x.*> screen/ }
|
129
|
+
end
|
130
|
+
|
106
131
|
context Mohawk::Adapters do
|
107
132
|
Given(:screen) { TestScreen.new }
|
108
133
|
Given(:window) { double('window').as_null_object }
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class MainForm
|
2
|
+
include Mohawk
|
3
|
+
window title: /MainForm/
|
4
|
+
|
5
|
+
text(:text_field, id: 'textField')
|
6
|
+
text(:masked_text_field, :id => 'maskedTextBox')
|
7
|
+
text(:multiline_text_field, id: 'multiLineTextField')
|
8
|
+
|
9
|
+
button(:close, id: 'Close')
|
10
|
+
button(:about, id: 'aboutButton')
|
11
|
+
button(:data_entry_form, value: 'Data Entry Form')
|
12
|
+
button(:data_grid_view, value: 'Data Grid View')
|
13
|
+
button(:toggle_multi, value: 'Toggle Multi-Select')
|
14
|
+
|
15
|
+
checkbox(:checkbox, id: 'checkBox')
|
16
|
+
|
17
|
+
combo_box(:fruits, id: 'FruitsComboBox')
|
18
|
+
select_list(:fruits_list, id: 'FruitListBox')
|
19
|
+
|
20
|
+
tree_view(:tree_view, id: 'treeView')
|
21
|
+
|
22
|
+
label(:sample_label, id: 'label1')
|
23
|
+
label(:fruits_label, :id => 'fruitsLabel')
|
24
|
+
|
25
|
+
link(:link_label, id: 'linkLabel1')
|
26
|
+
|
27
|
+
menu_item(:menu_item_by_path, path: ['File', 'Roundabout Way', 'To', 'About'])
|
28
|
+
menu_item(:menu_item_by_text, text: 'About')
|
29
|
+
|
30
|
+
control(:month_calendar, id: 'automatableMonthCalendar1')
|
31
|
+
control(:about_control, id: 'aboutButton')
|
32
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,8 +4,26 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
4
4
|
require 'rspec'
|
5
5
|
require 'rspec/mocks'
|
6
6
|
require 'rspec-given'
|
7
|
-
require 'ffi_stub'
|
8
7
|
require 'mohawk'
|
9
8
|
require 'coveralls'
|
9
|
+
require 'benchmark'
|
10
|
+
|
11
|
+
require 'require_all'
|
12
|
+
require_rel 'screens'
|
10
13
|
|
11
14
|
Coveralls.wear!
|
15
|
+
|
16
|
+
include Mohawk::Navigation
|
17
|
+
|
18
|
+
def start_app
|
19
|
+
Mohawk.app_path = 'features/support/WindowsForms.exe'
|
20
|
+
Mohawk.start
|
21
|
+
on(MainForm)
|
22
|
+
end
|
23
|
+
|
24
|
+
RSpec.configure do |config|
|
25
|
+
config.after(:each) do
|
26
|
+
Mohawk.stop if Mohawk.app
|
27
|
+
Mohawk.timeout = 60
|
28
|
+
end
|
29
|
+
end
|
data/spec/tabs_spec.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'tabs' do
|
4
|
+
Given(:screen) { start_app.about; on(About) }
|
5
|
+
|
6
|
+
Then { screen.tab == 'Info' }
|
7
|
+
Then { screen.tab_items == ['Info', 'Other Info'] }
|
8
|
+
Then { screen.tab_view.class == Mohawk::Adapters::UIA::TabControl }
|
9
|
+
|
10
|
+
context '#select_tab' do
|
11
|
+
context 'by index' do
|
12
|
+
When { screen.tab = 1 }
|
13
|
+
Then { screen.tab == 'Other Info' }
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'by value' do
|
17
|
+
When { screen.tab = 'Other Info' }
|
18
|
+
When { screen.tab == 'Other Info' }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'by Regex' do
|
22
|
+
When { screen.tab = /[Oo]th/ }
|
23
|
+
Then { screen.tab == 'Other Info' }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|