vease 1.48.0-rc.13 → 1.48.0-rc.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/tests/e2e/utils/app_interaction.js +2 -2
- package/tests/e2e/utils/app_interaction.ts +4 -3
- package/tests/e2e/utils/camera_interaction.js +1 -0
- package/tests/e2e/utils/camera_interaction.ts +30 -21
- package/tests/e2e/utils/clipping_planes_interaction.ts +8 -7
- package/tests/e2e/utils/create_objects.ts +27 -13
- package/tests/e2e/utils/data/helpers/attribute.js +4 -4
- package/tests/e2e/utils/data/helpers/attribute.ts +36 -27
- package/tests/e2e/utils/data/helpers/color.js +12 -10
- package/tests/e2e/utils/data/helpers/color.ts +65 -21
- package/tests/e2e/utils/data/helpers/color_picker.js +3 -6
- package/tests/e2e/utils/data/helpers/color_picker.ts +15 -8
- package/tests/e2e/utils/data/mesh/cells/attribute.js +10 -10
- package/tests/e2e/utils/data/mesh/cells/attribute.ts +27 -11
- package/tests/e2e/utils/data/mesh/cells/color.js +8 -8
- package/tests/e2e/utils/data/mesh/cells/color.ts +9 -8
- package/tests/e2e/utils/data/mesh/cells/visibility.js +2 -2
- package/tests/e2e/utils/data/mesh/cells/visibility.ts +3 -2
- package/tests/e2e/utils/data/mesh/edges/attribute.js +10 -10
- package/tests/e2e/utils/data/mesh/edges/attribute.ts +27 -11
- package/tests/e2e/utils/data/mesh/edges/color.js +8 -8
- package/tests/e2e/utils/data/mesh/edges/color.ts +9 -8
- package/tests/e2e/utils/data/mesh/edges/visibility.js +2 -2
- package/tests/e2e/utils/data/mesh/edges/visibility.ts +3 -2
- package/tests/e2e/utils/data/mesh/edges/width.js +2 -2
- package/tests/e2e/utils/data/mesh/edges/width.ts +3 -2
- package/tests/e2e/utils/data/mesh/points/attribute.js +4 -4
- package/tests/e2e/utils/data/mesh/points/attribute.ts +17 -5
- package/tests/e2e/utils/data/mesh/points/color.js +8 -8
- package/tests/e2e/utils/data/mesh/points/color.ts +9 -8
- package/tests/e2e/utils/data/mesh/points/size.js +2 -2
- package/tests/e2e/utils/data/mesh/points/size.ts +3 -2
- package/tests/e2e/utils/data/mesh/points/visibility.js +2 -2
- package/tests/e2e/utils/data/mesh/points/visibility.ts +3 -2
- package/tests/e2e/utils/data/mesh/polygon/attribute.js +10 -10
- package/tests/e2e/utils/data/mesh/polygon/attribute.ts +27 -11
- package/tests/e2e/utils/data/mesh/polygon/color.js +8 -8
- package/tests/e2e/utils/data/mesh/polygon/color.ts +9 -8
- package/tests/e2e/utils/data/mesh/polygon/textures.js +2 -2
- package/tests/e2e/utils/data/mesh/polygon/textures.ts +3 -2
- package/tests/e2e/utils/data/mesh/polygon/visibility.js +2 -2
- package/tests/e2e/utils/data/mesh/polygon/visibility.ts +3 -2
- package/tests/e2e/utils/data/mesh/polyhedra/attribute.js +10 -10
- package/tests/e2e/utils/data/mesh/polyhedra/attribute.ts +27 -11
- package/tests/e2e/utils/data/mesh/polyhedra/color.js +10 -10
- package/tests/e2e/utils/data/mesh/polyhedra/color.ts +11 -10
- package/tests/e2e/utils/data/mesh/polyhedra/visibility.js +2 -2
- package/tests/e2e/utils/data/mesh/polyhedra/visibility.ts +3 -2
- package/tests/e2e/utils/data/model/attribute.js +26 -26
- package/tests/e2e/utils/data/model/attribute.ts +70 -26
- package/tests/e2e/utils/data/model/color.js +8 -8
- package/tests/e2e/utils/data/model/color.ts +9 -8
- package/tests/e2e/utils/data/model/edges/visibility.js +2 -2
- package/tests/e2e/utils/data/model/edges/visibility.ts +3 -2
- package/tests/e2e/utils/data/model/points/size.js +2 -2
- package/tests/e2e/utils/data/model/points/size.ts +3 -2
- package/tests/e2e/utils/data/model/points/visibility.js +2 -2
- package/tests/e2e/utils/data/model/points/visibility.ts +3 -2
- package/tests/e2e/utils/data_manager.ts +13 -12
- package/tests/e2e/utils/extension.js +2 -2
- package/tests/e2e/utils/extension.ts +5 -4
- package/tests/e2e/utils/fixtures.js +3 -3
- package/tests/e2e/utils/fixtures.ts +15 -12
- package/tests/e2e/utils/load.js +1 -1
- package/tests/e2e/utils/load.ts +7 -7
- package/tests/e2e/utils/navigate.js +52 -36
- package/tests/e2e/utils/navigate.ts +80 -46
- package/tests/e2e/utils/object_trees/common.js +8 -3
- package/tests/e2e/utils/object_trees/common.ts +57 -20
- package/tests/e2e/utils/object_trees/main_object_tree.js +10 -10
- package/tests/e2e/utils/object_trees/main_object_tree.ts +26 -17
- package/tests/e2e/utils/object_trees/model_components_object_tree.js +18 -18
- package/tests/e2e/utils/object_trees/model_components_object_tree.ts +52 -26
- package/tests/e2e/utils/other.js +5 -1
- package/tests/e2e/utils/other.ts +12 -2
- package/tests/e2e/utils/project_interaction.ts +3 -2
- package/tests/e2e/utils/types/kill_port.d.js +1 -0
- package/tests/e2e/utils/types/kill_port.d.ts +3 -0
- package/tests/e2e/utils/viewer_interaction.js +38 -26
- package/tests/e2e/utils/viewer_interaction.ts +110 -43
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { afterActionWait } from "./constants.js";
|
|
2
2
|
//#region tests/e2e/utils/app_interaction.ts
|
|
3
|
-
function moveMouseOutOfTheWay(window) {
|
|
4
|
-
|
|
3
|
+
async function moveMouseOutOfTheWay(window) {
|
|
4
|
+
await window.mouse.move(0, 0);
|
|
5
5
|
}
|
|
6
6
|
async function closeAllMenus(window) {
|
|
7
7
|
await window.keyboard.press("Escape");
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { Page } from "@playwright/test";
|
|
1
2
|
import { afterActionWait } from "./constants";
|
|
2
3
|
|
|
3
|
-
function moveMouseOutOfTheWay(window) {
|
|
4
|
-
|
|
4
|
+
async function moveMouseOutOfTheWay(window: Page): Promise<void> {
|
|
5
|
+
await window.mouse.move(0, 0);
|
|
5
6
|
}
|
|
6
|
-
async function closeAllMenus(window) {
|
|
7
|
+
async function closeAllMenus(window: Page): Promise<void> {
|
|
7
8
|
await window.keyboard.press("Escape");
|
|
8
9
|
await window.waitForTimeout(afterActionWait);
|
|
9
10
|
}
|
|
@@ -83,6 +83,7 @@ async function toggleShrinkFilter(window) {
|
|
|
83
83
|
async function setShrinkFactor(window, shrinkFactorValue) {
|
|
84
84
|
const slider = window.getByTestId("shrinkFactorSlider");
|
|
85
85
|
const box = await slider.boundingBox();
|
|
86
|
+
if (!box) throw new Error("Could not get bounding box of the shrink factor slider.");
|
|
86
87
|
const clickX = box.width * shrinkFactorValue;
|
|
87
88
|
await slider.click({ position: {
|
|
88
89
|
x: clickX,
|
|
@@ -1,29 +1,31 @@
|
|
|
1
|
+
import type { Page } from "@playwright/test";
|
|
2
|
+
|
|
1
3
|
import { afterActionWait, dragElement, getHybridViewerCanvas } from "./viewer_interaction";
|
|
2
4
|
import { closeAllMenus, moveMouseOutOfTheWay } from "./app_interaction";
|
|
3
5
|
|
|
4
|
-
async function resetCamera(window) {
|
|
6
|
+
async function resetCamera(window: Page): Promise<void> {
|
|
5
7
|
await window.getByTestId("resetCameraButton").click();
|
|
6
8
|
await moveMouseOutOfTheWay(window);
|
|
7
9
|
await window.waitForTimeout(afterActionWait);
|
|
8
10
|
}
|
|
9
11
|
|
|
10
|
-
async function rotateCamera(window, deltaX, deltaY = 0) {
|
|
12
|
+
async function rotateCamera(window: Page, deltaX: number, deltaY = 0): Promise<void> {
|
|
11
13
|
const hybridViewerCanvas = getHybridViewerCanvas(window);
|
|
12
14
|
await dragElement(window, hybridViewerCanvas, { deltaX, deltaY });
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
async function toggleCenterOnClick(window) {
|
|
17
|
+
async function toggleCenterOnClick(window: Page): Promise<void> {
|
|
16
18
|
await window.getByTestId("centerOnClickButton").click();
|
|
17
19
|
await window.waitForTimeout(afterActionWait);
|
|
18
20
|
}
|
|
19
21
|
|
|
20
|
-
async function toggleGridScale(window) {
|
|
22
|
+
async function toggleGridScale(window: Page): Promise<void> {
|
|
21
23
|
await closeAllMenus(window);
|
|
22
24
|
await window.getByTestId("gridScaleButton").click();
|
|
23
25
|
await window.waitForTimeout(afterActionWait);
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
async function setZScaling(window, zScaleValue) {
|
|
28
|
+
async function setZScaling(window: Page, zScaleValue: number): Promise<void> {
|
|
27
29
|
await closeAllMenus(window);
|
|
28
30
|
await window.getByTestId("zScalingButton").click();
|
|
29
31
|
await window.waitForTimeout(afterActionWait);
|
|
@@ -42,12 +44,12 @@ async function setZScaling(window, zScaleValue) {
|
|
|
42
44
|
await window.waitForTimeout(afterActionWait);
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
async function toggleCameraManager(window) {
|
|
47
|
+
async function toggleCameraManager(window: Page): Promise<void> {
|
|
46
48
|
await window.getByTestId("cameraManagerButton").click();
|
|
47
49
|
await window.waitForTimeout(afterActionWait);
|
|
48
50
|
}
|
|
49
51
|
|
|
50
|
-
async function saveCameraPosition(window, name) {
|
|
52
|
+
async function saveCameraPosition(window: Page, name: string): Promise<void> {
|
|
51
53
|
const input = window.getByTestId("cameraPositionNameInput").locator("input");
|
|
52
54
|
await input.fill(name);
|
|
53
55
|
await window.waitForTimeout(afterActionWait);
|
|
@@ -55,28 +57,28 @@ async function saveCameraPosition(window, name) {
|
|
|
55
57
|
await window.waitForTimeout(afterActionWait);
|
|
56
58
|
}
|
|
57
59
|
|
|
58
|
-
async function closeCameraManager(window) {
|
|
60
|
+
async function closeCameraManager(window: Page): Promise<void> {
|
|
59
61
|
await window.getByTestId("closeCameraManagerButton").click();
|
|
60
62
|
await window.waitForTimeout(afterActionWait);
|
|
61
63
|
}
|
|
62
64
|
|
|
63
|
-
async function toggleCameraOrientation(window) {
|
|
65
|
+
async function toggleCameraOrientation(window: Page): Promise<void> {
|
|
64
66
|
await window.getByTestId("cameraOrientationButton").click();
|
|
65
67
|
await window.waitForTimeout(afterActionWait);
|
|
66
68
|
}
|
|
67
69
|
|
|
68
|
-
async function selectCameraOrientation(window, label) {
|
|
70
|
+
async function selectCameraOrientation(window: Page, label: string): Promise<void> {
|
|
69
71
|
const vtkKey = label.replace("+", "Plus").replace("-", "Minus");
|
|
70
72
|
await window.getByTestId(`cameraOrientation${vtkKey}Button`).click();
|
|
71
73
|
await window.waitForTimeout(afterActionWait);
|
|
72
74
|
}
|
|
73
75
|
|
|
74
|
-
async function restoreCameraPosition(window, name) {
|
|
76
|
+
async function restoreCameraPosition(window: Page, name: string): Promise<void> {
|
|
75
77
|
await window.getByTestId(`restoreCameraPosition${name}Button`).click();
|
|
76
78
|
await window.waitForTimeout(afterActionWait);
|
|
77
79
|
}
|
|
78
80
|
|
|
79
|
-
async function ensureHighlightMenuOpen(window, childButtonTestId) {
|
|
81
|
+
async function ensureHighlightMenuOpen(window: Page, childButtonTestId: string): Promise<void> {
|
|
80
82
|
if (!(await window.getByTestId(childButtonTestId).isVisible())) {
|
|
81
83
|
await window.getByTestId("highlightOnHoverButton").click();
|
|
82
84
|
await window.waitForTimeout(afterActionWait);
|
|
@@ -87,32 +89,35 @@ async function ensureHighlightMenuOpen(window, childButtonTestId) {
|
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
91
|
|
|
90
|
-
async function toggleShrinkFilter(window) {
|
|
92
|
+
async function toggleShrinkFilter(window: Page): Promise<void> {
|
|
91
93
|
await window.getByTestId("shrinkFilterButton").click();
|
|
92
94
|
await window.waitForTimeout(afterActionWait);
|
|
93
95
|
}
|
|
94
96
|
|
|
95
|
-
async function setShrinkFactor(window, shrinkFactorValue) {
|
|
97
|
+
async function setShrinkFactor(window: Page, shrinkFactorValue: number): Promise<void> {
|
|
96
98
|
const slider = window.getByTestId("shrinkFactorSlider");
|
|
97
99
|
const box = await slider.boundingBox();
|
|
100
|
+
if (!box) {
|
|
101
|
+
throw new Error("Could not get bounding box of the shrink factor slider.");
|
|
102
|
+
}
|
|
98
103
|
const clickX = box.width * shrinkFactorValue;
|
|
99
104
|
await slider.click({ position: { x: clickX, y: box.height / 2 } });
|
|
100
105
|
await window.waitForTimeout(afterActionWait);
|
|
101
106
|
}
|
|
102
107
|
|
|
103
|
-
async function resetShrinkFilter(window) {
|
|
108
|
+
async function resetShrinkFilter(window: Page): Promise<void> {
|
|
104
109
|
await window.getByTestId("resetShrinkButton").click();
|
|
105
110
|
await window.waitForTimeout(afterActionWait);
|
|
106
111
|
}
|
|
107
112
|
|
|
108
|
-
async function toggleShrinkTargetAllVisible(window) {
|
|
113
|
+
async function toggleShrinkTargetAllVisible(window: Page): Promise<void> {
|
|
109
114
|
const switchElement = window.getByTestId("shrinkTargetAllVisibleSwitch");
|
|
110
115
|
const checkbox = switchElement.getByRole("checkbox");
|
|
111
116
|
await checkbox.click();
|
|
112
117
|
await window.waitForTimeout(afterActionWait);
|
|
113
118
|
}
|
|
114
119
|
|
|
115
|
-
async function selectShrinkDatasets(window, datasetName, index = 0) {
|
|
120
|
+
async function selectShrinkDatasets(window: Page, datasetName: string, index = 0): Promise<void> {
|
|
116
121
|
const select = window.getByTestId("shrinkSelectedDatasetsSelect");
|
|
117
122
|
await select.click();
|
|
118
123
|
await window.waitForTimeout(afterActionWait);
|
|
@@ -123,20 +128,24 @@ async function selectShrinkDatasets(window, datasetName, index = 0) {
|
|
|
123
128
|
await window.waitForTimeout(afterActionWait);
|
|
124
129
|
}
|
|
125
130
|
|
|
126
|
-
async function toggleRuler(window) {
|
|
131
|
+
async function toggleRuler(window: Page): Promise<void> {
|
|
127
132
|
await closeAllMenus(window);
|
|
128
133
|
await window.getByTestId("rulerButton").click();
|
|
129
134
|
await window.waitForTimeout(afterActionWait);
|
|
130
135
|
}
|
|
131
136
|
|
|
132
|
-
async function toggleRulerSnap(window) {
|
|
137
|
+
async function toggleRulerSnap(window: Page): Promise<void> {
|
|
133
138
|
const switchElement = window.getByTestId("rulerSnapToggle");
|
|
134
139
|
const checkbox = switchElement.getByRole("checkbox");
|
|
135
140
|
await checkbox.click();
|
|
136
141
|
await window.waitForTimeout(afterActionWait);
|
|
137
142
|
}
|
|
138
143
|
|
|
139
|
-
async function setRulerPointInput(
|
|
144
|
+
async function setRulerPointInput(
|
|
145
|
+
window: Page,
|
|
146
|
+
pointIndex: number,
|
|
147
|
+
coords: number[],
|
|
148
|
+
): Promise<void> {
|
|
140
149
|
const card = window.getByTestId("rulerPointCard").nth(pointIndex - 1);
|
|
141
150
|
for (let axis = 0; axis < coords.length; axis += 1) {
|
|
142
151
|
const input = card.getByTestId("rulerPointCoordInput").nth(axis).locator("input");
|
|
@@ -147,7 +156,7 @@ async function setRulerPointInput(window, pointIndex, coords) {
|
|
|
147
156
|
await window.waitForTimeout(afterActionWait);
|
|
148
157
|
}
|
|
149
158
|
|
|
150
|
-
async function clearRuler(window) {
|
|
159
|
+
async function clearRuler(window: Page): Promise<void> {
|
|
151
160
|
await window.getByTestId("rulerClearButton").click();
|
|
152
161
|
await window.waitForTimeout(afterActionWait);
|
|
153
162
|
}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import type { Page } from "@playwright/test";
|
|
1
2
|
import { afterActionWait } from "./viewer_interaction";
|
|
2
3
|
|
|
3
|
-
async function toggleClippingPlanes(window) {
|
|
4
|
+
async function toggleClippingPlanes(window: Page): Promise<void> {
|
|
4
5
|
await window.getByTestId("clippingPlanesButton").click();
|
|
5
6
|
await window.waitForTimeout(afterActionWait);
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
async function invertPlaneNormal(window, planeIndex = 0) {
|
|
9
|
+
async function invertPlaneNormal(window: Page, planeIndex = 0): Promise<void> {
|
|
9
10
|
await window.getByTestId("invertNormalButton").nth(planeIndex).click();
|
|
10
11
|
await window.waitForTimeout(afterActionWait);
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
async function setPlaneOrigin(window, planeIndex, origin) {
|
|
14
|
+
async function setPlaneOrigin(window: Page, planeIndex: number, origin: number[]): Promise<void> {
|
|
14
15
|
const card = window.getByTestId("planeCard").nth(planeIndex);
|
|
15
16
|
for (let axis = 0; axis < origin.length; axis += 1) {
|
|
16
17
|
const input = card.getByTestId("planeOriginInput").nth(axis).locator("input");
|
|
@@ -21,7 +22,7 @@ async function setPlaneOrigin(window, planeIndex, origin) {
|
|
|
21
22
|
await window.waitForTimeout(afterActionWait);
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
async function setPlaneNormal(window, planeIndex, normal) {
|
|
25
|
+
async function setPlaneNormal(window: Page, planeIndex: number, normal: number[]): Promise<void> {
|
|
25
26
|
const card = window.getByTestId("planeCard").nth(planeIndex);
|
|
26
27
|
for (let axis = 0; axis < normal.length; axis += 1) {
|
|
27
28
|
const input = card.getByTestId("planeNormalInput").nth(axis).locator("input");
|
|
@@ -32,17 +33,17 @@ async function setPlaneNormal(window, planeIndex, normal) {
|
|
|
32
33
|
await window.waitForTimeout(afterActionWait);
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
async function addClippingPlane(window) {
|
|
36
|
+
async function addClippingPlane(window: Page): Promise<void> {
|
|
36
37
|
await window.getByTestId("addPlaneButton").click();
|
|
37
38
|
await window.waitForTimeout(afterActionWait);
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
async function toggleTargetAllVisible(window) {
|
|
41
|
+
async function toggleTargetAllVisible(window: Page): Promise<void> {
|
|
41
42
|
await window.getByTestId("targetAllVisibleSwitch").getByRole("checkbox").click();
|
|
42
43
|
await window.waitForTimeout(afterActionWait);
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
async function selectClippingDatasets(window, datasetName, index = 0) {
|
|
46
|
+
async function selectClippingDatasets(window: Page, datasetName: string, index = 0): Promise<void> {
|
|
46
47
|
await window.getByTestId("selectedDatasetsSelect").click();
|
|
47
48
|
await window.waitForTimeout(afterActionWait);
|
|
48
49
|
await window.getByRole("option", { name: datasetName }).nth(index).click();
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
import type { Locator, Page } from "@playwright/test";
|
|
2
|
+
|
|
1
3
|
import { afterActionWait, getHybridViewerCanvas } from "./viewer_interaction";
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
interface PointCoords {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
z: number;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function getCreateToolsPanelButton(window: Page): Locator {
|
|
4
12
|
return window.getByTestId("createToolsPanel");
|
|
5
13
|
}
|
|
6
14
|
|
|
7
|
-
async function openCreateToolsPanel(window) {
|
|
15
|
+
async function openCreateToolsPanel(window: Page): Promise<void> {
|
|
8
16
|
const createToolsPanelButton = getCreateToolsPanelButton(window);
|
|
9
17
|
const isOpen = await createToolsPanelButton.isVisible();
|
|
10
18
|
if (!isOpen) {
|
|
@@ -13,7 +21,7 @@ async function openCreateToolsPanel(window) {
|
|
|
13
21
|
}
|
|
14
22
|
}
|
|
15
23
|
|
|
16
|
-
async function closeCreateToolsPanel(window) {
|
|
24
|
+
async function closeCreateToolsPanel(window: Page): Promise<void> {
|
|
17
25
|
const createToolsPanelButton = getCreateToolsPanelButton(window);
|
|
18
26
|
const isOpen = await createToolsPanelButton.isVisible();
|
|
19
27
|
if (isOpen) {
|
|
@@ -22,13 +30,19 @@ async function closeCreateToolsPanel(window) {
|
|
|
22
30
|
}
|
|
23
31
|
}
|
|
24
32
|
|
|
25
|
-
async function selectCreateTool(window, toolId) {
|
|
33
|
+
async function selectCreateTool(window: Page, toolId: string): Promise<void> {
|
|
26
34
|
const createToolButton = window.getByTestId(`createToolCard-${toolId}`);
|
|
27
35
|
await createToolButton.click();
|
|
28
36
|
await window.waitForTimeout(afterActionWait);
|
|
29
37
|
}
|
|
30
38
|
|
|
31
|
-
async function fillPointCoords(
|
|
39
|
+
async function fillPointCoords(
|
|
40
|
+
window: Page,
|
|
41
|
+
index: number,
|
|
42
|
+
x: number,
|
|
43
|
+
y: number,
|
|
44
|
+
z: number,
|
|
45
|
+
): Promise<void> {
|
|
32
46
|
const row = window.getByTestId(`point-${index}`);
|
|
33
47
|
const inputs = row.locator("input");
|
|
34
48
|
await inputs.nth(0).fill(x.toString());
|
|
@@ -39,13 +53,13 @@ async function fillPointCoords(window, index, x, y, z) {
|
|
|
39
53
|
await window.waitForTimeout(afterActionWait);
|
|
40
54
|
}
|
|
41
55
|
|
|
42
|
-
async function addPointRow(window) {
|
|
56
|
+
async function addPointRow(window: Page): Promise<void> {
|
|
43
57
|
await window.getByTestId("addPointButton").click();
|
|
44
58
|
await window.waitForTimeout(afterActionWait);
|
|
45
59
|
}
|
|
46
60
|
|
|
47
|
-
async function fillPointsCoords(window, coords) {
|
|
48
|
-
async function fillNext(index) {
|
|
61
|
+
async function fillPointsCoords(window: Page, coords: PointCoords[]): Promise<void> {
|
|
62
|
+
async function fillNext(index: number): Promise<void> {
|
|
49
63
|
if (index >= coords.length) {
|
|
50
64
|
return;
|
|
51
65
|
}
|
|
@@ -60,12 +74,12 @@ async function fillPointsCoords(window, coords) {
|
|
|
60
74
|
await fillNext(0);
|
|
61
75
|
}
|
|
62
76
|
|
|
63
|
-
async function clickPickButton(window) {
|
|
77
|
+
async function clickPickButton(window: Page): Promise<void> {
|
|
64
78
|
await window.getByTestId("pickButton").click();
|
|
65
79
|
await window.waitForTimeout(afterActionWait);
|
|
66
80
|
}
|
|
67
81
|
|
|
68
|
-
async function pickPointInViewer(window, x, y) {
|
|
82
|
+
async function pickPointInViewer(window: Page, x: number, y: number): Promise<void> {
|
|
69
83
|
const hybridViewerCanvas = getHybridViewerCanvas(window);
|
|
70
84
|
await hybridViewerCanvas.click({
|
|
71
85
|
position: { x, y },
|
|
@@ -73,17 +87,17 @@ async function pickPointInViewer(window, x, y) {
|
|
|
73
87
|
await window.waitForTimeout(afterActionWait);
|
|
74
88
|
}
|
|
75
89
|
|
|
76
|
-
async function submitCreateObject(window) {
|
|
90
|
+
async function submitCreateObject(window: Page): Promise<void> {
|
|
77
91
|
await window.getByTestId("submitButton").click();
|
|
78
92
|
await window.waitForTimeout(afterActionWait);
|
|
79
93
|
}
|
|
80
94
|
|
|
81
|
-
async function closePickingBanner(window) {
|
|
95
|
+
async function closePickingBanner(window: Page): Promise<void> {
|
|
82
96
|
await window.getByTestId("pickingActiveChip").click();
|
|
83
97
|
await window.waitForTimeout(afterActionWait);
|
|
84
98
|
}
|
|
85
99
|
|
|
86
|
-
async function toggleClosedCurve(window) {
|
|
100
|
+
async function toggleClosedCurve(window: Page): Promise<void> {
|
|
87
101
|
await window.getByTestId("closedCurveCheckbox").getByRole("checkbox").check();
|
|
88
102
|
await window.waitForTimeout(afterActionWait);
|
|
89
103
|
}
|
|
@@ -41,7 +41,7 @@ async function setFeatureColorMap(window, menuTestId, colorMap) {
|
|
|
41
41
|
await moveMouseOutOfTheWay(window);
|
|
42
42
|
await window.waitForTimeout(afterActionWait);
|
|
43
43
|
}
|
|
44
|
-
async function applyAttribute(window, menuTestId, { attributeType, attributeName, item
|
|
44
|
+
async function applyAttribute(window, menuTestId, { attributeType, attributeName, item, colorMap, min, max }) {
|
|
45
45
|
if (typeof menuTestId === "string") {
|
|
46
46
|
await ensureMenuOpen(window, menuTestId);
|
|
47
47
|
await ensureFeatureVisible(window, menuTestId);
|
|
@@ -64,7 +64,7 @@ async function applyAttribute(window, menuTestId, { attributeType, attributeName
|
|
|
64
64
|
}).first().click();
|
|
65
65
|
await window.waitForTimeout(afterActionWait);
|
|
66
66
|
if (item !== void 0) await setFeatureItem(window, menuTestId, item);
|
|
67
|
-
if (colorMap) await setFeatureColorMap(window, menuTestId, colorMap);
|
|
67
|
+
if (colorMap !== void 0 && colorMap !== "") await setFeatureColorMap(window, menuTestId, colorMap);
|
|
68
68
|
if (min !== void 0) {
|
|
69
69
|
const input = container.getByTestId("attributeMinInput").first().locator("input");
|
|
70
70
|
await input.fill(min.toString());
|
|
@@ -81,10 +81,10 @@ async function applyAttribute(window, menuTestId, { attributeType, attributeName
|
|
|
81
81
|
await window.waitForTimeout(afterActionWait);
|
|
82
82
|
await moveMouseOutOfTheWay(window);
|
|
83
83
|
}
|
|
84
|
-
function setFeatureAttribute(window, viewerObjectType, feature, attributeType, attributeName, options = {}) {
|
|
84
|
+
async function setFeatureAttribute(window, viewerObjectType, feature, attributeType, attributeName, options = {}) {
|
|
85
85
|
let menuTestId = `${viewerObjectType}${feature}Menu`;
|
|
86
86
|
if (viewerObjectType === "model") menuTestId = "modelStyleMenu";
|
|
87
|
-
|
|
87
|
+
await applyAttribute(window, menuTestId, {
|
|
88
88
|
attributeType,
|
|
89
89
|
attributeName,
|
|
90
90
|
...options
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Locator, Page } from "@playwright/test";
|
|
1
2
|
import {
|
|
2
3
|
SLIDER_PINK,
|
|
3
4
|
clickColorPickerCanvas,
|
|
@@ -10,7 +11,7 @@ import {
|
|
|
10
11
|
moveMouseOutOfTheWay,
|
|
11
12
|
} from "@tests/utils/viewer_interaction";
|
|
12
13
|
|
|
13
|
-
async function resetMenuScroll(window, scrollTop = 0) {
|
|
14
|
+
async function resetMenuScroll(window: Page, scrollTop = 0): Promise<void> {
|
|
14
15
|
await window.evaluate((top) => {
|
|
15
16
|
const cardTexts = document.querySelectorAll(".v-card-text");
|
|
16
17
|
for (const cardTextElement of cardTexts) {
|
|
@@ -19,14 +20,18 @@ async function resetMenuScroll(window, scrollTop = 0) {
|
|
|
19
20
|
}, scrollTop);
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
function getMenuContainer(window, menuTestId) {
|
|
23
|
+
function getMenuContainer(window: Page, menuTestId: string | Locator): Locator {
|
|
23
24
|
if (typeof menuTestId === "string") {
|
|
24
25
|
return window.getByTestId(menuTestId);
|
|
25
26
|
}
|
|
26
27
|
return menuTestId;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
async function setFeatureItem(
|
|
30
|
+
async function setFeatureItem(
|
|
31
|
+
window: Page,
|
|
32
|
+
menuTestId: string | Locator,
|
|
33
|
+
item: number,
|
|
34
|
+
): Promise<void> {
|
|
30
35
|
const container = getMenuContainer(window, menuTestId);
|
|
31
36
|
const itemSelector = container.getByTestId("itemSelector").first();
|
|
32
37
|
await itemSelector.waitFor({ state: "visible" });
|
|
@@ -45,7 +50,11 @@ async function setFeatureItem(window, menuTestId, item) {
|
|
|
45
50
|
await moveMouseOutOfTheWay(window);
|
|
46
51
|
}
|
|
47
52
|
|
|
48
|
-
async function setFeatureColorMap(
|
|
53
|
+
async function setFeatureColorMap(
|
|
54
|
+
window: Page,
|
|
55
|
+
menuTestId: string | Locator,
|
|
56
|
+
colorMap: string,
|
|
57
|
+
): Promise<void> {
|
|
49
58
|
const container = getMenuContainer(window, menuTestId);
|
|
50
59
|
const colorMapPicker = container.getByTestId("colorMapPicker").first();
|
|
51
60
|
await colorMapPicker.waitFor({ state: "visible" });
|
|
@@ -80,17 +89,10 @@ interface ApplyAttributeOptions {
|
|
|
80
89
|
}
|
|
81
90
|
|
|
82
91
|
async function applyAttribute(
|
|
83
|
-
window,
|
|
84
|
-
menuTestId,
|
|
85
|
-
{
|
|
86
|
-
|
|
87
|
-
attributeName,
|
|
88
|
-
item = undefined,
|
|
89
|
-
colorMap = undefined,
|
|
90
|
-
min = undefined,
|
|
91
|
-
max = undefined,
|
|
92
|
-
}: ApplyAttributeOptions,
|
|
93
|
-
) {
|
|
92
|
+
window: Page,
|
|
93
|
+
menuTestId: string | Locator,
|
|
94
|
+
{ attributeType, attributeName, item, colorMap, min, max }: ApplyAttributeOptions,
|
|
95
|
+
): Promise<void> {
|
|
94
96
|
if (typeof menuTestId === "string") {
|
|
95
97
|
await ensureMenuOpen(window, menuTestId);
|
|
96
98
|
await ensureFeatureVisible(window, menuTestId);
|
|
@@ -125,7 +127,7 @@ async function applyAttribute(
|
|
|
125
127
|
await setFeatureItem(window, menuTestId, item);
|
|
126
128
|
}
|
|
127
129
|
|
|
128
|
-
if (colorMap) {
|
|
130
|
+
if (colorMap !== undefined && colorMap !== "") {
|
|
129
131
|
await setFeatureColorMap(window, menuTestId, colorMap);
|
|
130
132
|
}
|
|
131
133
|
|
|
@@ -146,22 +148,29 @@ async function applyAttribute(
|
|
|
146
148
|
await moveMouseOutOfTheWay(window);
|
|
147
149
|
}
|
|
148
150
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
151
|
+
interface FeatureAttributeOptions {
|
|
152
|
+
item?: number;
|
|
153
|
+
colorMap?: string;
|
|
154
|
+
min?: number | string;
|
|
155
|
+
max?: number | string;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async function setFeatureAttribute(
|
|
159
|
+
window: Page,
|
|
160
|
+
viewerObjectType: string,
|
|
161
|
+
feature: string,
|
|
162
|
+
attributeType: string,
|
|
163
|
+
attributeName: string,
|
|
164
|
+
options: FeatureAttributeOptions = {},
|
|
165
|
+
): Promise<void> {
|
|
157
166
|
let menuTestId = `${viewerObjectType}${feature}Menu`;
|
|
158
167
|
if (viewerObjectType === "model") {
|
|
159
168
|
menuTestId = "modelStyleMenu";
|
|
160
169
|
}
|
|
161
|
-
|
|
170
|
+
await applyAttribute(window, menuTestId, { attributeType, attributeName, ...options });
|
|
162
171
|
}
|
|
163
172
|
|
|
164
|
-
async function setQuickColorMap(window, colorMap) {
|
|
173
|
+
async function setQuickColorMap(window: Page, colorMap: string): Promise<void> {
|
|
165
174
|
const colorMapListFilter = window
|
|
166
175
|
.getByTestId("colorMapListFilter")
|
|
167
176
|
.filter({ visible: true })
|
|
@@ -182,7 +191,7 @@ async function setQuickColorMap(window, colorMap) {
|
|
|
182
191
|
await moveMouseOutOfTheWay(window);
|
|
183
192
|
}
|
|
184
193
|
|
|
185
|
-
async function setFeatureNoDataColor(window, menuTestId) {
|
|
194
|
+
async function setFeatureNoDataColor(window: Page, menuTestId: string | Locator): Promise<void> {
|
|
186
195
|
if (typeof menuTestId === "string") {
|
|
187
196
|
await ensureMenuOpen(window, menuTestId);
|
|
188
197
|
}
|
|
@@ -39,6 +39,7 @@ async function setOpacity(window, menuTestId, percent) {
|
|
|
39
39
|
await ensureFeatureVisible(window, menuTestId);
|
|
40
40
|
const alphaSlider = window.getByTestId(menuTestId).getByTestId("colorPicker").locator(".v-color-picker-preview__alpha, .v-color-picker__alpha").first();
|
|
41
41
|
const box = await alphaSlider.boundingBox();
|
|
42
|
+
if (!box) throw new Error("Could not get bounding box of the opacity slider");
|
|
42
43
|
await alphaSlider.click({
|
|
43
44
|
force: true,
|
|
44
45
|
position: {
|
|
@@ -54,26 +55,27 @@ async function setColorBlack(window, menuTestId, container = window) {
|
|
|
54
55
|
await setColoringStyle(window, menuTestId, "Constant", container);
|
|
55
56
|
const canvas = container.getByTestId("colorPicker").locator(".v-color-picker-canvas").first();
|
|
56
57
|
const box = await canvas.boundingBox();
|
|
58
|
+
if (!box) throw new Error("Could not get bounding box of the color canvas");
|
|
57
59
|
await canvas.click({ position: {
|
|
58
60
|
x: COLOR_CANVAS_OFFSET,
|
|
59
61
|
y: box.height - COLOR_CANVAS_OFFSET
|
|
60
62
|
} });
|
|
61
63
|
await window.waitForTimeout(afterActionWait);
|
|
62
64
|
}
|
|
63
|
-
function setFeatureColorBlack(window, viewerObjectType, feature, container = window) {
|
|
64
|
-
|
|
65
|
+
async function setFeatureColorBlack(window, viewerObjectType, feature, container = window) {
|
|
66
|
+
await setColorBlack(window, `${viewerObjectType}${feature}Menu`, container);
|
|
65
67
|
}
|
|
66
|
-
function setFeatureColor(window, viewerObjectType, feature, container = window) {
|
|
67
|
-
|
|
68
|
+
async function setFeatureColor(window, viewerObjectType, feature, container = window) {
|
|
69
|
+
await setColor(window, `${viewerObjectType}${feature}Menu`, container);
|
|
68
70
|
}
|
|
69
|
-
function setFeatureColorWithSlider(window, viewerObjectType, feature, container = window) {
|
|
70
|
-
|
|
71
|
+
async function setFeatureColorWithSlider(window, viewerObjectType, feature, container = window) {
|
|
72
|
+
await setColorWithSlider(window, `${viewerObjectType}${feature}Menu`, container);
|
|
71
73
|
}
|
|
72
|
-
function setFeatureColoringStyle(window, viewerObjectType, feature, coloringStyle, container = window) {
|
|
73
|
-
|
|
74
|
+
async function setFeatureColoringStyle(window, viewerObjectType, feature, coloringStyle, container = window) {
|
|
75
|
+
await setColoringStyle(window, `${viewerObjectType}${feature}Menu`, coloringStyle, container);
|
|
74
76
|
}
|
|
75
|
-
function setFeatureOpacity(window, viewerObjectType, feature, percent) {
|
|
76
|
-
|
|
77
|
+
async function setFeatureOpacity(window, viewerObjectType, feature, percent) {
|
|
78
|
+
await setOpacity(window, `${viewerObjectType}${feature}Menu`, percent);
|
|
77
79
|
}
|
|
78
80
|
//#endregion
|
|
79
81
|
export { setColor, setColorBlack, setColorWithSlider, setColoringStyle, setFeatureColor, setFeatureColorBlack, setFeatureColorWithSlider, setFeatureColoringStyle, setFeatureOpacity, setOpacity };
|