Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
74f3dfe
Revert the fix for T1282595
Mar 5, 2026
2062535
separate TestCafe tests into functional and visual tests
Feb 2, 2026
486f91e
Move first-header class logic from sticky_columns to column_headers
Mar 17, 2026
07e1aa4
Fix lint: use for-of loops in matrix functional test
Mar 17, 2026
de9b67f
Fix e2e tests (part 1)
Mar 17, 2026
c443aad
Update etalons
Mar 18, 2026
2aff857
Update etalons (part 2)
Mar 18, 2026
f9562be
Fix e2e tests
Mar 18, 2026
c7a548f
fix: use .dx-header-row instead of .dx-row in multi-row header border…
Mar 18, 2026
242505a
Update etalons (part 3)
Mar 18, 2026
86f6c2f
Update etalons (part 4)
Mar 19, 2026
0929754
Update etalons (part 5)
Mar 19, 2026
1031c96
Fix copilot comments
Mar 19, 2026
512ca28
fix: pass rowIndex to getVisibleIndex in _getVisibleColumnIndex (T131…
Mar 20, 2026
130956a
add e2e test
Mar 23, 2026
a988d41
fix: banded columns vertical borders and adaptivity border handling (…
Mar 25, 2026
c1f3ff9
fix extra RTL border in sticky columns caused by increased selector s…
Mar 25, 2026
ee23684
Fix rowType check in _setFirstCellClass for header rows
Mar 25, 2026
0ac0b9d
fix: use column index identifier for _getCellElement in banded column…
Mar 25, 2026
47ebf24
fix: resolve _getVisibleColumnIndex for banded columns in column head…
Mar 25, 2026
7b9216a
Update etalons (part 6)
Mar 25, 2026
0e87a35
fix: clear stale first-cell classes before recalculating in columns v…
Mar 27, 2026
16b2b71
fix: exclude hidden and adaptive columns from banded header border se…
Mar 27, 2026
3270dcb
DataGrid: exclude .dx-pointer-events-none cells from banded column ve…
Mar 27, 2026
2ea1f17
update first-cell classes on adaptive changes
Mar 30, 2026
0bea190
Fix QUnit tests
Mar 30, 2026
0dd3810
Fix jest tests
Mar 30, 2026
b1c175a
Fix QUnit test (part 2)
Mar 30, 2026
7e9a51e
DataGrid: simplify first-cell class update logic (T1318812)
Mar 30, 2026
04f7ea1
fix: update first-cell classes only after adaptive visibleWidth is se…
Mar 31, 2026
496e885
Fix QUnit test (part 3)
Mar 31, 2026
3c7f1e3
small code refactoring
Mar 31, 2026
6c66f96
Fix copilot comments
Mar 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import DataGrid from 'devextreme-testcafe-models/dataGrid';
import url from '../../../helpers/getPageUrl';
import { createWidget } from '../../../helpers/createWidget';
import url from '../../../../helpers/getPageUrl';
import { createWidget } from '../../../../helpers/createWidget';

fixture.disablePageReloads`Adaptive Row`
.page(url(__dirname, '../../container.html'));
fixture.disablePageReloads`Adaptivity.Functional`
.page(url(__dirname, '../../../container.html'));

test.meta({ browserSize: [400, 400] })('Should be shown and hidden when the window is resized', async (t) => {
const dataGrid = new DataGrid('#container');
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
import DataGrid from 'devextreme-testcafe-models/dataGrid';
import url from '../../../../helpers/getPageUrl';
import { createWidget } from '../../../../helpers/createWidget';
import type { RowBorderExpectation } from '../../helpers/domUtils';
import {
checkDataCellBorders, checkFilterCellBorders, checkHeaderCellBorders, checkSummaryCellBorders,
} from '../../helpers/domUtils';

fixture.disablePageReloads`Adaptivity.Matrix.Functional`
.page(url(__dirname, '../../../container.html'));

const GRID_CONTAINER = '#container';

const configs = [{
showColumnLines: true,
rtlEnabled: false,
}, {
showColumnLines: false,
rtlEnabled: false,
}, {
showColumnLines: true,
rtlEnabled: true,
}, {
showColumnLines: false,
rtlEnabled: true,
}];

// Check vertical borders of data cells
configs.forEach((
{ showColumnLines, rtlEnabled }: { showColumnLines: boolean; rtlEnabled: boolean; },
): void => {
test(`Headers and Filter cells should have correct borders when there is the first hidden header (showColumnLines: ${showColumnLines}, rtl: ${rtlEnabled})`, async (t) => {
const dataGrid = new DataGrid(GRID_CONTAINER);
const getExpectedBorders = (): RowBorderExpectation[] => {
if (showColumnLines) {
return [
{
rowIndex: 0,
cells: [
{ columnIndex: 0, name: 'Col 1', expected: [0, 0] },
{ columnIndex: 1, name: 'Col 2', expected: rtlEnabled ? [1, 0] : [0, 1] },
{ columnIndex: 2, name: 'Col 3', expected: [1, 1] },
],
},
];
}

return [
{
rowIndex: 0,
cells: [
{ columnIndex: 0, name: 'Col 1', expected: [0, 0] },
{ columnIndex: 1, name: 'Col 2', expected: [0, 0] },
{ columnIndex: 2, name: 'Col 3', expected: [0, 0] },
],
},
];
};
const expectedBorders = getExpectedBorders();

await t.expect(dataGrid.isReady()).ok();
await checkHeaderCellBorders(t, dataGrid, expectedBorders);
await checkFilterCellBorders(t, dataGrid, expectedBorders);
}).before(async () => {
await createWidget('dxDataGrid', {
dataSource: [
{
Col1: 'Data A', Col2: 'Desc A', Col3: 'Group 1', Col4: 'X', Col5: 100, Col6: 50,
},
{
Col1: 'Data B', Col2: 'Desc B', Col3: 'Group 1', Col4: 'Y', Col5: 200, Col6: 20,
},
{
Col1: 'Data C', Col2: 'Desc C', Col3: 'Group 2', Col4: 'Z', Col5: 300, Col6: 10,
},
],
columns: [
{ dataField: 'Col1', hidingPriority: 0 },
{ dataField: 'Col2' },
{ dataField: 'Col3' },
],
width: 250,
filterRow: { visible: true },
showColumnLines,
rtlEnabled,
columnWidth: 100,
});
});

test(`Data cells should have correct borders when there is the first hidden header (showColumnLines: ${showColumnLines}, rtl: ${rtlEnabled})`, async (t) => {
const dataGrid = new DataGrid(GRID_CONTAINER);
const getExpectedBorders = (): RowBorderExpectation[] => {
if (showColumnLines) {
return [
{
rowIndex: 0,
cells: [
{ columnIndex: 0, name: 'Col 1', expected: [0, 0] },
{ columnIndex: 1, name: 'Col 2', expected: rtlEnabled ? [1, 0] : [0, 1] },
// The last visible data column has the dx-last-data-cell class.
// This class removes the border on the right. For some reason,
// the headers don't have this class. But everything looks fine visually.
{ columnIndex: 2, name: 'Col 3', expected: [1, 0] },
],
},
];
}

return [
{
rowIndex: 0,
cells: [
{ columnIndex: 0, name: 'Col 1', expected: [0, 0] },
{ columnIndex: 1, name: 'Col 2', expected: [0, 0] },
{ columnIndex: 2, name: 'Col 3', expected: [0, 0] },
],
},
];
};
const expectedBorders = getExpectedBorders();

await t.expect(dataGrid.isReady()).ok();
await checkDataCellBorders(t, dataGrid, expectedBorders);
}).before(async () => {
await createWidget('dxDataGrid', {
dataSource: [
{
Col1: 'Data A', Col2: 'Desc A', Col3: 'Group 1', Col4: 'X', Col5: 100, Col6: 50,
},
{
Col1: 'Data B', Col2: 'Desc B', Col3: 'Group 1', Col4: 'Y', Col5: 200, Col6: 20,
},
{
Col1: 'Data C', Col2: 'Desc C', Col3: 'Group 2', Col4: 'Z', Col5: 300, Col6: 10,
},
],
columns: [
{ dataField: 'Col1', hidingPriority: 0 },
{ dataField: 'Col2' },
{ dataField: 'Col3' },
],
width: 250,
showColumnLines,
rtlEnabled,
columnWidth: 100,
});
});

test(`Summary cells should have correct borders when there is the first hidden header (showColumnLines: ${showColumnLines}, rtl: ${rtlEnabled})`, async (t) => {
const dataGrid = new DataGrid(GRID_CONTAINER);
const expectedSummaryCellBorders: RowBorderExpectation[] = [{
rowIndex: 0,
cells: [
{ columnIndex: 0, name: 'Col 1', expected: [0, 0] },
{ columnIndex: 1, name: 'Col 2', expected: [0, 0] },
{ columnIndex: 2, name: 'Col 3', expected: [0, 0] },
],
}];

await t.expect(dataGrid.isReady()).ok();
await checkSummaryCellBorders(t, dataGrid, expectedSummaryCellBorders);
}).before(async () => {
await createWidget('dxDataGrid', {
dataSource: [
{
Col1: 'Data A', Col2: 'Desc A', Col3: 'Group 1', Col4: 'X', Col5: 100, Col6: 50,
},
{
Col1: 'Data B', Col2: 'Desc B', Col3: 'Group 1', Col4: 'Y', Col5: 200, Col6: 20,
},
{
Col1: 'Data C', Col2: 'Desc C', Col3: 'Group 2', Col4: 'Z', Col5: 300, Col6: 10,
},
],
columns: [
{ dataField: 'Col1', hidingPriority: 0 },
{ dataField: 'Col2' },
{ dataField: 'Col3' },
],
width: 250,
summary: {
totalItems: [{
column: 'Col2',
summaryType: 'count',
}],
},
showColumnLines,
rtlEnabled,
columnWidth: 100,
});
});
});
Loading
Loading