melomel 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ v0.6.5
2
+ * Add advanced data grid open & close steps. (scho)
3
+
1
4
  v0.6.3
2
5
  * Change default host from 'localhost' to '127.0.0.1'. (scho)
3
6
 
@@ -3,27 +3,9 @@ When /^I select "([^"]*)" on the "([^"]*)" data grid$/ do |value, name|
3
3
  classes = Melomel::Flex.get_component_classes('data grid')
4
4
  grid = Melomel::Cucumber.find_labeled!(classes, name)
5
5
  grid.setFocus()
6
-
7
- # Retrieve data and take off header row
8
- data = Melomel::Cucumber.get_grid_data(grid)[1..-1]
9
-
10
- # Loop data and check for matches
11
- index = nil
12
- data.each_index do |i|
13
- row = data[i]
14
- row.each do |cell|
15
- if (cell != nil) && (cell.strip == value)
16
- index = i
17
- break
18
- end
19
- end
20
6
 
21
- break unless index.nil?
22
- end
23
-
24
- # If we couldn't find a matching cell then throw an error
25
- raise "Cannot find '#{value}' on data grid" if index.nil?
26
-
7
+ index = Melomel::Cucumber.find_grid_index_by_label(grid, value)
8
+
27
9
  grid.selectedIndex = index
28
10
  end
29
11
  end
@@ -35,23 +17,8 @@ Then /^I should see "([^"]*)" selected on the "([^"]*)" data grid$/ do |value, n
35
17
  grid = Melomel::Cucumber.find_labeled!(classes, name)
36
18
  grid.setFocus()
37
19
 
38
- # Retrieve data and take off header row
39
- data = Melomel::Cucumber.get_grid_data(grid)[1..-1]
40
-
41
- # Loop data and check for matches
42
- index = nil
43
- data.each_index do |i|
44
- row = data[i]
45
- row.each do |cell|
46
- if (cell != nil) && (cell.strip == value)
47
- index = i
48
- break
49
- end
50
- end
51
-
52
- break unless index.nil?
53
- end
54
-
20
+ index = Melomel::Cucumber.find_grid_index_by_label(grid, value)
21
+
55
22
  grid.selectedIndex.should == index
56
23
  end
57
24
  end
@@ -63,7 +30,7 @@ Then /^I should see the following data in the "([^"]*)" data grid:$/ do |name, t
63
30
  grid.setFocus()
64
31
 
65
32
  data = Melomel::Cucumber.get_grid_data(grid)
66
-
33
+
67
34
  table.diff!(data)
68
35
  end
69
36
  end
@@ -77,7 +44,20 @@ Then /^I should see no data in the "([^"]*)" data grid$/ do |name|
77
44
 
78
45
  # Retrieve data and take off header row
79
46
  data = Melomel::Cucumber.get_grid_data(grid)[1..-1]
80
-
47
+
81
48
  data.size.should == 0
82
49
  end
83
50
  end
