Skip to content

Commit d0282b7

Browse files
committed
Add test to verify when source changes
1 parent 903527e commit d0282b7

File tree

1 file changed

+73
-2
lines changed

1 file changed

+73
-2
lines changed

src/testRunner/unittests/tsserver/projectReferences.ts

Lines changed: 73 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ fn5();
169169
expectedResponse: Response;
170170
expectedResponseNoMap?: Response;
171171
expectedResponseNoDts?: Response;
172+
requestDependencyChange?: Partial<Req>;
173+
expectedResponseDependencyChange: Response;
172174
}
173175
function gotoDefintinionFromMainTs(fn: number): SessionAction<protocol.DefinitionAndBoundSpanRequest, protocol.DefinitionInfoAndBoundSpan> {
174176
const textSpan = usageSpan(fn);
@@ -200,6 +202,11 @@ fn5();
200202
// To import declaration
201203
definitions: [{ file: mainTs.path, ...importSpan(fn) }],
202204
textSpan
205+
},
206+
expectedResponseDependencyChange: {
207+
// Definition on fn + 1 line
208+
definitions: [{ file: dependencyTs.path, ...declarationSpan(fn + 1) }],
209+
textSpan
203210
}
204211
};
205212
}
@@ -227,6 +234,8 @@ fn5();
227234
function renameFromDependencyTs(fn: number): SessionAction<protocol.RenameRequest, protocol.RenameResponseBody> {
228235
const defSpan = declarationSpan(fn);
229236
const { contextStart: _, contextEnd: _1, ...triggerSpan } = defSpan;
237+
const defSpanPlusOne = declarationSpan(fn + 1);
238+
const { contextStart: _2, contextEnd: _3, ...triggerSpanPlusOne } = defSpanPlusOne;
230239
return {
231240
reqName: "rename",
232241
request: {
@@ -246,12 +255,30 @@ fn5();
246255
locs: [
247256
{ file: dependencyTs.path, locs: [defSpan] }
248257
]
258+
},
259+
requestDependencyChange: {
260+
command: protocol.CommandTypes.Rename,
261+
arguments: { file: dependencyTs.path, ...triggerSpanPlusOne.start }
262+
},
263+
expectedResponseDependencyChange: {
264+
info: {
265+
canRename: true,
266+
fileToRename: undefined,
267+
displayName: `fn${fn}`,
268+
fullDisplayName: `"${dependecyLocation}/FnS".fn${fn}`,
269+
kind: ScriptElementKind.functionElement,
270+
kindModifiers: "export",
271+
triggerSpan: triggerSpanPlusOne
272+
},
273+
locs: [
274+
{ file: dependencyTs.path, locs: [defSpanPlusOne] }
275+
]
249276
}
250277
};
251278
}
252279

253280
function renameFromDependencyTsWithBothProjectsOpen(fn: number): SessionAction<protocol.RenameRequest, protocol.RenameResponseBody> {
254-
const { reqName, request, expectedResponse } = renameFromDependencyTs(fn);
281+
const { reqName, request, expectedResponse, expectedResponseDependencyChange, requestDependencyChange } = renameFromDependencyTs(fn);
255282
const { info, locs } = expectedResponse;
256283
return {
257284
reqName,
@@ -271,7 +298,21 @@ fn5();
271298
},
272299
// Only dependency result
273300
expectedResponseNoMap: expectedResponse,
274-
expectedResponseNoDts: expectedResponse
301+
expectedResponseNoDts: expectedResponse,
302+
requestDependencyChange,
303+
expectedResponseDependencyChange: {
304+
info: expectedResponseDependencyChange.info,
305+
locs: [
306+
expectedResponseDependencyChange.locs[0],
307+
{
308+
file: mainTs.path,
309+
locs: [
310+
importSpan(fn),
311+
usageSpan(fn)
312+
]
313+
}
314+
]
315+
}
275316
};
276317
}
277318

@@ -633,6 +674,36 @@ fn5();
633674
verifyMainScenarioAndScriptInfoCollectionWithNoDts,
634675
/*noDts*/ true
635676
);
677+
678+
it("when defining project source changes", () => {
679+
const { host, session } = openTsFile();
680+
681+
// First action
682+
firstAction(session);
683+
684+
// Make change, without rebuild of solution
685+
if (contains(openInfos, dependencyTs.path)) {
686+
session.executeCommandSeq<protocol.ChangeRequest>({
687+
command: protocol.CommandTypes.Change,
688+
arguments: {
689+
file: dependencyTs.path, line: 1, offset: 1, endLine: 1, endOffset: 1, insertString: `function fooBar() { }
690+
`}
691+
});
692+
}
693+
else {
694+
host.writeFile(dependencyTs.path, `function fooBar() { }
695+
${dependencyTs.content}`);
696+
}
697+
host.runQueuedTimeoutCallbacks();
698+
699+
for (const actionGetter of actionGetters) {
700+
for (let fn = 1; fn <= 5; fn++) {
701+
const { reqName, request, requestDependencyChange, expectedResponseDependencyChange } = actionGetter(fn);
702+
const { response } = session.executeCommandSeq(requestDependencyChange || request);
703+
assert.deepEqual(response, expectedResponseDependencyChange, `Failed on ${reqName}`);
704+
}
705+
}
706+
});
636707
}
637708

638709
const usageVerifier: DocumentPositionMapperVerifier = {

0 commit comments

Comments
 (0)