Skip to content

Commit 1b5c2ed

Browse files
authored
chore: syntax check test files (#374)
Currently, the test files are not syntax checked during TypeScript compilation, only during test running. This makes it hard to pick up on necessary changes during large-scale refactors. You will only notice them during test runs, and then every single test file will fail with a parse error (instead of potentially a single typechecking error during typechecking phase). Another complication with the trivial solution of just running `tsc -p tsconfig.dev.json` is that VSCode will not detect that `test/` files are included in a tsconfig file if it's not literally called `tsconfig.json`, so we have to do some trickery to type-check at compilation time AND convince VSCode to type check as well. --- By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license
1 parent af41cf7 commit 1b5c2ed

37 files changed

+234
-68
lines changed

.projen/deps.json

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.projenrc.ts

+10
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { LargePrChecker } from './projenrc/large-pr-checker';
1313
import { PrLabeler } from './projenrc/pr-labeler';
1414
import { RecordPublishingTimestamp } from './projenrc/record-publishing-timestamp';
1515
import { DocType, S3DocsPublishing } from './projenrc/s3-docs-publishing';
16+
import { TypecheckTests } from './projenrc/TypecheckTests';
1617

1718
// 5.7 sometimes gives a weird error in `ts-jest` in `@aws-cdk/cli-lib-alpha`
1819
// https://github.com/microsoft/TypeScript/issues/60159
@@ -270,6 +271,7 @@ const repoProject = new yarn.Monorepo({
270271
repoProject.package.addPackageResolutions(
271272
272273
274+
273275
);
274276

275277
new AdcPublishing(repoProject);
@@ -654,6 +656,8 @@ const cdkAssets = configureProject(
654656
}),
655657
);
656658

659+
new TypecheckTests(cdkAssets);
660+
657661
cdkAssets.addTask('shrinkwrap', {
658662
steps: [
659663
{
@@ -775,6 +779,8 @@ const tmpToolkitHelpers = configureProject(
775779
}),
776780
);
777781

782+
new TypecheckTests(tmpToolkitHelpers);
783+
778784
// Prevent imports of private API surface
779785
tmpToolkitHelpers.package.addField('exports', {
780786
'.': './lib/index.js',
@@ -924,6 +930,8 @@ const toolkitLib = configureProject(
924930
}),
925931
);
926932

933+
new TypecheckTests(toolkitLib);
934+
927935
// TypeDoc documentation publishing
928936
new S3DocsPublishing(toolkitLib, {
929937
docsStream: 'toolkit-lib',
@@ -1252,6 +1260,8 @@ const cli = configureProject(
12521260
}),
12531261
);
12541262

1263+
new TypecheckTests(cli);
1264+
12551265
// Eslint rules
12561266
cli.eslint?.addRules({
12571267
'@cdklabs/no-throw-default-error': 'error',

package.json

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/tmp-toolkit-helpers/.gitattributes

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/tmp-toolkit-helpers/.gitignore

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/tmp-toolkit-helpers/.projen/files.json

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/tmp-toolkit-helpers/.projen/tasks.json

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/tmp-toolkit-helpers/src/context-providers/security-groups.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ export class SecurityGroupContextProviderPlugin implements ContextProviderPlugin
6060
}
6161

6262
/**
63-
* @internal
63+
* TODO: We intend this to be @*internal but a test in aws-cdk depends on it.
64+
* Put the tag back later.
6465
*/
6566
export function hasAllTrafficEgress(securityGroup: SecurityGroup) {
6667
let hasAllTrafficCidrV4 = false;

packages/@aws-cdk/tmp-toolkit-helpers/test/_helpers/jest-bufferedconsole.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default class TestEnvironment extends NodeEnvironment implements JestEnvi
2424
// We need to set the event handler by assignment in the constructor,
2525
// because if we declare it as an async member TypeScript's type derivation
2626
// doesn't work properly.
27-
(this as JestEnvironment<unknown>).handleTestEvent = (async (event, _state) => {
27+
(this as JestEnvironment<unknown>).handleTestEvent = (async (event) => {
2828
if (event.name === 'test_done' && event.test.errors.length > 0 && this.log.length > 0) {
2929
this.stopCapture();
3030

packages/@aws-cdk/tmp-toolkit-helpers/test/api/diff/diff.test.ts

-8
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ describe('formatStackDiff', () => {
6262
templateInfo: {
6363
oldTemplate: mockNewTemplate.template,
6464
newTemplate: mockNewTemplate,
65-
stackName: 'test-stack',
6665
},
6766
});
6867
const result = formatter.formatStackDiff();
@@ -84,7 +83,6 @@ describe('formatStackDiff', () => {
8483
templateInfo: {
8584
oldTemplate: {},
8685
newTemplate: mockNewTemplate,
87-
stackName: 'test-stack',
8886
},
8987
});
9088
const result = formatter.formatStackDiff();
@@ -107,7 +105,6 @@ describe('formatStackDiff', () => {
107105
templateInfo: {
108106
oldTemplate: {},
109107
newTemplate: mockNewTemplate,
110-
stackName: 'test-stack',
111108
isImport: true,
112109
},
113110
});
@@ -149,7 +146,6 @@ describe('formatStackDiff', () => {
149146
templateInfo: {
150147
oldTemplate: {},
151148
newTemplate: mockNewTemplate,
152-
stackName: 'test-stack',
153149
nestedStacks,
154150
},
155151
});
@@ -225,7 +221,6 @@ describe('formatSecurityDiff', () => {
225221
templateInfo: {
226222
oldTemplate: mockNewTemplate.template,
227223
newTemplate: mockNewTemplate,
228-
stackName: 'test-stack',
229224
},
230225
});
231226
const result = formatter.formatSecurityDiff({
@@ -244,7 +239,6 @@ describe('formatSecurityDiff', () => {
244239
templateInfo: {
245240
oldTemplate: {},
246241
newTemplate: mockNewTemplate,
247-
stackName: 'test-stack',
248242
},
249243
});
250244
const result = formatter.formatSecurityDiff({
@@ -279,7 +273,6 @@ describe('formatSecurityDiff', () => {
279273
templateInfo: {
280274
oldTemplate: {},
281275
newTemplate: mockNewTemplate,
282-
stackName: 'test-stack',
283276
},
284277
});
285278
const result = formatter.formatSecurityDiff({
@@ -317,7 +310,6 @@ describe('formatSecurityDiff', () => {
317310
templateInfo: {
318311
oldTemplate: {},
319312
newTemplate: mockNewTemplate,
320-
stackName: 'test-stack',
321313
},
322314
});
323315
const result = formatter.formatSecurityDiff({

packages/@aws-cdk/tmp-toolkit-helpers/test/tsconfig.json

+16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/toolkit-lib/.gitattributes

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/toolkit-lib/.gitignore

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/toolkit-lib/.projen/files.json

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/toolkit-lib/.projen/tasks.json

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/@aws-cdk/toolkit-lib/test/api/cloud-assembly/source-builder.test.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ describe('fromAssemblyBuilder', () => {
8282
// GIVEN
8383
const cx = await toolkit.fromAssemblyBuilder(async (props) => {
8484
lock = new RWLock(props.outdir!);
85-
if (!await lock._currentWriter()) {
85+
if (!await (lock as any)._currentWriter()) {
8686
throw new Error('Expected the directory to be locked during synth');
8787
}
8888
throw new Error('a wild error appeared');
@@ -92,8 +92,8 @@ describe('fromAssemblyBuilder', () => {
9292
await expect(cx.produce()).rejects.toThrow(/wild error/);
9393

9494
// THEN: Don't expect either a read or write lock on the directory afterwards
95-
expect(await lock!._currentWriter()).toBeUndefined();
96-
expect(await lock!._currentReaders()).toEqual([]);
95+
expect(await (lock! as any)._currentWriter()).toBeUndefined();
96+
expect(await (lock! as any)._currentReaders()).toEqual([]);
9797
});
9898
});
9999

@@ -162,8 +162,8 @@ describe('fromCdkApp', () => {
162162
await expect(cx.produce()).rejects.toThrow(/error 1/);
163163

164164
// THEN: Don't expect either a read or write lock on the directory afterwards
165-
expect(await lock!._currentWriter()).toBeUndefined();
166-
expect(await lock!._currentReaders()).toEqual([]);
165+
expect(await (lock! as any)._currentWriter()).toBeUndefined();
166+
expect(await (lock! as any)._currentReaders()).toEqual([]);
167167
});
168168
});
169169

packages/@aws-cdk/toolkit-lib/test/tsconfig.json

+22
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/aws-cdk/.gitattributes

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/aws-cdk/.gitignore

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/aws-cdk/.projen/files.json

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/aws-cdk/.projen/tasks.json

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/aws-cdk/test/_helpers/mock-sdk.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ export class MockSdkProvider extends SdkProvider {
156156
public defaultAccount(): Promise<Account | undefined> {
157157
const accountId = this.defaultAccounts.length === 0
158158
? '123456789012'
159-
: this.defaultAccounts.shift();
159+
: this.defaultAccounts.shift()!;
160160
return Promise.resolve({ accountId, partition: 'aws' });
161161
}
162162
}

packages/aws-cdk/test/api/aws-auth/sdk-logger.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ describe(SdkToCliLogger, () => {
55
notify: jest.fn(),
66
requestResponse: jest.fn(),
77
};
8-
const logger = new SdkToCliLogger(ioHost);
8+
const logger = new SdkToCliLogger(ioHost as any);
99

1010
beforeEach(() => {
1111
ioHost.notify.mockReset();

packages/aws-cdk/test/api/aws-auth/sdk-provider.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { AwsCliCompatible } from '../../../lib/api/aws-auth';
2424
import { defaultCliUserAgent } from '../../../lib/api/aws-auth';
2525
import { PluginHost } from '../../../lib/api/plugin';
2626
import { Mode } from '../../../lib/api/plugin';
27-
import { instanceMockFrom, withMocked } from '../../_helpers/as-mock';
27+
import { withMocked } from '../../_helpers/as-mock';
2828
import { undoAllSdkMocks } from '../../_helpers/mock-sdk';
2929
import { TestIoHost } from '../../_helpers/io-host';
3030

packages/aws-cdk/test/api/cloudformation/evaluate-cloudformation-template.test.ts

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const createEvaluateCloudFormationTemplate = (template: Template) =>
1717
region: 'ap-south-east-2',
1818
partition: 'aws',
1919
sdk,
20+
stackArtifact: {} as any,
2021
});
2122

2223
describe('evaluateCfnExpression', () => {

packages/aws-cdk/test/api/hotswap/appsync-mapping-templates-hotswap-deployments.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ describe.each([HotswapMode.FALL_BACK, HotswapMode.HOTSWAP_ONLY])('%p mode', (hot
135135
// GIVEN
136136
const body = getBodyStream('template defined in s3');
137137
mockS3Client.on(GetObjectCommand).resolves({
138-
Body: body,
138+
Body: body as any,
139139
});
140140
setup.setCurrentCfnStackTemplate({
141141
Resources: {
@@ -212,7 +212,7 @@ describe.each([HotswapMode.FALL_BACK, HotswapMode.HOTSWAP_ONLY])('%p mode', (hot
212212
// GIVEN
213213
const body = getBodyStream('code defined in s3');
214214
mockS3Client.on(GetObjectCommand).resolves({
215-
Body: body,
215+
Body: body as any,
216216
});
217217
setup.setCurrentCfnStackTemplate({
218218
Resources: {
@@ -731,7 +731,7 @@ describe.each([HotswapMode.FALL_BACK, HotswapMode.HOTSWAP_ONLY])('%p mode', (hot
731731
async () => {
732732
// GIVEN
733733
mockS3Client.on(GetObjectCommand).resolves({
734-
Body: getBodyStream('template defined in s3'),
734+
Body: getBodyStream('template defined in s3') as any,
735735
});
736736
mockAppSyncClient
737737
.on(ListFunctionsCommand)
@@ -1269,7 +1269,7 @@ describe.each([HotswapMode.FALL_BACK, HotswapMode.HOTSWAP_ONLY])('%p mode', (hot
12691269
async () => {
12701270
// GIVEN
12711271
mockS3Client.on(GetObjectCommand).resolves({
1272-
Body: getBodyStream('schema defined in s3'),
1272+
Body: getBodyStream('schema defined in s3') as any,
12731273
});
12741274
setup.setCurrentCfnStackTemplate({
12751275
Resources: {

0 commit comments

Comments
 (0)