mohawk 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog +6 -0
- data/features/combo_box.feature +32 -15
- data/features/step_definitions/combo_box_steps.rb +20 -4
- data/features/step_definitions/table_steps.rb +30 -4
- data/features/support/WindowsForms.exe +0 -0
- data/features/support/screens/main_screen.rb +4 -0
- data/features/table.feature +19 -1
- data/lib/mohawk/accessors/combo.rb +18 -5
- data/lib/mohawk/accessors/table.rb +21 -13
- data/lib/mohawk/accessors/table_row.rb +8 -2
- data/lib/mohawk/accessors/tree_view.rb +2 -2
- data/lib/mohawk/accessors.rb +15 -3
- data/lib/mohawk/version.rb +1 -1
- data/mohawk.gemspec +1 -1
- data/spec/lib/mohawk/accessors/combo_spec.rb +36 -2
- data/spec/lib/mohawk/accessors/table_spec.rb +86 -29
- data/spec/lib/mohawk/accessors/tree_view_spec.rb +9 -2
- data/spec/spec_helper.rb +1 -0
- metadata +6 -6
data/Changelog
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
=== Version 0.1.0 / 2013-10-03
|
2
|
+
* Enhancments
|
3
|
+
* added multi-select support to tables and select lists
|
4
|
+
* bumped RAutomation dependency to include fixes for selecting
|
5
|
+
ListBox items when they are out of view
|
6
|
+
|
1
7
|
=== Version 0.0.9 / 2013-09-12
|
2
8
|
* Fixes
|
3
9
|
* loosened the gemspec restrictions on RAutomation
|
data/features/combo_box.feature
CHANGED
@@ -1,19 +1,36 @@
|
|
1
1
|
Feature: Working with combo boxes
|
2
2
|
|
3
|
-
Scenario: Selecting items by index
|
4
|
-
|
5
|
-
|
3
|
+
Scenario: Selecting items by index
|
4
|
+
When I select index "2" from the "fruits" combo box
|
5
|
+
Then the "Coconut" option should be selected in the "fruits" combo box
|
6
6
|
|
7
|
-
Scenario: Selecting items by value
|
8
|
-
|
9
|
-
|
7
|
+
Scenario: Selecting items by value
|
8
|
+
When I select the value "Orange" from the "fruits" combo box
|
9
|
+
Then the "Orange" option should be selected in the "fruits" combo box
|
10
10
|
|
11
|
-
Scenario:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
Scenario: Selecting multiple items
|
12
|
+
Given we toggle the multi-select button
|
13
|
+
When I select indexes "0, 1, 2" from the "fruits_list" combo box
|
14
|
+
Then the "Apple, Orange, Mango" options should be selected in the "fruits_list" combo box
|
15
|
+
|
16
|
+
Scenario: Clearing items by index
|
17
|
+
Given we toggle the multi-select button
|
18
|
+
When I select indexes "0, 1, 2" from the "fruits_list" combo box
|
19
|
+
But I clear the item at index "1" from the "fruits_list" combo box
|
20
|
+
Then the "Apple, Mango" options should be selected in the "fruits_list" combo box
|
21
|
+
|
22
|
+
Scenario: Clearing items by value
|
23
|
+
Given we toggle the multi-select button
|
24
|
+
When I select indexes "0, 1, 2" from the "fruits_list" combo box
|
25
|
+
But I clear item "Mango" from the "fruits_list" combo box
|
26
|
+
Then the "Apple, Orange" options should be selected in the "fruits_list" combo box
|
27
|
+
|
28
|
+
Scenario: Getting the available options
|
29
|
+
When I look at the options for the "fruits" combo box"
|
30
|
+
Then I should see the following options:
|
31
|
+
| Option |
|
32
|
+
| Apple |
|
33
|
+
| Caimito |
|
34
|
+
| Coconut |
|
35
|
+
| Orange |
|
36
|
+
| Passion Fruit |
|
@@ -1,13 +1,25 @@
|
|
1
|
-
When /^I select index "(.*?)" from the "(.*?)" combo box$/ do |
|
2
|
-
on(MainScreen)
|
1
|
+
When /^I select index(es)? "(.*?)" from the "(.*?)" combo box$/ do |_, indexes, name|
|
2
|
+
on(MainScreen) do |screen|
|
3
|
+
indexes.split(', ').map(&:to_i).each do |index|
|
4
|
+
screen.send "select_#{name.to_field}", index
|
5
|
+
end
|
6
|
+
end
|
3
7
|
end
|
4
8
|
|
5
9
|
When /^I select the value "(.*?)" from the "(.*?)" combo box$/ do |index, name|
|
6
10
|
on(MainScreen).send "#{name.to_field}=", index
|
7
11
|
end
|
8
12
|
|
9
|
-
|
10
|
-
on(MainScreen).send("#{name.to_field}"
|
13
|
+
When(/^I clear the item at index "([^"]*)" from the "([^"]*)" combo box$/) do |which, name|
|
14
|
+
on(MainScreen).send("clear_#{name.to_field}", which.to_i)
|
15
|
+
end
|
16
|
+
|
17
|
+
When(/^I clear item "([^"]*)" from the "([^"]*)" combo box$/) do |which, name|
|
18
|
+
on(MainScreen).send("clear_#{name.to_field}", which)
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^the "(.*?)" option(s)? should be selected in the "(.*?)" combo box$/ do |value, has_multiple, name|
|
22
|
+
on(MainScreen).send("#{name.to_field}_selections").should eq(value.split(', '))
|
11
23
|
end
|
12
24
|
|
13
25
|
When /^I look at the options for the "(.*?)" combo box"$/ do |name|
|
@@ -18,3 +30,7 @@ Then /^I should see the following options:$/ do |table|
|
|
18
30
|
expected_options = table.hashes.map {|row| row["Option"] }
|
19
31
|
@options.should eq(expected_options)
|
20
32
|
end
|
33
|
+
|
34
|
+
Given(/^we toggle the multi-select button$/) do
|
35
|
+
on(MainScreen).toggle_multi
|
36
|
+
end
|
@@ -17,8 +17,33 @@ When /^we select the table row with the value "([^"]*)"$/ do |row_value|
|
|
17
17
|
on(DataEntryForm).people = row_value
|
18
18
|
end
|
19
19
|
|
20
|
-
When(/^we
|
21
|
-
on(DataEntryForm)
|
20
|
+
When(/^we add rows "([^"]*)" to the selection$/) do |which_rows|
|
21
|
+
on(DataEntryForm) do |screen|
|
22
|
+
which_rows.split(', ').map(&:to_i).each do |row|
|
23
|
+
screen.people = row
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
When(/^we clear rows "([^"]*)" from the selection$/) do |which_rows|
|
29
|
+
on(DataEntryForm) do |screen|
|
30
|
+
which_rows.split(', ').map(&:to_i).each do |row|
|
31
|
+
screen.clear_people(row)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Then(/^rows "([^"]*)" should all (not )?be selected$/) do |which_rows, to_not_be|
|
37
|
+
should_or_should_not = (to_not_be && :should_not) || :should
|
38
|
+
on(DataEntryForm) do |screen|
|
39
|
+
which_rows.split(', ').map(&:to_i).each do |row|
|
40
|
+
screen.people[row].send(should_or_should_not, be_selected)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
When(/^we (select|clear) the table row with the following information:$/) do |select_or_clear, table|
|
46
|
+
on(DataEntryForm).send("#{select_or_clear}_people", table.hashes.first)
|
22
47
|
end
|
23
48
|
|
24
49
|
Then(/^we can find the row with the following information:$/) do |table|
|
@@ -33,8 +58,9 @@ When /^we select the "(.*?)"th table row$/ do |index|
|
|
33
58
|
on(DataEntryForm).people[index.to_i].select
|
34
59
|
end
|
35
60
|
|
36
|
-
Then /^the row with index "(.*?)" should be selected$/ do |which_row|
|
37
|
-
|
61
|
+
Then /^the row with index "(.*?)" should (not )?be selected$/ do |which_row, to_not_be|
|
62
|
+
should_or_should_not = (to_not_be && :should_not) || :should
|
63
|
+
on(DataEntryForm).people[which_row.to_i].send(should_or_should_not, be_selected)
|
38
64
|
end
|
39
65
|
|
40
66
|
Then /^the row with index "(.*?)" should look like the following:$/ do |which_row, table|
|
Binary file
|
@@ -8,7 +8,11 @@ class MainScreen
|
|
8
8
|
button(:about, :value => "About")
|
9
9
|
control(:about_control, :value => 'About')
|
10
10
|
button(:data_grid, :value => "Data Grid View")
|
11
|
+
|
12
|
+
button(:toggle_multi, :value => 'Toggle Multi-Select')
|
11
13
|
combo_box(:fruits, :id => "FruitsComboBox")
|
14
|
+
select_list(:fruits_list, :id => 'FruitListBox')
|
15
|
+
|
12
16
|
checkbox(:first_checkbox, :id => "checkBox")
|
13
17
|
radio(:first_radio, :id => "radioButton1")
|
14
18
|
label(:label_control, :id => "label1")
|
data/features/table.feature
CHANGED
@@ -22,11 +22,29 @@ Feature: Working with tables
|
|
22
22
|
| name | date_of_birth | state |
|
23
23
|
| John Doe | 12/15/1967 | FL |
|
24
24
|
|
25
|
-
|
26
25
|
Scenario: Selecting a row from a child item
|
27
26
|
When we select the "1"th table row
|
28
27
|
Then the row with index "1" should be selected
|
29
28
|
|
29
|
+
Scenario: Adding rows to the selection
|
30
|
+
Given there are a lot of records in a table
|
31
|
+
When we add rows "1, 3, 5" to the selection
|
32
|
+
Then rows "1, 3, 5" should all be selected
|
33
|
+
|
34
|
+
Scenario: Clearing rows from a selection
|
35
|
+
Given there are a lot of records in a table
|
36
|
+
When we add rows "2, 3, 4, 5" to the selection
|
37
|
+
But we clear rows "2, 4" from the selection
|
38
|
+
Then rows "3, 5" should all be selected
|
39
|
+
And rows "2, 4" should all not be selected
|
40
|
+
|
41
|
+
Scenario: Clearing a row by matching cell information
|
42
|
+
Given we add rows "0, 1" to the selection
|
43
|
+
When we clear the table row with the following information:
|
44
|
+
| name | date_of_birth |
|
45
|
+
| Anna Doe | 3/4/1975 |
|
46
|
+
Then the row with index "1" should not be selected
|
47
|
+
|
30
48
|
Scenario: Rows have cells
|
31
49
|
Then the row with index "0" should look like the following:
|
32
50
|
| Name | Date of Birth | State |
|
@@ -7,18 +7,31 @@ module Mohawk
|
|
7
7
|
@view = adapter.window.select_list(locator)
|
8
8
|
end
|
9
9
|
|
10
|
-
def value
|
11
|
-
|
10
|
+
def set(value)
|
11
|
+
find(value).select
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
14
|
+
def clear(value)
|
15
|
+
find(value).clear
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_missing(meth, *args, &block)
|
19
|
+
return super unless @view.respond_to?(meth)
|
20
|
+
@view.send(meth, *args, &block)
|
17
21
|
end
|
18
22
|
|
19
23
|
def options
|
20
24
|
@view.options.map &:text
|
21
25
|
end
|
26
|
+
|
27
|
+
def find(what)
|
28
|
+
case what
|
29
|
+
when Fixnum
|
30
|
+
@view.options[what]
|
31
|
+
when String
|
32
|
+
@view.option(text: what)
|
33
|
+
end
|
34
|
+
end
|
22
35
|
end
|
23
36
|
end
|
24
37
|
end
|
@@ -10,16 +10,22 @@ module Mohawk
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def select(which_item)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
13
|
+
find_row_with(which_item).select
|
14
|
+
end
|
15
|
+
|
16
|
+
def clear(which_item)
|
17
|
+
find_row_with(which_item).clear
|
19
18
|
end
|
20
19
|
|
21
20
|
def find_row_with(row_info)
|
22
|
-
found_row =
|
21
|
+
found_row = case row_info
|
22
|
+
when Hash
|
23
|
+
find_by_hash(row_info)
|
24
|
+
when Fixnum
|
25
|
+
find_by_index(row_info)
|
26
|
+
when String
|
27
|
+
find_by_value(row_info)
|
28
|
+
end
|
23
29
|
raise "A row with #{row_info} was not found" unless found_row
|
24
30
|
found_row
|
25
31
|
end
|
@@ -39,14 +45,16 @@ module Mohawk
|
|
39
45
|
end
|
40
46
|
|
41
47
|
private
|
42
|
-
def
|
43
|
-
|
48
|
+
def find_by_index(which_item)
|
49
|
+
self[which_item]
|
44
50
|
end
|
45
51
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
49
|
-
|
52
|
+
def find_by_value(which_item)
|
53
|
+
view.row(text: which_item)
|
54
|
+
end
|
55
|
+
|
56
|
+
def find_by_hash(row_info)
|
57
|
+
find { |r| r.all_match? row_info }
|
50
58
|
end
|
51
59
|
end
|
52
60
|
end
|
@@ -11,11 +11,17 @@ module Mohawk
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def selected?
|
14
|
-
|
14
|
+
row.selected?
|
15
15
|
end
|
16
16
|
|
17
17
|
def select
|
18
|
-
|
18
|
+
row.select
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def clear
|
23
|
+
row.clear
|
24
|
+
self
|
19
25
|
end
|
20
26
|
|
21
27
|
def cells
|
@@ -24,8 +24,8 @@ module Mohawk
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def select(which_item)
|
27
|
-
@view.select
|
28
|
-
@view.
|
27
|
+
@view.options[which_item].select if which_item.is_a? Integer
|
28
|
+
@view.option(text: which_item).select if which_item.is_a? String
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
data/lib/mohawk/accessors.rb
CHANGED
@@ -89,7 +89,7 @@ module Mohawk
|
|
89
89
|
#
|
90
90
|
# @example
|
91
91
|
# combo_box(:status, :id => 'statusComboBox')
|
92
|
-
# # will generate 'status', 'status=' and 'status_options' methods
|
92
|
+
# # will generate 'status', 'status_selections', 'status=', 'select_status','clear_status' and 'status_options' methods
|
93
93
|
#
|
94
94
|
# @param [String] the name used for the generated methods
|
95
95
|
# @param [Hash] locator for how the combo box is found
|
@@ -103,9 +103,18 @@ module Mohawk
|
|
103
103
|
define_method("#{name}") do
|
104
104
|
adapter.combo(locator).value
|
105
105
|
end
|
106
|
+
define_method("clear_#{name}") do |item|
|
107
|
+
adapter.combo(locator).clear item
|
108
|
+
end
|
109
|
+
define_method("#{name}_selections") do
|
110
|
+
adapter.combo(locator).values
|
111
|
+
end
|
112
|
+
|
106
113
|
define_method("#{name}=") do |item|
|
107
114
|
adapter.combo(locator).set item
|
108
115
|
end
|
116
|
+
alias_method "select_#{name}", "#{name}="
|
117
|
+
|
109
118
|
define_method("#{name}_options") do
|
110
119
|
adapter.combo(locator).options
|
111
120
|
end
|
@@ -223,9 +232,9 @@ module Mohawk
|
|
223
232
|
#
|
224
233
|
# @example
|
225
234
|
# table(:some_table, :id => "tableId")
|
226
|
-
# # will generate 'some_table', 'some_table=', 'some_table_headers', 'select_some_table',
|
235
|
+
# # will generate 'some_table', 'some_table=', 'some_table_headers', 'select_some_table', 'clear_some_table',
|
227
236
|
# # find_some_table and 'some_table_view' methods to get an Enumerable of table rows,
|
228
|
-
# # select a table item, return all of the headers and get the raw view
|
237
|
+
# # select a table item, clear a table item, return all of the headers and get the raw view
|
229
238
|
#
|
230
239
|
# @param [String] the name used for the generated methods
|
231
240
|
# @param [Hash] locator for how the label is found
|
@@ -247,6 +256,9 @@ module Mohawk
|
|
247
256
|
define_method("find_#{name}") do |hash_info|
|
248
257
|
adapter.table(locator).find_row_with hash_info
|
249
258
|
end
|
259
|
+
define_method("clear_#{name}") do |hash_info|
|
260
|
+
adapter.table(locator).clear hash_info
|
261
|
+
end
|
250
262
|
define_method("#{name}_headers") do
|
251
263
|
adapter.table(locator).headers
|
252
264
|
end
|
data/lib/mohawk/version.rb
CHANGED
data/mohawk.gemspec
CHANGED
@@ -18,7 +18,7 @@ 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 'rautomation', '
|
21
|
+
gem.add_dependency 'rautomation', '~> 0.13'
|
22
22
|
gem.add_dependency 'require_all'
|
23
23
|
gem.add_dependency 'page_navigation', '>= 0.7'
|
24
24
|
gem.add_dependency 'childprocess', '~> 0.3.9'
|
@@ -26,9 +26,11 @@ describe Mohawk::Accessors::Combo do
|
|
26
26
|
let(:screen) { ComboBoxScreen.new }
|
27
27
|
let(:window) { double("RAutomation Window") }
|
28
28
|
let(:combo_box_field) { double("ComboBox Field") }
|
29
|
+
let(:options) { double("ComboBox::Options").as_null_object }
|
29
30
|
|
30
31
|
before(:each) do
|
31
32
|
RAutomation::Window.stub(:new).and_return(window)
|
33
|
+
combo_box_field.stub(:options).and_return(options)
|
32
34
|
end
|
33
35
|
|
34
36
|
context "accessing combo box controls" do
|
@@ -42,16 +44,48 @@ describe Mohawk::Accessors::Combo do
|
|
42
44
|
screen.nacho_combos.should eq("Selected Item")
|
43
45
|
end
|
44
46
|
|
47
|
+
it 'knows the currently selected items' do
|
48
|
+
combo_box_field.should_receive(:values).and_return(['first', 'second'])
|
49
|
+
screen.nacho_combos_selections.should eq(['first', 'second'])
|
50
|
+
end
|
51
|
+
|
45
52
|
it "selects items by index" do
|
46
|
-
|
53
|
+
options.should_receive(:[]).with(3).and_return(double.as_null_object)
|
47
54
|
screen.nacho_combos = 3
|
48
55
|
end
|
49
56
|
|
50
57
|
it "selects items by value" do
|
51
|
-
|
58
|
+
option = double('combo option')
|
59
|
+
combo_box_field.should_receive(:option).with(text: "Desired Value").and_return(option)
|
60
|
+
option.should_receive(:select)
|
61
|
+
|
52
62
|
screen.nacho_combos = "Desired Value"
|
53
63
|
end
|
54
64
|
|
65
|
+
it 'select is an alias for equals' do
|
66
|
+
option = double('combo option')
|
67
|
+
combo_box_field.should_receive(:option).with(text: 'Desired Value').and_return(option)
|
68
|
+
option.should_receive(:select)
|
69
|
+
|
70
|
+
screen.select_nacho_combos 'Desired Value'
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'clears items by index' do
|
74
|
+
option = double('combo option')
|
75
|
+
options.should_receive(:[]).with(3).and_return(option)
|
76
|
+
option.should_receive(:clear)
|
77
|
+
|
78
|
+
screen.clear_nacho_combos 3
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'clears items by value' do
|
82
|
+
option = double('combo option')
|
83
|
+
combo_box_field.should_receive(:option).with(text: 'Desired Value').and_return(option)
|
84
|
+
option.should_receive(:clear)
|
85
|
+
|
86
|
+
screen.clear_nacho_combos 'Desired Value'
|
87
|
+
end
|
88
|
+
|
55
89
|
it "is aware of the available options" do
|
56
90
|
options = [Option.new("first"), Option.new("second"), Option.new("third")]
|
57
91
|
combo_box_field.should_receive(:options).and_return(options)
|
@@ -29,64 +29,120 @@ describe Mohawk::Accessors::Table do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'can select a row by index' do
|
32
|
-
|
32
|
+
stubber = TableStubber.stub(table)
|
33
|
+
.with_headers('Name')
|
34
|
+
.and_row('First Person')
|
35
|
+
.and_row('Secont Person')
|
36
|
+
|
37
|
+
stubber.rows[1].should_receive(:select)
|
33
38
|
screen.top = 1
|
34
39
|
end
|
35
40
|
|
36
41
|
it 'can select a row by value' do
|
37
|
-
|
42
|
+
row = double('row')
|
43
|
+
table.should_receive(:row).with(text: 'John Elway').and_return(row)
|
44
|
+
row.should_receive(:select)
|
45
|
+
|
38
46
|
screen.top = 'John Elway'
|
39
47
|
end
|
40
48
|
|
41
|
-
it 'can
|
42
|
-
TableStubber.stub(table)
|
49
|
+
it 'can clear a row by index' do
|
50
|
+
stubber = TableStubber.stub(table)
|
51
|
+
.with_headers('Name').and_row('Whomever')
|
52
|
+
|
53
|
+
stubber.rows[0].should_receive(:clear)
|
54
|
+
screen.clear_top(0)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'can clear a row by value' do
|
58
|
+
row = double('row')
|
59
|
+
table.should_receive(:row).with(text: 'John Elway').and_return(row)
|
60
|
+
row.should_receive(:clear)
|
61
|
+
|
62
|
+
screen.clear_top('John Elway')
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'finding rows by Hash' do
|
66
|
+
it 'can find a row by hash' do
|
67
|
+
TableStubber.stub(table)
|
43
68
|
.with_headers('Favorite Color', 'Favorite Number', 'Name')
|
44
69
|
.and_row('Blue', '7', 'Levi')
|
45
70
|
.and_row('Purple', '9', 'Larry')
|
46
71
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
72
|
+
found_row = screen.find_top :favorite_number => 9
|
73
|
+
found_row.favorite_color.should eq('Purple')
|
74
|
+
found_row.favorite_number.should eq('9')
|
75
|
+
found_row.name.should eq('Larry')
|
76
|
+
end
|
52
77
|
|
53
|
-
|
54
|
-
|
78
|
+
it 'matches all values' do
|
79
|
+
stubber = TableStubber.stub(table)
|
80
|
+
.with_headers('Column One', 'Column Two', 'Column Three')
|
81
|
+
.and_row('first', 'something', 'foo')
|
82
|
+
.and_row('second', 'another', 'bar')
|
83
|
+
|
84
|
+
screen.find_top(:column_one => 'second', :column_three => 'bar').row.should eq(stubber.rows[1])
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'can handle non-string values' do
|
88
|
+
stubber = TableStubber.stub(table)
|
89
|
+
.with_headers('name', 'age')
|
90
|
+
.and_row('Levi', '33')
|
91
|
+
|
92
|
+
screen.find_top(:age => 33).row.should eq(stubber.rows.first)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'raises if no row is found' do
|
55
96
|
TableStubber.stub(table)
|
56
|
-
|
57
|
-
|
58
|
-
.and_row('second', 'another', 'bar')
|
97
|
+
.with_headers('Column One', 'Column Two', 'Column Three')
|
98
|
+
.and_row('first', 'something', 'foo')
|
59
99
|
|
60
|
-
|
61
|
-
screen.select_top :column_one => 'second', :column_three => 'bar'
|
100
|
+
expect { screen.find_top :column_one => 'not found' }.to raise_error "A row with {:column_one=>\"not found\"} was not found"
|
62
101
|
end
|
102
|
+
end
|
63
103
|
|
104
|
+
context 'selecting a row by hash' do
|
64
105
|
it 'returns the row that it selected' do
|
65
|
-
TableStubber.stub(table)
|
106
|
+
stubber = TableStubber.stub(table)
|
66
107
|
.with_headers('name', 'age')
|
67
108
|
.and_row('Levi', '33')
|
68
109
|
|
69
|
-
|
110
|
+
stubber.rows[0].should_receive(:select)
|
70
111
|
screen.select_top(:age => 33).name.should eq('Levi')
|
71
112
|
end
|
72
113
|
|
73
|
-
it '
|
74
|
-
TableStubber.stub(table)
|
114
|
+
it 'uses the find_row semantics' do
|
115
|
+
stubber = TableStubber.stub(table)
|
75
116
|
.with_headers('name', 'age')
|
76
117
|
.and_row('Levi', '33')
|
77
118
|
|
78
|
-
|
119
|
+
Mohawk::Accessors::Table.any_instance.should_receive(:find_row_with).with(:age => 33).and_call_original
|
120
|
+
|
121
|
+
stubber.rows[0].should_receive(:select)
|
79
122
|
screen.select_top :age => 33
|
80
123
|
end
|
124
|
+
end
|
81
125
|
|
82
|
-
|
83
|
-
|
84
|
-
.
|
85
|
-
.
|
126
|
+
context 'clearing a row by hash' do
|
127
|
+
it 'returns the row that it cleared' do
|
128
|
+
stubber = TableStubber.stub(table)
|
129
|
+
.with_headers('name', 'age')
|
130
|
+
.and_row('Levi', '33')
|
86
131
|
|
87
|
-
|
132
|
+
stubber.rows[0].should_receive(:clear)
|
133
|
+
screen.clear_top(:age => 33).name.should eq('Levi')
|
88
134
|
end
|
89
135
|
|
136
|
+
it 'uses the find_row semantics' do
|
137
|
+
stubber = TableStubber.stub(table)
|
138
|
+
.with_headers('name', 'age')
|
139
|
+
.and_row('Levi', '33')
|
140
|
+
|
141
|
+
Mohawk::Accessors::Table.any_instance.should_receive(:find_row_with).with(:age => 33).and_call_original
|
142
|
+
|
143
|
+
stubber.rows[0].should_receive(:clear)
|
144
|
+
screen.clear_top :age => 33
|
145
|
+
end
|
90
146
|
end
|
91
147
|
|
92
148
|
it 'has rows' do
|
@@ -108,8 +164,9 @@ describe Mohawk::Accessors::Table do
|
|
108
164
|
end
|
109
165
|
|
110
166
|
describe Mohawk::Accessors::TableRow do
|
167
|
+
let(:table_stubber) { TableStubber.stub(table) }
|
111
168
|
before(:each) do
|
112
|
-
|
169
|
+
table_stubber.with_headers('column').and_row('first row')
|
113
170
|
end
|
114
171
|
|
115
172
|
it 'can get an individual row' do
|
@@ -117,12 +174,12 @@ describe Mohawk::Accessors::Table do
|
|
117
174
|
end
|
118
175
|
|
119
176
|
it 'knows if it is selected' do
|
120
|
-
|
177
|
+
table_stubber.rows[0].should_receive(:selected?).and_return(true)
|
121
178
|
screen.top[0].should be_selected
|
122
179
|
end
|
123
180
|
|
124
181
|
it 'can be selected' do
|
125
|
-
|
182
|
+
table_stubber.rows[0].should_receive(:select)
|
126
183
|
screen.top[0].select
|
127
184
|
end
|
128
185
|
|
@@ -24,9 +24,12 @@ describe Mohawk::Accessors::TreeView do
|
|
24
24
|
let(:screen) { TreeViewScreen.new }
|
25
25
|
let(:window) { double("RAutomation Window") }
|
26
26
|
let(:tree_field) { double("TreeView Field") }
|
27
|
+
let(:options) { double("TreeView Options") }
|
28
|
+
let(:option) { double("TreeView Option") }
|
27
29
|
|
28
30
|
before(:each) do
|
29
31
|
RAutomation::Window.stub(:new).and_return(window)
|
32
|
+
tree_field.stub(:options).and_return(options)
|
30
33
|
end
|
31
34
|
|
32
35
|
context "working with TreeView controls" do
|
@@ -40,12 +43,16 @@ describe Mohawk::Accessors::TreeView do
|
|
40
43
|
end
|
41
44
|
|
42
45
|
it "can select items by index" do
|
43
|
-
|
46
|
+
options.should_receive(:[]).with(7).and_return(option)
|
47
|
+
option.should_receive(:select)
|
48
|
+
|
44
49
|
screen.oak = 7
|
45
50
|
end
|
46
51
|
|
47
52
|
it "can select items by their value" do
|
48
|
-
tree_field.should_receive(:
|
53
|
+
tree_field.should_receive(:option).with(text: 'item value').and_return(option)
|
54
|
+
option.should_receive(:select)
|
55
|
+
|
49
56
|
screen.oak = "item value"
|
50
57
|
end
|
51
58
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mohawk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,24 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rautomation
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
21
|
+
version: '0.13'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: '0.13'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: require_all
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|