1- import { createScreenshotsComparer } from 'devextreme-screenshot-comparer' ;
21import DataGrid from 'devextreme-testcafe-models/dataGrid' ;
32import FilterTextBox from 'devextreme-testcafe-models/dataGrid/editors/filterTextBox' ;
43import url from '../../../../helpers/getPageUrl' ;
54import { createWidget } from '../../../../helpers/createWidget' ;
6- import { getNumberData , getData } from '../../helpers/generateDataSourceData' ;
7- import { testScreenshot } from '../../../../helpers/themeUtils' ;
5+ import { getData } from '../../helpers/generateDataSourceData' ;
86
97fixture `FilterRow`
108 . page ( url ( __dirname , '../../../container.html' ) ) ;
@@ -15,19 +13,19 @@ test('Filter should reset if the filter row editor text is cleared (T1257261)',
1513 const filterPanelText = dataGrid . getFilterPanel ( ) . getFilterText ( ) ;
1614
1715 await t
18- // assert
16+ // assert
1917 . expect ( filterPanelText . element . textContent )
2018 . eql ( '[Text] Equals \'i\'' )
21- // act
19+ // act
2220 . click ( filterEditor . input )
2321 . pressKey ( 'backspace' )
2422 . wait ( 100 ) // updateValueTimeout
25- // assert
23+ // assert
2624 . expect ( filterPanelText . element . textContent )
2725 . eql ( 'Create Filter' )
28- // act
26+ // act
2927 . click ( dataGrid . element )
30- // assert
28+ // assert
3129 . expect ( filterPanelText . element . textContent )
3230 . eql ( 'Create Filter' ) ;
3331} ) . before ( async ( ) => createWidget ( 'dxDataGrid' , {
@@ -52,60 +50,6 @@ test('Filter should reset if the filter row editor text is cleared (T1257261)',
5250 } ,
5351} ) ) ;
5452
55- // visual: material.blue.light
56- test ( 'Filter row\'s height should be adjusted by content (T1072609)' , async ( t ) => {
57- const dataGrid = new DataGrid ( '#container' ) ;
58- const { takeScreenshot, compareResults } = createScreenshotsComparer ( t ) ;
59-
60- await testScreenshot ( t , takeScreenshot , 'T1072609.png' , { element : dataGrid . element } ) ;
61- await t
62- . expect ( compareResults . isValid ( ) )
63- . ok ( compareResults . errorMessages ( ) ) ;
64- } ) . before ( async ( ) => createWidget ( 'dxDataGrid' , {
65- columns : [ {
66- dataField : 'Date' ,
67- dataType : 'date' ,
68- width : 140 ,
69- selectedFilterOperation : 'between' ,
70- filterValue : [ new Date ( 2022 , 2 , 28 ) , new Date ( 2022 , 2 , 29 ) ] ,
71- } ] ,
72- filterRow : { visible : true } ,
73- wordWrapEnabled : true ,
74- showBorders : true ,
75- } ) ) ;
76-
77- test ( 'FilterRow range overlay screenshot' , async ( t ) => {
78- const { takeScreenshot, compareResults } = createScreenshotsComparer ( t ) ;
79- const dataGrid = new DataGrid ( '#container' ) ;
80- const filterEditor = dataGrid . getFilterEditor ( 1 , FilterTextBox ) ;
81-
82- await t
83- . click ( filterEditor . menuButton ) ;
84- await t
85- . click ( filterEditor . menu . getItemByText ( 'Between' ) ) ;
86- // act
87- await testScreenshot ( t , takeScreenshot , 'filter-row-overlay.png' , { element : dataGrid . element } ) ;
88- await t
89- . expect ( compareResults . isValid ( ) )
90- . ok ( )
91- // assert
92- . expect ( dataGrid . getFilterRangeOverlay ( ) . exists )
93- . ok ( )
94- . expect ( compareResults . isValid ( ) )
95- . ok ( compareResults . errorMessages ( ) ) ;
96- } ) . before ( async ( ) => createWidget ( 'dxDataGrid' , {
97- dataSource : getNumberData ( 20 , 2 ) ,
98- height : 400 ,
99- showBorders : true ,
100- filterRow : {
101- visible : true ,
102- applyFilter : 'auto' ,
103- } ,
104- scrolling : {
105- showScrollbar : 'never' ,
106- } ,
107- } ) ) ;
108-
10953// T1267481
11054test ( 'Filter Row\'s Reset button does not work after a custom filter is set in Filter Builder' , async ( t ) => {
11155 const dataGrid = new DataGrid ( '#container' ) ;
@@ -157,35 +101,37 @@ test('Filter Row\'s Reset button does not work after a custom filter is set in F
157101 } ) ;
158102} ) ;
159103
160- // T1287288
161- // visual: fluent.blue.light
162- test ( 'Focus overlay should be visible in filter row when focusedRowEnabled is enabled' , async ( t ) => {
163- const { takeScreenshot, compareResults } = createScreenshotsComparer ( t ) ;
104+ // T1290381
105+ test ( 'DataGrid - filter row\'s search-box\'s aria-label should be customizable via localization' , async ( t ) => {
164106 const dataGrid = new DataGrid ( '#container' ) ;
165- const filterEditor = dataGrid . getFilterEditor ( 1 , FilterTextBox ) ;
107+ const filterEditor = dataGrid . getFilterEditor ( 0 , FilterTextBox ) ;
108+
109+ await dataGrid . isReady ( ) ;
110+
111+ const ariaLabel = await filterEditor . menuButton . getAttribute ( 'aria-label' ) ;
166112
167113 await t
168- . click ( dataGrid . getDataCell ( 0 , 0 ) . element )
169- . click ( filterEditor . input )
170- // assert
171- . expect ( filterEditor . input . focused )
172- . ok ( ) ;
173- await testScreenshot ( t , takeScreenshot , 'filter-row-focus-overlay.png' , { element : dataGrid . element } ) ;
174- await t
175- . expect ( compareResults . isValid ( ) )
176- . ok ( compareResults . errorMessages ( ) ) ;
177- } ) . before ( async ( ) => createWidget ( 'dxDataGrid' , {
178- dataSource : [
179- { ID : 1 , Field : 'Item 1' } ,
180- { ID : 2 , Field : 'Item 2' } ,
181- { ID : 3 , Field : 'Item 3' } ,
182- ] ,
183- keyExpr : 'ID' ,
184- focusedRowEnabled : true ,
185- filterRow : { visible : true } ,
186- showBorders : true ,
187- columns : [ 'ID' , 'Field' ] ,
188- } ) ) ;
114+ . expect ( ariaLabel )
115+ . eql ( 'custom text' ) ;
116+ } ) . before ( async ( t ) => {
117+ await t . eval ( ( ) => {
118+ ( window as any ) . DevExpress . localization . loadMessages ( {
119+ en : {
120+ 'dxDataGrid-ariaSearchBox' : 'custom text' ,
121+ } ,
122+ } ) ;
123+ } ) ;
124+
125+ return createWidget ( 'dxDataGrid' , {
126+ columns : [ {
127+ dataField : 'test' ,
128+ dataType : 'string' ,
129+ } ] ,
130+ filterRow : {
131+ visible : true ,
132+ } ,
133+ } ) ;
134+ } ) ;
189135
190136test ( 'DataGrid - NVDA reads filter menu items as "Search box 1 of 8" (T1290386)' , async ( t ) => {
191137 const dataGrid = new DataGrid ( '#container' ) ;
@@ -219,67 +165,68 @@ test('DataGrid - NVDA reads filter menu items as "Search box 1 of 8" (T1290386)'
219165 } ,
220166} ) ) ;
221167
222- test ( 'DataGrid - The `between` filter dropdown sticks to the viewport edge during horizontal scrolling (T1280071)' , async ( t ) => {
223- const { takeScreenshot, compareResults } = createScreenshotsComparer ( t ) ;
224- const dataGrid = new DataGrid ( '#container' ) ;
225- const filterEditor = dataGrid . getFilterEditor ( 0 , FilterTextBox ) ;
226-
227- await dataGrid . isReady ( ) ;
168+ // T1312521
169+ [ true , false ] . forEach ( ( grouped ) => {
170+ test ( 'DataGrid - filter range overlay in last column on Tab pressed moves focus to next tabbable element (T1312521)' , async ( t ) => {
171+ const dataGrid = new DataGrid ( '#container' ) ;
172+ const filterCell = dataGrid . getFilterCell ( 2 ) ;
173+ const expectedFocusedElement = grouped ? dataGrid . getGroupRow ( 0 ) : dataGrid . getDataCell ( 0 , 0 ) ;
174+
175+ await t
176+ . click ( filterCell )
177+ . expect ( dataGrid . getFilterRangeOverlay ( ) . exists )
178+ . ok ( 'Filter range overlay is shown' )
179+ . pressKey ( 'tab' )
180+ . pressKey ( 'tab' )
181+ . expect ( dataGrid . getFilterRangeOverlay ( ) . exists )
182+ . notOk ( 'Filter range overlay is closed' )
183+ . expect ( expectedFocusedElement . isFocused )
184+ . ok ( 'First cell of first row is focused' ) ;
185+ } ) . before ( async ( ) => createWidget ( 'dxDataGrid' , {
186+ dataSource : [
187+ { Group : 'group1' , Value : 'field1' , Range : 10 } ,
188+ { Group : 'group1' , Value : 'field2' , Range : 20 } ,
189+ { Group : 'group2' , Value : 'field3' , Range : 30 } ,
190+ { Group : 'group2' , Value : 'field4' , Range : 40 } ,
191+ ] ,
192+ filterRow : { visible : true } ,
193+ columns : [
194+ {
195+ dataField : 'Group' ,
196+ groupIndex : grouped ? 0 : undefined ,
197+ } ,
198+ 'Value' ,
199+ {
200+ dataField : 'Range' ,
201+ selectedFilterOperation : 'between' ,
202+ } ,
203+ ] ,
204+ } ) ) ;
205+ } ) ;
228206
229- await t
230- . click ( filterEditor . menuButton )
231- . click ( filterEditor . menu . getItemByText ( 'Between' ) ) ;
207+ test ( 'DataGrid - filter range overlay in last column on Tab pressed moves focus to next tabbable element with empty data (T1312521)' , async ( t ) => {
208+ const dataGrid = new DataGrid ( '#container' ) ;
209+ const filterCell = dataGrid . getFilterCell ( 2 ) ;
232210
233- await dataGrid . scrollBy ( t , { x : 999 } ) ;
234- await testScreenshot ( t , takeScreenshot , 'filter-row-filter-range-hide-on-scroll.png' ) ;
235211 await t
236- . expect ( compareResults . isValid ( ) )
237- . ok ( compareResults . errorMessages ( ) ) ;
212+ . click ( filterCell )
213+ . expect ( dataGrid . getFilterRangeOverlay ( ) . exists )
214+ . ok ( 'Filter range overlay is shown' )
215+ . pressKey ( 'tab' )
216+ . pressKey ( 'tab' )
217+ . expect ( dataGrid . getFilterRangeOverlay ( ) . exists )
218+ . notOk ( 'Filter range overlay is closed' )
219+ . expect ( dataGrid . getRowsView ( ) . focused )
220+ . ok ( 'Empty rows view is focused' ) ;
238221} ) . before ( async ( ) => createWidget ( 'dxDataGrid' , {
239- dataSource : [
240- { ID : 1 , Text : 'Item 1' } ,
241- { ID : 2 , Text : '' } ,
242- { ID : 3 , Text : 'Item 3' } ,
222+ dataSource : [ ] ,
223+ filterRow : { visible : true } ,
224+ columns : [
225+ 'Group' ,
226+ 'Value' ,
227+ {
228+ dataField : 'Range' ,
229+ selectedFilterOperation : 'between' ,
230+ } ,
243231 ] ,
244- keyExpr : 'ID' ,
245- filterRow : {
246- visible : true ,
247- } ,
248- scrolling : {
249- useNative : true ,
250- } ,
251- columnWidth : 400 ,
252- width : 500 ,
253232} ) ) ;
254-
255- // T1290381
256- test ( 'DataGrid - filter row\'s search-box\'s aria-label should be customizable via localization' , async ( t ) => {
257- const dataGrid = new DataGrid ( '#container' ) ;
258- const filterEditor = dataGrid . getFilterEditor ( 0 , FilterTextBox ) ;
259-
260- await dataGrid . isReady ( ) ;
261-
262- const ariaLabel = await filterEditor . menuButton . getAttribute ( 'aria-label' ) ;
263-
264- await t
265- . expect ( ariaLabel )
266- . eql ( 'custom text' ) ;
267- } ) . before ( async ( t ) => {
268- await t . eval ( ( ) => {
269- ( window as any ) . DevExpress . localization . loadMessages ( {
270- en : {
271- 'dxDataGrid-ariaSearchBox' : 'custom text' ,
272- } ,
273- } ) ;
274- } ) ;
275-
276- return createWidget ( 'dxDataGrid' , {
277- columns : [ {
278- dataField : 'test' ,
279- dataType : 'string' ,
280- } ] ,
281- filterRow : {
282- visible : true ,
283- } ,
284- } ) ;
285- } ) ;
0 commit comments