@quenty/nevermore-cli 4.50.0 → 4.51.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/CHANGELOG.md +12 -0
- package/dist/commands/batch-command/batch-bundle-command.d.ts +12 -0
- package/dist/commands/batch-command/batch-bundle-command.d.ts.map +1 -0
- package/dist/commands/batch-command/batch-bundle-command.js +96 -0
- package/dist/commands/batch-command/batch-bundle-command.js.map +1 -0
- package/dist/commands/batch-command/batch-test-command.d.ts +1 -0
- package/dist/commands/batch-command/batch-test-command.d.ts.map +1 -1
- package/dist/commands/batch-command/batch-test-command.js +103 -15
- package/dist/commands/batch-command/batch-test-command.js.map +1 -1
- package/dist/commands/batch-command/index.d.ts.map +1 -1
- package/dist/commands/batch-command/index.js +2 -0
- package/dist/commands/batch-command/index.js.map +1 -1
- package/dist/commands/tools-command/ci-post-test-results.d.ts +1 -0
- package/dist/commands/tools-command/ci-post-test-results.d.ts.map +1 -1
- package/dist/commands/tools-command/ci-post-test-results.js +13 -4
- package/dist/commands/tools-command/ci-post-test-results.js.map +1 -1
- package/dist/utils/batch/changed-packages-utils.d.ts +8 -0
- package/dist/utils/batch/changed-packages-utils.d.ts.map +1 -1
- package/dist/utils/batch/changed-packages-utils.js +9 -11
- package/dist/utils/batch/changed-packages-utils.js.map +1 -1
- package/dist/utils/job-context/batch-script-job-context.d.ts +12 -0
- package/dist/utils/job-context/batch-script-job-context.d.ts.map +1 -1
- package/dist/utils/job-context/batch-script-job-context.js +19 -0
- package/dist/utils/job-context/batch-script-job-context.js.map +1 -1
- package/dist/utils/sourcemap/sourcemap-loader.d.ts +3 -3
- package/dist/utils/sourcemap/sourcemap-loader.d.ts.map +1 -1
- package/dist/utils/sourcemap/sourcemap-loader.js +6 -7
- package/dist/utils/sourcemap/sourcemap-loader.js.map +1 -1
- package/dist/utils/testing/batch-run.e2e.test.js +36 -0
- package/dist/utils/testing/batch-run.e2e.test.js.map +1 -1
- package/dist/utils/testing/parsers/annotation-workspace.d.ts +17 -0
- package/dist/utils/testing/parsers/annotation-workspace.d.ts.map +1 -0
- package/dist/utils/testing/parsers/annotation-workspace.js +47 -0
- package/dist/utils/testing/parsers/annotation-workspace.js.map +1 -0
- package/dist/utils/testing/parsers/index.d.ts +0 -1
- package/dist/utils/testing/parsers/index.d.ts.map +1 -1
- package/dist/utils/testing/parsers/index.js +0 -1
- package/dist/utils/testing/parsers/index.js.map +1 -1
- package/dist/utils/testing/parsers/jest-lua-parser.d.ts +14 -29
- package/dist/utils/testing/parsers/jest-lua-parser.d.ts.map +1 -1
- package/dist/utils/testing/parsers/jest-lua-parser.js +85 -100
- package/dist/utils/testing/parsers/jest-lua-parser.js.map +1 -1
- package/dist/utils/testing/parsers/jest-lua-parser.test.js +359 -56
- package/dist/utils/testing/parsers/jest-lua-parser.test.js.map +1 -1
- package/dist/utils/testing/parsers/roblox-path-resolver.d.ts +23 -17
- package/dist/utils/testing/parsers/roblox-path-resolver.d.ts.map +1 -1
- package/dist/utils/testing/parsers/roblox-path-resolver.js +89 -54
- package/dist/utils/testing/parsers/roblox-path-resolver.js.map +1 -1
- package/dist/utils/testing/parsers/roblox-path-resolver.test.js +76 -36
- package/dist/utils/testing/parsers/roblox-path-resolver.test.js.map +1 -1
- package/dist/utils/testing/runner/combined-project-generator.d.ts.map +1 -1
- package/dist/utils/testing/runner/combined-project-generator.js +5 -6
- package/dist/utils/testing/runner/combined-project-generator.js.map +1 -1
- package/dist/utils/testing/runner/prebuilt-batch-bundle.d.ts +26 -0
- package/dist/utils/testing/runner/prebuilt-batch-bundle.d.ts.map +1 -0
- package/dist/utils/testing/runner/prebuilt-batch-bundle.js +200 -0
- package/dist/utils/testing/runner/prebuilt-batch-bundle.js.map +1 -0
- package/dist/utils/testing/runner/prebuilt-batch-bundle.test.d.ts +2 -0
- package/dist/utils/testing/runner/prebuilt-batch-bundle.test.d.ts.map +1 -0
- package/dist/utils/testing/runner/prebuilt-batch-bundle.test.js +181 -0
- package/dist/utils/testing/runner/prebuilt-batch-bundle.test.js.map +1 -0
- package/dist/utils/testing/runner/test-project-slug.d.ts +11 -0
- package/dist/utils/testing/runner/test-project-slug.d.ts.map +1 -0
- package/dist/utils/testing/runner/test-project-slug.js +11 -0
- package/dist/utils/testing/runner/test-project-slug.js.map +1 -0
- package/dist/utils/testing/runner/test-runner.d.ts +8 -1
- package/dist/utils/testing/runner/test-runner.d.ts.map +1 -1
- package/dist/utils/testing/runner/test-runner.js +19 -6
- package/dist/utils/testing/runner/test-runner.js.map +1 -1
- package/package.json +7 -6
- package/src/commands/batch-command/batch-bundle-command.ts +140 -0
- package/src/commands/batch-command/batch-test-command.ts +156 -16
- package/src/commands/batch-command/index.ts +2 -0
- package/src/commands/tools-command/ci-post-test-results.ts +18 -3
- package/src/utils/batch/changed-packages-utils.ts +21 -12
- package/src/utils/job-context/batch-script-job-context.ts +34 -3
- package/src/utils/sourcemap/sourcemap-loader.ts +7 -9
- package/src/utils/testing/batch-run.e2e.test.ts +42 -0
- package/src/utils/testing/parsers/annotation-workspace.ts +74 -0
- package/src/utils/testing/parsers/index.ts +0 -1
- package/src/utils/testing/parsers/jest-lua-parser.test.ts +433 -65
- package/src/utils/testing/parsers/jest-lua-parser.ts +131 -109
- package/src/utils/testing/parsers/roblox-path-resolver.test.ts +144 -61
- package/src/utils/testing/parsers/roblox-path-resolver.ts +117 -56
- package/src/utils/testing/runner/combined-project-generator.ts +9 -13
- package/src/utils/testing/runner/prebuilt-batch-bundle.test.ts +252 -0
- package/src/utils/testing/runner/prebuilt-batch-bundle.ts +267 -0
- package/src/utils/testing/runner/test-project-slug.ts +18 -0
- package/src/utils/testing/runner/test-runner.ts +43 -13
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,24 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Maps Roblox instance paths from Jest-lua output to existing repo-relative
|
|
3
|
+
* source files, through `sourcemap.json` or else the `<package dir>/src/`
|
|
4
|
+
* layout.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* mapping from `rojo sourcemap --absolute`. Exact and handles all
|
|
9
|
-
* project layouts.
|
|
10
|
-
*
|
|
11
|
-
* 2. **Heuristic** (fallback) — Assumes `src/{slug}/src/` layout and
|
|
12
|
-
* hard-codes `.spec`/`.story` as known dotted suffixes. Works when no
|
|
13
|
-
* sourcemap is available.
|
|
6
|
+
* A package's npm name (`@quenty/playermock`), directory (`src/player-mock`),
|
|
7
|
+
* Rojo project name (`playermock`) and test-place slug (`gameproduct` for
|
|
8
|
+
* `src/gameproductservice`) can all differ; see `AnnotationWorkspace`.
|
|
14
9
|
*/
|
|
15
10
|
import type { SourcemapResolver } from '../../sourcemap/index.js';
|
|
11
|
+
import type { AnnotationWorkspace } from './annotation-workspace.js';
|
|
12
|
+
export interface RobloxSourceResolveOptions {
|
|
13
|
+
sourcemapResolver?: SourcemapResolver;
|
|
14
|
+
workspace?: AnnotationWorkspace;
|
|
15
|
+
/** npm name of the package under test, e.g. `@quenty/gameproductservice` */
|
|
16
|
+
packageName?: string;
|
|
17
|
+
/** Repo root that holds the workspace. Defaults to cwd. */
|
|
18
|
+
repoRoot?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ResolvedSourceFile {
|
|
21
|
+
file: string;
|
|
22
|
+
/** False for dependency copies and sibling packages. */
|
|
23
|
+
isPackageUnderTest: boolean;
|
|
24
|
+
}
|
|
16
25
|
/**
|
|
17
|
-
* Resolve
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* When a `sourcemapResolver` is provided, it is tried first. Falls back to
|
|
21
|
-
* the heuristic if the resolver doesn't have a mapping.
|
|
26
|
+
* Resolve an instance path (no `:LINE` suffix) to an existing repo-relative
|
|
27
|
+
* source file, or `undefined` when none matches.
|
|
22
28
|
*/
|
|
23
|
-
export declare function
|
|
29
|
+
export declare function tryResolveRobloxSourceFile(instancePath: string, options?: RobloxSourceResolveOptions): ResolvedSourceFile | undefined;
|
|
24
30
|
//# sourceMappingURL=roblox-path-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roblox-path-resolver.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/roblox-path-resolver.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"roblox-path-resolver.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/roblox-path-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,2BAA2B,CAAC;AAenC,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,0BAA+B,GACvC,kBAAkB,GAAG,SAAS,CA6DhC"}
|
|
@@ -1,70 +1,105 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Maps Roblox instance paths from Jest-lua output to existing repo-relative
|
|
3
|
+
* source files, through `sourcemap.json` or else the `<package dir>/src/`
|
|
4
|
+
* layout.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* mapping from `rojo sourcemap --absolute`. Exact and handles all
|
|
9
|
-
* project layouts.
|
|
10
|
-
*
|
|
11
|
-
* 2. **Heuristic** (fallback) — Assumes `src/{slug}/src/` layout and
|
|
12
|
-
* hard-codes `.spec`/`.story` as known dotted suffixes. Works when no
|
|
13
|
-
* sourcemap is available.
|
|
6
|
+
* A package's npm name (`@quenty/playermock`), directory (`src/player-mock`),
|
|
7
|
+
* Rojo project name (`playermock`) and test-place slug (`gameproduct` for
|
|
8
|
+
* `src/gameproductservice`) can all differ; see `AnnotationWorkspace`.
|
|
14
9
|
*/
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
15
12
|
const SERVER_SCRIPT_SERVICE_PREFIX = 'ServerScriptService.';
|
|
13
|
+
const NODE_MODULES_SEGMENT = '.node_modules.';
|
|
14
|
+
const QUENTY_SCOPE = '@quenty/';
|
|
15
|
+
const QUENTY_SCOPE_SEGMENT = '@quenty.';
|
|
16
|
+
const CHUNK_NAME_PATTERN = /^\[string "(.*)"\]$/;
|
|
17
|
+
// Rojo strips `.server`/`.client` from script instance names.
|
|
18
|
+
const SOURCE_EXTENSIONS = ['', '.server', '.client'].flatMap((kind) => [
|
|
19
|
+
`${kind}.lua`,
|
|
20
|
+
`${kind}.luau`,
|
|
21
|
+
`/init${kind}.lua`,
|
|
22
|
+
`/init${kind}.luau`,
|
|
23
|
+
]);
|
|
16
24
|
/**
|
|
17
|
-
* Resolve
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* When a `sourcemapResolver` is provided, it is tried first. Falls back to
|
|
21
|
-
* the heuristic if the resolver doesn't have a mapping.
|
|
25
|
+
* Resolve an instance path (no `:LINE` suffix) to an existing repo-relative
|
|
26
|
+
* source file, or `undefined` when none matches.
|
|
22
27
|
*/
|
|
23
|
-
export function
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
export function tryResolveRobloxSourceFile(instancePath, options = {}) {
|
|
29
|
+
let unwrapped = _unwrapChunkName(instancePath);
|
|
30
|
+
// Roblox truncates long chunk names: `...@quenty.servic..."]`
|
|
31
|
+
if (unwrapped.endsWith('...'))
|
|
32
|
+
return undefined;
|
|
33
|
+
if (unwrapped.startsWith(SERVER_SCRIPT_SERVICE_PREFIX)) {
|
|
34
|
+
unwrapped = unwrapped.slice(SERVER_SCRIPT_SERVICE_PREFIX.length);
|
|
28
35
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
path = path.slice(SERVER_SCRIPT_SERVICE_PREFIX.length);
|
|
36
|
+
const packagesByName = options.workspace?.packagesByName;
|
|
37
|
+
let workspacePackage;
|
|
38
|
+
let packageInstanceName;
|
|
39
|
+
let rest;
|
|
40
|
+
let isPackageUnderTest = false;
|
|
41
|
+
const nodeModulesIndex = unwrapped.lastIndexOf(NODE_MODULES_SEGMENT);
|
|
42
|
+
if (nodeModulesIndex !== -1) {
|
|
43
|
+
const dependencyPath = unwrapped.slice(nodeModulesIndex + NODE_MODULES_SEGMENT.length);
|
|
44
|
+
if (!dependencyPath.startsWith(QUENTY_SCOPE_SEGMENT))
|
|
45
|
+
return undefined;
|
|
46
|
+
[packageInstanceName, rest] = _splitFirstSegment(dependencyPath.slice(QUENTY_SCOPE_SEGMENT.length));
|
|
47
|
+
workspacePackage = packagesByName?.get(QUENTY_SCOPE + packageInstanceName);
|
|
42
48
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
else {
|
|
50
|
+
[packageInstanceName, rest] = _splitFirstSegment(unwrapped);
|
|
51
|
+
const packageUnderTest = options.packageName
|
|
52
|
+
? packagesByName?.get(options.packageName)
|
|
53
|
+
: undefined;
|
|
54
|
+
if (packageUnderTest?.testSlugs.includes(packageInstanceName)) {
|
|
55
|
+
workspacePackage = packageUnderTest;
|
|
56
|
+
isPackageUnderTest = true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const dir = workspacePackage?.dir ?? `src/${packageInstanceName}`;
|
|
60
|
+
// The sourcemap names packages by Rojo project name, not folder.
|
|
61
|
+
const sourcemapNames = new Set([
|
|
62
|
+
workspacePackage?.projectName ?? packageInstanceName,
|
|
63
|
+
path.posix.basename(dir),
|
|
64
|
+
]);
|
|
65
|
+
for (const name of sourcemapNames) {
|
|
66
|
+
const mapped = options.sourcemapResolver?.resolve(SERVER_SCRIPT_SERVICE_PREFIX + name + (rest ? `.${rest}` : ''));
|
|
67
|
+
if (mapped)
|
|
68
|
+
return { file: mapped, isPackageUnderTest };
|
|
69
|
+
}
|
|
70
|
+
const repoRoot = options.repoRoot ?? process.cwd();
|
|
71
|
+
const base = _resolveHeuristic(dir, rest);
|
|
72
|
+
for (const extension of SOURCE_EXTENSIONS) {
|
|
73
|
+
const file = `${base}${extension}`;
|
|
74
|
+
if (fs.existsSync(path.join(repoRoot, file))) {
|
|
75
|
+
return { file, isPackageUnderTest };
|
|
76
|
+
}
|
|
48
77
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
function _unwrapChunkName(name) {
|
|
81
|
+
const match = name.trim().match(CHUNK_NAME_PATTERN);
|
|
82
|
+
return match ? match[1] : name.trim();
|
|
83
|
+
}
|
|
84
|
+
function _splitFirstSegment(dottedPath) {
|
|
85
|
+
const dotIndex = dottedPath.indexOf('.');
|
|
86
|
+
return dotIndex === -1
|
|
87
|
+
? [dottedPath, '']
|
|
88
|
+
: [dottedPath.slice(0, dotIndex), dottedPath.slice(dotIndex + 1)];
|
|
89
|
+
}
|
|
90
|
+
function _resolveHeuristic(dir, rest) {
|
|
91
|
+
if (!rest)
|
|
92
|
+
return `${dir}/src`;
|
|
93
|
+
// Rojo turns `Maid.spec.lua` into instance `Maid.spec`, so rejoin suffixes.
|
|
56
94
|
const rejoined = [];
|
|
57
|
-
for (
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (i > 0 && (seg === 'spec' || seg === 'story')) {
|
|
61
|
-
rejoined[rejoined.length - 1] += `.${seg}`;
|
|
95
|
+
for (const segment of rest.split('.')) {
|
|
96
|
+
if (rejoined.length > 0 && (segment === 'spec' || segment === 'story')) {
|
|
97
|
+
rejoined[rejoined.length - 1] += `.${segment}`;
|
|
62
98
|
}
|
|
63
99
|
else {
|
|
64
|
-
rejoined.push(
|
|
100
|
+
rejoined.push(segment);
|
|
65
101
|
}
|
|
66
102
|
}
|
|
67
|
-
|
|
68
|
-
return `src/${packageSlug}/src/${subPath}.lua`;
|
|
103
|
+
return `${dir}/src/${rejoined.join('/')}`;
|
|
69
104
|
}
|
|
70
105
|
//# sourceMappingURL=roblox-path-resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roblox-path-resolver.js","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/roblox-path-resolver.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"roblox-path-resolver.js","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/roblox-path-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,77 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import {
|
|
1
|
+
import { beforeAll, describe, it, expect } from 'vitest';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { tryResolveRobloxSourceFile } from './roblox-path-resolver.js';
|
|
3
4
|
import { SourcemapResolver } from '../../sourcemap/index.js';
|
|
4
|
-
|
|
5
|
+
import { tryLoadAnnotationWorkspaceAsync, } from './annotation-workspace.js';
|
|
6
|
+
const REPO_ROOT = fileURLToPath(new URL('../../../../../../', import.meta.url));
|
|
7
|
+
let workspace;
|
|
8
|
+
beforeAll(async () => {
|
|
9
|
+
workspace = await tryLoadAnnotationWorkspaceAsync(REPO_ROOT);
|
|
10
|
+
}, 30000);
|
|
11
|
+
function resolveFile(instancePath, packageName) {
|
|
12
|
+
return tryResolveRobloxSourceFile(instancePath, {
|
|
13
|
+
repoRoot: REPO_ROOT,
|
|
14
|
+
workspace,
|
|
15
|
+
packageName,
|
|
16
|
+
})?.file;
|
|
17
|
+
}
|
|
18
|
+
describe('tryResolveRobloxSourceFile', () => {
|
|
5
19
|
it('resolves a standard ServerScriptService path', () => {
|
|
6
|
-
expect(
|
|
20
|
+
expect(resolveFile('ServerScriptService.observablecollection.Shared.ObservableList.spec')).toBe('src/observablecollection/src/Shared/ObservableList.spec.lua');
|
|
7
21
|
});
|
|
8
22
|
it('resolves a nested subdirectory path', () => {
|
|
9
|
-
expect(
|
|
23
|
+
expect(resolveFile('ServerScriptService.observablecollection.Shared.SortedList.ObservableSortedList')).toBe('src/observablecollection/src/Shared/SortedList/ObservableSortedList.lua');
|
|
10
24
|
});
|
|
11
|
-
it('
|
|
12
|
-
expect(
|
|
25
|
+
it('handles missing ServerScriptService prefix', () => {
|
|
26
|
+
expect(resolveFile('maid.Shared.MaidTaskUtils.spec')).toBe('src/maid/src/Shared/MaidTaskUtils.spec.lua');
|
|
13
27
|
});
|
|
14
|
-
it('
|
|
15
|
-
expect(
|
|
28
|
+
it('unwraps a chunk-name wrapper', () => {
|
|
29
|
+
expect(resolveFile('[string "ServerScriptService.saveslot.Server.HasSaveSlotsDataStore"]')).toBe('src/saveslot/src/Server/HasSaveSlotsDataStore.lua');
|
|
16
30
|
});
|
|
17
|
-
it('
|
|
18
|
-
expect(
|
|
31
|
+
it('maps a nested dependency copy to its own package', () => {
|
|
32
|
+
expect(resolveFile('ServerScriptService.saveslot.node_modules.@quenty.adorneedata.node_modules.@quenty.attributeutils.node_modules.@quenty.baseobject.node_modules.@quenty.maid.Shared.Maid')).toBe('src/maid/src/Shared/Maid.lua');
|
|
19
33
|
});
|
|
20
|
-
it('
|
|
21
|
-
expect(
|
|
34
|
+
it('maps a dependency whose folder differs from its npm name', () => {
|
|
35
|
+
expect(resolveFile('[string "ServerScriptService.gameproduct.node_modules.@quenty.playermock.Shared.PlayerMock"]')).toBe('src/player-mock/src/Shared/PlayerMock.lua');
|
|
22
36
|
});
|
|
23
|
-
it('
|
|
24
|
-
expect(
|
|
37
|
+
it('resolves a package root module to its init file', () => {
|
|
38
|
+
expect(resolveFile('[string "ServerScriptService.studiobridge.node_modules.@quenty.nevermore-test-runner.node_modules.@quenty.loader"]')).toBe('src/loader/src/init.lua');
|
|
25
39
|
});
|
|
26
|
-
it('
|
|
27
|
-
expect(
|
|
40
|
+
it('maps the test slug of the package under test to its folder', () => {
|
|
41
|
+
expect(tryResolveRobloxSourceFile('ServerScriptService.gameproduct.Server.Cmdr.GameProductCmdrService', {
|
|
42
|
+
repoRoot: REPO_ROOT,
|
|
43
|
+
workspace,
|
|
44
|
+
packageName: '@quenty/gameproductservice',
|
|
45
|
+
})).toEqual({
|
|
46
|
+
file: 'src/gameproductservice/src/Server/Cmdr/GameProductCmdrService.lua',
|
|
47
|
+
isPackageUnderTest: true,
|
|
48
|
+
});
|
|
49
|
+
expect(resolveFile('ServerScriptService.playermock.Shared.PlayerMock', '@quenty/playermock')).toBe('src/player-mock/src/Shared/PlayerMock.lua');
|
|
50
|
+
});
|
|
51
|
+
it('resolves a package outside src/ by its workspace directory', () => {
|
|
52
|
+
expect(resolveFile('ServerScriptService.studiobridge.commands.console.exec.execute.spec', '@quenty/studio-bridge')).toBe('tools/studio-bridge/src/commands/console/exec/execute.spec.lua');
|
|
53
|
+
});
|
|
54
|
+
it('tries the script file names Rojo strips', () => {
|
|
55
|
+
expect(resolveFile('ServerScriptService.x.node_modules.@quenty.preview-plugin')).toBe('plugins/preview-plugin/src/init.server.lua');
|
|
56
|
+
});
|
|
57
|
+
it('flags dependency frames as not under test', () => {
|
|
58
|
+
expect(tryResolveRobloxSourceFile('ServerScriptService.saveslot.node_modules.@quenty.binder.Shared.Binder', { repoRoot: REPO_ROOT, workspace, packageName: '@quenty/saveslot' })).toEqual({
|
|
59
|
+
file: 'src/binder/src/Shared/Binder.lua',
|
|
60
|
+
isPackageUnderTest: false,
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
it('does not remap a sibling package frame into the package under test', () => {
|
|
64
|
+
expect(resolveFile('ServerScriptService.othersibling.Server.SaveSlotService', '@quenty/saveslot')).toBeUndefined();
|
|
65
|
+
expect(resolveFile('ServerScriptService.Script', '@quenty/saveslot')).toBeUndefined();
|
|
66
|
+
});
|
|
67
|
+
it('rejects vendored, truncated and missing paths', () => {
|
|
68
|
+
for (const instancePath of [
|
|
69
|
+
'ServerScriptService.studiobridge.node_modules.@quenty.nevermore-test-runner.node_modules.@quentystudios.Jest._Index.jsdotlua_promise@3.5.2.promise',
|
|
70
|
+
'[string "ServerScriptService.gameproduct.node_modules.@quenty.playermock.node_modules.@quenty.servic..."]',
|
|
71
|
+
'ServerScriptService.unknownpkg.Shared.Foo',
|
|
72
|
+
]) {
|
|
73
|
+
expect(resolveFile(instancePath)).toBeUndefined();
|
|
74
|
+
}
|
|
28
75
|
});
|
|
29
76
|
describe('with sourcemap resolver', () => {
|
|
30
77
|
const repoRoot = '/repo';
|
|
@@ -33,26 +80,19 @@ describe('resolveRobloxTestPath', () => {
|
|
|
33
80
|
className: 'DataModel',
|
|
34
81
|
children: [
|
|
35
82
|
{
|
|
36
|
-
name: '
|
|
83
|
+
name: 'playermock',
|
|
37
84
|
className: 'Folder',
|
|
38
|
-
filePaths: [`${repoRoot}/src/
|
|
85
|
+
filePaths: [`${repoRoot}/src/player-mock/default.project.json`],
|
|
39
86
|
children: [
|
|
40
87
|
{
|
|
41
88
|
name: 'Shared',
|
|
42
89
|
className: 'Folder',
|
|
43
90
|
children: [
|
|
44
91
|
{
|
|
45
|
-
name: '
|
|
92
|
+
name: 'PlayerMock',
|
|
46
93
|
className: 'ModuleScript',
|
|
47
|
-
filePaths: [
|
|
48
|
-
|
|
49
|
-
{
|
|
50
|
-
name: 'MyModule.spec',
|
|
51
|
-
className: 'ModuleScript',
|
|
52
|
-
filePaths: [
|
|
53
|
-
`${repoRoot}/src/mypkg/src/Shared/MyModule.spec.lua`,
|
|
54
|
-
],
|
|
55
|
-
},
|
|
94
|
+
filePaths: [
|
|
95
|
+
`${repoRoot}/src/player-mock/src/Shared/PlayerMock.lua`,
|
|
56
96
|
],
|
|
57
97
|
},
|
|
58
98
|
],
|
|
@@ -62,14 +102,14 @@ describe('resolveRobloxTestPath', () => {
|
|
|
62
102
|
],
|
|
63
103
|
};
|
|
64
104
|
const resolver = SourcemapResolver.fromSourcemap(sourcemap, repoRoot);
|
|
65
|
-
it('
|
|
66
|
-
expect(
|
|
67
|
-
});
|
|
68
|
-
it('falls back to heuristic when sourcemap has no mapping', () => {
|
|
69
|
-
expect(resolveRobloxTestPath('ServerScriptService.unknownpkg.Shared.Foo.spec', resolver)).toBe('src/unknownpkg/src/Shared/Foo.spec.lua');
|
|
105
|
+
it('looks up dependency copies under their Rojo project name', () => {
|
|
106
|
+
expect(tryResolveRobloxSourceFile('ServerScriptService.gameproduct.node_modules.@quenty.playermock.Shared.PlayerMock', { repoRoot, sourcemapResolver: resolver })?.file).toBe('src/player-mock/src/Shared/PlayerMock.lua');
|
|
70
107
|
});
|
|
71
|
-
it('
|
|
72
|
-
expect(
|
|
108
|
+
it('returns undefined when neither sourcemap nor repo has the file', () => {
|
|
109
|
+
expect(tryResolveRobloxSourceFile('ServerScriptService.unknownpkg.Shared.Foo', {
|
|
110
|
+
repoRoot,
|
|
111
|
+
sourcemapResolver: resolver,
|
|
112
|
+
})).toBeUndefined();
|
|
73
113
|
});
|
|
74
114
|
});
|
|
75
115
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roblox-path-resolver.test.js","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/roblox-path-resolver.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"roblox-path-resolver.test.js","sourceRoot":"","sources":["../../../../src/utils/testing/parsers/roblox-path-resolver.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combined-project-generator.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/runner/combined-project-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EAEb,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"combined-project-generator.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/runner/combined-project-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EAEb,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAOzE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AAExD,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,+EAA+E;IAC/E,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,mFAAmF;IACnF,aAAa,EAAE,YAAY,CAAC;IAC5B,sFAAsF;IACtF,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEzE,8EAA8E;AAC9E,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,sBAAsB,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,cAAc,CAAC,IAAI,IAAI,CAAC;IACxB,cAAc,CAAC,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC/C;AAWD;;;;;;;GAOG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAsIjC;AA+ED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,CAAC,EAAE,EACV,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC3B,QAAQ,EAAE,MAAM,GACf,CAAC,EAAE,EAAE,CAqBP;AAED,mDAAmD;AACnD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
|
@@ -3,6 +3,7 @@ import * as path from 'path';
|
|
|
3
3
|
import { BuildContext, resolvePackagePath, } from '@quenty/nevermore-template-helpers';
|
|
4
4
|
import { OutputHelper } from '@quenty/cli-output-helpers';
|
|
5
5
|
import { recompressPlace } from '../../build/place-recompression.js';
|
|
6
|
+
import { findTestProjectSlug, } from './test-project-slug.js';
|
|
6
7
|
/**
|
|
7
8
|
* Budget for one combined place, as uploaded (recompressed). Under the upload
|
|
8
9
|
* limit (`PLACE_UPLOAD_MAX_BYTES`), and under the 100 MB Roblox documents as
|
|
@@ -193,14 +194,12 @@ async function _extractSlugAsync(batchTargetName, projectPath) {
|
|
|
193
194
|
throw new Error(`Cannot read test project for ${batchTargetName}: ${projectPath}`);
|
|
194
195
|
}
|
|
195
196
|
const project = JSON.parse(content);
|
|
196
|
-
|
|
197
|
-
if (!serverScriptService) {
|
|
197
|
+
if (!project.tree?.ServerScriptService) {
|
|
198
198
|
throw new Error(`Test project for ${batchTargetName} is missing ServerScriptService in tree`);
|
|
199
199
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
}
|
|
200
|
+
const slug = findTestProjectSlug(project);
|
|
201
|
+
if (slug) {
|
|
202
|
+
return slug;
|
|
204
203
|
}
|
|
205
204
|
throw new Error(`Test project for ${batchTargetName} has no entry under ServerScriptService`);
|
|
206
205
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combined-project-generator.js","sourceRoot":"","sources":["../../../../src/utils/testing/runner/combined-project-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"combined-project-generator.js","sourceRoot":"","sources":["../../../../src/utils/testing/runner/combined-project-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BuildContext } from '@quenty/nevermore-template-helpers';
|
|
2
|
+
import { type CombinedPlaceChunk } from './combined-project-generator.js';
|
|
3
|
+
/**
|
|
4
|
+
* Places built by `nevermore batch bundle`, unpacked from a
|
|
5
|
+
* `*.nevermore.tests.tar` and ready for `batch test --bundle` to run.
|
|
6
|
+
*/
|
|
7
|
+
export interface PrebuiltBatchBundle {
|
|
8
|
+
chunks: CombinedPlaceChunk[];
|
|
9
|
+
packages: PrebuiltBatchPackage[];
|
|
10
|
+
/** Holds the unpacked places; whoever runs them owns its cleanup. */
|
|
11
|
+
buildContext: BuildContext;
|
|
12
|
+
}
|
|
13
|
+
export interface PrebuiltBatchPackage {
|
|
14
|
+
name: string;
|
|
15
|
+
hasJestConfig: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Suggested file suffix, following `deploy.nevermore.json`. */
|
|
18
|
+
export declare const BUNDLE_FILE_SUFFIX = ".nevermore.tests.tar";
|
|
19
|
+
export declare function writePrebuiltBatchBundleAsync(file: string, chunks: CombinedPlaceChunk[], hasJestConfig: Map<string, boolean>): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Read a bundle file. It is untrusted: entries are read from the archive, never
|
|
22
|
+
* extracted by it, and only `manifest.json` and `place-N.rbxl` regular files
|
|
23
|
+
* are accepted.
|
|
24
|
+
*/
|
|
25
|
+
export declare function readPrebuiltBatchBundleAsync(file: string): Promise<PrebuiltBatchBundle>;
|
|
26
|
+
//# sourceMappingURL=prebuilt-batch-bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prebuilt-batch-bundle.d.ts","sourceRoot":"","sources":["../../../../src/utils/testing/runner/prebuilt-batch-bundle.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAG1E;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,qEAAqE;IACrE,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;CACxB;AAUD,gEAAgE;AAChE,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAczD,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,kBAAkB,EAAE,EAC5B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,CAAC,CAsB9B"}
|