test(language-service): Remove redundant marker methods in MockHost (#33115)

Remove the following methods from MockHost:

1. `getMarkerLocations`: Replaced with `getLocationMarkerFor()`
2. `getReferenceMarkers`: Replaced with `getReferenceMarkerFor()`

PR Close #33115
This commit is contained in:
Keen Yee Liau
2019-10-11 13:56:33 -07:00
committed by Miško Hevery
parent 1a67d70bf8
commit 84ba1f012e
7 changed files with 85 additions and 77 deletions

View File

@ -181,20 +181,6 @@ export class MockTypescriptHost implements ts.LanguageServiceHost {
}
}
getMarkerLocations(fileName: string): {[name: string]: number}|undefined {
let content = this.getRawFileContent(fileName);
if (content) {
return getLocationMarkers(content);
}
}
getReferenceMarkers(fileName: string): ReferenceResult|undefined {
let content = this.getRawFileContent(fileName);
if (content) {
return getReferenceMarkers(content);
}
}
/**
* Reset the project to its original state, effectively removing all overrides.
*/
@ -279,61 +265,94 @@ export class MockTypescriptHost implements ts.LanguageServiceHost {
}
/**
* Returns the definition marker ᐱselectorᐱ for the specified 'selector'.
* Returns the definition marker `ᐱselectorᐱ` for the specified 'selector'.
* Asserts that marker exists.
* @param fileName name of the file
* @param selector name of the marker
*/
getDefinitionMarkerFor(fileName: string, selector: string): ts.TextSpan {
const markers = this.getReferenceMarkers(fileName);
expect(markers).toBeDefined();
expect(Object.keys(markers !.definitions)).toContain(selector);
expect(markers !.definitions[selector].length).toBe(1);
const marker = markers !.definitions[selector][0];
expect(marker.start).toBeLessThanOrEqual(marker.end);
const content = this.getRawFileContent(fileName);
if (!content) {
throw new Error(`File does not exist: ${fileName}`);
}
const markers = getReferenceMarkers(content);
const definitions = markers.definitions[selector];
if (!definitions || !definitions.length) {
throw new Error(`Failed to find marker '${selector}' in ${fileName}`);
}
if (definitions.length > 1) {
throw new Error(`Multiple positions found for '${selector}' in ${fileName}`);
}
const {start, end} = definitions[0];
if (start > end) {
throw new Error(`Marker '${selector}' in ${fileName} is invalid: ${start} > ${end}`);
}
return {
start: marker.start,
length: marker.end - marker.start,
start,
length: end - start,
};
}
/**
* Returns the reference marker «selector» for the specified 'selector'.
* Returns the reference marker `«selector»` for the specified 'selector'.
* Asserts that marker exists.
* @param fileName name of the file
* @param selector name of the marker
*/
getReferenceMarkerFor(fileName: string, selector: string): ts.TextSpan {
const markers = this.getReferenceMarkers(fileName);
expect(markers).toBeDefined();
expect(Object.keys(markers !.references)).toContain(selector);
expect(markers !.references[selector].length).toBe(1);
const marker = markers !.references[selector][0];
expect(marker.start).toBeLessThanOrEqual(marker.end);
const content = this.getRawFileContent(fileName);
if (!content) {
throw new Error(`File does not exist: ${fileName}`);
}
const markers = getReferenceMarkers(content);
const references = markers.references[selector];
if (!references || !references.length) {
throw new Error(`Failed to find marker '${selector}' in ${fileName}`);
}
if (references.length > 1) {
throw new Error(`Multiple positions found for '${selector}' in ${fileName}`);
}
const {start, end} = references[0];
if (start > end) {
throw new Error(`Marker '${selector}' in ${fileName} is invalid: ${start} > ${end}`);
}
return {
start: marker.start,
length: marker.end - marker.start,
start,
length: end - start,
};
}
/**
* Returns the location marker ~{selector} for the specified 'selector'.
* Returns the location marker `~{selector}` or the marker pair
* `~{start-selector}` and `~{end-selector}` for the specified 'selector'.
* Asserts that marker exists.
* @param fileName name of the file
* @param selector name of the marker
*/
getLocationMarkerFor(fileName: string, selector: string): ts.TextSpan {
const markers = this.getMarkerLocations(fileName);
expect(markers).toBeDefined();
const start = markers ![`start-${selector}`];
expect(start).toBeDefined();
const end = markers ![`end-${selector}`];
expect(end).toBeDefined();
expect(start).toBeLessThanOrEqual(end);
return {
start: start,
length: end - start,
};
const content = this.getRawFileContent(fileName);
if (!content) {
throw new Error(`File does not exist: ${fileName}`);
}
const markers = getLocationMarkers(content);
// Look for just the selector itself
const position = markers[selector];
if (position !== undefined) {
return {
start: position,
length: 0,
};
}
// Look for start and end markers for the selector
const start = markers[`start-${selector}`];
const end = markers[`end-${selector}`];
if (start !== undefined && end !== undefined) {
return {
start,
length: end - start,
};
}
throw new Error(`Failed to find marker '${selector}' in ${fileName}`);
}
}