From 1f69cb8683a0c11bbf5ebc757df977b74ed4e53f Mon Sep 17 00:00:00 2001 From: dmlvr Date: Wed, 14 Jan 2026 11:29:45 +0200 Subject: [PATCH 01/15] delete splitter test --- .../DevExpress.ui.widgets/splitter.tests.js | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/splitter.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/splitter.tests.js index 9a45ffa03925..78ff641a60b4 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/splitter.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/splitter.tests.js @@ -3786,35 +3786,6 @@ QUnit.module('Nested Splitters', moduleConfig, () => { assert.strictEqual(nestedSplitterResizeHandlerStub.callCount, 1); }); - QUnit.skip(`nestedSplitter.${eventHandler} event handler should be able to be updated at runtime`, function(assert) { - const handlerStub = sinon.stub(); - const handlerStubAfterUpdate = sinon.stub(); - - this.reinit({ - items: [{ - splitter: { - [eventHandler]: handlerStub, - dataSource: [{ text: 'Pane_1' }, { text: 'Pane_2' }] - } - }] - }); - - let pointer = pointerMock(this.getResizeHandles(false).get(0)); - - pointer.start().dragStart().drag(0, 50).dragEnd(); - - assert.strictEqual(handlerStub.callCount, 1); - assert.strictEqual(handlerStubAfterUpdate.callCount, 0); - handlerStub.reset(); - - this.instance.option(`items[0].splitter.${eventHandler}`, handlerStubAfterUpdate); - - pointer = pointerMock(this.getResizeHandles(false)[0]); - pointer.start().dragStart().drag(0, 50).dragEnd(); - - assert.strictEqual(handlerStub.callCount, 0); - assert.strictEqual(handlerStubAfterUpdate.callCount, 1); - }); }); QUnit.test('itemRendered callback should be called when the panes of a nested splitter are rendered', function(assert) { From a9d2910e32d9b101cacf03003663817c72863047 Mon Sep 17 00:00:00 2001 From: dmlvr Date: Wed, 14 Jan 2026 11:30:36 +0200 Subject: [PATCH 02/15] delete tabPanel.repaintChangesOnly test --- .../tabPanel.repaintChangesOnly.tests.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/tabPanel.repaintChangesOnly.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/tabPanel.repaintChangesOnly.tests.js index e257e1a14fe0..b23dacaf847b 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/tabPanel.repaintChangesOnly.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/tabPanel.repaintChangesOnly.tests.js @@ -298,24 +298,6 @@ QUnit.module('repaintChangesOnly', { this.checkContainsEmptyMessage(assert, false); }); - QUnit.skip('[{1, text: 1a, content: 1a_}, {2}] -> [{1, text: 1aupd, content: 1a_}, {2}]' + testContext, function(assert) { - const item1 = { text: '1a', content: '1a_' }; - const item2 = { text: '2a', content: '2a_' }; - this.createTabPanel({ items: [item1, item2] }); - - const item1_ = { text: '1aupd', content: '1a_' }; - this.tabPanel.option(dataSourcePropertyName, [item1_, item2]); - this.clock.tick(1); - - this.checkTitleRendered(assert, [item1_]); - this.checkItemRendered(assert, [{ data: item1_, index: 0 }]); - this.checkItemDeleted(assert, []); - - this.checkContainsElements(assert, [item1_.text, item1_.content, item2.text]); - this.checkNotContainsElements(assert, ['1a', item2.content]); - this.checkContainsEmptyMessage(assert, false); - }); - QUnit.test('[{1, text: 1a, content: 1a_}, {2}] -> [{1, text: 1aupd, content: 1a_}, {2}] via items[0]' + testContext, function(assert) { if(dataSourcePropertyName === 'dataSource') { assert.ok(true, 'Not supported for dataSource'); From 6a14e55addbeb5e315eb8a8711c85e6ea6d633c3 Mon Sep 17 00:00:00 2001 From: dmlvr Date: Wed, 14 Jan 2026 11:33:20 +0200 Subject: [PATCH 03/15] delete baseWidget test --- .../tests/DevExpress.viz.core/baseWidget.tests.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.viz.core/baseWidget.tests.js b/packages/devextreme/testing/tests/DevExpress.viz.core/baseWidget.tests.js index 5bf968481cba..50a92840e317 100644 --- a/packages/devextreme/testing/tests/DevExpress.viz.core/baseWidget.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.viz.core/baseWidget.tests.js @@ -334,16 +334,6 @@ QUnit.test('encodeHtml', function(assert) { }], 'renderer animation options'); }); -QUnit.skip('Option from the invalidating list', function(assert) { - this.createWidget(); - const spy = sinon.spy(this.widget, '_invalidate'); - this.widget._invalidatingOptions = ['test-option']; - - this.widget.option('test-option', 'test-value'); - - assert.deepEqual(spy.lastCall.args, []); -}); - QUnit.test('Unknown option', function(assert) { this.createWidget(); const spy = sinon.spy(this.widget, '_invalidate'); From 45c22c9acb2e40ab8860a2054f4d100ebdf73785 Mon Sep 17 00:00:00 2001 From: dmlvr Date: Wed, 14 Jan 2026 11:39:19 +0200 Subject: [PATCH 04/15] unskiped and fix expected result in drawer tests --- .../tests/DevExpress.ui.widgets/drawer.tests.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.tests.js index 69bef7743f8e..7ca9ed022c71 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.tests.js @@ -592,7 +592,7 @@ QUnit.module('Drawer behavior', () => { assert.ok($content.eq(1).hasClass('dx-drawer-content')); }); - QUnit.skip('drawer panel should be repositioned correctly after dimension changed,left position', function(assert) { + QUnit.test('drawer panel should be repositioned correctly after dimension changed,left position', function(assert) { fx.off = true; const $element = $('#drawer').dxDrawer({ @@ -611,12 +611,12 @@ QUnit.module('Drawer behavior', () => { resizeCallbacks.fire(); - assert.equal($panelOverlayContent.position().left, 0, 'panel overlay content position is OK'); + assert.equal($panelOverlayContent.position().left, -200, 'panel overlay content position is OK'); fx.off = false; }); - QUnit.skip('drawer panel should be repositioned correctly after dimension changed,top position', function(assert) { + QUnit.test('drawer panel should be repositioned correctly after dimension changed,top position', function(assert) { fx.off = true; const $element = $('#drawer').dxDrawer({ @@ -636,7 +636,7 @@ QUnit.module('Drawer behavior', () => { resizeCallbacks.fire(); - assert.equal($panelOverlayContent.position().top, 0, 'panel overlay content position is OK'); + assert.equal($panelOverlayContent.position().top, -600, 'panel overlay content position is OK'); fx.off = false; }); @@ -694,7 +694,7 @@ QUnit.module('Drawer behavior', () => { fx.off = false; }); - QUnit.skip('drawer panel should be repositioned after dimension changed, right position', function(assert) { + QUnit.test('drawer panel should be repositioned after dimension changed, right position', function(assert) { fx.off = true; const $element = $('#drawer').dxDrawer({ @@ -714,7 +714,7 @@ QUnit.module('Drawer behavior', () => { resizeCallbacks.fire(); - assert.equal($panelOverlayContent.position().left, -200, 'panel overlay content position is OK'); + assert.equal($panelOverlayContent.position().left, 1000, 'panel overlay content position is OK'); fx.off = false; }); From eb444b5964dcf7b4b5d480d43ebd4258dcd53503 Mon Sep 17 00:00:00 2001 From: dmlvr Date: Wed, 14 Jan 2026 12:50:15 +0200 Subject: [PATCH 05/15] fix drawer.scenarios.tests --- .../drawer.scenarios.tests.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js index 3e8a793177dc..ee7f9a99fee1 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js @@ -215,13 +215,8 @@ baseConfigs.forEach(baseConfig => { return isOpenedStateMode && isPosition; } - function testOrSkip(name, skip, callback) { - if(skip()) { - - // QUnit.skip(name + ' - NOT SUPPORTED', function() {}); - } else { - QUnit.test(name, callback); - } + function conditionalTest(name, isUnsupportedConfig, callback) { + !isUnsupportedConfig() && QUnit.test(name, callback); } [undefined, 25].forEach(minSize => { @@ -309,7 +304,7 @@ baseConfigs.forEach(baseConfig => { }); }); - testOrSkip(`(revealMode: ${revealMode}) opened: false, visible: false -> visible: true -> opened: true`, () => configIs('overlap'), function(assert) { + conditionalTest(`(revealMode: ${revealMode}) opened: false, visible: false -> visible: true -> opened: true`, () => configIs('overlap'), function(assert) { const drawerElement = $('#' + drawerTesters.drawerElementId).get(0); const drawer = new dxDrawer(drawerElement, getFullDrawerOptions({ opened: false, @@ -489,7 +484,7 @@ baseConfigs.forEach(baseConfig => { drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); }); - testOrSkip('opened: true (T813710: template + rendered + _viewPortChangeHandler)', () => configIs(['shrink', 'push']) || configIs(undefined, 'right'), function(assert) { + conditionalTest('opened: true (T813710: template + rendered + _viewPortChangeHandler)', () => configIs(['shrink', 'push']) || configIs(undefined, 'right'), function(assert) { const drawerElement = $('#' + drawerTesters.drawerElementId).get(0); const drawer = new dxDrawer(drawerElement, getFullDrawerOptions({ opened: true, @@ -517,7 +512,7 @@ baseConfigs.forEach(baseConfig => { drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); }); - testOrSkip('opened: true, visible: false -> visible: true', () => configIs('overlap'), function(assert) { + conditionalTest('opened: true, visible: false -> visible: true', () => configIs('overlap'), function(assert) { const drawerElement = $('#' + drawerTesters.drawerElementId).get(0); const drawer = new dxDrawer(drawerElement, getFullDrawerOptions({ opened: true, @@ -532,7 +527,7 @@ baseConfigs.forEach(baseConfig => { drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); }); - testOrSkip('opened: true, visible: false -> repaint -> visible: true', () => configIs('overlap'), function(assert) { + conditionalTest('opened: true, visible: false -> repaint -> visible: true', () => configIs('overlap'), function(assert) { const drawerElement = $('#' + drawerTesters.drawerElementId).get(0); const drawer = new dxDrawer(drawerElement, getFullDrawerOptions({ opened: true, From dd44390cf7a0290fdb7d7678294bd6a554dff718 Mon Sep 17 00:00:00 2001 From: dmlvr Date: Wed, 14 Jan 2026 13:09:06 +0200 Subject: [PATCH 06/15] unskiped and fix vectorMap projection.tests to viewport --- .../projection.tests.js | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js index 726fb7faf5e0..8b9ab3a92d62 100644 --- a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js @@ -704,15 +704,16 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ assert.arraysEqual(this.projection2.getViewport(), this.projection1.getViewport()); }); - QUnit.skip('Northern edge - to viewport' + namePart, function(assert) { + QUnit.test('Northern edge - to viewport' + namePart, function(assert) { this.setBounds(bounds); - this.projection1.setZoom(2).setCenter([0, 80]); + this.projection1.setZoom(2); + this.projection1.setCenter([0, 80]); this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); QUnit.test('Northern edge - from viewport' + namePart, function(assert) { @@ -726,15 +727,16 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ assert.arraysEqual(this.projection2.getViewport(), this.projection1.getViewport()); }); - QUnit.skip('Eastern edge - to viewport' + namePart, function(assert) { + QUnit.test('Eastern edge - to viewport' + namePart, function(assert) { this.setBounds(bounds); - this.projection1.setZoom(1.75).setCenter([170, 15]); + this.projection1.setZoom(1.75); + this.projection1.setCenter([170, 15]); this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); QUnit.test('Eastern edge - from viewport' + namePart, function(assert) { @@ -748,15 +750,16 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ assert.arraysEqual(this.projection2.getViewport(), this.projection1.getViewport()); }); - QUnit.skip('Southern edge - to viewport' + namePart, function(assert) { + QUnit.test('Southern edge - to viewport' + namePart, function(assert) { this.setBounds(bounds); - this.projection1.setZoom(2.3).setCenter([50, -75]); + this.projection1.setZoom(2.3); + this.projection1.setCenter([50, -75]); this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); QUnit.test('Southern edge - from viewport' + namePart, function(assert) { @@ -1469,3 +1472,21 @@ QUnit.assert.arraysEqual = function(actual, expected, message, epsilon) { message: message }); }; + +QUnit.assert.arraysRoughEqual = function(actual, expected, message, percentTolerance = 10) { + const equal = expected.every((expectedVal, i) => { + const actualVal = actual[i]; + const relativeError = expectedVal !== 0 + ? Math.abs((actualVal - expectedVal) / expectedVal) * 100 + : Math.abs(actualVal); + + return relativeError <= percentTolerance; + }); + + this.pushResult({ + result: equal, + actual, + expected, + message: `${message}${equal ? '' : ` (tolerance: ${percentTolerance}%)`}` + }); +}; From f1b66a24a6c60841a4914124c0f26e0bdd6e3dfc Mon Sep 17 00:00:00 2001 From: dmlvr Date: Wed, 14 Jan 2026 13:54:32 +0200 Subject: [PATCH 07/15] skip-cache --- .../testing/tests/DevExpress.viz.vectorMap/projection.tests.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js index 8b9ab3a92d62..4bd7e244def4 100644 --- a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js @@ -709,7 +709,6 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ this.projection1.setZoom(2); this.projection1.setCenter([0, 80]); - this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); From 6a4df18d0a4c1c186c4ff98bf0afae678d989851 Mon Sep 17 00:00:00 2001 From: dmlvr Date: Thu, 15 Jan 2026 11:30:25 +0200 Subject: [PATCH 08/15] remove conditional testing from drawer.scenarios.tests.js --- .../drawer.scenarios.tests.js | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js index ee7f9a99fee1..5413d3210c33 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js @@ -215,10 +215,6 @@ baseConfigs.forEach(baseConfig => { return isOpenedStateMode && isPosition; } - function conditionalTest(name, isUnsupportedConfig, callback) { - !isUnsupportedConfig() && QUnit.test(name, callback); - } - [undefined, 25].forEach(minSize => { QUnit.test('opened: false', function(assert) { const drawerElement = $('#' + drawerTesters.drawerElementId).get(0); @@ -304,7 +300,7 @@ baseConfigs.forEach(baseConfig => { }); }); - conditionalTest(`(revealMode: ${revealMode}) opened: false, visible: false -> visible: true -> opened: true`, () => configIs('overlap'), function(assert) { + QUnit.test(`(revealMode: ${revealMode}) opened: false, visible: false -> visible: true -> opened: true`, function(assert) { const drawerElement = $('#' + drawerTesters.drawerElementId).get(0); const drawer = new dxDrawer(drawerElement, getFullDrawerOptions({ opened: false, @@ -319,7 +315,12 @@ baseConfigs.forEach(baseConfig => { drawer.option('opened', true); this.clock.tick(100); - drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); + if(!configIs('overlap')) { + drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); + } else { + assert.strictEqual(drawer._overlay.option('visible'), true, 'panel is opened'); + } + }); @@ -484,7 +485,7 @@ baseConfigs.forEach(baseConfig => { drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); }); - conditionalTest('opened: true (T813710: template + rendered + _viewPortChangeHandler)', () => configIs(['shrink', 'push']) || configIs(undefined, 'right'), function(assert) { + QUnit.test('opened: true (T813710: template + rendered + _viewPortChangeHandler)', function(assert) { const drawerElement = $('#' + drawerTesters.drawerElementId).get(0); const drawer = new dxDrawer(drawerElement, getFullDrawerOptions({ opened: true, @@ -512,7 +513,7 @@ baseConfigs.forEach(baseConfig => { drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); }); - conditionalTest('opened: true, visible: false -> visible: true', () => configIs('overlap'), function(assert) { + QUnit.test('opened: true, visible: false -> visible: true', function(assert) { const drawerElement = $('#' + drawerTesters.drawerElementId).get(0); const drawer = new dxDrawer(drawerElement, getFullDrawerOptions({ opened: true, @@ -524,10 +525,14 @@ baseConfigs.forEach(baseConfig => { drawer.option('visible', true); this.clock.tick(100); - drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); + if(!configIs('overlap')) { + drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); + } else { + assert.strictEqual(drawer._overlay.option('visible'), true, 'panel is opened'); + } }); - conditionalTest('opened: true, visible: false -> repaint -> visible: true', () => configIs('overlap'), function(assert) { + QUnit.test('opened: true, visible: false -> repaint -> visible: true', function(assert) { const drawerElement = $('#' + drawerTesters.drawerElementId).get(0); const drawer = new dxDrawer(drawerElement, getFullDrawerOptions({ opened: true, @@ -542,7 +547,12 @@ baseConfigs.forEach(baseConfig => { drawer.option('visible', true); this.clock.tick(100); - drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); + if(!configIs('overlap')) { + drawerTesters[baseConfig.position].checkOpened(assert, drawer, drawerElement); + } else { + assert.strictEqual(drawer._overlay.option('visible'), true, 'panel is opened'); + } + }); }); }); From b69f1e9793fe9404c021040a58f6408eb97ebb3c Mon Sep 17 00:00:00 2001 From: dmlvr Date: Thu, 15 Jan 2026 12:38:32 +0200 Subject: [PATCH 09/15] remove arraysRoughEqual --- .../projection.tests.js | 30 +++++-------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js index 4bd7e244def4..1e6b3b51a9c8 100644 --- a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js @@ -712,7 +712,8 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + // assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); QUnit.test('Northern edge - from viewport' + namePart, function(assert) { @@ -735,7 +736,8 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + // assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); QUnit.test('Eastern edge - from viewport' + namePart, function(assert) { @@ -758,7 +760,8 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + // assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); QUnit.test('Southern edge - from viewport' + namePart, function(assert) { @@ -772,7 +775,7 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ assert.arraysEqual(this.projection2.getViewport(), this.projection1.getViewport()); }); - QUnit.skip('Western edge - to viewport' + namePart, function(assert) { + QUnit.test('Western edge - to viewport' + namePart, function(assert) { this.setBounds(bounds); this.projection1.setZoom(4.75).setCenter([-160, -10]); @@ -780,6 +783,7 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); + // assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); @@ -1471,21 +1475,3 @@ QUnit.assert.arraysEqual = function(actual, expected, message, epsilon) { message: message }); }; - -QUnit.assert.arraysRoughEqual = function(actual, expected, message, percentTolerance = 10) { - const equal = expected.every((expectedVal, i) => { - const actualVal = actual[i]; - const relativeError = expectedVal !== 0 - ? Math.abs((actualVal - expectedVal) / expectedVal) * 100 - : Math.abs(actualVal); - - return relativeError <= percentTolerance; - }); - - this.pushResult({ - result: equal, - actual, - expected, - message: `${message}${equal ? '' : ` (tolerance: ${percentTolerance}%)`}` - }); -}; From 37b14a5c906dc25931acaa9312a002195e7704cd Mon Sep 17 00:00:00 2001 From: dmlvr Date: Thu, 15 Jan 2026 13:52:08 +0200 Subject: [PATCH 10/15] add expected results for some test in projection.tests.js --- .../projection.tests.js | 57 ++++++++++++++++--- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js index 1e6b3b51a9c8..e335011d05b9 100644 --- a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js @@ -677,7 +677,35 @@ QUnit.module('Viewport', { } }); -$.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [-180, 90, 50, -90]], function(_, bounds) { +const boundsList = [null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [-180, 90, 50, -90]]; + +const expectedResults = { + [boundsList[0]]: { + 'Northern edge - to viewport': [0, 74.63890769603161], + 'Southern edge - to viewport': [50, -73.01422347071781], + }, + [boundsList[1]]: { + 'Northern edge - to viewport': [0, 79.12255522532102] + }, + [boundsList[2]]: { + 'Northern edge - to viewport': [0, 78.40221311830229] + }, + [boundsList[4]]: { + 'Northern edge - to viewport': [-1.9984014443252818e-14, 78.40221311830229] + } +}; + +const getExpectedResult = function(bounds, testName) { + const testResults = expectedResults[bounds]; + + if(!testResults) { + return null; + } + + return testResults[testName] ? testResults[testName] : null; +}; + +$.each(boundsList, function(_, bounds) { let namePart = bounds ? '[' + bounds.join(', ') + ']' : 'null'; namePart = ' / ' + namePart; @@ -712,8 +740,14 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - // assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); - assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + + const expected = getExpectedResult(bounds, 'Northern edge - to viewport'); + + if(expected) { + assert.arraysEqual(this.projection2.getCenter(), expected, 'center'); + } else { + assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + } }); QUnit.test('Northern edge - from viewport' + namePart, function(assert) { @@ -736,7 +770,6 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - // assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); @@ -760,8 +793,15 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - // assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); - assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + + const expected = getExpectedResult(bounds, 'Southern edge - to viewport'); + + if(expected) { + assert.arraysEqual(this.projection2.getCenter(), expected, 'center'); + } else { + assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + } + }); QUnit.test('Southern edge - from viewport' + namePart, function(assert) { @@ -778,13 +818,14 @@ $.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [ QUnit.test('Western edge - to viewport' + namePart, function(assert) { this.setBounds(bounds); - this.projection1.setZoom(4.75).setCenter([-160, -10]); + this.projection1.setZoom(4.75); + this.projection1.setCenter([-160, -10]); this.projection2.setViewport(this.projection1.getViewport()); assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - // assert.arraysRoughEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); + // assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); QUnit.test('Western edge - from viewport' + namePart, function(assert) { From 7a831da9796fd5035f1678781ba20bdfe269d1af Mon Sep 17 00:00:00 2001 From: Dmitry Lavrinovich <52966626+dmlvr@users.noreply.github.com> Date: Thu, 15 Jan 2026 14:22:52 +0200 Subject: [PATCH 11/15] Update packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Dmitry Lavrinovich <52966626+dmlvr@users.noreply.github.com> --- .../testing/tests/DevExpress.viz.vectorMap/projection.tests.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js index e335011d05b9..17fab6bf83f7 100644 --- a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js @@ -825,7 +825,6 @@ $.each(boundsList, function(_, bounds) { assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); - // assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); }); QUnit.test('Western edge - from viewport' + namePart, function(assert) { From 9b6a0c44b7aa911dca9e67b2dd2f89b513383b68 Mon Sep 17 00:00:00 2001 From: Dmitry Lavrinovich <52966626+dmlvr@users.noreply.github.com> Date: Thu, 15 Jan 2026 14:23:00 +0200 Subject: [PATCH 12/15] Update packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Dmitry Lavrinovich <52966626+dmlvr@users.noreply.github.com> --- .../testing/tests/DevExpress.viz.vectorMap/projection.tests.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js index 17fab6bf83f7..1b7b0dd4a269 100644 --- a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js @@ -801,7 +801,6 @@ $.each(boundsList, function(_, bounds) { } else { assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); } - }); QUnit.test('Southern edge - from viewport' + namePart, function(assert) { From e8675b0d955e998791604f38dcee4464614240fa Mon Sep 17 00:00:00 2001 From: Dmitry Lavrinovich <52966626+dmlvr@users.noreply.github.com> Date: Thu, 15 Jan 2026 14:23:11 +0200 Subject: [PATCH 13/15] Update packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Dmitry Lavrinovich <52966626+dmlvr@users.noreply.github.com> --- .../tests/DevExpress.ui.widgets/drawer.scenarios.tests.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js index 5413d3210c33..3bda88280b88 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js @@ -552,7 +552,6 @@ baseConfigs.forEach(baseConfig => { } else { assert.strictEqual(drawer._overlay.option('visible'), true, 'panel is opened'); } - }); }); }); From ca50acc248165745019c92ad51428919fab93b10 Mon Sep 17 00:00:00 2001 From: Dmitry Lavrinovich <52966626+dmlvr@users.noreply.github.com> Date: Thu, 15 Jan 2026 14:23:25 +0200 Subject: [PATCH 14/15] Update packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Dmitry Lavrinovich <52966626+dmlvr@users.noreply.github.com> --- .../tests/DevExpress.ui.widgets/drawer.scenarios.tests.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js index 3bda88280b88..3fd8a4ea1af4 100644 --- a/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.ui.widgets/drawer.scenarios.tests.js @@ -320,7 +320,6 @@ baseConfigs.forEach(baseConfig => { } else { assert.strictEqual(drawer._overlay.option('visible'), true, 'panel is opened'); } - }); From 8858a9725a86ca8dc0c17e6507cb6d468449fd8e Mon Sep 17 00:00:00 2001 From: dmlvr Date: Thu, 15 Jan 2026 15:16:26 +0200 Subject: [PATCH 15/15] drop some skipped tests --- .../projection.tests.js | 54 +------------------ 1 file changed, 2 insertions(+), 52 deletions(-) diff --git a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js index 1b7b0dd4a269..f0ee4e1636a8 100644 --- a/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js +++ b/packages/devextreme/testing/tests/DevExpress.viz.vectorMap/projection.tests.js @@ -677,35 +677,7 @@ QUnit.module('Viewport', { } }); -const boundsList = [null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [-180, 90, 50, -90]]; - -const expectedResults = { - [boundsList[0]]: { - 'Northern edge - to viewport': [0, 74.63890769603161], - 'Southern edge - to viewport': [50, -73.01422347071781], - }, - [boundsList[1]]: { - 'Northern edge - to viewport': [0, 79.12255522532102] - }, - [boundsList[2]]: { - 'Northern edge - to viewport': [0, 78.40221311830229] - }, - [boundsList[4]]: { - 'Northern edge - to viewport': [-1.9984014443252818e-14, 78.40221311830229] - } -}; - -const getExpectedResult = function(bounds, testName) { - const testResults = expectedResults[bounds]; - - if(!testResults) { - return null; - } - - return testResults[testName] ? testResults[testName] : null; -}; - -$.each(boundsList, function(_, bounds) { +$.each([null, [-180, 90, 180, -20], [-50, 90, 180, -90], [-180, 20, 180, -90], [-180, 90, 50, -90]], function(_, bounds) { let namePart = bounds ? '[' + bounds.join(', ') + ']' : 'null'; namePart = ' / ' + namePart; @@ -732,24 +704,6 @@ $.each(boundsList, function(_, bounds) { assert.arraysEqual(this.projection2.getViewport(), this.projection1.getViewport()); }); - QUnit.test('Northern edge - to viewport' + namePart, function(assert) { - this.setBounds(bounds); - - this.projection1.setZoom(2); - this.projection1.setCenter([0, 80]); - this.projection2.setViewport(this.projection1.getViewport()); - - assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - - const expected = getExpectedResult(bounds, 'Northern edge - to viewport'); - - if(expected) { - assert.arraysEqual(this.projection2.getCenter(), expected, 'center'); - } else { - assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); - } - }); - QUnit.test('Northern edge - from viewport' + namePart, function(assert) { this.setBounds(bounds); @@ -794,11 +748,7 @@ $.each(boundsList, function(_, bounds) { assert.roughEqual(this.projection2.getZoom(), this.projection1.getZoom(), 1E-8, 'zoom'); - const expected = getExpectedResult(bounds, 'Southern edge - to viewport'); - - if(expected) { - assert.arraysEqual(this.projection2.getCenter(), expected, 'center'); - } else { + if(bounds) { assert.arraysEqual(this.projection2.getCenter(), this.projection1.getCenter(), 'center'); } });