1namespace ts.projectSystem { 2 describe("unittests:: tsserver:: with project references and tsbuild source map", () => { 3 const dependecyLocation = `${tscWatch.projectRoot}/dependency`; 4 const dependecyDeclsLocation = `${tscWatch.projectRoot}/decls`; 5 const mainLocation = `${tscWatch.projectRoot}/main`; 6 const dependencyTs: File = { 7 path: `${dependecyLocation}/FnS.ts`, 8 content: `export function fn1() { } 9export function fn2() { } 10export function fn3() { } 11export function fn4() { } 12export function fn5() { } 13` 14 }; 15 const dependencyConfig: File = { 16 path: `${dependecyLocation}/tsconfig.json`, 17 content: JSON.stringify({ compilerOptions: { composite: true, declarationMap: true, declarationDir: "../decls" } }) 18 }; 19 20 const mainTs: File = { 21 path: `${mainLocation}/main.ts`, 22 content: `import { 23 fn1, 24 fn2, 25 fn3, 26 fn4, 27 fn5 28} from '../decls/fns' 29 30fn1(); 31fn2(); 32fn3(); 33fn4(); 34fn5(); 35` 36 }; 37 const mainConfig: File = { 38 path: `${mainLocation}/tsconfig.json`, 39 content: JSON.stringify({ 40 compilerOptions: { composite: true, declarationMap: true }, 41 references: [{ path: "../dependency" }] 42 }) 43 }; 44 45 const randomFile: File = { 46 path: `${tscWatch.projectRoot}/random/random.ts`, 47 content: "let a = 10;" 48 }; 49 const randomConfig: File = { 50 path: `${tscWatch.projectRoot}/random/tsconfig.json`, 51 content: "{}" 52 }; 53 const dtsLocation = `${dependecyDeclsLocation}/FnS.d.ts`; 54 const dtsPath = dtsLocation.toLowerCase() as Path; 55 const dtsMapLocation = `${dependecyDeclsLocation}/FnS.d.ts.map`; 56 const dtsMapPath = dtsMapLocation.toLowerCase() as Path; 57 58 const files = [dependencyTs, dependencyConfig, mainTs, mainConfig, libFile, randomFile, randomConfig]; 59 60 function changeDtsFile(host: TestServerHost) { 61 host.writeFile( 62 dtsLocation, 63 host.readFile(dtsLocation)!.replace( 64 "//# sourceMappingURL=FnS.d.ts.map", 65 `export declare function fn6(): void; 66//# sourceMappingURL=FnS.d.ts.map` 67 ) 68 ); 69 } 70 71 function changeDtsMapFile(host: TestServerHost) { 72 host.writeFile( 73 dtsMapLocation, 74 `{"version":3,"file":"FnS.d.ts","sourceRoot":"","sources":["../dependency/FnS.ts"],"names":[],"mappings":"AAAA,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,wBAAgB,GAAG,SAAM;AACzB,eAAO,MAAM,CAAC,KAAK,CAAC"}` 75 ); 76 } 77 78 function goToDefFromMainTs(fn: number): Partial<protocol.DefinitionAndBoundSpanRequest> { 79 return { 80 command: protocol.CommandTypes.DefinitionAndBoundSpan, 81 arguments: { file: mainTs.path, line: fn + 8, offset: 1 } 82 }; 83 } 84 85 function renameFromDependencyTs(fn: number): Partial<protocol.RenameRequest> { 86 return { 87 command: protocol.CommandTypes.Rename, 88 arguments: { file: dependencyTs.path, line: fn, offset: 17 } 89 }; 90 } 91 92 function renameFromDependencyTsWithDependencyChange(fn: number) { 93 return renameFromDependencyTs(fn + 1); 94 } 95 96 function verifyDocumentPositionMapper( 97 session: TestSession, 98 dependencyMap: server.ScriptInfo | undefined, 99 documentPositionMapper: server.ScriptInfo["documentPositionMapper"], 100 equal: boolean, 101 debugInfo?: string, 102 ) { 103 assert.strictEqual(session.getProjectService().filenameToScriptInfo.get(dtsMapPath), dependencyMap, `${debugInfo} dependencyMap`); 104 if (dependencyMap) { 105 verifyEquality(dependencyMap.documentPositionMapper, documentPositionMapper, equal, `${debugInfo} DocumentPositionMapper`); 106 } 107 } 108 109 function verifyDocumentPositionMapperEqual( 110 session: TestSession, 111 dependencyMap: server.ScriptInfo | undefined, 112 documentPositionMapper: server.ScriptInfo["documentPositionMapper"], 113 debugInfo?: string, 114 ) { 115 verifyDocumentPositionMapper(session, dependencyMap, documentPositionMapper, /*equal*/ true, debugInfo); 116 } 117 118 function verifyEquality<T>(actual: T, expected: T, equal: boolean, debugInfo?: string) { 119 if (equal) { 120 assert.strictEqual(actual, expected, debugInfo); 121 } 122 else { 123 assert.notStrictEqual(actual, expected, debugInfo); 124 } 125 } 126 127 function verifyAllFnAction<Req extends protocol.Request>( 128 session: TestSession, 129 action: (fn: number) => Partial<Req>, 130 existingDependencyMap: server.ScriptInfo | undefined, 131 existingDocumentPositionMapper: server.ScriptInfo["documentPositionMapper"], 132 existingMapEqual: boolean, 133 existingDocumentPositionMapperEqual: boolean, 134 skipMapPathInDtsInfo?: boolean 135 ) { 136 let sourceMapPath: server.ScriptInfo["sourceMapFilePath"] | undefined; 137 let dependencyMap: server.ScriptInfo | undefined; 138 let documentPositionMapper: server.ScriptInfo["documentPositionMapper"]; 139 for (let fn = 1; fn <= 5; fn++) { 140 const fnAction = action(fn); 141 session.executeCommandSeq(fnAction); 142 const debugInfo = `${JSON.stringify(fnAction)}:: ${fn}`; 143 const dtsInfo = session.getProjectService().getScriptInfoForPath(dtsPath); 144 const dtsMapInfo = session.getProjectService().getScriptInfoForPath(dtsMapPath); 145 146 if (fn === 1) { 147 if (dtsInfo) { 148 if (!skipMapPathInDtsInfo) { 149 if (dtsMapInfo) { 150 assert.equal(dtsInfo.sourceMapFilePath, dtsMapPath, `${debugInfo} sourceMapFilePath`); 151 } 152 else { 153 assert.isNotString(dtsInfo.sourceMapFilePath, `${debugInfo} sourceMapFilePath`); 154 assert.isNotFalse(dtsInfo.sourceMapFilePath, `${debugInfo} sourceMapFilePath`); 155 assert.isDefined(dtsInfo.sourceMapFilePath, `${debugInfo} sourceMapFilePath`); 156 } 157 } 158 } 159 verifyEquality(dtsMapInfo, existingDependencyMap, existingMapEqual, `${debugInfo} dependencyMap`); 160 verifyEquality(existingDocumentPositionMapper, dtsMapInfo?.documentPositionMapper, existingDocumentPositionMapperEqual, `${debugInfo} DocumentPositionMapper`); 161 sourceMapPath = dtsInfo?.sourceMapFilePath; 162 dependencyMap = dtsMapInfo; 163 documentPositionMapper = dependencyMap?.documentPositionMapper; 164 } 165 else { 166 assert.equal(dtsInfo?.sourceMapFilePath, sourceMapPath, `${debugInfo} sourceMapFilePath`); 167 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper, debugInfo); 168 } 169 } 170 } 171 172 function verifyScriptInfoCollectionWith( 173 session: TestSession, 174 openFiles: readonly File[], 175 ) { 176 const { dependencyMap, documentPositionMapper } = getDocumentPositionMapper(session); 177 178 // Collecting at this point retains dependency.d.ts and map 179 closeFilesForSession([randomFile], session); 180 openFilesForSession([randomFile], session); 181 182 // If map is not collected, document position mapper shouldnt change 183 if (session.getProjectService().filenameToScriptInfo.has(dtsMapPath)) { 184 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 185 } 186 187 // Closing open file, removes dependencies too 188 closeFilesForSession([...openFiles, randomFile], session); 189 openFilesForSession([randomFile], session); 190 } 191 192 type OnHostCreate = (host: TestServerHost) => void; 193 type CreateSessionFn = (onHostCreate?: OnHostCreate) => { host: TestServerHost; session: TestSession; }; 194 function setupWith(createSession: CreateSessionFn, openFiles: readonly File[], onHostCreate: OnHostCreate | undefined) { 195 const result = createSession(onHostCreate); 196 openFilesForSession(openFiles, result.session); 197 return result; 198 } 199 200 function setupWithMainTs(createSession: CreateSessionFn, onHostCreate: OnHostCreate | undefined) { 201 return setupWith(createSession, [mainTs, randomFile], onHostCreate); 202 } 203 204 function setupWithDependencyTs(createSession: CreateSessionFn, onHostCreate: OnHostCreate | undefined) { 205 return setupWith(createSession, [dependencyTs, randomFile], onHostCreate); 206 } 207 208 function setupWithMainTsAndDependencyTs(createSession: CreateSessionFn, onHostCreate: OnHostCreate | undefined) { 209 return setupWith(createSession, [mainTs, dependencyTs, randomFile], onHostCreate); 210 } 211 212 function createSessionWithoutProjectReferences(onHostCreate?: OnHostCreate) { 213 const host = createHostWithSolutionBuild(files, [mainConfig.path]); 214 // Erase project reference 215 host.writeFile(mainConfig.path, JSON.stringify({ 216 compilerOptions: { composite: true, declarationMap: true } 217 })); 218 onHostCreate?.(host); 219 const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) }); 220 return { host, session }; 221 } 222 223 function createSessionWithProjectReferences(onHostCreate?: OnHostCreate) { 224 const host = createHostWithSolutionBuild(files, [mainConfig.path]); 225 onHostCreate?.(host); 226 const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) }); 227 return { host, session }; 228 } 229 230 function createSessionWithDisabledProjectReferences(onHostCreate?: OnHostCreate) { 231 const host = createHostWithSolutionBuild(files, [mainConfig.path]); 232 // Erase project reference 233 host.writeFile(mainConfig.path, JSON.stringify({ 234 compilerOptions: { 235 composite: true, 236 declarationMap: true, 237 disableSourceOfProjectReferenceRedirect: true 238 }, 239 references: [{ path: "../dependency" }] 240 })); 241 onHostCreate?.(host); 242 const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) }); 243 return { host, session }; 244 } 245 246 function getDocumentPositionMapper(session: TestSession) { 247 const dependencyMap = session.getProjectService().filenameToScriptInfo.get(dtsMapPath); 248 const documentPositionMapper = dependencyMap?.documentPositionMapper; 249 return { dependencyMap, documentPositionMapper }; 250 } 251 252 function makeChangeToMainTs(session: TestSession) { 253 session.executeCommandSeq<protocol.ChangeRequest>({ 254 command: protocol.CommandTypes.Change, 255 arguments: { 256 file: mainTs.path, 257 line: 14, 258 offset: 1, 259 endLine: 14, 260 endOffset: 1, 261 insertString: "const x = 10;" 262 } 263 }); 264 } 265 266 function makeChangeToDependencyTs(session: TestSession) { 267 session.executeCommandSeq<protocol.ChangeRequest>({ 268 command: protocol.CommandTypes.Change, 269 arguments: { 270 file: dependencyTs.path, 271 line: 6, 272 offset: 1, 273 endLine: 6, 274 endOffset: 1, 275 insertString: "const x = 10;" 276 } 277 }); 278 } 279 280 281 describe("from project that uses dependency: goToDef", () => { 282 function setupWithActionWith(setup: (onHostCreate?: OnHostCreate) => ReturnType<CreateSessionFn>, onHostCreate: OnHostCreate | undefined) { 283 const result = setup(onHostCreate); 284 result.session.executeCommandSeq(goToDefFromMainTs(1)); 285 return { ...result, ...getDocumentPositionMapper(result.session) }; 286 } 287 288 describe("when main tsconfig doesnt have project reference", () => { 289 function setup(onHostCreate?: OnHostCreate) { 290 return setupWithMainTs(createSessionWithoutProjectReferences, onHostCreate); 291 } 292 293 function setupWithAction(onHostCreate?: OnHostCreate) { 294 return setupWithActionWith(setup, onHostCreate); 295 } 296 297 it("can go to definition correctly", () => { 298 const { session } = setup(); 299 verifyAllFnAction( 300 session, 301 goToDefFromMainTs, 302 /*existingDependencyMap*/ undefined, 303 /*existingDocumentPositionMapper*/ undefined, 304 /*existingMapEqual*/ false, 305 /*existingDocumentPositionMapperEqual*/ false 306 ); 307 verifyScriptInfoCollectionWith(session, [mainTs]); 308 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/can go to definition correctly", session); 309 }); 310 311 // Edit 312 it(`when usage file changes, document position mapper doesnt change, when timeout occurs before request`, () => { 313 // Create DocumentPositionMapper 314 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 315 316 // change 317 makeChangeToMainTs(session); 318 host.runQueuedTimeoutCallbacks(); 319 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 320 321 // action 322 verifyAllFnAction( 323 session, 324 goToDefFromMainTs, 325 dependencyMap, 326 documentPositionMapper, 327 /*existingMapEqual*/ true, 328 /*existingDocumentPositionMapperEqual*/ true 329 ); 330 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/usage file changes with timeout before request", session); 331 }); 332 it(`when usage file changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 333 // Create DocumentPositionMapper 334 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 335 336 // change 337 makeChangeToMainTs(session); 338 339 // action 340 verifyAllFnAction( 341 session, 342 goToDefFromMainTs, 343 dependencyMap, 344 documentPositionMapper, 345 /*existingMapEqual*/ true, 346 /*existingDocumentPositionMapperEqual*/ true 347 ); 348 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/usage file changes", session); 349 }); 350 351 // Edit dts to add new fn 352 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout occurs before request`, () => { 353 // Create DocumentPositionMapper 354 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 355 356 // change 357 changeDtsFile(host); 358 host.runQueuedTimeoutCallbacks(); 359 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 360 361 // action 362 verifyAllFnAction( 363 session, 364 goToDefFromMainTs, 365 dependencyMap, 366 documentPositionMapper, 367 /*existingMapEqual*/ true, 368 /*existingDocumentPositionMapperEqual*/ true 369 ); 370 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dts changes with timeout before request", session); 371 }); 372 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 373 // Create DocumentPositionMapper 374 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 375 376 // change 377 changeDtsFile(host); 378 379 // action 380 verifyAllFnAction( 381 session, 382 goToDefFromMainTs, 383 dependencyMap, 384 documentPositionMapper, 385 /*existingMapEqual*/ true, 386 /*existingDocumentPositionMapperEqual*/ true 387 ); 388 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dts changes", session); 389 }); 390 391 // Edit map file to represent added new line 392 it(`when dependency file's map changes, when timeout occurs before request`, () => { 393 // Create DocumentPositionMapper 394 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 395 396 // change 397 changeDtsMapFile(host); 398 host.runQueuedTimeoutCallbacks(); 399 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 400 401 // action 402 verifyAllFnAction( 403 session, 404 goToDefFromMainTs, 405 dependencyMap, 406 documentPositionMapper, 407 /*existingMapEqual*/ true, 408 /*existingDocumentPositionMapperEqual*/ false 409 ); 410 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dtsMap changes with timeout before request", session); 411 }); 412 it(`when dependency file's map changes, when timeout does not occur before request`, () => { 413 // Create DocumentPositionMapper 414 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 415 416 // change 417 changeDtsMapFile(host); 418 419 // action 420 verifyAllFnAction( 421 session, 422 goToDefFromMainTs, 423 dependencyMap, 424 documentPositionMapper, 425 /*existingMapEqual*/ true, 426 /*existingDocumentPositionMapperEqual*/ false 427 ); 428 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dtsMap changes", session); 429 }); 430 431 it(`with depedency files map file, when file is not present`, () => { 432 const { session } = setup(host => host.deleteFile(dtsMapLocation)); 433 434 verifyAllFnAction( 435 session, 436 goToDefFromMainTs, 437 /*existingDependencyMap*/ undefined, 438 /*existingDocumentPositionMapper*/ undefined, 439 /*existingMapEqual*/ true, 440 /*existingDocumentPositionMapperEqual*/ true 441 ); 442 verifyScriptInfoCollectionWith(session, [mainTs]); 443 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dtsMap not present", session); 444 }); 445 it(`with depedency files map file, when file is created after actions on projects`, () => { 446 let fileContents: string; 447 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 448 fileContents = host.readFile(dtsMapLocation)!; 449 host.deleteFile(dtsMapLocation); 450 }); 451 452 host.writeFile(dtsMapLocation, fileContents!); 453 verifyAllFnAction( 454 session, 455 goToDefFromMainTs, 456 dependencyMap, 457 documentPositionMapper, 458 /*existingMapEqual*/ false, 459 /*existingDocumentPositionMapperEqual*/ false 460 ); 461 verifyScriptInfoCollectionWith(session, [mainTs]); 462 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dtsMap created", session); 463 }); 464 it(`with depedency files map file, when file is deleted after actions on the projects`, () => { 465 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 466 467 // The dependency file is deleted when orphan files are collected 468 host.deleteFile(dtsMapLocation); 469 verifyAllFnAction( 470 session, 471 goToDefFromMainTs, 472 dependencyMap, 473 documentPositionMapper, 474 /*existingMapEqual*/ false, 475 /*existingDocumentPositionMapperEqual*/ false 476 ); 477 verifyScriptInfoCollectionWith(session, [mainTs]); 478 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dtsMap deleted", session); 479 }); 480 481 it(`with depedency .d.ts file, when file is not present`, () => { 482 const { session } = setup(host => host.deleteFile(dtsLocation)); 483 484 verifyAllFnAction( 485 session, 486 goToDefFromMainTs, 487 /*existingDependencyMap*/ undefined, 488 /*existingDocumentPositionMapper*/ undefined, 489 /*existingMapEqual*/ true, 490 /*existingDocumentPositionMapperEqual*/ true 491 ); 492 verifyScriptInfoCollectionWith(session, [mainTs]); 493 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dts not present", session); 494 }); 495 it(`with depedency .d.ts file, when file is created after actions on projects`, () => { 496 let fileContents: string; 497 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 498 fileContents = host.readFile(dtsLocation)!; 499 host.deleteFile(dtsLocation); 500 }); 501 502 host.writeFile(dtsLocation, fileContents!); 503 verifyAllFnAction( 504 session, 505 goToDefFromMainTs, 506 dependencyMap, 507 documentPositionMapper, 508 /*existingMapEqual*/ false, 509 /*existingDocumentPositionMapperEqual*/ false 510 ); 511 verifyScriptInfoCollectionWith(session, [mainTs]); 512 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dts created", session); 513 }); 514 it(`with depedency .d.ts file, when file is deleted after actions on the projects`, () => { 515 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 516 517 // The dependency file is deleted when orphan files are collected 518 host.deleteFile(dtsLocation); 519 verifyAllFnAction( 520 session, 521 goToDefFromMainTs, 522 dependencyMap, 523 documentPositionMapper, 524 /*existingMapEqual*/ true, 525 /*existingDocumentPositionMapperEqual*/ true 526 ); 527 verifyScriptInfoCollectionWith(session, [mainTs]); 528 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configHasNoReference/dependency dts deleted", session); 529 }); 530 }); 531 describe("when main tsconfig has project reference", () => { 532 function setup(onHostCreate?: OnHostCreate) { 533 return setupWithMainTs(createSessionWithProjectReferences, onHostCreate); 534 } 535 536 function setupWithAction(onHostCreate?: OnHostCreate) { 537 return setupWithActionWith(setup, onHostCreate); 538 } 539 540 it("can go to definition correctly", () => { 541 const { session } = setup(); 542 verifyAllFnAction( 543 session, 544 goToDefFromMainTs, 545 /*existingDependencyMap*/ undefined, 546 /*existingDocumentPositionMapper*/ undefined, 547 /*existingMapEqual*/ true, 548 /*existingDocumentPositionMapperEqual*/ true 549 ); 550 verifyScriptInfoCollectionWith(session, [mainTs]); 551 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/can go to definition correctly", session); 552 }); 553 554 // Edit 555 it(`when usage file changes, document position mapper doesnt change, when timeout occurs before request`, () => { 556 // Create DocumentPositionMapper 557 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 558 559 // change 560 makeChangeToMainTs(session); 561 host.runQueuedTimeoutCallbacks(); 562 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 563 564 // action 565 verifyAllFnAction( 566 session, 567 goToDefFromMainTs, 568 dependencyMap, 569 documentPositionMapper, 570 /*existingMapEqual*/ true, 571 /*existingDocumentPositionMapperEqual*/ true 572 ); 573 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/usage file changes with timeout before request", session); 574 }); 575 it(`when usage file changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 576 // Create DocumentPositionMapper 577 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 578 579 // change 580 makeChangeToMainTs(session); 581 582 // action 583 verifyAllFnAction( 584 session, 585 goToDefFromMainTs, 586 dependencyMap, 587 documentPositionMapper, 588 /*existingMapEqual*/ true, 589 /*existingDocumentPositionMapperEqual*/ true 590 ); 591 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/usage file changes", session); 592 }); 593 594 // Edit dts to add new fn 595 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout occurs before request`, () => { 596 // Create DocumentPositionMapper 597 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 598 599 // change 600 changeDtsFile(host); 601 host.runQueuedTimeoutCallbacks(); 602 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 603 604 // action 605 verifyAllFnAction( 606 session, 607 goToDefFromMainTs, 608 dependencyMap, 609 documentPositionMapper, 610 /*existingMapEqual*/ true, 611 /*existingDocumentPositionMapperEqual*/ true 612 ); 613 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dts changes with timeout before request", session); 614 }); 615 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 616 // Create DocumentPositionMapper 617 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 618 619 // change 620 changeDtsFile(host); 621 622 // action 623 verifyAllFnAction( 624 session, 625 goToDefFromMainTs, 626 dependencyMap, 627 documentPositionMapper, 628 /*existingMapEqual*/ true, 629 /*existingDocumentPositionMapperEqual*/ true 630 ); 631 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dts changes", session); 632 }); 633 634 // Edit map file to represent added new line 635 it(`when dependency file's map changes, when timeout occurs before request`, () => { 636 // Create DocumentPositionMapper 637 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 638 639 // change 640 changeDtsMapFile(host); 641 host.runQueuedTimeoutCallbacks(); 642 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 643 644 // action 645 verifyAllFnAction( 646 session, 647 goToDefFromMainTs, 648 dependencyMap, 649 documentPositionMapper, 650 /*existingMapEqual*/ true, 651 /*existingDocumentPositionMapperEqual*/ true 652 ); 653 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dtsMap changes with timeout before request", session); 654 }); 655 it(`when dependency file's map changes, when timeout does not occur before request`, () => { 656 // Create DocumentPositionMapper 657 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 658 659 // change 660 changeDtsMapFile(host); 661 662 // action 663 verifyAllFnAction( 664 session, 665 goToDefFromMainTs, 666 dependencyMap, 667 documentPositionMapper, 668 /*existingMapEqual*/ true, 669 /*existingDocumentPositionMapperEqual*/ true 670 ); 671 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dtsMap changes", session); 672 }); 673 674 it(`with depedency files map file, when file is not present`, () => { 675 const { session } = setup(host => host.deleteFile(dtsMapLocation)); 676 677 verifyAllFnAction( 678 session, 679 goToDefFromMainTs, 680 /*existingDependencyMap*/ undefined, 681 /*existingDocumentPositionMapper*/ undefined, 682 /*existingMapEqual*/ true, 683 /*existingDocumentPositionMapperEqual*/ true 684 ); 685 verifyScriptInfoCollectionWith(session, [mainTs]); 686 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dtsMap not present", session); 687 }); 688 it(`with depedency files map file, when file is created after actions on projects`, () => { 689 let fileContents: string; 690 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 691 fileContents = host.readFile(dtsMapLocation)!; 692 host.deleteFile(dtsMapLocation); 693 }); 694 695 host.writeFile(dtsMapLocation, fileContents!); 696 verifyAllFnAction( 697 session, 698 goToDefFromMainTs, 699 dependencyMap, 700 documentPositionMapper, 701 /*existingMapEqual*/ true, 702 /*existingDocumentPositionMapperEqual*/ true 703 ); 704 verifyScriptInfoCollectionWith(session, [mainTs]); 705 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dtsMap created", session); 706 }); 707 it(`with depedency files map file, when file is deleted after actions on the projects`, () => { 708 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 709 710 // The dependency file is deleted when orphan files are collected 711 host.deleteFile(dtsMapLocation); 712 verifyAllFnAction( 713 session, 714 goToDefFromMainTs, 715 dependencyMap, 716 documentPositionMapper, 717 /*existingMapEqual*/ true, 718 /*existingDocumentPositionMapperEqual*/ true 719 ); 720 verifyScriptInfoCollectionWith(session, [mainTs]); 721 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dtsMap deleted", session); 722 }); 723 724 it(`with depedency .d.ts file, when file is not present`, () => { 725 const { session } = setup(host => host.deleteFile(dtsLocation)); 726 727 verifyAllFnAction( 728 session, 729 goToDefFromMainTs, 730 /*existingDependencyMap*/ undefined, 731 /*existingDocumentPositionMapper*/ undefined, 732 /*existingMapEqual*/ true, 733 /*existingDocumentPositionMapperEqual*/ true 734 ); 735 verifyScriptInfoCollectionWith(session, [mainTs]); 736 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dts not present", session); 737 }); 738 it(`with depedency .d.ts file, when file is created after actions on projects`, () => { 739 let fileContents: string; 740 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 741 fileContents = host.readFile(dtsLocation)!; 742 host.deleteFile(dtsLocation); 743 }); 744 745 host.writeFile(dtsLocation, fileContents!); 746 verifyAllFnAction( 747 session, 748 goToDefFromMainTs, 749 dependencyMap, 750 documentPositionMapper, 751 /*existingMapEqual*/ true, 752 /*existingDocumentPositionMapperEqual*/ true 753 ); 754 verifyScriptInfoCollectionWith(session, [mainTs]); 755 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dts created", session); 756 }); 757 it(`with depedency .d.ts file, when file is deleted after actions on the projects`, () => { 758 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 759 760 // The dependency file is deleted when orphan files are collected 761 host.deleteFile(dtsLocation); 762 verifyAllFnAction( 763 session, 764 goToDefFromMainTs, 765 dependencyMap, 766 documentPositionMapper, 767 /*existingMapEqual*/ true, 768 /*existingDocumentPositionMapperEqual*/ true 769 ); 770 verifyScriptInfoCollectionWith(session, [mainTs]); 771 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency dts deleted", session); 772 }); 773 it(`when defining project source changes, when timeout occurs before request`, () => { 774 // Create DocumentPositionMapper 775 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 776 777 // change 778 // Make change, without rebuild of solution 779 host.writeFile(dependencyTs.path, `function fooBar() { } 780${dependencyTs.content}`); 781 host.runQueuedTimeoutCallbacks(); 782 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 783 784 // action 785 verifyAllFnAction( 786 session, 787 goToDefFromMainTs, 788 /*existingDependencyMap*/ undefined, 789 /*existingDocumentPositionMapper*/ undefined, 790 /*existingMapEqual*/ true, 791 /*existingDocumentPositionMapperEqual*/ true 792 ); 793 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency source changes with timeout before request", session); 794 }); 795 it(`when defining project source changes, when timeout does not occur before request`, () => { 796 // Create DocumentPositionMapper 797 const { host, session } = setupWithAction(); 798 799 // change 800 // Make change, without rebuild of solution 801 host.writeFile(dependencyTs.path, `function fooBar() { } 802${dependencyTs.content}`); 803 804 // action 805 verifyAllFnAction( 806 session, 807 goToDefFromMainTs, 808 /*existingDependencyMap*/ undefined, 809 /*existingDocumentPositionMapper*/ undefined, 810 /*existingMapEqual*/ true, 811 /*existingDocumentPositionMapperEqual*/ true 812 ); 813 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/dependency source changes", session); 814 }); 815 816 it("when projects are not built", () => { 817 const host = createServerHost(files); 818 const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) }); 819 openFilesForSession([mainTs, randomFile], session); 820 verifyAllFnAction( 821 session, 822 goToDefFromMainTs, 823 /*existingDependencyMap*/ undefined, 824 /*existingDocumentPositionMapper*/ undefined, 825 /*existingMapEqual*/ true, 826 /*existingDocumentPositionMapperEqual*/ true 827 ); 828 verifyScriptInfoCollectionWith(session, [mainTs]); 829 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/configWithReference/when projects are not built", session); 830 }); 831 }); 832 describe("when main tsconfig has disableSourceOfProjectReferenceRedirect along with project reference", () => { 833 function setup(onHostCreate?: OnHostCreate) { 834 return setupWithMainTs(createSessionWithDisabledProjectReferences, onHostCreate); 835 } 836 837 function setupWithAction(onHostCreate?: OnHostCreate) { 838 return setupWithActionWith(setup, onHostCreate); 839 } 840 841 it("can go to definition correctly", () => { 842 const { session } = setup(); 843 verifyAllFnAction( 844 session, 845 goToDefFromMainTs, 846 /*existingDependencyMap*/ undefined, 847 /*existingDocumentPositionMapper*/ undefined, 848 /*existingMapEqual*/ false, 849 /*existingDocumentPositionMapperEqual*/ false 850 ); 851 verifyScriptInfoCollectionWith(session, [mainTs]); 852 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/can go to definition correctly", session); 853 }); 854 855 // Edit 856 it(`when usage file changes, document position mapper doesnt change, when timeout occurs before request`, () => { 857 // Create DocumentPositionMapper 858 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 859 860 // change 861 makeChangeToMainTs(session); 862 host.runQueuedTimeoutCallbacks(); 863 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 864 865 // action 866 verifyAllFnAction( 867 session, 868 goToDefFromMainTs, 869 dependencyMap, 870 documentPositionMapper, 871 /*existingMapEqual*/ true, 872 /*existingDocumentPositionMapperEqual*/ true 873 ); 874 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/usage file changes with timeout before request", session); 875 }); 876 it(`when usage file changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 877 // Create DocumentPositionMapper 878 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 879 880 // change 881 makeChangeToMainTs(session); 882 883 // action 884 verifyAllFnAction( 885 session, 886 goToDefFromMainTs, 887 dependencyMap, 888 documentPositionMapper, 889 /*existingMapEqual*/ true, 890 /*existingDocumentPositionMapperEqual*/ true 891 ); 892 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/usage file changes", session); 893 }); 894 895 // Edit dts to add new fn 896 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout occurs before request`, () => { 897 // Create DocumentPositionMapper 898 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 899 900 // change 901 changeDtsFile(host); 902 host.runQueuedTimeoutCallbacks(); 903 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 904 905 // action 906 verifyAllFnAction( 907 session, 908 goToDefFromMainTs, 909 dependencyMap, 910 documentPositionMapper, 911 /*existingMapEqual*/ true, 912 /*existingDocumentPositionMapperEqual*/ true 913 ); 914 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dts changes with timeout before request", session); 915 }); 916 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 917 // Create DocumentPositionMapper 918 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 919 920 // change 921 changeDtsFile(host); 922 923 // action 924 verifyAllFnAction( 925 session, 926 goToDefFromMainTs, 927 dependencyMap, 928 documentPositionMapper, 929 /*existingMapEqual*/ true, 930 /*existingDocumentPositionMapperEqual*/ true 931 ); 932 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dts changes", session); 933 }); 934 935 // Edit map file to represent added new line 936 it(`when dependency file's map changes, when timeout occurs before request`, () => { 937 // Create DocumentPositionMapper 938 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 939 940 // change 941 changeDtsMapFile(host); 942 host.runQueuedTimeoutCallbacks(); 943 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 944 945 // action 946 verifyAllFnAction( 947 session, 948 goToDefFromMainTs, 949 dependencyMap, 950 documentPositionMapper, 951 /*existingMapEqual*/ true, 952 /*existingDocumentPositionMapperEqual*/ false 953 ); 954 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dtsMap changes with timeout before request", session); 955 }); 956 it(`when dependency file's map changes, when timeout does not occur before request`, () => { 957 // Create DocumentPositionMapper 958 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 959 960 // change 961 changeDtsMapFile(host); 962 963 // action 964 verifyAllFnAction( 965 session, 966 goToDefFromMainTs, 967 dependencyMap, 968 documentPositionMapper, 969 /*existingMapEqual*/ true, 970 /*existingDocumentPositionMapperEqual*/ false 971 ); 972 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dtsMap changes", session); 973 }); 974 975 it(`with depedency files map file, when file is not present`, () => { 976 const { session } = setup(host => host.deleteFile(dtsMapLocation)); 977 978 verifyAllFnAction( 979 session, 980 goToDefFromMainTs, 981 /*existingDependencyMap*/ undefined, 982 /*existingDocumentPositionMapper*/ undefined, 983 /*existingMapEqual*/ true, 984 /*existingDocumentPositionMapperEqual*/ true 985 ); 986 verifyScriptInfoCollectionWith(session, [mainTs]); 987 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dtsMap not present", session); 988 }); 989 it(`with depedency files map file, when file is created after actions on projects`, () => { 990 let fileContents: string; 991 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 992 fileContents = host.readFile(dtsMapLocation)!; 993 host.deleteFile(dtsMapLocation); 994 }); 995 996 host.writeFile(dtsMapLocation, fileContents!); 997 verifyAllFnAction( 998 session, 999 goToDefFromMainTs, 1000 dependencyMap, 1001 documentPositionMapper, 1002 /*existingMapEqual*/ false, 1003 /*existingDocumentPositionMapperEqual*/ false 1004 ); 1005 verifyScriptInfoCollectionWith(session, [mainTs]); 1006 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dtsMap created", session); 1007 }); 1008 it(`with depedency files map file, when file is deleted after actions on the projects`, () => { 1009 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1010 1011 // The dependency file is deleted when orphan files are collected 1012 host.deleteFile(dtsMapLocation); 1013 verifyAllFnAction( 1014 session, 1015 goToDefFromMainTs, 1016 dependencyMap, 1017 documentPositionMapper, 1018 /*existingMapEqual*/ false, 1019 /*existingDocumentPositionMapperEqual*/ false 1020 ); 1021 verifyScriptInfoCollectionWith(session, [mainTs]); 1022 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dtsMap deleted", session); 1023 }); 1024 1025 it(`with depedency .d.ts file, when file is not present`, () => { 1026 const { session } = setup(host => host.deleteFile(dtsLocation)); 1027 1028 verifyAllFnAction( 1029 session, 1030 goToDefFromMainTs, 1031 /*existingDependencyMap*/ undefined, 1032 /*existingDocumentPositionMapper*/ undefined, 1033 /*existingMapEqual*/ true, 1034 /*existingDocumentPositionMapperEqual*/ true 1035 ); 1036 verifyScriptInfoCollectionWith(session, [mainTs]); 1037 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dts not present", session); 1038 }); 1039 it(`with depedency .d.ts file, when file is created after actions on projects`, () => { 1040 let fileContents: string; 1041 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 1042 fileContents = host.readFile(dtsLocation)!; 1043 host.deleteFile(dtsLocation); 1044 }); 1045 1046 host.writeFile(dtsLocation, fileContents!); 1047 verifyAllFnAction( 1048 session, 1049 goToDefFromMainTs, 1050 dependencyMap, 1051 documentPositionMapper, 1052 /*existingMapEqual*/ false, 1053 /*existingDocumentPositionMapperEqual*/ false 1054 ); 1055 verifyScriptInfoCollectionWith(session, [mainTs]); 1056 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dts created", session); 1057 }); 1058 it(`with depedency .d.ts file, when file is deleted after actions on the projects`, () => { 1059 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1060 1061 // The dependency file is deleted when orphan files are collected 1062 host.deleteFile(dtsLocation); 1063 verifyAllFnAction( 1064 session, 1065 goToDefFromMainTs, 1066 dependencyMap, 1067 documentPositionMapper, 1068 /*existingMapEqual*/ true, 1069 /*existingDocumentPositionMapperEqual*/ true 1070 ); 1071 verifyScriptInfoCollectionWith(session, [mainTs]); 1072 baselineTsserverLogs("projectReferencesSourcemap", "usageProject/disabledSourceRef/dependency dts deleted", session); 1073 }); 1074 }); 1075 }); 1076 1077 describe("from defining project: rename", () => { 1078 function setupWithActionWith(setup: (onHostCreate?: OnHostCreate) => ReturnType<CreateSessionFn>, onHostCreate: OnHostCreate | undefined) { 1079 const result = setup(onHostCreate); 1080 result.session.executeCommandSeq(renameFromDependencyTs(1)); 1081 return { ...result, ...getDocumentPositionMapper(result.session) }; 1082 } 1083 1084 describe("when main tsconfig doesnt have project reference", () => { 1085 function setup(onHostCreate?: OnHostCreate) { 1086 return setupWithDependencyTs(createSessionWithoutProjectReferences, onHostCreate); 1087 } 1088 1089 function setupWithAction(onHostCreate?: OnHostCreate) { 1090 return setupWithActionWith(setup, onHostCreate); 1091 } 1092 1093 it("rename locations from dependency", () => { 1094 const { session } = setup(); 1095 verifyAllFnAction( 1096 session, 1097 renameFromDependencyTs, 1098 /*existingDependencyMap*/ undefined, 1099 /*existingDocumentPositionMapper*/ undefined, 1100 /*existingMapEqual*/ false, 1101 /*existingDocumentPositionMapperEqual*/ false 1102 ); 1103 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1104 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/rename locations", session); 1105 }); 1106 1107 // Edit 1108 it(`when usage file changes, document position mapper doesnt change, when timeout occurs before request`, () => { 1109 // Create DocumentPositionMapper 1110 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1111 1112 // change 1113 makeChangeToDependencyTs(session); 1114 host.runQueuedTimeoutCallbacks(); 1115 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1116 1117 // action 1118 verifyAllFnAction( 1119 session, 1120 renameFromDependencyTs, 1121 dependencyMap, 1122 documentPositionMapper, 1123 /*existingMapEqual*/ true, 1124 /*existingDocumentPositionMapperEqual*/ true 1125 ); 1126 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/usage file changes with timeout before request", session); 1127 }); 1128 it(`when usage file changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 1129 // Create DocumentPositionMapper 1130 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 1131 1132 // change 1133 makeChangeToDependencyTs(session); 1134 1135 // action 1136 verifyAllFnAction( 1137 session, 1138 renameFromDependencyTs, 1139 dependencyMap, 1140 documentPositionMapper, 1141 /*existingMapEqual*/ true, 1142 /*existingDocumentPositionMapperEqual*/ true 1143 ); 1144 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/usage file changes", session); 1145 }); 1146 1147 // Edit dts to add new fn 1148 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout occurs before request`, () => { 1149 // Create DocumentPositionMapper 1150 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1151 1152 // change 1153 changeDtsFile(host); 1154 host.runQueuedTimeoutCallbacks(); 1155 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1156 1157 // action 1158 verifyAllFnAction( 1159 session, 1160 renameFromDependencyTs, 1161 dependencyMap, 1162 documentPositionMapper, 1163 /*existingMapEqual*/ true, 1164 /*existingDocumentPositionMapperEqual*/ true 1165 ); 1166 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dts changes with timeout before request", session); 1167 }); 1168 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 1169 // Create DocumentPositionMapper 1170 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1171 1172 // change 1173 changeDtsFile(host); 1174 1175 // action 1176 verifyAllFnAction( 1177 session, 1178 renameFromDependencyTs, 1179 dependencyMap, 1180 documentPositionMapper, 1181 /*existingMapEqual*/ true, 1182 /*existingDocumentPositionMapperEqual*/ true 1183 ); 1184 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dts changes", session); 1185 }); 1186 1187 // Edit map file to represent added new line 1188 it(`when dependency file's map changes, when timeout occurs before request`, () => { 1189 // Create DocumentPositionMapper 1190 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1191 1192 // change 1193 changeDtsMapFile(host); 1194 host.runQueuedTimeoutCallbacks(); 1195 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1196 1197 // action 1198 verifyAllFnAction( 1199 session, 1200 renameFromDependencyTs, 1201 dependencyMap, 1202 documentPositionMapper, 1203 /*existingMapEqual*/ true, 1204 /*existingDocumentPositionMapperEqual*/ false 1205 ); 1206 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dtsMap changes with timeout before request", session); 1207 }); 1208 it(`when dependency file's map changes, when timeout does not occur before request`, () => { 1209 // Create DocumentPositionMapper 1210 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1211 1212 // change 1213 changeDtsMapFile(host); 1214 1215 // action 1216 verifyAllFnAction( 1217 session, 1218 renameFromDependencyTs, 1219 dependencyMap, 1220 documentPositionMapper, 1221 /*existingMapEqual*/ true, 1222 /*existingDocumentPositionMapperEqual*/ false 1223 ); 1224 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dtsMap changes", session); 1225 }); 1226 1227 it(`with depedency files map file, when file is not present`, () => { 1228 const { session } = setup(host => host.deleteFile(dtsMapLocation)); 1229 1230 verifyAllFnAction( 1231 session, 1232 renameFromDependencyTs, 1233 /*existingDependencyMap*/ undefined, 1234 /*existingDocumentPositionMapper*/ undefined, 1235 /*existingMapEqual*/ true, 1236 /*existingDocumentPositionMapperEqual*/ true 1237 ); 1238 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1239 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dtsMap not present", session); 1240 }); 1241 it(`with depedency files map file, when file is created after actions on projects`, () => { 1242 let fileContents: string; 1243 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 1244 fileContents = host.readFile(dtsMapLocation)!; 1245 host.deleteFile(dtsMapLocation); 1246 }); 1247 1248 host.writeFile(dtsMapLocation, fileContents!); 1249 verifyAllFnAction( 1250 session, 1251 renameFromDependencyTs, 1252 dependencyMap, 1253 documentPositionMapper, 1254 /*existingMapEqual*/ false, 1255 /*existingDocumentPositionMapperEqual*/ false 1256 ); 1257 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1258 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dtsMap created", session); 1259 }); 1260 it(`with depedency files map file, when file is deleted after actions on the projects`, () => { 1261 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1262 1263 // The dependency file is deleted when orphan files are collected 1264 host.deleteFile(dtsMapLocation); 1265 verifyAllFnAction( 1266 session, 1267 renameFromDependencyTs, 1268 dependencyMap, 1269 documentPositionMapper, 1270 /*existingMapEqual*/ false, 1271 /*existingDocumentPositionMapperEqual*/ false 1272 ); 1273 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1274 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dtsMap deleted", session); 1275 }); 1276 1277 it(`with depedency .d.ts file, when file is not present`, () => { 1278 const { session } = setup(host => host.deleteFile(dtsLocation)); 1279 1280 verifyAllFnAction( 1281 session, 1282 renameFromDependencyTs, 1283 /*existingDependencyMap*/ undefined, 1284 /*existingDocumentPositionMapper*/ undefined, 1285 /*existingMapEqual*/ true, 1286 /*existingDocumentPositionMapperEqual*/ true 1287 ); 1288 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1289 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dts not present", session); 1290 }); 1291 it(`with depedency .d.ts file, when file is created after actions on projects`, () => { 1292 let fileContents: string; 1293 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 1294 fileContents = host.readFile(dtsLocation)!; 1295 host.deleteFile(dtsLocation); 1296 }); 1297 1298 host.writeFile(dtsLocation, fileContents!); 1299 verifyAllFnAction( 1300 session, 1301 renameFromDependencyTs, 1302 dependencyMap, 1303 documentPositionMapper, 1304 /*existingMapEqual*/ false, 1305 /*existingDocumentPositionMapperEqual*/ false 1306 ); 1307 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1308 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dts created", session); 1309 }); 1310 it(`with depedency .d.ts file, when file is deleted after actions on the projects`, () => { 1311 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1312 1313 // The dependency file is deleted when orphan files are collected 1314 host.deleteFile(dtsLocation); 1315 verifyAllFnAction( 1316 session, 1317 renameFromDependencyTs, 1318 dependencyMap, 1319 documentPositionMapper, 1320 /*existingMapEqual*/ true, 1321 /*existingDocumentPositionMapperEqual*/ true 1322 ); 1323 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1324 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configHasNoReference/dependency dts deleted", session); 1325 }); 1326 }); 1327 describe("when main tsconfig has project reference", () => { 1328 function setup(onHostCreate?: OnHostCreate) { 1329 return setupWithDependencyTs(createSessionWithProjectReferences, onHostCreate); 1330 } 1331 1332 function setupWithAction(onHostCreate?: OnHostCreate) { 1333 return setupWithActionWith(setup, onHostCreate); 1334 } 1335 1336 it("rename locations from dependency", () => { 1337 const { session } = setup(); 1338 verifyAllFnAction( 1339 session, 1340 renameFromDependencyTs, 1341 /*existingDependencyMap*/ undefined, 1342 /*existingDocumentPositionMapper*/ undefined, 1343 /*existingMapEqual*/ false, 1344 /*existingDocumentPositionMapperEqual*/ false 1345 ); 1346 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1347 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/rename locations", session); 1348 }); 1349 1350 // Edit 1351 it(`when usage file changes, document position mapper doesnt change, when timeout occurs before request`, () => { 1352 // Create DocumentPositionMapper 1353 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1354 1355 // change 1356 makeChangeToDependencyTs(session); 1357 host.runQueuedTimeoutCallbacks(); 1358 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1359 1360 // action 1361 verifyAllFnAction( 1362 session, 1363 renameFromDependencyTs, 1364 dependencyMap, 1365 documentPositionMapper, 1366 /*existingMapEqual*/ true, 1367 /*existingDocumentPositionMapperEqual*/ true 1368 ); 1369 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/usage file changes with timeout before request", session); 1370 }); 1371 it(`when usage file changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 1372 // Create DocumentPositionMapper 1373 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 1374 1375 // change 1376 makeChangeToDependencyTs(session); 1377 1378 // action 1379 verifyAllFnAction( 1380 session, 1381 renameFromDependencyTs, 1382 dependencyMap, 1383 documentPositionMapper, 1384 /*existingMapEqual*/ true, 1385 /*existingDocumentPositionMapperEqual*/ true 1386 ); 1387 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/usage file changes", session); 1388 }); 1389 1390 // Edit dts to add new fn 1391 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout occurs before request`, () => { 1392 // Create DocumentPositionMapper 1393 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1394 1395 // change 1396 changeDtsFile(host); 1397 host.runQueuedTimeoutCallbacks(); 1398 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1399 1400 // action 1401 verifyAllFnAction( 1402 session, 1403 renameFromDependencyTs, 1404 dependencyMap, 1405 documentPositionMapper, 1406 /*existingMapEqual*/ true, 1407 /*existingDocumentPositionMapperEqual*/ true 1408 ); 1409 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dts changes with timeout before request", session); 1410 }); 1411 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 1412 // Create DocumentPositionMapper 1413 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1414 1415 // change 1416 changeDtsFile(host); 1417 1418 // action 1419 verifyAllFnAction( 1420 session, 1421 renameFromDependencyTs, 1422 dependencyMap, 1423 documentPositionMapper, 1424 /*existingMapEqual*/ true, 1425 /*existingDocumentPositionMapperEqual*/ true 1426 ); 1427 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dts changes", session); 1428 }); 1429 1430 // Edit map file to represent added new line 1431 it(`when dependency file's map changes, when timeout occurs before request`, () => { 1432 // Create DocumentPositionMapper 1433 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1434 1435 // change 1436 changeDtsMapFile(host); 1437 host.runQueuedTimeoutCallbacks(); 1438 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1439 1440 // action 1441 verifyAllFnAction( 1442 session, 1443 renameFromDependencyTs, 1444 dependencyMap, 1445 documentPositionMapper, 1446 /*existingMapEqual*/ true, 1447 /*existingDocumentPositionMapperEqual*/ false 1448 ); 1449 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dtsMap changes with timeout before request", session); 1450 }); 1451 it(`when dependency file's map changes, when timeout does not occur before request`, () => { 1452 // Create DocumentPositionMapper 1453 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1454 1455 // change 1456 changeDtsMapFile(host); 1457 1458 // action 1459 verifyAllFnAction( 1460 session, 1461 renameFromDependencyTs, 1462 dependencyMap, 1463 documentPositionMapper, 1464 /*existingMapEqual*/ true, 1465 /*existingDocumentPositionMapperEqual*/ false 1466 ); 1467 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dtsMap changes", session); 1468 }); 1469 1470 it(`with depedency files map file, when file is not present`, () => { 1471 const { session } = setup(host => host.deleteFile(dtsMapLocation)); 1472 1473 verifyAllFnAction( 1474 session, 1475 renameFromDependencyTs, 1476 /*existingDependencyMap*/ undefined, 1477 /*existingDocumentPositionMapper*/ undefined, 1478 /*existingMapEqual*/ true, 1479 /*existingDocumentPositionMapperEqual*/ true 1480 ); 1481 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1482 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dtsMap not present", session); 1483 }); 1484 it(`with depedency files map file, when file is created after actions on projects`, () => { 1485 let fileContents: string; 1486 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 1487 fileContents = host.readFile(dtsMapLocation)!; 1488 host.deleteFile(dtsMapLocation); 1489 }); 1490 1491 host.writeFile(dtsMapLocation, fileContents!); 1492 verifyAllFnAction( 1493 session, 1494 renameFromDependencyTs, 1495 dependencyMap, 1496 documentPositionMapper, 1497 /*existingMapEqual*/ false, 1498 /*existingDocumentPositionMapperEqual*/ false 1499 ); 1500 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1501 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dtsMap created", session); 1502 }); 1503 it(`with depedency files map file, when file is deleted after actions on the projects`, () => { 1504 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1505 1506 // The dependency file is deleted when orphan files are collected 1507 host.deleteFile(dtsMapLocation); 1508 verifyAllFnAction( 1509 session, 1510 renameFromDependencyTs, 1511 dependencyMap, 1512 documentPositionMapper, 1513 /*existingMapEqual*/ false, 1514 /*existingDocumentPositionMapperEqual*/ false 1515 ); 1516 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1517 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dtsMap deleted", session); 1518 }); 1519 1520 it(`with depedency .d.ts file, when file is not present`, () => { 1521 const { session } = setup(host => host.deleteFile(dtsLocation)); 1522 1523 verifyAllFnAction( 1524 session, 1525 renameFromDependencyTs, 1526 /*existingDependencyMap*/ undefined, 1527 /*existingDocumentPositionMapper*/ undefined, 1528 /*existingMapEqual*/ true, 1529 /*existingDocumentPositionMapperEqual*/ true 1530 ); 1531 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1532 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dts not present", session); 1533 }); 1534 it(`with depedency .d.ts file, when file is created after actions on projects`, () => { 1535 let fileContents: string; 1536 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 1537 fileContents = host.readFile(dtsLocation)!; 1538 host.deleteFile(dtsLocation); 1539 }); 1540 1541 host.writeFile(dtsLocation, fileContents!); 1542 verifyAllFnAction( 1543 session, 1544 renameFromDependencyTs, 1545 dependencyMap, 1546 documentPositionMapper, 1547 /*existingMapEqual*/ false, 1548 /*existingDocumentPositionMapperEqual*/ false 1549 ); 1550 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1551 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dts created", session); 1552 }); 1553 it(`with depedency .d.ts file, when file is deleted after actions on the projects`, () => { 1554 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1555 1556 // The dependency file is deleted when orphan files are collected 1557 host.deleteFile(dtsLocation); 1558 verifyAllFnAction( 1559 session, 1560 renameFromDependencyTs, 1561 dependencyMap, 1562 documentPositionMapper, 1563 /*existingMapEqual*/ true, 1564 /*existingDocumentPositionMapperEqual*/ true 1565 ); 1566 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1567 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency dts deleted", session); 1568 }); 1569 it(`when defining project source changes, when timeout occurs before request`, () => { 1570 // Create DocumentPositionMapper 1571 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1572 1573 // change 1574 // Make change, without rebuild of solution 1575 session.executeCommandSeq<protocol.ChangeRequest>({ 1576 command: protocol.CommandTypes.Change, 1577 arguments: { 1578 file: dependencyTs.path, line: 1, offset: 1, endLine: 1, endOffset: 1, insertString: `function fooBar() { } 1579`} 1580 }); 1581 host.runQueuedTimeoutCallbacks(); 1582 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1583 1584 // action 1585 verifyAllFnAction( 1586 session, 1587 renameFromDependencyTsWithDependencyChange, 1588 /*existingDependencyMap*/ undefined, 1589 /*existingDocumentPositionMapper*/ undefined, 1590 /*existingMapEqual*/ false, 1591 /*existingDocumentPositionMapperEqual*/ false 1592 ); 1593 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency source changes with timeout before request", session); 1594 }); 1595 it(`when defining project source changes, when timeout does not occur before request`, () => { 1596 // Create DocumentPositionMapper 1597 const { session } = setupWithAction(); 1598 1599 // change 1600 // Make change, without rebuild of solution 1601 session.executeCommandSeq<protocol.ChangeRequest>({ 1602 command: protocol.CommandTypes.Change, 1603 arguments: { 1604 file: dependencyTs.path, line: 1, offset: 1, endLine: 1, endOffset: 1, insertString: `function fooBar() { } 1605`} 1606 }); 1607 1608 // action 1609 verifyAllFnAction( 1610 session, 1611 renameFromDependencyTsWithDependencyChange, 1612 /*existingDependencyMap*/ undefined, 1613 /*existingDocumentPositionMapper*/ undefined, 1614 /*existingMapEqual*/ false, 1615 /*existingDocumentPositionMapperEqual*/ false 1616 ); 1617 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/dependency source changes", session); 1618 }); 1619 1620 it("when projects are not built", () => { 1621 const host = createServerHost(files); 1622 const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) }); 1623 openFilesForSession([dependencyTs, randomFile], session); 1624 verifyAllFnAction( 1625 session, 1626 renameFromDependencyTs, 1627 /*existingDependencyMap*/ undefined, 1628 /*existingDocumentPositionMapper*/ undefined, 1629 /*existingMapEqual*/ true, 1630 /*existingDocumentPositionMapperEqual*/ true 1631 ); 1632 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1633 baselineTsserverLogs("projectReferencesSourcemap", "dependency/configWithReference/when projects are not built", session); 1634 }); 1635 }); 1636 describe("when main tsconfig has disableSourceOfProjectReferenceRedirect along with project reference", () => { 1637 function setup(onHostCreate?: OnHostCreate) { 1638 return setupWithDependencyTs(createSessionWithDisabledProjectReferences, onHostCreate); 1639 } 1640 1641 function setupWithAction(onHostCreate?: OnHostCreate) { 1642 return setupWithActionWith(setup, onHostCreate); 1643 } 1644 1645 it("rename locations from dependency", () => { 1646 const { session } = setup(); 1647 verifyAllFnAction( 1648 session, 1649 renameFromDependencyTs, 1650 /*existingDependencyMap*/ undefined, 1651 /*existingDocumentPositionMapper*/ undefined, 1652 /*existingMapEqual*/ false, 1653 /*existingDocumentPositionMapperEqual*/ false 1654 ); 1655 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1656 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/rename locations", session); 1657 }); 1658 1659 // Edit 1660 it(`when usage file changes, document position mapper doesnt change, when timeout occurs before request`, () => { 1661 // Create DocumentPositionMapper 1662 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1663 1664 // change 1665 makeChangeToDependencyTs(session); 1666 host.runQueuedTimeoutCallbacks(); 1667 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1668 1669 // action 1670 verifyAllFnAction( 1671 session, 1672 renameFromDependencyTs, 1673 dependencyMap, 1674 documentPositionMapper, 1675 /*existingMapEqual*/ true, 1676 /*existingDocumentPositionMapperEqual*/ true 1677 ); 1678 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/usage file changes with timeout before request", session); 1679 }); 1680 it(`when usage file changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 1681 // Create DocumentPositionMapper 1682 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 1683 1684 // change 1685 makeChangeToDependencyTs(session); 1686 1687 // action 1688 verifyAllFnAction( 1689 session, 1690 renameFromDependencyTs, 1691 dependencyMap, 1692 documentPositionMapper, 1693 /*existingMapEqual*/ true, 1694 /*existingDocumentPositionMapperEqual*/ true 1695 ); 1696 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/usage file changes", session); 1697 }); 1698 1699 // Edit dts to add new fn 1700 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout occurs before request`, () => { 1701 // Create DocumentPositionMapper 1702 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1703 1704 // change 1705 changeDtsFile(host); 1706 host.runQueuedTimeoutCallbacks(); 1707 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1708 1709 // action 1710 verifyAllFnAction( 1711 session, 1712 renameFromDependencyTs, 1713 dependencyMap, 1714 documentPositionMapper, 1715 /*existingMapEqual*/ true, 1716 /*existingDocumentPositionMapperEqual*/ true 1717 ); 1718 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dts changes with timeout before request", session); 1719 }); 1720 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 1721 // Create DocumentPositionMapper 1722 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1723 1724 // change 1725 changeDtsFile(host); 1726 1727 // action 1728 verifyAllFnAction( 1729 session, 1730 renameFromDependencyTs, 1731 dependencyMap, 1732 documentPositionMapper, 1733 /*existingMapEqual*/ true, 1734 /*existingDocumentPositionMapperEqual*/ true 1735 ); 1736 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dts changes", session); 1737 }); 1738 1739 // Edit map file to represent added new line 1740 it(`when dependency file's map changes, when timeout occurs before request`, () => { 1741 // Create DocumentPositionMapper 1742 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1743 1744 // change 1745 changeDtsMapFile(host); 1746 host.runQueuedTimeoutCallbacks(); 1747 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1748 1749 // action 1750 verifyAllFnAction( 1751 session, 1752 renameFromDependencyTs, 1753 dependencyMap, 1754 documentPositionMapper, 1755 /*existingMapEqual*/ true, 1756 /*existingDocumentPositionMapperEqual*/ false 1757 ); 1758 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dtsMap changes with timeout before request", session); 1759 }); 1760 it(`when dependency file's map changes, when timeout does not occur before request`, () => { 1761 // Create DocumentPositionMapper 1762 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1763 1764 // change 1765 changeDtsMapFile(host); 1766 1767 // action 1768 verifyAllFnAction( 1769 session, 1770 renameFromDependencyTs, 1771 dependencyMap, 1772 documentPositionMapper, 1773 /*existingMapEqual*/ true, 1774 /*existingDocumentPositionMapperEqual*/ false 1775 ); 1776 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dtsMap changes", session); 1777 }); 1778 1779 it(`with depedency files map file, when file is not present`, () => { 1780 const { session } = setup(host => host.deleteFile(dtsMapLocation)); 1781 1782 verifyAllFnAction( 1783 session, 1784 renameFromDependencyTs, 1785 /*existingDependencyMap*/ undefined, 1786 /*existingDocumentPositionMapper*/ undefined, 1787 /*existingMapEqual*/ true, 1788 /*existingDocumentPositionMapperEqual*/ true 1789 ); 1790 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1791 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dtsMap not present", session); 1792 }); 1793 it(`with depedency files map file, when file is created after actions on projects`, () => { 1794 let fileContents: string; 1795 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 1796 fileContents = host.readFile(dtsMapLocation)!; 1797 host.deleteFile(dtsMapLocation); 1798 }); 1799 1800 host.writeFile(dtsMapLocation, fileContents!); 1801 verifyAllFnAction( 1802 session, 1803 renameFromDependencyTs, 1804 dependencyMap, 1805 documentPositionMapper, 1806 /*existingMapEqual*/ false, 1807 /*existingDocumentPositionMapperEqual*/ false 1808 ); 1809 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1810 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dtsMap created", session); 1811 }); 1812 it(`with depedency files map file, when file is deleted after actions on the projects`, () => { 1813 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1814 1815 // The dependency file is deleted when orphan files are collected 1816 host.deleteFile(dtsMapLocation); 1817 verifyAllFnAction( 1818 session, 1819 renameFromDependencyTs, 1820 dependencyMap, 1821 documentPositionMapper, 1822 /*existingMapEqual*/ false, 1823 /*existingDocumentPositionMapperEqual*/ false 1824 ); 1825 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1826 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dtsMap deleted", session); 1827 }); 1828 1829 it(`with depedency .d.ts file, when file is not present`, () => { 1830 const { session } = setup(host => host.deleteFile(dtsLocation)); 1831 1832 verifyAllFnAction( 1833 session, 1834 renameFromDependencyTs, 1835 /*existingDependencyMap*/ undefined, 1836 /*existingDocumentPositionMapper*/ undefined, 1837 /*existingMapEqual*/ true, 1838 /*existingDocumentPositionMapperEqual*/ true 1839 ); 1840 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1841 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dts not present", session); 1842 }); 1843 it(`with depedency .d.ts file, when file is created after actions on projects`, () => { 1844 let fileContents: string; 1845 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 1846 fileContents = host.readFile(dtsLocation)!; 1847 host.deleteFile(dtsLocation); 1848 }); 1849 1850 host.writeFile(dtsLocation, fileContents!); 1851 verifyAllFnAction( 1852 session, 1853 renameFromDependencyTs, 1854 dependencyMap, 1855 documentPositionMapper, 1856 /*existingMapEqual*/ false, 1857 /*existingDocumentPositionMapperEqual*/ false 1858 ); 1859 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1860 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dts created", session); 1861 }); 1862 it(`with depedency .d.ts file, when file is deleted after actions on the projects`, () => { 1863 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1864 1865 // The dependency file is deleted when orphan files are collected 1866 host.deleteFile(dtsLocation); 1867 verifyAllFnAction( 1868 session, 1869 renameFromDependencyTs, 1870 dependencyMap, 1871 documentPositionMapper, 1872 /*existingMapEqual*/ true, 1873 /*existingDocumentPositionMapperEqual*/ true 1874 ); 1875 verifyScriptInfoCollectionWith(session, [dependencyTs]); 1876 baselineTsserverLogs("projectReferencesSourcemap", "dependency/disabledSourceRef/dependency dts deleted", session); 1877 }); 1878 }); 1879 }); 1880 1881 describe("when opening depedency and usage project: goToDef and rename", () => { 1882 function setupWithActionWith(setup: (onHostCreate?: OnHostCreate) => ReturnType<CreateSessionFn>, onHostCreate: OnHostCreate | undefined) { 1883 const result = setup(onHostCreate); 1884 result.session.executeCommandSeq(goToDefFromMainTs(1)); 1885 result.session.executeCommandSeq(renameFromDependencyTs(1)); 1886 return { ...result, ...getDocumentPositionMapper(result.session) }; 1887 } 1888 1889 describe("when main tsconfig doesnt have project reference", () => { 1890 function setup(onHostCreate?: OnHostCreate) { 1891 return setupWithMainTsAndDependencyTs(createSessionWithoutProjectReferences, onHostCreate); 1892 } 1893 1894 function setupWithAction(onHostCreate?: OnHostCreate) { 1895 return setupWithActionWith(setup, onHostCreate); 1896 } 1897 1898 it("goto Definition in usage and rename locations from defining project", () => { 1899 const { session } = setup(); 1900 verifyAllFnAction( 1901 session, 1902 goToDefFromMainTs, 1903 /*existingDependencyMap*/ undefined, 1904 /*existingDocumentPositionMapper*/ undefined, 1905 /*existingMapEqual*/ false, 1906 /*existingDocumentPositionMapperEqual*/ false 1907 ); 1908 const { dependencyMap, documentPositionMapper } = getDocumentPositionMapper(session); 1909 verifyAllFnAction( 1910 session, 1911 renameFromDependencyTs, 1912 dependencyMap, 1913 documentPositionMapper, 1914 /*existingMapEqual*/ true, 1915 /*existingDocumentPositionMapperEqual*/ true 1916 ); 1917 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 1918 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/goToDef and rename locations", session); 1919 }); 1920 1921 // Edit 1922 it(`when usage file changes, document position mapper doesnt change, when timeout occurs before request`, () => { 1923 // Create DocumentPositionMapper 1924 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1925 1926 // change 1927 makeChangeToMainTs(session); 1928 makeChangeToDependencyTs(session); 1929 host.runQueuedTimeoutCallbacks(); 1930 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1931 1932 // action 1933 verifyAllFnAction( 1934 session, 1935 goToDefFromMainTs, 1936 dependencyMap, 1937 documentPositionMapper, 1938 /*existingMapEqual*/ true, 1939 /*existingDocumentPositionMapperEqual*/ true 1940 ); 1941 verifyAllFnAction( 1942 session, 1943 renameFromDependencyTs, 1944 dependencyMap, 1945 documentPositionMapper, 1946 /*existingMapEqual*/ true, 1947 /*existingDocumentPositionMapperEqual*/ true 1948 ); 1949 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/usage file changes with timeout before request", session); 1950 }); 1951 it(`when usage file changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 1952 // Create DocumentPositionMapper 1953 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 1954 1955 // change 1956 makeChangeToMainTs(session); 1957 makeChangeToDependencyTs(session); 1958 1959 // action 1960 verifyAllFnAction( 1961 session, 1962 goToDefFromMainTs, 1963 dependencyMap, 1964 documentPositionMapper, 1965 /*existingMapEqual*/ true, 1966 /*existingDocumentPositionMapperEqual*/ true 1967 ); 1968 verifyAllFnAction( 1969 session, 1970 renameFromDependencyTs, 1971 dependencyMap, 1972 documentPositionMapper, 1973 /*existingMapEqual*/ true, 1974 /*existingDocumentPositionMapperEqual*/ true 1975 ); 1976 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/usage file changes", session); 1977 }); 1978 1979 // Edit dts to add new fn 1980 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout occurs before request`, () => { 1981 // Create DocumentPositionMapper 1982 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 1983 1984 // change 1985 changeDtsFile(host); 1986 host.runQueuedTimeoutCallbacks(); 1987 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 1988 1989 // action 1990 verifyAllFnAction( 1991 session, 1992 goToDefFromMainTs, 1993 dependencyMap, 1994 documentPositionMapper, 1995 /*existingMapEqual*/ true, 1996 /*existingDocumentPositionMapperEqual*/ true 1997 ); 1998 verifyAllFnAction( 1999 session, 2000 renameFromDependencyTs, 2001 dependencyMap, 2002 documentPositionMapper, 2003 /*existingMapEqual*/ true, 2004 /*existingDocumentPositionMapperEqual*/ true 2005 ); 2006 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dts changes with timeout before request", session); 2007 }); 2008 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 2009 // Create DocumentPositionMapper 2010 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2011 2012 // change 2013 changeDtsFile(host); 2014 2015 // action 2016 verifyAllFnAction( 2017 session, 2018 goToDefFromMainTs, 2019 dependencyMap, 2020 documentPositionMapper, 2021 /*existingMapEqual*/ true, 2022 /*existingDocumentPositionMapperEqual*/ true 2023 ); 2024 verifyAllFnAction( 2025 session, 2026 renameFromDependencyTs, 2027 dependencyMap, 2028 documentPositionMapper, 2029 /*existingMapEqual*/ true, 2030 /*existingDocumentPositionMapperEqual*/ true 2031 ); 2032 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dts changes", session); 2033 }); 2034 2035 // Edit map file to represent added new line 2036 it(`when dependency file's map changes, when timeout occurs before request`, () => { 2037 // Create DocumentPositionMapper 2038 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2039 2040 // change 2041 changeDtsMapFile(host); 2042 host.runQueuedTimeoutCallbacks(); 2043 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 2044 2045 // action 2046 verifyAllFnAction( 2047 session, 2048 goToDefFromMainTs, 2049 dependencyMap, 2050 documentPositionMapper, 2051 /*existingMapEqual*/ true, 2052 /*existingDocumentPositionMapperEqual*/ false 2053 ); 2054 const { documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 2055 verifyAllFnAction( 2056 session, 2057 renameFromDependencyTs, 2058 dependencyMap, 2059 newDocumentPositionMapper, 2060 /*existingMapEqual*/ true, 2061 /*existingDocumentPositionMapperEqual*/ true 2062 ); 2063 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dtsMap changes with timeout before request", session); 2064 }); 2065 it(`when dependency file's map changes, when timeout does not occur before request`, () => { 2066 // Create DocumentPositionMapper 2067 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2068 2069 // change 2070 changeDtsMapFile(host); 2071 2072 // action 2073 verifyAllFnAction( 2074 session, 2075 goToDefFromMainTs, 2076 dependencyMap, 2077 documentPositionMapper, 2078 /*existingMapEqual*/ true, 2079 /*existingDocumentPositionMapperEqual*/ false 2080 ); 2081 const { documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 2082 verifyAllFnAction( 2083 session, 2084 renameFromDependencyTs, 2085 dependencyMap, 2086 newDocumentPositionMapper, 2087 /*existingMapEqual*/ true, 2088 /*existingDocumentPositionMapperEqual*/ true 2089 ); 2090 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dtsMap changes", session); 2091 }); 2092 2093 it(`with depedency files map file, when file is not present`, () => { 2094 const { session } = setup(host => host.deleteFile(dtsMapLocation)); 2095 2096 verifyAllFnAction( 2097 session, 2098 goToDefFromMainTs, 2099 /*existingDependencyMap*/ undefined, 2100 /*existingDocumentPositionMapper*/ undefined, 2101 /*existingMapEqual*/ true, 2102 /*existingDocumentPositionMapperEqual*/ true 2103 ); 2104 verifyAllFnAction( 2105 session, 2106 renameFromDependencyTs, 2107 /*existingDependencyMap*/ undefined, 2108 /*existingDocumentPositionMapper*/ undefined, 2109 /*existingMapEqual*/ true, 2110 /*existingDocumentPositionMapperEqual*/ true 2111 ); 2112 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2113 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dtsMap not present", session); 2114 }); 2115 it(`with depedency files map file, when file is created after actions on projects`, () => { 2116 let fileContents: string; 2117 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 2118 fileContents = host.readFile(dtsMapLocation)!; 2119 host.deleteFile(dtsMapLocation); 2120 }); 2121 2122 host.writeFile(dtsMapLocation, fileContents!); 2123 verifyAllFnAction( 2124 session, 2125 goToDefFromMainTs, 2126 dependencyMap, 2127 documentPositionMapper, 2128 /*existingMapEqual*/ false, 2129 /*existingDocumentPositionMapperEqual*/ false 2130 ); 2131 const { dependencyMap: newDependencyMap, documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 2132 verifyAllFnAction( 2133 session, 2134 renameFromDependencyTs, 2135 newDependencyMap, 2136 newDocumentPositionMapper, 2137 /*existingMapEqual*/ true, 2138 /*existingDocumentPositionMapperEqual*/ true 2139 ); 2140 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2141 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dtsMap created", session); 2142 }); 2143 it(`with depedency files map file, when file is deleted after actions on the projects`, () => { 2144 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2145 2146 // The dependency file is deleted when orphan files are collected 2147 host.deleteFile(dtsMapLocation); 2148 verifyAllFnAction( 2149 session, 2150 goToDefFromMainTs, 2151 dependencyMap, 2152 documentPositionMapper, 2153 /*existingMapEqual*/ false, 2154 /*existingDocumentPositionMapperEqual*/ false 2155 ); 2156 const { dependencyMap: newDependencyMap, documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 2157 verifyAllFnAction( 2158 session, 2159 renameFromDependencyTs, 2160 newDependencyMap, 2161 newDocumentPositionMapper, 2162 /*existingMapEqual*/ true, 2163 /*existingDocumentPositionMapperEqual*/ true 2164 ); 2165 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2166 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dtsMap deleted", session); 2167 }); 2168 2169 it(`with depedency .d.ts file, when file is not present`, () => { 2170 const { session } = setup(host => host.deleteFile(dtsLocation)); 2171 verifyAllFnAction( 2172 session, 2173 goToDefFromMainTs, 2174 /*existingDependencyMap*/ undefined, 2175 /*existingDocumentPositionMapper*/ undefined, 2176 /*existingMapEqual*/ true, 2177 /*existingDocumentPositionMapperEqual*/ true 2178 ); 2179 verifyAllFnAction( 2180 session, 2181 renameFromDependencyTs, 2182 /*existingDependencyMap*/ undefined, 2183 /*existingDocumentPositionMapper*/ undefined, 2184 /*existingMapEqual*/ true, 2185 /*existingDocumentPositionMapperEqual*/ true 2186 ); 2187 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2188 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dts not present", session); 2189 }); 2190 it(`with depedency .d.ts file, when file is created after actions on projects`, () => { 2191 let fileContents: string; 2192 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 2193 fileContents = host.readFile(dtsLocation)!; 2194 host.deleteFile(dtsLocation); 2195 }); 2196 2197 host.writeFile(dtsLocation, fileContents!); 2198 verifyAllFnAction( 2199 session, 2200 goToDefFromMainTs, 2201 dependencyMap, 2202 documentPositionMapper, 2203 /*existingMapEqual*/ false, 2204 /*existingDocumentPositionMapperEqual*/ false 2205 ); 2206 const { dependencyMap: newDependencyMap, documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 2207 verifyAllFnAction( 2208 session, 2209 renameFromDependencyTs, 2210 newDependencyMap, 2211 newDocumentPositionMapper, 2212 /*existingMapEqual*/ true, 2213 /*existingDocumentPositionMapperEqual*/ true 2214 ); 2215 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2216 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dts created", session); 2217 }); 2218 it(`with depedency .d.ts file, when file is deleted after actions on the projects`, () => { 2219 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2220 2221 // The dependency file is deleted when orphan files are collected 2222 host.deleteFile(dtsLocation); 2223 verifyAllFnAction( 2224 session, 2225 goToDefFromMainTs, 2226 dependencyMap, 2227 documentPositionMapper, 2228 /*existingMapEqual*/ true, 2229 /*existingDocumentPositionMapperEqual*/ true 2230 ); 2231 verifyAllFnAction( 2232 session, 2233 renameFromDependencyTs, 2234 dependencyMap, 2235 documentPositionMapper, 2236 /*existingMapEqual*/ true, 2237 /*existingDocumentPositionMapperEqual*/ true 2238 ); 2239 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2240 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configHasNoReference/dependency dts deleted", session); 2241 }); 2242 }); 2243 describe("when main tsconfig has project reference", () => { 2244 function setup(onHostCreate?: OnHostCreate) { 2245 return setupWithMainTsAndDependencyTs(createSessionWithProjectReferences, onHostCreate); 2246 } 2247 2248 function setupWithAction(onHostCreate?: OnHostCreate) { 2249 return setupWithActionWith(setup, onHostCreate); 2250 } 2251 2252 it("goto Definition in usage and rename locations from defining project", () => { 2253 const { session } = setup(); 2254 verifyAllFnAction( 2255 session, 2256 goToDefFromMainTs, 2257 /*existingDependencyMap*/ undefined, 2258 /*existingDocumentPositionMapper*/ undefined, 2259 /*existingMapEqual*/ true, 2260 /*existingDocumentPositionMapperEqual*/ true 2261 ); 2262 verifyAllFnAction( 2263 session, 2264 renameFromDependencyTs, 2265 /*existingDependencyMap*/ undefined, 2266 /*existingDocumentPositionMapper*/ undefined, 2267 /*existingMapEqual*/ false, 2268 /*existingDocumentPositionMapperEqual*/ false 2269 ); 2270 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2271 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/gotoDef and rename locations", session); 2272 }); 2273 2274 // Edit 2275 it(`when usage file changes, document position mapper doesnt change, when timeout occurs before request`, () => { 2276 // Create DocumentPositionMapper 2277 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2278 2279 // change 2280 makeChangeToMainTs(session); 2281 makeChangeToDependencyTs(session); 2282 host.runQueuedTimeoutCallbacks(); 2283 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 2284 2285 // action 2286 verifyAllFnAction( 2287 session, 2288 goToDefFromMainTs, 2289 dependencyMap, 2290 documentPositionMapper, 2291 /*existingMapEqual*/ true, 2292 /*existingDocumentPositionMapperEqual*/ true 2293 ); 2294 verifyAllFnAction( 2295 session, 2296 renameFromDependencyTs, 2297 dependencyMap, 2298 documentPositionMapper, 2299 /*existingMapEqual*/ true, 2300 /*existingDocumentPositionMapperEqual*/ true 2301 ); 2302 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/usage file changes with timeout before request", session); 2303 }); 2304 it(`when usage file changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 2305 // Create DocumentPositionMapper 2306 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 2307 2308 // change 2309 makeChangeToMainTs(session); 2310 makeChangeToDependencyTs(session); 2311 2312 // action 2313 verifyAllFnAction( 2314 session, 2315 goToDefFromMainTs, 2316 dependencyMap, 2317 documentPositionMapper, 2318 /*existingMapEqual*/ true, 2319 /*existingDocumentPositionMapperEqual*/ true 2320 ); 2321 verifyAllFnAction( 2322 session, 2323 renameFromDependencyTs, 2324 dependencyMap, 2325 documentPositionMapper, 2326 /*existingMapEqual*/ true, 2327 /*existingDocumentPositionMapperEqual*/ true 2328 ); 2329 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/usage file changes", session); 2330 }); 2331 2332 // Edit dts to add new fn 2333 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout occurs before request`, () => { 2334 // Create DocumentPositionMapper 2335 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2336 2337 // change 2338 changeDtsFile(host); 2339 host.runQueuedTimeoutCallbacks(); 2340 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 2341 2342 // action 2343 verifyAllFnAction( 2344 session, 2345 goToDefFromMainTs, 2346 dependencyMap, 2347 documentPositionMapper, 2348 /*existingMapEqual*/ true, 2349 /*existingDocumentPositionMapperEqual*/ true 2350 ); 2351 verifyAllFnAction( 2352 session, 2353 renameFromDependencyTs, 2354 dependencyMap, 2355 documentPositionMapper, 2356 /*existingMapEqual*/ true, 2357 /*existingDocumentPositionMapperEqual*/ true 2358 ); 2359 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dts changes with timeout before request", session); 2360 }); 2361 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 2362 // Create DocumentPositionMapper 2363 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2364 2365 // change 2366 changeDtsFile(host); 2367 2368 // action 2369 verifyAllFnAction( 2370 session, 2371 goToDefFromMainTs, 2372 dependencyMap, 2373 documentPositionMapper, 2374 /*existingMapEqual*/ true, 2375 /*existingDocumentPositionMapperEqual*/ true 2376 ); 2377 verifyAllFnAction( 2378 session, 2379 renameFromDependencyTs, 2380 dependencyMap, 2381 documentPositionMapper, 2382 /*existingMapEqual*/ true, 2383 /*existingDocumentPositionMapperEqual*/ true 2384 ); 2385 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dts changes", session); 2386 }); 2387 2388 // Edit map file to represent added new line 2389 it(`when dependency file's map changes, when timeout occurs before request`, () => { 2390 // Create DocumentPositionMapper 2391 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2392 2393 // change 2394 changeDtsMapFile(host); 2395 host.runQueuedTimeoutCallbacks(); 2396 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 2397 2398 // action 2399 verifyAllFnAction( 2400 session, 2401 goToDefFromMainTs, 2402 dependencyMap, 2403 documentPositionMapper, 2404 /*existingMapEqual*/ true, 2405 /*existingDocumentPositionMapperEqual*/ true 2406 ); 2407 verifyAllFnAction( 2408 session, 2409 renameFromDependencyTs, 2410 dependencyMap, 2411 documentPositionMapper, 2412 /*existingMapEqual*/ true, 2413 /*existingDocumentPositionMapperEqual*/ false 2414 ); 2415 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dtsMap changes with timeout before request", session); 2416 }); 2417 it(`when dependency file's map changes, when timeout does not occur before request`, () => { 2418 // Create DocumentPositionMapper 2419 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2420 2421 // change 2422 changeDtsMapFile(host); 2423 2424 // action 2425 verifyAllFnAction( 2426 session, 2427 goToDefFromMainTs, 2428 dependencyMap, 2429 documentPositionMapper, 2430 /*existingMapEqual*/ true, 2431 /*existingDocumentPositionMapperEqual*/ true 2432 ); 2433 verifyAllFnAction( 2434 session, 2435 renameFromDependencyTs, 2436 dependencyMap, 2437 documentPositionMapper, 2438 /*existingMapEqual*/ true, 2439 /*existingDocumentPositionMapperEqual*/ false 2440 ); 2441 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dtsMap changes", session); 2442 }); 2443 2444 it(`with depedency files map file, when file is not present`, () => { 2445 const { session } = setup(host => host.deleteFile(dtsMapLocation)); 2446 2447 verifyAllFnAction( 2448 session, 2449 goToDefFromMainTs, 2450 /*existingDependencyMap*/ undefined, 2451 /*existingDocumentPositionMapper*/ undefined, 2452 /*existingMapEqual*/ true, 2453 /*existingDocumentPositionMapperEqual*/ true 2454 ); 2455 verifyAllFnAction( 2456 session, 2457 renameFromDependencyTs, 2458 /*existingDependencyMap*/ undefined, 2459 /*existingDocumentPositionMapper*/ undefined, 2460 /*existingMapEqual*/ true, 2461 /*existingDocumentPositionMapperEqual*/ true 2462 ); 2463 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2464 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dtsMap not present", session); 2465 }); 2466 it(`with depedency files map file, when file is created after actions on projects`, () => { 2467 let fileContents: string; 2468 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 2469 fileContents = host.readFile(dtsMapLocation)!; 2470 host.deleteFile(dtsMapLocation); 2471 }); 2472 2473 host.writeFile(dtsMapLocation, fileContents!); 2474 verifyAllFnAction( 2475 session, 2476 goToDefFromMainTs, 2477 dependencyMap, 2478 documentPositionMapper, 2479 /*existingMapEqual*/ true, 2480 /*existingDocumentPositionMapperEqual*/ true, 2481 /*skipMapPathInDtsInfo*/ true 2482 ); 2483 verifyAllFnAction( 2484 session, 2485 renameFromDependencyTs, 2486 dependencyMap, 2487 documentPositionMapper, 2488 /*existingMapEqual*/ false, 2489 /*existingDocumentPositionMapperEqual*/ false 2490 ); 2491 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2492 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dtsMap created", session); 2493 }); 2494 it(`with depedency files map file, when file is deleted after actions on the projects`, () => { 2495 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2496 2497 // The dependency file is deleted when orphan files are collected 2498 host.deleteFile(dtsMapLocation); 2499 verifyAllFnAction( 2500 session, 2501 goToDefFromMainTs, 2502 dependencyMap, 2503 documentPositionMapper, 2504 /*existingMapEqual*/ false, 2505 /*existingDocumentPositionMapperEqual*/ false, 2506 /*skipMapPathInDtsInfo*/ true 2507 ); 2508 verifyAllFnAction( 2509 session, 2510 renameFromDependencyTs, 2511 dependencyMap, 2512 documentPositionMapper, 2513 /*existingMapEqual*/ false, 2514 /*existingDocumentPositionMapperEqual*/ false 2515 ); 2516 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2517 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dtsMap deleted", session); 2518 }); 2519 2520 it(`with depedency .d.ts file, when file is not present`, () => { 2521 const { session } = setup(host => host.deleteFile(dtsLocation)); 2522 2523 verifyAllFnAction( 2524 session, 2525 goToDefFromMainTs, 2526 /*existingDependencyMap*/ undefined, 2527 /*existingDocumentPositionMapper*/ undefined, 2528 /*existingMapEqual*/ true, 2529 /*existingDocumentPositionMapperEqual*/ true 2530 ); 2531 verifyAllFnAction( 2532 session, 2533 renameFromDependencyTs, 2534 /*existingDependencyMap*/ undefined, 2535 /*existingDocumentPositionMapper*/ undefined, 2536 /*existingMapEqual*/ true, 2537 /*existingDocumentPositionMapperEqual*/ true 2538 ); 2539 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2540 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dts not present", session); 2541 }); 2542 it(`with depedency .d.ts file, when file is created after actions on projects`, () => { 2543 let fileContents: string; 2544 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 2545 fileContents = host.readFile(dtsLocation)!; 2546 host.deleteFile(dtsLocation); 2547 }); 2548 2549 host.writeFile(dtsLocation, fileContents!); 2550 verifyAllFnAction( 2551 session, 2552 goToDefFromMainTs, 2553 dependencyMap, 2554 documentPositionMapper, 2555 /*existingMapEqual*/ true, 2556 /*existingDocumentPositionMapperEqual*/ true 2557 ); 2558 verifyAllFnAction( 2559 session, 2560 renameFromDependencyTs, 2561 dependencyMap, 2562 documentPositionMapper, 2563 /*existingMapEqual*/ false, 2564 /*existingDocumentPositionMapperEqual*/ false 2565 ); 2566 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2567 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dts created", session); 2568 }); 2569 it(`with depedency .d.ts file, when file is deleted after actions on the projects`, () => { 2570 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2571 2572 // The dependency file is deleted when orphan files are collected 2573 host.deleteFile(dtsLocation); 2574 verifyAllFnAction( 2575 session, 2576 goToDefFromMainTs, 2577 dependencyMap, 2578 documentPositionMapper, 2579 /*existingMapEqual*/ true, 2580 /*existingDocumentPositionMapperEqual*/ true 2581 ); 2582 verifyAllFnAction( 2583 session, 2584 renameFromDependencyTs, 2585 dependencyMap, 2586 documentPositionMapper, 2587 /*existingMapEqual*/ true, 2588 /*existingDocumentPositionMapperEqual*/ true 2589 ); 2590 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2591 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency dts deleted", session); 2592 }); 2593 it(`when defining project source changes, when timeout occurs before request`, () => { 2594 // Create DocumentPositionMapper 2595 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2596 2597 // change 2598 // Make change, without rebuild of solution 2599 session.executeCommandSeq<protocol.ChangeRequest>({ 2600 command: protocol.CommandTypes.Change, 2601 arguments: { 2602 file: dependencyTs.path, line: 1, offset: 1, endLine: 1, endOffset: 1, insertString: `function fooBar() { } 2603`} 2604 }); 2605 host.runQueuedTimeoutCallbacks(); 2606 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 2607 2608 // action 2609 verifyAllFnAction( 2610 session, 2611 goToDefFromMainTs, 2612 dependencyMap, 2613 documentPositionMapper, 2614 /*existingMapEqual*/ true, 2615 /*existingDocumentPositionMapperEqual*/ true 2616 ); 2617 verifyAllFnAction( 2618 session, 2619 renameFromDependencyTsWithDependencyChange, 2620 dependencyMap, 2621 documentPositionMapper, 2622 /*existingMapEqual*/ true, 2623 /*existingDocumentPositionMapperEqual*/ true 2624 ); 2625 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency source changes with timeout before request", session); 2626 }); 2627 it(`when defining project source changes, when timeout does not occur before request`, () => { 2628 // Create DocumentPositionMapper 2629 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 2630 2631 // change 2632 // Make change, without rebuild of solution 2633 session.executeCommandSeq<protocol.ChangeRequest>({ 2634 command: protocol.CommandTypes.Change, 2635 arguments: { 2636 file: dependencyTs.path, line: 1, offset: 1, endLine: 1, endOffset: 1, insertString: `function fooBar() { } 2637 `} 2638 }); 2639 2640 // action 2641 verifyAllFnAction( 2642 session, 2643 goToDefFromMainTs, 2644 dependencyMap, 2645 documentPositionMapper, 2646 /*existingMapEqual*/ true, 2647 /*existingDocumentPositionMapperEqual*/ true 2648 ); 2649 verifyAllFnAction( 2650 session, 2651 renameFromDependencyTsWithDependencyChange, 2652 dependencyMap, 2653 documentPositionMapper, 2654 /*existingMapEqual*/ true, 2655 /*existingDocumentPositionMapperEqual*/ true 2656 ); 2657 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/dependency source changes", session); 2658 }); 2659 2660 it("when projects are not built", () => { 2661 const host = createServerHost(files); 2662 const session = createSession(host, { logger: createLoggerWithInMemoryLogs(host) }); 2663 openFilesForSession([mainTs, dependencyTs, randomFile], session); 2664 verifyAllFnAction( 2665 session, 2666 goToDefFromMainTs, 2667 /*existingDependencyMap*/ undefined, 2668 /*existingDocumentPositionMapper*/ undefined, 2669 /*existingMapEqual*/ true, 2670 /*existingDocumentPositionMapperEqual*/ true 2671 ); 2672 verifyAllFnAction( 2673 session, 2674 renameFromDependencyTs, 2675 /*existingDependencyMap*/ undefined, 2676 /*existingDocumentPositionMapper*/ undefined, 2677 /*existingMapEqual*/ true, 2678 /*existingDocumentPositionMapperEqual*/ true 2679 ); 2680 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2681 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/configWithReference/when projects are not built", session); 2682 }); 2683 }); 2684 describe("when main tsconfig has disableSourceOfProjectReferenceRedirect along with project reference", () => { 2685 function setup(onHostCreate?: OnHostCreate) { 2686 return setupWithMainTsAndDependencyTs(createSessionWithDisabledProjectReferences, onHostCreate); 2687 } 2688 2689 function setupWithAction(onHostCreate?: OnHostCreate) { 2690 return setupWithActionWith(setup, onHostCreate); 2691 } 2692 2693 it("goto Definition in usage and rename locations from defining project", () => { 2694 const { session } = setup(); 2695 verifyAllFnAction( 2696 session, 2697 goToDefFromMainTs, 2698 /*existingDependencyMap*/ undefined, 2699 /*existingDocumentPositionMapper*/ undefined, 2700 /*existingMapEqual*/ false, 2701 /*existingDocumentPositionMapperEqual*/ false 2702 ); 2703 const { dependencyMap, documentPositionMapper } = getDocumentPositionMapper(session); 2704 verifyAllFnAction( 2705 session, 2706 renameFromDependencyTs, 2707 dependencyMap, 2708 documentPositionMapper, 2709 /*existingMapEqual*/ true, 2710 /*existingDocumentPositionMapperEqual*/ true 2711 ); 2712 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2713 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/gotoDef and rename locations", session); 2714 }); 2715 2716 // Edit 2717 it(`when usage file changes, document position mapper doesnt change, when timeout occurs before request`, () => { 2718 // Create DocumentPositionMapper 2719 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2720 2721 // change 2722 makeChangeToMainTs(session); 2723 makeChangeToDependencyTs(session); 2724 host.runQueuedTimeoutCallbacks(); 2725 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 2726 2727 // action 2728 verifyAllFnAction( 2729 session, 2730 goToDefFromMainTs, 2731 dependencyMap, 2732 documentPositionMapper, 2733 /*existingMapEqual*/ true, 2734 /*existingDocumentPositionMapperEqual*/ true 2735 ); 2736 verifyAllFnAction( 2737 session, 2738 renameFromDependencyTs, 2739 dependencyMap, 2740 documentPositionMapper, 2741 /*existingMapEqual*/ true, 2742 /*existingDocumentPositionMapperEqual*/ true 2743 ); 2744 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/usage file changes with timeout before request", session); 2745 }); 2746 it(`when usage file changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 2747 // Create DocumentPositionMapper 2748 const { session, dependencyMap, documentPositionMapper } = setupWithAction(); 2749 2750 // change 2751 makeChangeToMainTs(session); 2752 makeChangeToDependencyTs(session); 2753 2754 // action 2755 verifyAllFnAction( 2756 session, 2757 goToDefFromMainTs, 2758 dependencyMap, 2759 documentPositionMapper, 2760 /*existingMapEqual*/ true, 2761 /*existingDocumentPositionMapperEqual*/ true 2762 ); 2763 verifyAllFnAction( 2764 session, 2765 renameFromDependencyTs, 2766 dependencyMap, 2767 documentPositionMapper, 2768 /*existingMapEqual*/ true, 2769 /*existingDocumentPositionMapperEqual*/ true 2770 ); 2771 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/usage file changes", session); 2772 }); 2773 2774 // Edit dts to add new fn 2775 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout occurs before request`, () => { 2776 // Create DocumentPositionMapper 2777 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2778 2779 // change 2780 changeDtsFile(host); 2781 host.runQueuedTimeoutCallbacks(); 2782 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 2783 2784 // action 2785 verifyAllFnAction( 2786 session, 2787 goToDefFromMainTs, 2788 dependencyMap, 2789 documentPositionMapper, 2790 /*existingMapEqual*/ true, 2791 /*existingDocumentPositionMapperEqual*/ true 2792 ); 2793 verifyAllFnAction( 2794 session, 2795 renameFromDependencyTs, 2796 dependencyMap, 2797 documentPositionMapper, 2798 /*existingMapEqual*/ true, 2799 /*existingDocumentPositionMapperEqual*/ true 2800 ); 2801 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dts changes with timeout before request", session); 2802 }); 2803 it(`when dependency .d.ts changes, document position mapper doesnt change, when timeout does not occur before request`, () => { 2804 // Create DocumentPositionMapper 2805 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2806 2807 // change 2808 changeDtsFile(host); 2809 2810 // action 2811 verifyAllFnAction( 2812 session, 2813 goToDefFromMainTs, 2814 dependencyMap, 2815 documentPositionMapper, 2816 /*existingMapEqual*/ true, 2817 /*existingDocumentPositionMapperEqual*/ true 2818 ); 2819 verifyAllFnAction( 2820 session, 2821 renameFromDependencyTs, 2822 dependencyMap, 2823 documentPositionMapper, 2824 /*existingMapEqual*/ true, 2825 /*existingDocumentPositionMapperEqual*/ true 2826 ); 2827 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dts changes", session); 2828 }); 2829 2830 // Edit map file to represent added new line 2831 it(`when dependency file's map changes, when timeout occurs before request`, () => { 2832 // Create DocumentPositionMapper 2833 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2834 2835 // change 2836 changeDtsMapFile(host); 2837 host.runQueuedTimeoutCallbacks(); 2838 verifyDocumentPositionMapperEqual(session, dependencyMap, documentPositionMapper); 2839 2840 // action 2841 verifyAllFnAction( 2842 session, 2843 goToDefFromMainTs, 2844 dependencyMap, 2845 documentPositionMapper, 2846 /*existingMapEqual*/ true, 2847 /*existingDocumentPositionMapperEqual*/ false 2848 ); 2849 const { documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 2850 verifyAllFnAction( 2851 session, 2852 renameFromDependencyTs, 2853 dependencyMap, 2854 newDocumentPositionMapper, 2855 /*existingMapEqual*/ true, 2856 /*existingDocumentPositionMapperEqual*/ true 2857 ); 2858 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dtsMap changes with timeout before request", session); 2859 }); 2860 it(`when dependency file's map changes, when timeout does not occur before request`, () => { 2861 // Create DocumentPositionMapper 2862 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2863 2864 // change 2865 changeDtsMapFile(host); 2866 2867 // action 2868 verifyAllFnAction( 2869 session, 2870 goToDefFromMainTs, 2871 dependencyMap, 2872 documentPositionMapper, 2873 /*existingMapEqual*/ true, 2874 /*existingDocumentPositionMapperEqual*/ false 2875 ); 2876 const { documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 2877 verifyAllFnAction( 2878 session, 2879 renameFromDependencyTs, 2880 dependencyMap, 2881 newDocumentPositionMapper, 2882 /*existingMapEqual*/ true, 2883 /*existingDocumentPositionMapperEqual*/ true 2884 ); 2885 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dtsMap changes", session); 2886 }); 2887 2888 it(`with depedency files map file, when file is not present`, () => { 2889 const { session } = setup(host => host.deleteFile(dtsMapLocation)); 2890 2891 verifyAllFnAction( 2892 session, 2893 goToDefFromMainTs, 2894 /*existingDependencyMap*/ undefined, 2895 /*existingDocumentPositionMapper*/ undefined, 2896 /*existingMapEqual*/ true, 2897 /*existingDocumentPositionMapperEqual*/ true 2898 ); 2899 verifyAllFnAction( 2900 session, 2901 renameFromDependencyTs, 2902 /*existingDependencyMap*/ undefined, 2903 /*existingDocumentPositionMapper*/ undefined, 2904 /*existingMapEqual*/ true, 2905 /*existingDocumentPositionMapperEqual*/ true 2906 ); 2907 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2908 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dtsMap not present", session); 2909 }); 2910 it(`with depedency files map file, when file is created after actions on projects`, () => { 2911 let fileContents: string; 2912 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 2913 fileContents = host.readFile(dtsMapLocation)!; 2914 host.deleteFile(dtsMapLocation); 2915 }); 2916 2917 host.writeFile(dtsMapLocation, fileContents!); 2918 verifyAllFnAction( 2919 session, 2920 goToDefFromMainTs, 2921 dependencyMap, 2922 documentPositionMapper, 2923 /*existingMapEqual*/ false, 2924 /*existingDocumentPositionMapperEqual*/ false 2925 ); 2926 const { dependencyMap: newDependencyMap, documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 2927 verifyAllFnAction( 2928 session, 2929 renameFromDependencyTs, 2930 newDependencyMap, 2931 newDocumentPositionMapper, 2932 /*existingMapEqual*/ true, 2933 /*existingDocumentPositionMapperEqual*/ true 2934 ); 2935 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2936 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dtsMap created", session); 2937 }); 2938 it(`with depedency files map file, when file is deleted after actions on the projects`, () => { 2939 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 2940 2941 // The dependency file is deleted when orphan files are collected 2942 host.deleteFile(dtsMapLocation); 2943 verifyAllFnAction( 2944 session, 2945 goToDefFromMainTs, 2946 dependencyMap, 2947 documentPositionMapper, 2948 /*existingMapEqual*/ false, 2949 /*existingDocumentPositionMapperEqual*/ false 2950 ); 2951 const { dependencyMap: newDependencyMap, documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 2952 verifyAllFnAction( 2953 session, 2954 renameFromDependencyTs, 2955 newDependencyMap, 2956 newDocumentPositionMapper, 2957 /*existingMapEqual*/ true, 2958 /*existingDocumentPositionMapperEqual*/ true 2959 ); 2960 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2961 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dtsMap deleted", session); 2962 }); 2963 2964 it(`with depedency .d.ts file, when file is not present`, () => { 2965 const { session } = setup(host => host.deleteFile(dtsLocation)); 2966 2967 verifyAllFnAction( 2968 session, 2969 goToDefFromMainTs, 2970 /*existingDependencyMap*/ undefined, 2971 /*existingDocumentPositionMapper*/ undefined, 2972 /*existingMapEqual*/ true, 2973 /*existingDocumentPositionMapperEqual*/ true 2974 ); 2975 verifyAllFnAction( 2976 session, 2977 renameFromDependencyTs, 2978 /*existingDependencyMap*/ undefined, 2979 /*existingDocumentPositionMapper*/ undefined, 2980 /*existingMapEqual*/ true, 2981 /*existingDocumentPositionMapperEqual*/ true 2982 ); 2983 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 2984 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dts not present", session); 2985 }); 2986 it(`with depedency .d.ts file, when file is created after actions on projects`, () => { 2987 let fileContents: string; 2988 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(host => { 2989 fileContents = host.readFile(dtsLocation)!; 2990 host.deleteFile(dtsLocation); 2991 }); 2992 2993 host.writeFile(dtsLocation, fileContents!); 2994 verifyAllFnAction( 2995 session, 2996 goToDefFromMainTs, 2997 dependencyMap, 2998 documentPositionMapper, 2999 /*existingMapEqual*/ false, 3000 /*existingDocumentPositionMapperEqual*/ false 3001 ); 3002 const { dependencyMap: newDependencyMap, documentPositionMapper: newDocumentPositionMapper } = getDocumentPositionMapper(session); 3003 verifyAllFnAction( 3004 session, 3005 renameFromDependencyTs, 3006 newDependencyMap, 3007 newDocumentPositionMapper, 3008 /*existingMapEqual*/ true, 3009 /*existingDocumentPositionMapperEqual*/ true 3010 ); 3011 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 3012 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dts created", session); 3013 }); 3014 it(`with depedency .d.ts file, when file is deleted after actions on the projects`, () => { 3015 const { host, session, dependencyMap, documentPositionMapper } = setupWithAction(); 3016 3017 // The dependency file is deleted when orphan files are collected 3018 host.deleteFile(dtsLocation); 3019 verifyAllFnAction( 3020 session, 3021 goToDefFromMainTs, 3022 dependencyMap, 3023 documentPositionMapper, 3024 /*existingMapEqual*/ true, 3025 /*existingDocumentPositionMapperEqual*/ true 3026 ); 3027 verifyAllFnAction( 3028 session, 3029 renameFromDependencyTs, 3030 dependencyMap, 3031 documentPositionMapper, 3032 /*existingMapEqual*/ true, 3033 /*existingDocumentPositionMapperEqual*/ true 3034 ); 3035 verifyScriptInfoCollectionWith(session, [mainTs, dependencyTs]); 3036 baselineTsserverLogs("projectReferencesSourcemap", "dependencyAndUsage/disabledSourceRef/dependency dts deleted", session); 3037 }); 3038 }); 3039 }); 3040 }); 3041}