Skip to content

Commit 5766cf3

Browse files
committed
Add unit test for EmbroiderResolver
1 parent 4f0de9a commit 5766cf3

File tree

3 files changed

+54
-4
lines changed

3 files changed

+54
-4
lines changed

TODO.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
2. Look at second arg to `compatBuild`
1717
3. ...?
1818

19-
FIXME: Mock resolver in tests + unit test the two resolvers.
20-
2119
FIXME: Refactor cli.js
2220

21+
FIXME: Clean up logging shenanigans (e.g. console.log/info, debug)
22+
2323
FIXME: Figure out how to pass no-babel option to jscodeshift via codemod-cli
2424

2525
FIXME: Extract ember codemod buildtime resolver

transforms/no-implicit-this/helpers/resolver.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ const EMBROIDER_COMPONENTS = '#embroider_compat/components';
7070
const EMBROIDER_HELPERS = '#embroider_compat/helpers';
7171
const EMBROIDER_AMBIGUOUS = '#embroider_compat/ambiguous';
7272

73+
export type NodeResolution = { type: 'virtual' } | { type: 'real' } | { type: 'not_found' };
74+
75+
export interface HasNodeResolve {
76+
nodeResolve(specifier: string, fromFile: string): NodeResolution;
77+
}
78+
7379
export class EmbroiderResolver extends Resolver {
7480
static build(): EmbroiderResolver {
7581
// FIXME: Run build via execa ???
@@ -80,7 +86,7 @@ export class EmbroiderResolver extends Resolver {
8086
return new EmbroiderResolver(resolver, resolve(stage2Output, 'app.js'));
8187
}
8288

83-
constructor(private _resolver: _EmbroiderResolver, private entryPoint: string) {
89+
constructor(private _resolver: HasNodeResolve, private entryPoint: string) {
8490
super();
8591
}
8692

transforms/no-implicit-this/test.ts

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33
import { describe, expect, test } from '@jest/globals';
44
import { runTransformTest } from 'codemod-cli';
55
import { setTelemetry } from 'ember-codemods-telemetry-helpers';
6-
import { RuntimeResolver } from './helpers/resolver';
6+
import {
7+
EmbroiderResolver,
8+
HasNodeResolve,
9+
NodeResolution,
10+
RuntimeResolver,
11+
} from './helpers/resolver';
712
import { setupResolver } from './test-helpers';
813

914
process.env['TESTING'] = 'true';
@@ -63,4 +68,43 @@ describe('Resolver', () => {
6368
expect(resolver.has('ambiguous', 'nope')).toBe(false);
6469
});
6570
});
71+
72+
describe('EmbroiderResolver', () => {
73+
test('.has', () => {
74+
const entryPoint = 'foo';
75+
class mockNodeResolver implements HasNodeResolve {
76+
nodeResolve(specifier: string, fromFile: string): NodeResolution {
77+
expect(fromFile).toEqual(entryPoint);
78+
const resolution = {
79+
'#embroider_compat/components/gherkyn': 'real' as const,
80+
'#embroider_compat/ambiguous/gherkyn': 'real' as const,
81+
'#embroider_compat/components/welcome-page': 'real' as const,
82+
'#embroider_compat/ambiguous/welcome-page': 'real' as const,
83+
'#embroider_compat/helpers/cucumbyr': 'real' as const,
84+
'#embroider_compat/ambiguous/cucumbyr': 'real' as const,
85+
'#embroider_compat/ambiguous/virtual': 'virtual' as const,
86+
}[specifier];
87+
return { type: resolution ?? 'not_found' };
88+
}
89+
}
90+
91+
const resolver = new EmbroiderResolver(new mockNodeResolver(), entryPoint);
92+
93+
expect(resolver.has('component', 'gherkyn')).toBe(true);
94+
expect(resolver.has('component', 'welcome-page')).toBe(true);
95+
expect(resolver.has('component', 'cucumbyr')).toBe(false);
96+
expect(resolver.has('component', 'nope')).toBe(false);
97+
98+
expect(resolver.has('helper', 'gherkyn')).toBe(false);
99+
expect(resolver.has('helper', 'welcome-page')).toBe(false);
100+
expect(resolver.has('helper', 'cucumbyr')).toBe(true);
101+
expect(resolver.has('helper', 'nope')).toBe(false);
102+
103+
expect(resolver.has('ambiguous', 'gherkyn')).toBe(true);
104+
expect(resolver.has('ambiguous', 'welcome-page')).toBe(true);
105+
expect(resolver.has('ambiguous', 'cucumbyr')).toBe(true);
106+
expect(resolver.has('ambiguous', 'nope')).toBe(false);
107+
expect(resolver.has('ambiguous', 'virtual')).toBe(true);
108+
});
109+
});
66110
});

0 commit comments

Comments
 (0)