@lvce-editor/test-with-playwright-worker 14.7.0 → 15.0.0
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/dist/workerMain.js +50 -24
- package/package.json +2 -2
package/dist/workerMain.js
CHANGED
|
@@ -962,27 +962,39 @@ const runTest = async ({
|
|
|
962
962
|
traceFocus
|
|
963
963
|
}) => {
|
|
964
964
|
const start = performance.now();
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
const testState = getTestState(testOverlayState);
|
|
977
|
-
const end = performance.now();
|
|
978
|
-
return {
|
|
965
|
+
try {
|
|
966
|
+
const url = getUrlFromTestFile(test, port, traceFocus);
|
|
967
|
+
await page.goto(url, {
|
|
968
|
+
waitUntil: 'networkidle'
|
|
969
|
+
});
|
|
970
|
+
const testOverlay = page.locator('#TestOverlay');
|
|
971
|
+
await expect(testOverlay).toBeVisible({
|
|
972
|
+
timeout
|
|
973
|
+
});
|
|
974
|
+
const text = await testOverlay.textContent();
|
|
975
|
+
const testOverlayState = await testOverlay.getAttribute('data-state');
|
|
979
976
|
// @ts-ignore
|
|
980
|
-
|
|
981
|
-
end
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
977
|
+
const testState = getTestState(testOverlayState);
|
|
978
|
+
const end = performance.now();
|
|
979
|
+
return {
|
|
980
|
+
// @ts-ignore
|
|
981
|
+
...testState,
|
|
982
|
+
end,
|
|
983
|
+
error: text,
|
|
984
|
+
name: test,
|
|
985
|
+
start
|
|
986
|
+
};
|
|
987
|
+
} catch (error) {
|
|
988
|
+
const end = performance.now();
|
|
989
|
+
const message = error instanceof Error ? error.message : `${error}`;
|
|
990
|
+
return {
|
|
991
|
+
end,
|
|
992
|
+
error: message,
|
|
993
|
+
name: test,
|
|
994
|
+
start,
|
|
995
|
+
status: Fail
|
|
996
|
+
};
|
|
997
|
+
}
|
|
986
998
|
};
|
|
987
999
|
|
|
988
1000
|
/**
|
|
@@ -1055,6 +1067,11 @@ const lockedPorts = {
|
|
|
1055
1067
|
// and a new young set for locked ports are created.
|
|
1056
1068
|
const releaseOldLockedPortsIntervalMs = 1000 * 15;
|
|
1057
1069
|
|
|
1070
|
+
// Keep `reserve` deliberately process-wide by port number.
|
|
1071
|
+
// It is meant to avoid in-process races, not to model every possible
|
|
1072
|
+
// IPv4/IPv6 or host-specific bind combination.
|
|
1073
|
+
const reservedPorts = new Set();
|
|
1074
|
+
|
|
1058
1075
|
// Lazily create timeout on first use
|
|
1059
1076
|
let timeout;
|
|
1060
1077
|
const getLocalHosts = () => {
|
|
@@ -1101,11 +1118,16 @@ const getAvailablePort = async (options, hosts) => {
|
|
|
1101
1118
|
}
|
|
1102
1119
|
return options.port;
|
|
1103
1120
|
};
|
|
1121
|
+
const isLockedPort = port => lockedPorts.old.has(port) || lockedPorts.young.has(port) || reservedPorts.has(port);
|
|
1104
1122
|
const portCheckSequence = function* (ports) {
|
|
1105
1123
|
yield 0; // Fall back to 0 if anything else failed
|
|
1106
1124
|
};
|
|
1107
1125
|
async function getPorts(options) {
|
|
1108
1126
|
let exclude = new Set();
|
|
1127
|
+
const {
|
|
1128
|
+
reserve,
|
|
1129
|
+
...netOptions
|
|
1130
|
+
} = {};
|
|
1109
1131
|
if (timeout === undefined) {
|
|
1110
1132
|
timeout = setTimeout(() => {
|
|
1111
1133
|
timeout = undefined;
|
|
@@ -1125,19 +1147,23 @@ async function getPorts(options) {
|
|
|
1125
1147
|
continue;
|
|
1126
1148
|
}
|
|
1127
1149
|
let availablePort = await getAvailablePort({
|
|
1128
|
-
...
|
|
1150
|
+
...netOptions,
|
|
1129
1151
|
port
|
|
1130
1152
|
}, hosts); // eslint-disable-line no-await-in-loop
|
|
1131
|
-
while (
|
|
1153
|
+
while (isLockedPort(availablePort)) {
|
|
1132
1154
|
if (port !== 0) {
|
|
1133
1155
|
throw new Locked(port);
|
|
1134
1156
|
}
|
|
1135
1157
|
availablePort = await getAvailablePort({
|
|
1136
|
-
...
|
|
1158
|
+
...netOptions,
|
|
1137
1159
|
port
|
|
1138
1160
|
}, hosts); // eslint-disable-line no-await-in-loop
|
|
1139
1161
|
}
|
|
1140
|
-
|
|
1162
|
+
if (reserve) {
|
|
1163
|
+
reservedPorts.add(availablePort);
|
|
1164
|
+
} else {
|
|
1165
|
+
lockedPorts.young.add(availablePort);
|
|
1166
|
+
}
|
|
1141
1167
|
return availablePort;
|
|
1142
1168
|
} catch (error) {
|
|
1143
1169
|
if (!['EADDRINUSE', 'EACCES'].includes(error.code) && !(error instanceof Locked)) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvce-editor/test-with-playwright-worker",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "15.0.0",
|
|
4
4
|
"description": "Worker package for test-with-playwright",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"type": "module",
|
|
13
13
|
"main": "dist/workerMain.js",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@playwright/test": "1.
|
|
15
|
+
"@playwright/test": "1.59.0"
|
|
16
16
|
},
|
|
17
17
|
"engines": {
|
|
18
18
|
"node": ">=24"
|