51
+
52
+
53
+ When /^I (open|close) "([^"]*)" on the "([^"]*)" data grid$/ do |action, value, name|
54
+ Melomel::Cucumber.run! do
55
+ classes = Melomel::Flex.get_component_classes('data grid')
56
+ grid = Melomel::Cucumber.find_labeled!(classes, name)
57
+ grid.setFocus()
58
+
59
+ element = Melomel::Cucumber.find_grid_element_by_label(grid, value)
60
+
61
+ grid.expandItem(element,action == "open")
62
+ end
63
+ end
@@ -110,16 +110,91 @@ module Melomel
110
110
  #
111
111
  # Returns a 2D array of rows of columns of data.
112
112
  def self.get_grid_data(grid)
113
+ data_with_elements = get_grid_data_with_elements(grid)
114
+
115
+ # Remove data grid elements
116
+ data_with_elements.map{|row| row[1..-1]}
117
+ end
118
+
119
+ # Retrieves the first element of a grid, which matches the label
120
+ #
121
+ # label - The label that should be found in the grid
122
+ # grid - The grid which will be searched in
123
+ #
124
+ # Returns the matched element
125
+ def self.find_grid_element_by_label(grid, label)
126
+ data_with_elements = get_grid_data_with_elements(grid)
127
+
128
+ # Remove data grid elements and first row
129
+ data = data_with_elements.map{|row| row[1..-1]}[1..-1]
130
+
131
+ index = find_index_by_label(data, label)
132
+
133
+ data_with_elements[index + 1].first
134
+ end
135
+
136
+ # Retrieves the index of the first element of a grid, which matches the label
137
+ #
138
+ # label - The label that should be found in the grid
139
+ # grid - The grid which will be searched in
140
+ #
141
+ # Returns the matched elements index
142
+ def self.find_grid_index_by_label(grid, label)
143
+ data_with_elements = get_grid_data_with_elements(grid)
144
+
145
+ # Remove data grid elements and first row
146
+ data = data_with_elements.map{|row| row[1..-1]}[1..-1]
147
+
148
+ index = find_index_by_label(data, label)
149
+ index
150
+ end
151
+
152
+ # Retrieves grid data as a 2D array of rows of columns. The first row
153
+ # contains the grid's header. The first column contains the grids elements.
154
+ #
155
+ # grid - The grid to generate the table from.
156
+ #
157
+ # Returns a 2D array of rows of columns of data.
158
+ def self.get_grid_data_with_elements(grid)
113
159
  # Retrieve as columns of rows
114
160
  data = []
161
+ group_labels = []
162
+
163
+ # Add the empty cell in the upper left corner
164
+ data << [nil]
165
+
166
+ # Retrieve data with cursor and group labels
167
+ i = 0
168
+ elements = get_grid_elements(grid)
169
+ elements.each do |element|
170
+ data[0] << element
171
+ if !element.GroupLabel.nil? && element.GroupLabel != ""
172
+ group_labels[i] = element.GroupLabel
173
+ end
174
+ i += 1
175
+ end
176
+
115
177
  grid.columns.length.times do |i|
116
178
  column_data = []
117
179
  column = grid.columns[i]
118
- labels = Melomel.items_to_labels!(column, grid.dataProvider)
180
+ labels = Melomel.items_to_labels!(column, elements)
119
181
 
120
182
  # Add column header
121
183
  column_data << column.headerText
122
184
 
185
+ # Set group labels
186
+ # either in first column or, if treeColumn is set in the corresponding column
187
+ # Comparision between the current column and the treeColumn is still a bit vague,
188
+ # but column == grid.treeColumn is always false, because these are two different objects
189
+ if (grid.treeColumn == nil && i == 0) ||
190
+ (grid.treeColumn != nil && column.headerText == grid.treeColumn.headerText)
191
+ group_labels.length.times do |j|
192
+ if !group_labels[j].nil?
193
+ labels[j] = group_labels[j]
194
+ end
195
+ end
196
+ end
197
+
123
198
  # Add label data
124
199
  labels.length.times do |j|
125
200
  column_data << labels[j]
@@ -133,9 +208,49 @@ module Melomel
133
208
  data = data.transpose()
134
209
 
135
210
  # Trim whitespace from each cell
136
- data.each {|row| row.each {|cell| cell.strip! unless cell.nil?}}
211
+ data.each {|row| row.each {|cell| cell.strip! unless cell.nil? || !cell.is_a?(String)}}
137
212
 
138
213
  return data
139
214
  end
215
+
216
+ # Searches for a label in 2D grid data
217
+ #
218
+ # label - The label that should be found in the data
219
+ # data - The data which will be searched in
220
+ #
221
+ # Returns an array of all the elements
222
+ def self.find_index_by_label(data, label)
223
+ index = nil
224
+ data.each_index do |i|
225
+ row = data[i]
226
+ row.each do |cell|
227
+ if (cell != nil) && (cell.strip == label)
228
+ index = i
229
+ break
230
+ end
231
+ end
232
+ break unless index.nil?
233
+ end
234
+ raise "Cannot find '#{value}' on data grid" if index.nil?
235
+ index
236
+ end
237
+
238
+
239
+ # Retrieves all elements of a grid through a cursor
240
+ #
241
+ # grid - The grid to retrieve the objects from
242
+ #
243
+ # Returns an array of all the elements
244
+ def self.get_grid_elements(grid)
245
+ elements = []
246
+ unless grid.dataProvider.nil?
247
+ cursor = grid.dataProvider.createCursor()
248
+ while !cursor.afterLast do
249
+ elements.push cursor.current
250
+ break if !cursor.moveNext()
251
+ end
252
+ end
253
+ elements
254
+ end
140
255
  end
141
256
  end
@@ -1,3 +1,3 @@
1
1
  module Melomel
2
- VERSION = "0.6.4"
2
+ VERSION = "0.6.5"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: melomel
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.6.4
5
+ version: 0.6.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ben Johnson
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-11 00:00:00 Z
13
+ date: 2011-08-29 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -67,6 +67,17 @@ dependencies:
67
67
  version: 0.10.0
68
68
  type: :development
69
69
  version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ prerelease: false
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 2.6.0
79
+ type: :development
80
+ version_requirements: *id006
70
81
  description:
71
82
  email:
72
83
  - benbjohnson@yahoo.com