mohawk 0.0.9 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|