@aws-cdk-testing/cli-integ 3.25.0 → 3.25.1
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/npm-shrinkwrap.json +1 -1
- package/package.json +1 -1
- package/tests/cli-integ-tests/watch/cdk-watch-detects-file-changes-with-glob-patterns-negative.integtest.js +5 -10
- package/tests/cli-integ-tests/watch/cdk-watch-detects-file-changes-with-glob-patterns.integtest.js +6 -11
- package/tests/cli-integ-tests/watch/watch-helpers.d.ts +5 -3
- package/tests/cli-integ-tests/watch/watch-helpers.js +24 -9
package/npm-shrinkwrap.json
CHANGED
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@ const fs = require("fs");
|
|
|
5
5
|
const path = require("path");
|
|
6
6
|
const watch_helpers_1 = require("./watch-helpers");
|
|
7
7
|
const lib_1 = require("../../../lib");
|
|
8
|
-
jest.setTimeout(
|
|
8
|
+
jest.setTimeout(5 * 60 * 1000); // 5 minutes for watch tests
|
|
9
9
|
(0, lib_1.integTest)('cdk watch does NOT detect file changes for excluded patterns', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
10
10
|
// Create a test file that will be watched (for initial deploy)
|
|
11
11
|
const watchedFile = path.join(fixture.integTestDir, 'watched-file.ts');
|
|
@@ -20,12 +20,11 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
|
|
|
20
20
|
fs.writeFileSync(cdkJsonPath, JSON.stringify(cdkJson, null, 2));
|
|
21
21
|
await fixture.cli.makeCliAvailable();
|
|
22
22
|
let output = '';
|
|
23
|
-
// Start cdk watch
|
|
23
|
+
// Start cdk watch
|
|
24
24
|
const watchProcess = child_process.spawn('cdk', [
|
|
25
25
|
'watch', '--hotswap', '-v', fixture.fullStackName('test-1'),
|
|
26
26
|
], {
|
|
27
27
|
cwd: fixture.integTestDir,
|
|
28
|
-
shell: true,
|
|
29
28
|
stdio: 'pipe',
|
|
30
29
|
env: { ...process.env, ...fixture.cdkShellEnv() },
|
|
31
30
|
});
|
|
@@ -63,12 +62,8 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
|
|
|
63
62
|
fixture.log('✓ Watch still detects changes to included files');
|
|
64
63
|
}
|
|
65
64
|
finally {
|
|
66
|
-
|
|
67
|
-
watchProcess.kill('SIGTERM');
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
// process may have already exited
|
|
71
|
-
}
|
|
65
|
+
(0, watch_helpers_1.safeKillProcess)(watchProcess);
|
|
72
66
|
}
|
|
67
|
+
expect.assertions(5);
|
|
73
68
|
}));
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZ2xvYi1wYXR0ZXJucy1uZWdhdGl2ZS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstd2F0Y2gtZGV0ZWN0cy1maWxlLWNoYW5nZXMtd2l0aC1nbG9iLXBhdHRlcm5zLW5lZ2F0aXZlLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1EQUFpRTtBQUNqRSxzQ0FBb0U7QUFFcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBRTVELElBQUEsZUFBUyxFQUNQLDhEQUE4RCxFQUM5RCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQywrREFBK0Q7SUFDL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDdkUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUU5RCx1RUFBdUU7SUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO0tBQzlCLENBQUM7SUFDRixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENB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O1FBRS9ELE1BQU0sSUFBQSw2QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELENBQUMsQ0FBQztJQUNqRSxDQUFDO1lBQVMsQ0FBQztRQUNULElBQUEsK0JBQWUsRUFBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3YWl0Rm9yT3V0cHV0LCBzYWZlS2lsbFByb2Nlc3MgfSBmcm9tICcuL3dhdGNoLWhlbHBlcnMnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUsIHNsZWVwIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDUgKiA2MCAqIDEwMDApOyAvLyA1IG1pbnV0ZXMgZm9yIHdhdGNoIHRlc3RzXG5cbmludGVnVGVzdChcbiAgJ2NkayB3YXRjaCBkb2VzIE5PVCBkZXRlY3QgZmlsZSBjaGFuZ2VzIGZvciBleGNsdWRlZCBwYXR0ZXJucycsXG4gIHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIC8vIENyZWF0ZSBhIHRlc3QgZmlsZSB0aGF0IHdpbGwgYmUgd2F0Y2hlZCAoZm9yIGluaXRpYWwgZGVwbG95KVxuICAgIGNvbnN0IHdhdGNoZWRGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnd2F0Y2hlZC1maWxlLnRzJyk7XG4gICAgZnMud3JpdGVGaWxlU3luYyh3YXRjaGVkRmlsZSwgJ2V4cG9ydCBjb25zdCBpbml0aWFsID0gdHJ1ZTsnKTtcblxuICAgIC8vIFVwZGF0ZSBjZGsuanNvbiB0byBpbmNsdWRlIHdhdGNoIGNvbmZpZ3VyYXRpb24gd2l0aCBzcGVjaWZpYyBleGNsdWRlXG4gICAgY29uc3QgY2RrSnNvblBhdGggPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpO1xuICAgIGNvbnN0IGNka0pzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjZGtKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgIGNka0pzb24ud2F0Y2ggPSB7XG4gICAgICBpbmNsdWRlOiBbJyoqLyoudHMnXSxcbiAgICAgIGV4Y2x1ZGU6IFsnKiovKi5leGNsdWRlZC50cyddLFxuICAgIH07XG4gICAgZnMud3JpdGVGaWxlU3luYyhjZGtKc29uUGF0aCwgSlNPTi5zdHJpbmdpZnkoY2RrSnNvbiwgbnVsbCwgMikpO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jbGkubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgbGV0IG91dHB1dCA9ICcnO1xuXG4gICAgLy8gU3RhcnQgY2RrIHdhdGNoXG4gICAgY29uc3Qgd2F0Y2hQcm9jZXNzID0gY2hpbGRfcHJvY2Vzcy5zcGF3bignY2RrJywgW1xuICAgICAgJ3dhdGNoJywgJy0taG90c3dhcCcsICctdicsIGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgndGVzdC0xJyksXG4gICAgXSwge1xuICAgICAgY3dkOiBmaXh0dXJlLmludGVnVGVzdERpcixcbiAgICAgIHN0ZGlvOiAncGlwZScsXG4gICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLmZpeHR1cmUuY2RrU2hlbGxFbnYoKSB9LFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHdhdGNoUHJvY2Vzcy5zdGRvdXQ/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgb3V0cHV0ICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgZml4dHVyZS5sb2coZGF0YS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuICAgICAgd2F0Y2hQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICBvdXRwdXQgKz0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICBmaXh0dXJlLmxvZyhkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdhaXRGb3JPdXRwdXQoKCkgPT4gb3V0cHV0LCBcIlRyaWdnZXJpbmcgaW5pdGlhbCAnY2RrIGRlcGxveSdcIik7XG4gICAgICBmaXh0dXJlLmxvZygn4pyTIFdhdGNoIHN0YXJ0IGRldGVjdGVkJyk7XG5cbiAgICAgIGF3YWl0IHdhaXRGb3JPdXRwdXQoKCkgPT4gb3V0cHV0LCAnZGVwbG95bWVudCB0aW1lJyk7XG4gICAgICBmaXh0dXJlLmxvZygn4pyTIEluaXRpYWwgZGVwbG95bWVudCBjb21wbGV0ZWQnKTtcblxuICAgICAgLy8gQ291bnQgZGVwbG95bWVudHMgYmVmb3JlIGNyZWF0aW5nIGV4Y2x1ZGVkIGZpbGVcbiAgICAgIGNvbnN0IGRlcGxveW1lbnRzQmVmb3JlID0gKG91dHB1dC5tYXRjaCgvZGVwbG95bWVudCB0aW1lL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgIC8vIENyZWF0ZSBhbiBleGNsdWRlZCBmaWxlIC0gdGhpcyBzaG91bGQgTk9UIHRyaWdnZXIgYSB3YXRjaCBldmVudFxuICAgICAgY29uc3QgZXhjbHVkZWRGaWxlID0gcGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAnc2hvdWxkLWJlLWlnbm9yZWQuZXhjbHVkZWQudHMnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZXhjbHVkZWRGaWxlLCAnZXhwb3J0IGNvbnN0IGV4Y2x1ZGVkID0gdHJ1ZTsnKTtcbiAgICAgIGZpeHR1cmUubG9nKCdDcmVhdGVkIGV4Y2x1ZGVkIGZpbGU6IHNob3VsZC1iZS1pZ25vcmVkLmV4Y2x1ZGVkLnRzJyk7XG5cbiAgICAgIC8vIFdhaXQgYSByZWFzb25hYmxlIHRpbWUgZm9yIGFueSBwb3RlbnRpYWwgKHVud2FudGVkKSBkZXRlY3Rpb25cbiAgICAgIGF3YWl0IHNsZWVwKDUwMDApO1xuXG4gICAgICAvLyBWZXJpZnkgbm8gXCJEZXRlY3RlZCBjaGFuZ2VcIiBtZXNzYWdlIGZvciB0aGUgZXhjbHVkZWQgZmlsZVxuICAgICAgY29uc3QgZGV0ZWN0ZWRFeGNsdWRlZCA9IG91dHB1dC5pbmNsdWRlcygnRGV0ZWN0ZWQgY2hhbmdlIHRvJykgJiYgb3V0cHV0LmluY2x1ZGVzKCdleGNsdWRlZCcpO1xuICAgICAgZXhwZWN0KGRldGVjdGVkRXhjbHVkZWQpLnRvQmUoZmFsc2UpO1xuXG4gICAgICAvLyBWZXJpZnkgZGVwbG95bWVudCBjb3VudCBoYXNuJ3QgaW5jcmVhc2VkXG4gICAgICBjb25zdCBkZXBsb3ltZW50c0FmdGVyID0gKG91dHB1dC5tYXRjaCgvZGVwbG95bWVudCB0aW1lL2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgICBleHBlY3QoZGVwbG95bWVudHNBZnRlcikudG9CZShkZXBsb3ltZW50c0JlZm9yZSk7XG5cbiAgICAgIGZpeHR1cmUubG9nKCfinJMgV2F0Y2ggY29ycmVjdGx5IGlnbm9yZWQgZXhjbHVkZWQgZmlsZScpO1xuXG4gICAgICAvLyBOb3cgbW9kaWZ5IGEgd2F0Y2hlZCBmaWxlIHRvIGNvbmZpcm0gd2F0Y2ggaXMgc3RpbGwgd29ya2luZ1xuICAgICAgZnMud3JpdGVGaWxlU3luYyh3YXRjaGVkRmlsZSwgJ2V4cG9ydCBjb25zdCBtb2RpZmllZCA9IHRydWU7Jyk7XG5cbiAgICAgIGF3YWl0IHdhaXRGb3JPdXRwdXQoKCkgPT4gb3V0cHV0LCAnRGV0ZWN0ZWQgY2hhbmdlIHRvJyk7XG4gICAgICBmaXh0dXJlLmxvZygn4pyTIFdhdGNoIHN0aWxsIGRldGVjdHMgY2hhbmdlcyB0byBpbmNsdWRlZCBmaWxlcycpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzYWZlS2lsbFByb2Nlc3Mod2F0Y2hQcm9jZXNzKTtcbiAgICB9XG5cbiAgICBleHBlY3QuYXNzZXJ0aW9ucyg1KTtcbiAgfSksXG4pO1xuIl19
|
package/tests/cli-integ-tests/watch/cdk-watch-detects-file-changes-with-glob-patterns.integtest.js
CHANGED
|
@@ -5,7 +5,7 @@ const fs = require("fs");
|
|
|
5
5
|
const path = require("path");
|
|
6
6
|
const watch_helpers_1 = require("./watch-helpers");
|
|
7
7
|
const lib_1 = require("../../../lib");
|
|
8
|
-
jest.setTimeout(
|
|
8
|
+
jest.setTimeout(5 * 60 * 1000); // 5 minutes for watch tests
|
|
9
9
|
(0, lib_1.integTest)('cdk watch detects file changes with glob patterns', (0, lib_1.withDefaultFixture)(async (fixture) => {
|
|
10
10
|
// Create a test file that will be watched
|
|
11
11
|
const testFile = path.join(fixture.integTestDir, 'watch-test-file.ts');
|
|
@@ -19,12 +19,11 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
|
|
|
19
19
|
fs.writeFileSync(cdkJsonPath, JSON.stringify(cdkJson, null, 2));
|
|
20
20
|
await fixture.cli.makeCliAvailable();
|
|
21
21
|
let output = '';
|
|
22
|
-
// Start cdk watch
|
|
22
|
+
// Start cdk watch
|
|
23
23
|
const watchProcess = child_process.spawn('cdk', [
|
|
24
24
|
'watch', '--hotswap', '-v', fixture.fullStackName('test-1'),
|
|
25
25
|
], {
|
|
26
26
|
cwd: fixture.integTestDir,
|
|
27
|
-
shell: true,
|
|
28
27
|
stdio: 'pipe',
|
|
29
28
|
env: { ...process.env, ...fixture.cdkShellEnv() },
|
|
30
29
|
});
|
|
@@ -42,7 +41,7 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
|
|
|
42
41
|
await (0, watch_helpers_1.waitForOutput)(() => output, 'deployment time');
|
|
43
42
|
fixture.log('✓ Initial deployment completed');
|
|
44
43
|
// Update the test file timestamp to trigger a watch event
|
|
45
|
-
child_process.
|
|
44
|
+
child_process.spawnSync('touch', [testFile]);
|
|
46
45
|
await (0, watch_helpers_1.waitForOutput)(() => output, 'Detected change to');
|
|
47
46
|
fixture.log('✓ Watch detected file change');
|
|
48
47
|
// Wait for the second deployment to complete (2 occurrences of 'deployment time')
|
|
@@ -50,12 +49,8 @@ jest.setTimeout(3 * 60 * 1000); // 3 minutes for watch tests
|
|
|
50
49
|
fixture.log('✓ Second deployment completed');
|
|
51
50
|
}
|
|
52
51
|
finally {
|
|
53
|
-
|
|
54
|
-
watchProcess.kill('SIGTERM');
|
|
55
|
-
}
|
|
56
|
-
catch (e) {
|
|
57
|
-
// process may have already exited
|
|
58
|
-
}
|
|
52
|
+
(0, watch_helpers_1.safeKillProcess)(watchProcess);
|
|
59
53
|
}
|
|
54
|
+
expect.assertions(4);
|
|
60
55
|
}));
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXdhdGNoLWRldGVjdHMtZmlsZS1jaGFuZ2VzLXdpdGgtZ2xvYi1wYXR0ZXJucy5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstd2F0Y2gtZGV0ZWN0cy1maWxlLWNoYW5nZXMtd2l0aC1nbG9iLXBhdHRlcm5zLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUErQztBQUMvQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLG1EQUFtRjtBQUNuRixzQ0FBNkQ7QUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBRTVELElBQUEsZUFBUyxFQUNQLG1EQUFtRCxFQUNuRCxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNuQywwQ0FBMEM7SUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDdkUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUUzRCxpREFBaUQ7SUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO0tBQ3JCLENBQUM7SUFDRixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUVyQyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsa0JBQWtCO0lBQ2xCLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0tBQzVELEVBQUU7UUFDRCxHQUFHLEVBQUUsT0FBTyxDQUFDLFlBQVk7UUFDekIsS0FBSyxFQUFFLE1BQU07UUFDYixHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUU7S0FDbEQsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDO1FBQ0gsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFBLDZCQUFhLEVBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sSUFBQSw2QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUU5QywwREFBMEQ7UUFDMUQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sSUFBQSw2QkFBYSxFQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUU1QyxrRkFBa0Y7UUFDbEYsTUFBTSxJQUFBLGdDQUFnQixFQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDL0MsQ0FBQztZQUFTLENBQUM7UUFDVCxJQUFBLCtCQUFlLEVBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgd2FpdEZvck91dHB1dCwgd2FpdEZvckNvbmRpdGlvbiwgc2FmZUtpbGxQcm9jZXNzIH0gZnJvbSAnLi93YXRjaC1oZWxwZXJzJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDUgKiA2MCAqIDEwMDApOyAvLyA1IG1pbnV0ZXMgZm9yIHdhdGNoIHRlc3RzXG5cbmludGVnVGVzdChcbiAgJ2NkayB3YXRjaCBkZXRlY3RzIGZpbGUgY2hhbmdlcyB3aXRoIGdsb2IgcGF0dGVybnMnLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBDcmVhdGUgYSB0ZXN0IGZpbGUgdGhhdCB3aWxsIGJlIHdhdGNoZWRcbiAgICBjb25zdCB0ZXN0RmlsZSA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ3dhdGNoLXRlc3QtZmlsZS50cycpO1xuICAgIGZzLndyaXRlRmlsZVN5bmModGVzdEZpbGUsICdleHBvcnQgY29uc3QgaW5pdGlhbCA9IHRydWU7Jyk7XG5cbiAgICAvLyBVcGRhdGUgY2RrLmpzb24gdG8gaW5jbHVkZSB3YXRjaCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY2RrSnNvblBhdGggPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdjZGsuanNvbicpO1xuICAgIGNvbnN0IGNka0pzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjZGtKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgIGNka0pzb24ud2F0Y2ggPSB7XG4gICAgICBpbmNsdWRlOiBbJyoqLyoudHMnXSxcbiAgICB9O1xuICAgIGZzLndyaXRlRmlsZVN5bmMoY2RrSnNvblBhdGgsIEpTT04uc3RyaW5naWZ5KGNka0pzb24sIG51bGwsIDIpKTtcblxuICAgIGF3YWl0IGZpeHR1cmUuY2xpLm1ha2VDbGlBdmFpbGFibGUoKTtcblxuICAgIGxldCBvdXRwdXQgPSAnJztcblxuICAgIC8vIFN0YXJ0IGNkayB3YXRjaFxuICAgIGNvbnN0IHdhdGNoUHJvY2VzcyA9IGNoaWxkX3Byb2Nlc3Muc3Bhd24oJ2NkaycsIFtcbiAgICAgICd3YXRjaCcsICctLWhvdHN3YXAnLCAnLXYnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3Rlc3QtMScpLFxuICAgIF0sIHtcbiAgICAgIGN3ZDogZml4dHVyZS5pbnRlZ1Rlc3REaXIsXG4gICAgICBzdGRpbzogJ3BpcGUnLFxuICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCAuLi5maXh0dXJlLmNka1NoZWxsRW52KCkgfSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICB3YXRjaFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIG91dHB1dCArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIGZpeHR1cmUubG9nKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICB9KTtcbiAgICAgIHdhdGNoUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgb3V0cHV0ICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgZml4dHVyZS5sb2coZGF0YS50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgXCJUcmlnZ2VyaW5nIGluaXRpYWwgJ2NkayBkZXBsb3knXCIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBzdGFydCBkZXRlY3RlZCcpO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ2RlcGxveW1lbnQgdGltZScpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBJbml0aWFsIGRlcGxveW1lbnQgY29tcGxldGVkJyk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgdGVzdCBmaWxlIHRpbWVzdGFtcCB0byB0cmlnZ2VyIGEgd2F0Y2ggZXZlbnRcbiAgICAgIGNoaWxkX3Byb2Nlc3Muc3Bhd25TeW5jKCd0b3VjaCcsIFt0ZXN0RmlsZV0pO1xuXG4gICAgICBhd2FpdCB3YWl0Rm9yT3V0cHV0KCgpID0+IG91dHB1dCwgJ0RldGVjdGVkIGNoYW5nZSB0bycpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBXYXRjaCBkZXRlY3RlZCBmaWxlIGNoYW5nZScpO1xuXG4gICAgICAvLyBXYWl0IGZvciB0aGUgc2Vjb25kIGRlcGxveW1lbnQgdG8gY29tcGxldGUgKDIgb2NjdXJyZW5jZXMgb2YgJ2RlcGxveW1lbnQgdGltZScpXG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKCgpID0+IChvdXRwdXQubWF0Y2goL2RlcGxveW1lbnQgdGltZS9nKSB8fCBbXSkubGVuZ3RoID49IDIpO1xuICAgICAgZml4dHVyZS5sb2coJ+KckyBTZWNvbmQgZGVwbG95bWVudCBjb21wbGV0ZWQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2FmZUtpbGxQcm9jZXNzKHdhdGNoUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgZXhwZWN0LmFzc2VydGlvbnMoNCk7XG4gIH0pLFxuKTtcbiJdfQ==
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Shared helper functions for watch integration tests.
|
|
3
|
-
*/
|
|
1
|
+
import type { ChildProcess } from 'node:child_process';
|
|
4
2
|
/**
|
|
5
3
|
* Wait for a specific string to appear in the output.
|
|
6
4
|
*/
|
|
@@ -9,3 +7,7 @@ export declare function waitForOutput(getOutput: () => string, searchString: str
|
|
|
9
7
|
* Wait for a condition to become true.
|
|
10
8
|
*/
|
|
11
9
|
export declare function waitForCondition(condition: () => boolean): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Kill a spawned process.
|
|
12
|
+
*/
|
|
13
|
+
export declare function safeKillProcess(proc: ChildProcess): void;
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Shared helper functions for watch integration tests.
|
|
4
|
-
*/
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.waitForOutput = waitForOutput;
|
|
7
4
|
exports.waitForCondition = waitForCondition;
|
|
5
|
+
exports.safeKillProcess = safeKillProcess;
|
|
6
|
+
const DEFAULT_POLL_TIMEOUT = 120_000; // 2 minutes
|
|
8
7
|
/**
|
|
9
|
-
* Poll a condition until we see it.
|
|
8
|
+
* Poll a condition until we see it, with a timeout.
|
|
10
9
|
*/
|
|
11
|
-
async function poll(condition) {
|
|
12
|
-
return new Promise((resolve) => {
|
|
10
|
+
async function poll(condition, timeoutMs = DEFAULT_POLL_TIMEOUT) {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
const deadline = Date.now() + timeoutMs;
|
|
13
13
|
const check = () => {
|
|
14
14
|
if (condition())
|
|
15
15
|
return resolve();
|
|
16
|
+
if (Date.now() >= deadline)
|
|
17
|
+
return reject(new Error(`poll timed out after ${timeoutMs}ms`));
|
|
16
18
|
setTimeout(check, 1000);
|
|
17
19
|
};
|
|
18
20
|
check();
|
|
@@ -22,12 +24,25 @@ async function poll(condition) {
|
|
|
22
24
|
* Wait for a specific string to appear in the output.
|
|
23
25
|
*/
|
|
24
26
|
async function waitForOutput(getOutput, searchString) {
|
|
25
|
-
|
|
27
|
+
await poll(() => getOutput().includes(searchString));
|
|
28
|
+
expect(getOutput()).toContain(searchString);
|
|
26
29
|
}
|
|
27
30
|
/**
|
|
28
31
|
* Wait for a condition to become true.
|
|
29
32
|
*/
|
|
30
33
|
async function waitForCondition(condition) {
|
|
31
|
-
|
|
34
|
+
await poll(condition);
|
|
35
|
+
expect(condition()).toBe(true);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Kill a spawned process.
|
|
39
|
+
*/
|
|
40
|
+
function safeKillProcess(proc) {
|
|
41
|
+
try {
|
|
42
|
+
proc.kill('SIGKILL');
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// process may have already exited
|
|
46
|
+
}
|
|
32
47
|
}
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndhdGNoLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFzQkEsc0NBR0M7QUFLRCw0Q0FHQztBQUtELDBDQU1DO0FBMUNELE1BQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLENBQUMsWUFBWTtBQUVsRDs7R0FFRztBQUNILEtBQUssVUFBVSxJQUFJLENBQUMsU0FBd0IsRUFBRSxTQUFTLEdBQUcsb0JBQW9CO0lBQzVFLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUU7WUFDakIsSUFBSSxTQUFTLEVBQUU7Z0JBQUUsT0FBTyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxRQUFRO2dCQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHdCQUF3QixTQUFTLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUYsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFDRixLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLGFBQWEsQ0FBQyxTQUF1QixFQUFFLFlBQW9CO0lBQy9FLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsU0FBd0I7SUFDN0QsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEIsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxJQUFrQjtJQUNoRCxJQUFJLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxrQ0FBa0M7SUFDcEMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmNvbnN0IERFRkFVTFRfUE9MTF9USU1FT1VUID0gMTIwXzAwMDsgLy8gMiBtaW51dGVzXG5cbi8qKlxuICogUG9sbCBhIGNvbmRpdGlvbiB1bnRpbCB3ZSBzZWUgaXQsIHdpdGggYSB0aW1lb3V0LlxuICovXG5hc3luYyBmdW5jdGlvbiBwb2xsKGNvbmRpdGlvbjogKCkgPT4gYm9vbGVhbiwgdGltZW91dE1zID0gREVGQVVMVF9QT0xMX1RJTUVPVVQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyB0aW1lb3V0TXM7XG4gICAgY29uc3QgY2hlY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoY29uZGl0aW9uKCkpIHJldHVybiByZXNvbHZlKCk7XG4gICAgICBpZiAoRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYHBvbGwgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCkpO1xuICAgICAgc2V0VGltZW91dChjaGVjaywgMTAwMCk7XG4gICAgfTtcbiAgICBjaGVjaygpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBXYWl0IGZvciBhIHNwZWNpZmljIHN0cmluZyB0byBhcHBlYXIgaW4gdGhlIG91dHB1dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JPdXRwdXQoZ2V0T3V0cHV0OiAoKSA9PiBzdHJpbmcsIHNlYXJjaFN0cmluZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHBvbGwoKCkgPT4gZ2V0T3V0cHV0KCkuaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSk7XG4gIGV4cGVjdChnZXRPdXRwdXQoKSkudG9Db250YWluKHNlYXJjaFN0cmluZyk7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYSBjb25kaXRpb24gdG8gYmVjb21lIHRydWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ29uZGl0aW9uKGNvbmRpdGlvbjogKCkgPT4gYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwb2xsKGNvbmRpdGlvbik7XG4gIGV4cGVjdChjb25kaXRpb24oKSkudG9CZSh0cnVlKTtcbn1cblxuLyoqXG4gKiBLaWxsIGEgc3Bhd25lZCBwcm9jZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FmZUtpbGxQcm9jZXNzKHByb2M6IENoaWxkUHJvY2Vzcyk6IHZvaWQge1xuICB0cnkge1xuICAgIHByb2Mua2lsbCgnU0lHS0lMTCcpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBwcm9jZXNzIG1heSBoYXZlIGFscmVhZHkgZXhpdGVkXG4gIH1cbn1cbiJdfQ==
|