From fc35e0a03203b001400e532ab9a532e3454a773f Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 31 Aug 2022 12:27:56 -0700 Subject: [PATCH] Add test for self referencing package --- .../forceConsistentCasingInFileNames.ts | 32 ++++ .../self-name-package-reference.js | 157 ++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/self-name-package-reference.js diff --git a/src/testRunner/unittests/tscWatch/forceConsistentCasingInFileNames.ts b/src/testRunner/unittests/tscWatch/forceConsistentCasingInFileNames.ts index 9ed4d2d7d9a..584b32c3353 100644 --- a/src/testRunner/unittests/tscWatch/forceConsistentCasingInFileNames.ts +++ b/src/testRunner/unittests/tscWatch/forceConsistentCasingInFileNames.ts @@ -294,5 +294,37 @@ a;b; }, { currentDirectory: "/Users/name/projects/web" }), changes: emptyArray, }); + + verifyTscWatch({ + scenario: "forceConsistentCasingInFileNames", + subScenario: "self name package reference", + commandLineArgs: ["-w", "--explainFiles"], + sys: () => createWatchedSystem({ + "/Users/name/projects/web/package.json": JSON.stringify({ + name: "@this/package", + type: "module", + exports: { + ".": "./dist/index.js" + } + }), + "/Users/name/projects/web/index.ts": Utils.dedent` + import * as me from "@this/package"; + me.thing(); + export function thing(): void {} + `, + "/Users/name/projects/web/tsconfig.json": JSON.stringify({ + compilerOptions: { + module: "nodenext", + outDir: "./dist", + declarationDir: "./types", + composite: true, + forceConsistentCasingInFileNames: true, + traceResolution: true, + } + }), + "/a/lib/lib.esnext.full.d.ts": libFile.content, + }, { currentDirectory: "/Users/name/projects/web" }), + changes: emptyArray, + }); }); } diff --git a/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/self-name-package-reference.js b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/self-name-package-reference.js new file mode 100644 index 00000000000..fd91a8e170d --- /dev/null +++ b/tests/baselines/reference/tscWatch/forceConsistentCasingInFileNames/self-name-package-reference.js @@ -0,0 +1,157 @@ +Input:: +//// [/Users/name/projects/web/package.json] +{"name":"@this/package","type":"module","exports":{".":"./dist/index.js"}} + +//// [/Users/name/projects/web/index.ts] +import * as me from "@this/package"; +me.thing(); +export function thing(): void {} + + +//// [/Users/name/projects/web/tsconfig.json] +{"compilerOptions":{"module":"nodenext","outDir":"./dist","declarationDir":"./types","composite":true,"forceConsistentCasingInFileNames":true,"traceResolution":true}} + +//// [/a/lib/lib.esnext.full.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + + +/a/lib/tsc.js -w --explainFiles +Output:: +>> Screen clear +[12:00:23 AM] Starting compilation in watch mode... + +Found 'package.json' at '/users/name/projects/web/package.json'. +'package.json' does not have a 'typesVersions' field. +======== Resolving module '@this/package' from '/Users/name/projects/web/index.ts'. ======== +Module resolution kind is not specified, using 'NodeNext'. +File '/users/name/projects/web/package.json' exists according to earlier cached lookups. +File '/users/name/projects/web/index.ts' exist - use it as a name resolution result. +Resolving real path for '/users/name/projects/web/index.ts', result '/Users/name/projects/web/index.ts'. +======== Module name '@this/package' was successfully resolved to '/users/name/projects/web/index.ts'. ======== +File '/a/lib/package.json' does not exist. +File '/a/package.json' does not exist. +File '/package.json' does not exist. +index.ts:1:21 - error TS1149: File name '/users/name/projects/web/index.ts' differs from already included file name '/Users/name/projects/web/index.ts' only in casing. + The file is in the program because: + Matched by default include pattern '**/*' + Imported via "@this/package" from file '/Users/name/projects/web/index.ts' + File is ECMAScript module because '/users/name/projects/web/package.json' has field "type" with value "module" + +1 import * as me from "@this/package"; +   ~~~~~~~~~~~~~~~ + +../../../../a/lib/lib.esnext.full.d.ts + Default library for target 'esnext' +index.ts + Matched by default include pattern '**/*' + Imported via "@this/package" from file 'index.ts' + File is ECMAScript module because 'package.json' has field "type" with value "module" +[12:00:36 AM] Found 1 error. Watching for file changes. + + + +Program root files: ["/Users/name/projects/web/index.ts"] +Program options: {"module":199,"outDir":"/Users/name/projects/web/dist","declarationDir":"/Users/name/projects/web/types","composite":true,"forceConsistentCasingInFileNames":true,"traceResolution":true,"watch":true,"explainFiles":true,"configFilePath":"/Users/name/projects/web/tsconfig.json"} +Program structureReused: Not +Program files:: +/a/lib/lib.esnext.full.d.ts +/Users/name/projects/web/index.ts + +Semantic diagnostics in builder refreshed for:: +/a/lib/lib.esnext.full.d.ts +/Users/name/projects/web/index.ts + +Shape signatures in builder refreshed for:: +/a/lib/lib.esnext.full.d.ts (used version) +/users/name/projects/web/index.ts (computed .d.ts during emit) + +WatchedFiles:: +/users/name/projects/web/tsconfig.json: + {"fileName":"/Users/name/projects/web/tsconfig.json","pollingInterval":250} +/users/name/projects/web/index.ts: + {"fileName":"/Users/name/projects/web/index.ts","pollingInterval":250} +/a/lib/lib.esnext.full.d.ts: + {"fileName":"/a/lib/lib.esnext.full.d.ts","pollingInterval":250} +/users/name/projects/web/package.json: + {"fileName":"/Users/name/projects/web/package.json","pollingInterval":250} +/users/name/projects/web/node_modules/@types: + {"fileName":"/Users/name/projects/web/node_modules/@types","pollingInterval":500} + +FsWatches:: + +FsWatchesRecursive:: +/users/name/projects/web: + {"directoryName":"/users/name/projects/web"} + +exitCode:: ExitStatus.undefined + +//// [/Users/name/projects/web/dist/index.js] +import * as me from "@this/package"; +me.thing(); +export function thing() { } + + +//// [/Users/name/projects/web/types/index.d.ts] +export declare function thing(): void; + + +//// [/Users/name/projects/web/dist/tsconfig.tsbuildinfo] +{"program":{"fileNames":["../../../../../a/lib/lib.esnext.full.d.ts","../index.ts"],"fileInfos":[{"version":"-7698705165-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }","affectsGlobalScope":true,"impliedFormat":1},{"version":"14361483761-import * as me from \"@this/package\";\nme.thing();\nexport function thing(): void {}\n","signature":"-2724770439-export declare function thing(): void;\n","impliedFormat":99}],"options":{"composite":true,"declarationDir":"../types","module":199,"outDir":"./"},"fileIdsList":[[2]],"referencedMap":[[2,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2],"latestChangedDtsFile":"../types/index.d.ts"},"version":"FakeTSVersion"} + +//// [/Users/name/projects/web/dist/tsconfig.tsbuildinfo.readable.baseline.txt] +{ + "program": { + "fileNames": [ + "../../../../../a/lib/lib.esnext.full.d.ts", + "../index.ts" + ], + "fileNamesList": [ + [ + "../index.ts" + ] + ], + "fileInfos": { + "../../../../../a/lib/lib.esnext.full.d.ts": { + "version": "-7698705165-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }", + "signature": "-7698705165-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }", + "affectsGlobalScope": true, + "impliedFormat": "commonjs" + }, + "../index.ts": { + "version": "14361483761-import * as me from \"@this/package\";\nme.thing();\nexport function thing(): void {}\n", + "signature": "-2724770439-export declare function thing(): void;\n", + "impliedFormat": "esnext" + } + }, + "options": { + "composite": true, + "declarationDir": "../types", + "module": 199, + "outDir": "./" + }, + "referencedMap": { + "../index.ts": [ + "../index.ts" + ] + }, + "exportedModulesMap": {}, + "semanticDiagnosticsPerFile": [ + "../../../../../a/lib/lib.esnext.full.d.ts", + "../index.ts" + ], + "latestChangedDtsFile": "../types/index.d.ts" + }, + "version": "FakeTSVersion", + "size": 974 +} +