gxt-widgets 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +21 -0
- data/.travis.yml +8 -0
- data/Gemfile +11 -0
- data/Rakefile +33 -0
- data/cucumber.yml +12 -0
- data/features/gxt_grid.feature +87 -0
- data/features/gxt_grid_with_grouping.feature +48 -0
- data/features/gxt_pager.feature +37 -0
- data/features/step_definitions/common_steps.rb +11 -0
- data/features/step_definitions/gxt_grid_steps.rb +131 -0
- data/features/step_definitions/gxt_grid_with_grouping_steps.rb +8 -0
- data/features/step_definitions/gxt_pager_steps.rb +32 -0
- data/features/support/env.rb +8 -0
- data/features/support/hooks.rb +7 -0
- data/features/support/pages/basic_grid_example.rb +9 -0
- data/features/support/pages/grouping_grid_example.rb +5 -0
- data/features/support/pages/gxt_examples_page.rb +9 -0
- data/features/support/pages/local_pagination_example.rb +6 -0
- data/features/support/persistent_browser.rb +20 -0
- data/gxt-widget.gemspec +31 -0
- data/lib/gxt-widgets.rb +15 -0
- data/lib/gxt-widgets/gxt_column_menu.rb +11 -0
- data/lib/gxt-widgets/gxt_column_selection_menu.rb +7 -0
- data/lib/gxt-widgets/gxt_grid.rb +34 -0
- data/lib/gxt-widgets/gxt_grid_header_row.rb +23 -0
- data/lib/gxt-widgets/gxt_grid_row.rb +31 -0
- data/lib/gxt-widgets/gxt_header_cell.rb +15 -0
- data/lib/gxt-widgets/gxt_pager.rb +36 -0
- data/lib/gxt-widgets/modules/selectable_column.rb +13 -0
- data/lib/gxt-widgets/modules/sortable_column.rb +12 -0
- data/lib/gxt-widgets/platforms/selenium_webdriver/gxt_grid.rb +25 -0
- data/lib/gxt-widgets/platforms/selenium_webdriver/gxt_grid_header_row.rb +23 -0
- data/lib/gxt-widgets/platforms/selenium_webdriver/gxt_grid_row.rb +15 -0
- data/lib/gxt-widgets/platforms/watir_webdriver/gxt_grid.rb +35 -0
- data/lib/gxt-widgets/platforms/watir_webdriver/gxt_grid_header_row.rb +22 -0
- data/lib/gxt-widgets/platforms/watir_webdriver/gxt_grid_row.rb +17 -0
- data/lib/gxt-widgets/version.rb +4 -0
- data/readme.md +15 -0
- data/spec/gxt-widgets/gxt_grid_row_spec.rb +67 -0
- data/spec/gxt-widgets/gxt_grid_spec.rb +96 -0
- metadata +223 -0
data/.gitignore
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Gemfile.lock
|
2
|
+
|
3
|
+
.idea/.name
|
4
|
+
|
5
|
+
.idea/.rakeTasks
|
6
|
+
|
7
|
+
*.iml
|
8
|
+
|
9
|
+
.idea/dictionaries/williamjpowell.xml
|
10
|
+
|
11
|
+
.idea/encodings.xml
|
12
|
+
|
13
|
+
.idea/misc.xml
|
14
|
+
|
15
|
+
.idea/modules.xml
|
16
|
+
|
17
|
+
.idea/scopes/scope_settings.xml
|
18
|
+
|
19
|
+
.idea/vcs.xml
|
20
|
+
|
21
|
+
.idea/workspace.xml
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'cucumber'
|
4
|
+
require 'cucumber/rake/task'
|
5
|
+
require 'rspec/core/rake_task'
|
6
|
+
|
7
|
+
Bundler::GemHelper.install_tasks
|
8
|
+
|
9
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
10
|
+
spec.ruby_opts = "-I lib:spec"
|
11
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
12
|
+
end
|
13
|
+
|
14
|
+
task :spec
|
15
|
+
|
16
|
+
namespace :features do
|
17
|
+
Cucumber::Rake::Task.new(:watir_webdriver, "Run features with Watir") do |t|
|
18
|
+
t.profile = "default"
|
19
|
+
end
|
20
|
+
|
21
|
+
Cucumber::Rake::Task.new(:selenium_webdriver, "Run features with Selenium") do |t|
|
22
|
+
t.profile = "sfirefox"
|
23
|
+
end
|
24
|
+
|
25
|
+
desc 'Run all features'
|
26
|
+
task :all => [:watir_webdriver, :selenium_webdriver]
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'Run all specs and cukes'
|
30
|
+
task :test => ['spec', 'features:all']
|
31
|
+
|
32
|
+
task :default => :test
|
33
|
+
|
data/cucumber.yml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
<%
|
2
|
+
std_opts = "--no-source --color --format Cucumber::Formatter::Fuubar --tags ~@ignore"
|
3
|
+
%>
|
4
|
+
|
5
|
+
default: BROWSER=firefox DRIVER=WATIR <%= std_opts %> --tags ~@selenium_only
|
6
|
+
sfirefox: BROWSER=firefox DRIVER=SELENIUM <%= std_opts %> --tags ~@watir_only
|
7
|
+
wchrome: BROWSER=chrome DRIVER=WATIR <%= std_opts %> --tags ~@selenium_only
|
8
|
+
schrome: BROWSER=chrome DRIVER=SELENIUM <%= std_opts %> --tags ~@watir_only
|
9
|
+
wie: BROWSER=ie DRIVER=WATIR <%= std_opts %> --tags ~@selenium_only
|
10
|
+
sie: BROWSER=ie DRIVER=SELENIUM <%= std_opts %> --tags ~@watir_only
|
11
|
+
focus: BROWSER=firefox DRIVER=WATIR <%= std_opts %> --tags @focus ~@selenium_only
|
12
|
+
|
@@ -0,0 +1,87 @@
|
|
1
|
+
Feature: Gxt Grid
|
2
|
+
In order to interact with tables
|
3
|
+
Testers will need access and interrogation ability
|
4
|
+
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given I am on the Gxt Examples page
|
8
|
+
And I have the Basic Grid opened
|
9
|
+
|
10
|
+
Scenario: Retrieve a table
|
11
|
+
When I retrieve a GxtGrid widget
|
12
|
+
Then I should know it is visible
|
13
|
+
|
14
|
+
@watir_only
|
15
|
+
Scenario: Determine if a table exists
|
16
|
+
When I retrieve a GxtGrid widget
|
17
|
+
Then I should know it exists
|
18
|
+
|
19
|
+
Scenario: Retrieve the data from a table
|
20
|
+
When I retrieve a GxtGrid widget
|
21
|
+
Then the data for row "1" should be "Hollie Voss" and "General Administration"
|
22
|
+
And the table should have "13" rows
|
23
|
+
And row "1" should have "5" columns
|
24
|
+
And the data for the first row should be "Employee Name" and "Department"
|
25
|
+
And the data for the last row should be "Buster misjenou" and "Accounts"
|
26
|
+
|
27
|
+
Scenario: Retrieve data from a table using a row header
|
28
|
+
When I retrieve a GxtGrid widget
|
29
|
+
Then the data for row "Gail Horton" should be "Gail Horton" and "Marketing"
|
30
|
+
|
31
|
+
Scenario: Retrieve data from a table using a partial row header
|
32
|
+
When I retrieve a GxtGrid widget
|
33
|
+
Then the data for row "Newman" should be "Dirk Newman" and "Information Technology"
|
34
|
+
|
35
|
+
Scenario: Retrieve data from a table using a row header in the 2nd column
|
36
|
+
When I retrieve a GxtGrid widget
|
37
|
+
Then the data for row "General Administration" should be "Hollie Voss" and "General Administration"
|
38
|
+
|
39
|
+
Scenario: Retrieve data from a table using a partial row header in the 2nd column
|
40
|
+
When I retrieve a GxtGrid widget
|
41
|
+
Then the data for row "Administration" should be "Hollie Voss" and "General Administration"
|
42
|
+
|
43
|
+
Scenario: Retrieve data from a table using a column header
|
44
|
+
When I retrieve a GxtGrid widget
|
45
|
+
Then the data for column "Slary" and row "2" should be "120000.00"
|
46
|
+
|
47
|
+
Scenario: Retrieve data from a table using a partial column header
|
48
|
+
When I retrieve a GxtGrid widget
|
49
|
+
Then the data for column "esignation" and row "2" should be "CTO"
|
50
|
+
|
51
|
+
Scenario: Retrieve data from a table using both headers
|
52
|
+
When I retrieve a GxtGrid widget
|
53
|
+
Then the data for row "Emerson Milton" and column "Department" should be "Information Technology"
|
54
|
+
|
55
|
+
Scenario: Retrieve data from a table with an incorrect row header
|
56
|
+
When I retrieve a GxtGrid widget
|
57
|
+
Then the data for row "Data20" should be nil
|
58
|
+
|
59
|
+
Scenario: Retrieve data from a table with an incorrect column header
|
60
|
+
When I retrieve a GxtGrid widget
|
61
|
+
Then the data for row "Chad Andrews" and column "Data20" should be nil
|
62
|
+
|
63
|
+
Scenario: Sort Ascending by Employee Name
|
64
|
+
When I retrieve a GxtGrid widget
|
65
|
+
And I open the "Employee Name" column menu
|
66
|
+
And I sort ascending
|
67
|
+
Then the data for the second row should be "Bell Snedden" and "Information Technology"
|
68
|
+
|
69
|
+
Scenario: Sort Descending by Employee Name
|
70
|
+
When I retrieve a GxtGrid widget
|
71
|
+
And I open the "Employee Name" column menu
|
72
|
+
And I sort descending
|
73
|
+
Then the data for the second row should be "Hollie Voss" and "General Administration"
|
74
|
+
|
75
|
+
Scenario: Deselect a column from the Column Menu
|
76
|
+
When I retrieve a GxtGrid widget
|
77
|
+
And I open the "Department" column menu
|
78
|
+
And I deselect the "Department" column
|
79
|
+
Then The "Department" column should not appear in the table
|
80
|
+
|
81
|
+
Scenario: Deselect then select a column from the Column Menu
|
82
|
+
Given I retrieve a GxtGrid widget
|
83
|
+
And I open the "Department" column menu
|
84
|
+
And I deselect the "Department" column
|
85
|
+
And The "Department" column should not appear in the table
|
86
|
+
When I select the "Department" column
|
87
|
+
Then The "Department" column should appear in the table
|
@@ -0,0 +1,48 @@
|
|
1
|
+
@ignore
|
2
|
+
Feature: Gxt Grid With Grouping
|
3
|
+
As a Gxt Developer
|
4
|
+
I want to control a Gxt Grid with grouping using a Widget
|
5
|
+
So that I can interact with the grid and groups as a single control
|
6
|
+
|
7
|
+
Background:
|
8
|
+
Given I am on the Gxt Examples page
|
9
|
+
And I open the Grouping Grid Example
|
10
|
+
And I retrieve a GxtGroupingGrid widget
|
11
|
+
|
12
|
+
Scenario: I should know the group headings and count
|
13
|
+
Then The grid should contain 4 groups
|
14
|
+
And The group headings should contain
|
15
|
+
|Accounts|General Administration|Information Technology|Marketing|
|
16
|
+
|
17
|
+
Scenario: I should be able to collapse a group
|
18
|
+
When The "Information Technology" Group is expanded
|
19
|
+
And I collapse the "Information Technology" group
|
20
|
+
Then The rows should not be visible
|
21
|
+
|
22
|
+
Scenario: I should be able to expand a group
|
23
|
+
When The "Information Technology" Group is collapsed
|
24
|
+
And I expand the "Information Technology" group
|
25
|
+
Then the rows should be visible
|
26
|
+
|
27
|
+
Scenario: I should be able to sort (ascending) groups by the grouping column
|
28
|
+
When The data is grouped by "Department"
|
29
|
+
And I sort the "Department" column Ascending
|
30
|
+
Then the group headings should contain in order
|
31
|
+
|Accounts|General Administration|Information Technology|Marketing|
|
32
|
+
|
33
|
+
Scenario: I should be able to sort (descending) groups by the grouping column
|
34
|
+
When The data is grouped by "Department"
|
35
|
+
And I sort the "Department" column Descending
|
36
|
+
Then the group headings should contain in order
|
37
|
+
|Marketing|Information Technology|General Administration|Accounts|
|
38
|
+
|
39
|
+
Scenario: I should be able to use the column menu to change the grouping field
|
40
|
+
When I click on the "Designation" column drop down menu
|
41
|
+
And I select "Group By This Field"
|
42
|
+
Then The grid should contain 7 groups
|
43
|
+
And The group headings should contain
|
44
|
+
|CTO|Executive|Executive Director|General Manager|Project Manager|S/W Engineer|Senior S/W Engineer|
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Feature: Use Widgets to controls the gxt Local Pagination example
|
2
|
+
As a gxt developer
|
3
|
+
I want test widgets for Local pagination
|
4
|
+
So that I can easily control control common components
|
5
|
+
on my application.
|
6
|
+
|
7
|
+
Background:
|
8
|
+
Given I am on the Gxt Examples page
|
9
|
+
And I have Local Pagination open
|
10
|
+
|
11
|
+
Scenario: Click next page
|
12
|
+
When I click next page
|
13
|
+
Then I should be on page "2"
|
14
|
+
And "Chad Andrews" should be listed in the grid
|
15
|
+
|
16
|
+
Scenario: Click last page
|
17
|
+
When I click last page
|
18
|
+
Then I should be on page "3"
|
19
|
+
And "Claudio Engle" should be listed in the grid
|
20
|
+
|
21
|
+
Scenario: Click fist page
|
22
|
+
When I click last page
|
23
|
+
And I click on previous page
|
24
|
+
Then I should be on page "2"
|
25
|
+
And "Chad Andrews" should be listed in the grid
|
26
|
+
|
27
|
+
Scenario: Click previous page
|
28
|
+
When I click last page
|
29
|
+
And I click on first page
|
30
|
+
Then I should be on page "1"
|
31
|
+
And "Hollie Voss" should be listed in the grid
|
32
|
+
|
33
|
+
Scenario: Type page 3 into the box
|
34
|
+
When type "3" into the page box
|
35
|
+
Then I should be on page "3"
|
36
|
+
And "Claudio Engle" should be listed in the grid
|
37
|
+
|
@@ -0,0 +1,131 @@
|
|
1
|
+
When /^I have the Basic Grid opened$/ do
|
2
|
+
@page.basic_grid_element.click
|
3
|
+
@page = BasicGridExample.new(@browser)
|
4
|
+
end
|
5
|
+
|
6
|
+
When /^I retrieve a GxtGrid widget$/ do
|
7
|
+
@element = @page.grid_element
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
When /^the GxtGrid should have "(\d+)" rows$/ do |rows|
|
12
|
+
@element.rows.should == rows.to_i
|
13
|
+
end
|
14
|
+
|
15
|
+
Then /^the data for row "([^\"]*)" should be "([^\"]*)" and "([^\"]*)"$/ do |row, col1, col2|
|
16
|
+
row = (row.to_i) if row.to_i > 0
|
17
|
+
table_row = @element[row]
|
18
|
+
table_row[0].text.should == col1
|
19
|
+
table_row[1].text.should == col2
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
When /^I retrieve the data from the table cell$/ do
|
24
|
+
@cell_data = @page.cell_id
|
25
|
+
end
|
26
|
+
|
27
|
+
Then /^the cell data should be '([^"]*)'$/ do |expected|
|
28
|
+
@cell_data.should == expected
|
29
|
+
end
|
30
|
+
|
31
|
+
When /^I retrieve a GxtGrid widget by "([^\"]*)"$/ do |how|
|
32
|
+
@element = @page.send "table_#{how}_element"
|
33
|
+
end
|
34
|
+
|
35
|
+
When /^I retrieve a GxtGrid widget by "([^\"]*)" and "([^\"]*)"$/ do |param1, param2|
|
36
|
+
@element = @page.send "table_#{param1}_#{param2}_element"
|
37
|
+
end
|
38
|
+
|
39
|
+
When /^I retrieve a GxtGrid widget while the script is executing$/ do
|
40
|
+
@element = @page.table_element(:id => 'table_id')
|
41
|
+
end
|
42
|
+
|
43
|
+
Then /^the data for the first row should be "([^\"]*)" and "([^\"]*)"$/ do |col1, col2|
|
44
|
+
@element.first_row[0].text.should == col1
|
45
|
+
@element.first_row[1].text.should == col2
|
46
|
+
end
|
47
|
+
|
48
|
+
Then /^the data for the last row should be "([^\"]*)" and "([^\"]*)"$/ do |col1, col2|
|
49
|
+
@element.last_row[0].text.should == col1
|
50
|
+
@element.last_row[1].text.should == col2
|
51
|
+
end
|
52
|
+
|
53
|
+
Then /^I should see that the table exists$/ do
|
54
|
+
@page.table_id?.should == true
|
55
|
+
end
|
56
|
+
|
57
|
+
Then /^the data for column "([^\"]*)" and row "([^\"]*)" should be "([^\"]*)"$/ do |column, row, value|
|
58
|
+
@element[row.to_i][column].text.should == value
|
59
|
+
end
|
60
|
+
|
61
|
+
Then /^the data for row "([^\"]*)" and column "([^\"]*)" should be "([^\"]*)"$/ do |row, column, value|
|
62
|
+
@element[row][column].text.should == value
|
63
|
+
end
|
64
|
+
|
65
|
+
Then /^the data for row "([^\"]*)" should be nil$/ do |row|
|
66
|
+
@element[row].should be_nil
|
67
|
+
end
|
68
|
+
|
69
|
+
Then /^the data for row "([^\"]*)" and column "([^\"]*)" should be nil$/ do |row, column|
|
70
|
+
@element[row][column].should be_nil
|
71
|
+
end
|
72
|
+
|
73
|
+
Then /^I should see the text includes "([^"]*)" when I retrieve it by "([^"]*)"$/ do |text, how|
|
74
|
+
@page.send("table_#{how}").should include text
|
75
|
+
end
|
76
|
+
|
77
|
+
Then /^the table should have "([^\"]*)" rows$/ do |rows|
|
78
|
+
@element.rows.should == rows.to_i
|
79
|
+
end
|
80
|
+
|
81
|
+
Then /^each row should contain "([^\"]*)"$/ do |text|
|
82
|
+
@element.each do |row|
|
83
|
+
row.text.should include text
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
Then /^row "([^\"]*)" should have "([^\"]*)" columns$/ do |row, cols|
|
88
|
+
@element[row.to_i - 1].columns.should == cols.to_i
|
89
|
+
end
|
90
|
+
|
91
|
+
Then /^each column should contain "([^\"]*)"$/ do |text|
|
92
|
+
row = @element[0]
|
93
|
+
row.each do |column|
|
94
|
+
column.text.should include text
|
95
|
+
end
|
96
|
+
end
|
97
|
+
When /^the data for the second row should be "([^"]*)" and "([^"]*)"$/ do |col1, col2|
|
98
|
+
@element[1][0].text.should == col1
|
99
|
+
@element[1][1].text.should == col2
|
100
|
+
end
|
101
|
+
|
102
|
+
When /^I sort ascending$/ do
|
103
|
+
@page.column_menu_element.sort_ascending
|
104
|
+
end
|
105
|
+
|
106
|
+
When /^I sort descending$/ do
|
107
|
+
@page.column_menu_element.sort_descending
|
108
|
+
end
|
109
|
+
|
110
|
+
When /^I deselect the "([^"]*)" column$/ do |column_name|
|
111
|
+
@page.column_menu_element.open_column_selection_menu
|
112
|
+
@page.column_selection_menu_element.exclude_column(column_name)
|
113
|
+
end
|
114
|
+
|
115
|
+
Then /^The "([^"]*)" column should not appear in the table$/ do |column_name|
|
116
|
+
@element.header.each do |column_header|
|
117
|
+
column_header.text.should_not include column_name
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
When /^I select the "([^"]*)" column$/ do |column_name|
|
122
|
+
@page.column_menu_element.open_column_selection_menu
|
123
|
+
@page.column_selection_menu_element.include_column(column_name)
|
124
|
+
end
|
125
|
+
Then /^The "([^"]*)" column should appear in the table$/ do |column_name|
|
126
|
+
@element.header[column_name].exists?.should ==true
|
127
|
+
end
|
128
|
+
|
129
|
+
When /^I open the "([^"]*)" column menu$/ do |column|
|
130
|
+
@element.header[column].open_menu
|
131
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
When /^I have Local Pagination open$/ do
|
2
|
+
@page.local_pagination_element.click
|
3
|
+
@page = LocalPaginationExample.new(@browser)
|
4
|
+
end
|
5
|
+
|
6
|
+
When /^I click next page$/ do
|
7
|
+
@page.pager_element.next
|
8
|
+
end
|
9
|
+
|
10
|
+
Then /^I should be on page "(\d+)"$/ do |page_expected|
|
11
|
+
@page.pager_element.page.should == page_expected
|
12
|
+
end
|
13
|
+
|
14
|
+
When /^"([^"]*)" should be listed in the grid$/ do |name_expected|
|
15
|
+
@page.grid_element[1][0].text.should == name_expected
|
16
|
+
end
|
17
|
+
|
18
|
+
When /^I click last page$/ do
|
19
|
+
@page.pager_element.last
|
20
|
+
end
|
21
|
+
|
22
|
+
When /^I click on previous page$/ do
|
23
|
+
@page.pager_element.previous
|
24
|
+
end
|
25
|
+
|
26
|
+
When /^I click on first page$/ do
|
27
|
+
@page.pager_element.first
|
28
|
+
end
|
29
|
+
|
30
|
+
When /^type "(\d+)" into the page box$/ do |page|
|
31
|
+
@page.pager_element.page=page
|
32
|
+
end
|