mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-05 08:11:30 -06:00
delete unused tests
This commit is contained in:
parent
3fcd33ec32
commit
05d2e75e7c
@ -1,27 +0,0 @@
|
||||
///<reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
///<reference path='..\..\..\..\src\harness\harness.ts' />
|
||||
|
||||
describe('Compiling unittests\\compiler\\callSignatureTests.ts', function () {
|
||||
it("If a signature omits a return type annotation, any type is assumed", function () {
|
||||
var code = 'var foo: {();};';
|
||||
code += 'var test = foo();'
|
||||
code += 'test.bar = 2;'
|
||||
Harness.Compiler.compileString(code, 'call signatures', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
it("A call signature can have the void return type", function () {
|
||||
var code = 'var foo: {():void;};';
|
||||
code += 'var test = foo();'
|
||||
Harness.Compiler.compileString(code, 'call signatures', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
it("A call signature can't have the same overload", function () {
|
||||
var code = 'var foo: { (): string; (): string; };';
|
||||
Harness.Compiler.compileString(code, 'call signatures', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,128 +0,0 @@
|
||||
/// <reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
/// <reference path='..\..\..\..\src\harness\harness.ts' />
|
||||
|
||||
describe('Compiling unittests\\compiler\\classOverloads.ts', function () {
|
||||
it("Everytype is a subtype of itself", function () {
|
||||
var code = 'class foo { public bar: number; }';
|
||||
code += 'class bar extends foo { public bar: number; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
it("All types except the Void type are subtypes of the Any type", function () {
|
||||
var code = 'class foo { public bar: any; }';
|
||||
code += 'class bar extends foo { public bar: number; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
it("All types are subtypes of the Any type - 2", function () {
|
||||
var code = 'class baz { public bar(): any { return 1; } }';
|
||||
code += 'class foo extends baz { public bar(): void {} }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
it("The Undefined type is a subtype of all types except the Void type", function () {
|
||||
var code = 'class baz { public bar(): any { return 1 } }';
|
||||
code += 'class foo extends baz { public bar(){ return undefined} }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
it("The Undefined type is a subtype of all types except the Void type - 2", function () {
|
||||
var code = 'class baz { public bar(): void { } }';
|
||||
code += 'class foo extends baz { public bar(){ return undefined} }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
it("The Null type is a subtype of all types, except the Undefined and Void types", function () {
|
||||
var code = 'class baz { public bar:any; }';
|
||||
code += 'class foo extends baz { public bar = null; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
it("The Null type is a subtype of all types, except the Undefined and Void types - 3", function () {
|
||||
var code = 'class baz { public bar():void { } }';
|
||||
code += 'class foo extends baz { public bar() { return null; } }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('An object type S is a subtype of an object type T', function () {
|
||||
it("A property in T is matched by a property in S", function () {
|
||||
var code = 'class baz { public bar: { a: string; }; }';
|
||||
code += 'class foo extends baz { public bar: { a: number; }; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 1);
|
||||
});
|
||||
});
|
||||
it("A property in T is matched by a property in S - 2", function () {
|
||||
var code = 'class baz { public bar: { a: string; }; }';
|
||||
code += 'class foo extends baz { public bar: { a: string; }; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
it("A property in T is matched by a property in S - 3", function () {
|
||||
var code = 'class baz { public bar: { a: string; }; }';
|
||||
code += 'class foo extends baz { public bar: { b: string; }; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 1);
|
||||
});
|
||||
});
|
||||
it("A call, construct or index signature in T is matched by a call, construct or index signature", function () {
|
||||
var code = 'class baz { public bar: { (); }; }';
|
||||
code += 'class foo extends baz { public bar: { (); } ;}';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
it("A call, construct or index signature in T is matched by a call, construct or index signature - 2", function () {
|
||||
var code = 'class baz { public bar: { [idx:number]: any; }; }';
|
||||
code += 'class foo extends baz { public bar: { (); }; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 1);
|
||||
});
|
||||
});
|
||||
it("A call, construct or index signature in T is matched by a call, construct or index signature - 3", function () {
|
||||
var code = 'class baz { public bar: { (a: string); }; }';
|
||||
code += 'class foo extends baz { public bar: { (); }; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
|
||||
});
|
||||
it("A call, construct or index signature in T is matched by a call, construct or index signature - 4", function () {
|
||||
var code = 'class baz { public bar: { (a:string); }; }';
|
||||
code += 'class foo extends baz { public bar: { (a:string,b:string); }; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 1);
|
||||
});
|
||||
});
|
||||
it("A call, construct or index signature in T is matched by a call, construct or index signature - 5", function () {
|
||||
var code = 'class baz { public bar: { ():void; }; }';
|
||||
code += 'class foo extends baz { public bar: { ():void; }; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
|
||||
it("A call, construct or index signature in T is matched by a call, construct or index signature - 6", function () {
|
||||
var code = 'class baz { public bar: { (); }; }';
|
||||
code += 'class foo extends baz { public bar: { ():void; }; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
///<reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
///<reference path='..\..\..\..\src\harness\harness.ts' />
|
||||
|
||||
describe('Compiling tests\\compiler\\constructSignatureTests.ts', function () {
|
||||
it("If a signature omits a return type annotation, any type is assumed", function () {
|
||||
var code = 'var foo: {new ();};';
|
||||
code += 'var test = new foo();'
|
||||
code += 'test.bar = 2;'
|
||||
Harness.Compiler.compileString(code, 'construct signatures', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
it("A call signature can have the void return type", function () {
|
||||
var code = 'var foo: {new ():void;};';
|
||||
Harness.Compiler.compileString(code, 'call signatures', function (result) {
|
||||
assert.equal(result.errors.length, 1);
|
||||
});
|
||||
});
|
||||
|
||||
it("A construct signature can't have the same overload", function () {
|
||||
var code = 'var foo: { new (): string; new (): string; };';
|
||||
Harness.Compiler.compileString(code, 'call signatures', function (result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,52 +0,0 @@
|
||||
///<reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
///<reference path='..\..\..\..\src\harness\harness.ts' />
|
||||
|
||||
//@tags 1.1 Declarations
|
||||
|
||||
describe('Compiling unittests\\compiler\\declarationTests.ts', function() {
|
||||
it("Each internal module’s export declaration spaces are shared with other internal modules that have the same root module and the " +
|
||||
"same qualified name starting from that root module", function() {
|
||||
var code = 'module baz{export var foo;}';
|
||||
code += 'module baz{export var bar;}'
|
||||
code += 'baz.foo = baz.bar;'
|
||||
Harness.Compiler.compileString(code, 'declarations', function(result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
it("Each object type literal has a declaration space for its members", function() {
|
||||
var code = 'var foo:{a:number;};';
|
||||
code += 'foo.a = 2;'
|
||||
Harness.Compiler.compileString(code, 'declarations', function(result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
it("Each class declaration has a declaration space for members and a declaration space for statics", function() {
|
||||
var code = 'class foo {';
|
||||
code += ' static bar;'
|
||||
code += ' public bar;'
|
||||
code += '}'
|
||||
Harness.Compiler.compileString(code, 'declarations', function(result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
it("Each function declaration (including member function declarations and static function declarations) has a declaration space for " +
|
||||
"statics and a declaration space for locals (parameters, variables, and functions).", function() {
|
||||
var code = 'function foo() {';
|
||||
code += ' static bar;'
|
||||
code += ' var bar;'
|
||||
code += '}'
|
||||
Harness.Compiler.compileString(code, 'declarations', function(result) {
|
||||
assert.equal(result.errors.length, 1);
|
||||
});
|
||||
});
|
||||
it("Modules contain separate declaration spaces for variables and types.", function() {
|
||||
var code = 'module M {';
|
||||
code += ' class bar {};'
|
||||
code += ' var bar;'
|
||||
code += '}'
|
||||
Harness.Compiler.compileString(code, 'declarations', function(result) {
|
||||
assert.equal(result.errors.length, 1);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,25 +0,0 @@
|
||||
///<reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
///<reference path='..\..\..\..\src\harness\harness.ts' />
|
||||
|
||||
describe('Compiling unittests\\compiler\\functionSignatureTests.ts', function() {
|
||||
it('Check overload with different return types.', function(){
|
||||
var code = 'var foo: { bar(): string; bar(): number; };\n';
|
||||
code += 'var bar: { bar: { (): string; (): number; }; };';
|
||||
code += 'foo = bar;';
|
||||
Harness.Compiler.compileString(code, 'function signatures', function(result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
})
|
||||
|
||||
describe('Function Type Literals', function() {
|
||||
it('Basic sanity check', function() {
|
||||
var code = 'var foo: { (): string; };';
|
||||
code += 'var bar: () => string;';
|
||||
code += 'foo = bar;';
|
||||
Harness.Compiler.compileString(code, 'function type literal', function(result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
///<reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
///<reference path='..\..\..\..\src\harness\harness.ts' />
|
||||
|
||||
describe('Compiling tests\\compiler\\identifiers.ts', function() {
|
||||
it("Everytype is a subtype of itself", function() {
|
||||
var code = 'class foo { public bar: number; }';
|
||||
code += 'class bar extends foo { public bar: number; }';
|
||||
Harness.Compiler.compileString(code, 'subtypes', function(result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,14 +0,0 @@
|
||||
///<reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
///<reference path='..\..\..\..\src\harness\harness.ts' />
|
||||
|
||||
describe('Compiling unittests\\compiler\\moduleAlias.ts', function() {
|
||||
describe('Internal module alias test', function() {
|
||||
it("basic test", function() {
|
||||
var code = "module A.B.C { import XYZ = X.Y.Z; export function ping(x: number) { if (x > 0) XYZ.pong(x-1);}};";
|
||||
code += "module X.Y.Z { import ABC = A.B.C; export function pong(x: number) { if (x > 0) ABC.ping(x-1);}};";
|
||||
Harness.Compiler.compileString(code, 'module alias', function(result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,50 +0,0 @@
|
||||
///<reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
///<reference path='..\..\..\..\src\harness\harness.ts' />
|
||||
|
||||
describe('Verifying pathing functions', function () {
|
||||
it("Normalizes Mac paths", function () {
|
||||
var result = TypeScript.normalizePath("/Users/Me/somefile.ts");
|
||||
var expected = "/Users/Me/somefile.ts";
|
||||
assert.equal(result, expected);
|
||||
});
|
||||
it("Normalizes relative Mac paths", function () {
|
||||
var result = TypeScript.normalizePath("/Users/./Me/../somefile.ts");
|
||||
var expected = "/Users/somefile.ts";
|
||||
assert.equal(result, expected);
|
||||
});
|
||||
it("Normalizes Windows paths", function () {
|
||||
var result = TypeScript.normalizePath("C:\\Users\\Me\\somefile.ts");
|
||||
var expected = "C:/Users/Me/somefile.ts";
|
||||
assert.equal(result, expected);
|
||||
});
|
||||
it("Normalizes relative Windows paths", function () {
|
||||
var result = TypeScript.normalizePath("C:\\Users\\.\\Me\\..\\somefile.ts");
|
||||
var expected = "C:/Users/somefile.ts";
|
||||
assert.equal(result, expected);
|
||||
});
|
||||
it("Normalizes . and ..", function () {
|
||||
var result = TypeScript.normalizePath("..\\Users\\.\\Me\\..\\somefile.ts");
|
||||
var expected = "../Users/somefile.ts";
|
||||
assert.equal(result, expected);
|
||||
});
|
||||
it("Normalizes UNC paths", function () {
|
||||
var result = TypeScript.normalizePath("\\\\server\\share\\someFile.ts");
|
||||
var expected = "file://server/share/someFile.ts";
|
||||
assert.equal(result, expected);
|
||||
});
|
||||
it("Normalizes relative UNC paths with IP addresses", function () {
|
||||
var result = TypeScript.normalizePath("\\\\127.0.0.1\\share\\..\\elsewhere\\someFile.ts");
|
||||
var expected = "file://127.0.0.1/elsewhere/someFile.ts";
|
||||
assert.equal(result, expected);
|
||||
});
|
||||
it("Normalizes HTTP paths", function () {
|
||||
var result = TypeScript.normalizePath("http://www.server.com/share/someFile.ts");
|
||||
var expected = "http://www.server.com/share/someFile.ts";
|
||||
assert.equal(result, expected);
|
||||
});
|
||||
it("Normalizes relative HTTP paths", function () {
|
||||
var result = TypeScript.normalizePath("http://www.server.com/share/../someFile.ts");
|
||||
var expected = "http://www.server.com/someFile.ts";
|
||||
assert.equal(result, expected);
|
||||
});
|
||||
});
|
||||
@ -1,19 +0,0 @@
|
||||
///<reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
///<reference path='..\..\..\..\src\harness\harness.ts' />
|
||||
|
||||
describe('Compiling unittests\\compiler\\propertySignatureTests.ts', function() {
|
||||
it('The Identifier of a property signature must be unique within its containing type. ', function(){
|
||||
var code = 'var foo: { a:string; a: string; };';
|
||||
Harness.Compiler.compileString(code, 'property signatures', function(result) {
|
||||
assert.equal(result.errors.length, 1);
|
||||
//assert.compilerWarning(result, 1, 9, 'Duplicate identifier a');
|
||||
});
|
||||
});
|
||||
|
||||
it('If a property signature omits a TypeAnnotation, the Any type is assumed.', function(){
|
||||
var code = 'var foo: { a; }; foo.a = 2; foo.a = "0";';
|
||||
Harness.Compiler.compileString(code, 'property signatures', function(result) {
|
||||
assert.equal(result.errors.length, 0);
|
||||
});
|
||||
})
|
||||
});
|
||||
@ -1,4 +0,0 @@
|
||||
///<reference path='..\..\..\..\src\harness\harness.ts'/>
|
||||
///<reference path='..\..\..\..\src\compiler\tsc.ts' />
|
||||
///<reference path='..\..\..\..\src\compiler\typescript.ts' />
|
||||
///<reference path='..\..\..\..\src\services\typescriptServices.ts' />
|
||||
@ -1,20 +0,0 @@
|
||||
///<reference path='..\..\..\src\harness\harness.ts'/>
|
||||
///<reference path='..\..\..\src\harness\baselining.ts'/>
|
||||
declare var JSON: any;
|
||||
|
||||
describe('Accepting local files as new reference...', function() {
|
||||
var localPath = 'tests/services/baselines/local';
|
||||
var outputPath = 'tests/services/baselines/reference';
|
||||
|
||||
// Get a list of all the files in the baseline/inputs folder
|
||||
var files = IO.dir(localPath);
|
||||
|
||||
// Copy them to the output folder
|
||||
for (var i = 0; i < files.length; i++) {
|
||||
var filename = files[i].substr(files[i].lastIndexOf('\\'));
|
||||
if(filename.indexOf('.html') === -1) {
|
||||
var referenceData = IO.readFile(files[i]);
|
||||
IO.writeFile(outputPath + '/' + filename, referenceData);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -1,66 +0,0 @@
|
||||
/// <reference path='..\..\..\src\harness\harness.ts'/>
|
||||
/// <reference path='..\..\..\src\harness\baselining.ts'/>
|
||||
/// <reference path='..\..\..\src\harness\external\json2.ts'/>
|
||||
|
||||
describe('Baseline files match (intellisense data)', function() {
|
||||
var inputPath = 'tests/services/baselines/inputs';
|
||||
var outputPath = 'tests/services/baselines/local';
|
||||
var referencePath = 'tests/services/baselines/reference';
|
||||
|
||||
var i;
|
||||
|
||||
// Might need to create this
|
||||
IO.createDirectory(outputPath);
|
||||
|
||||
// Delete any old reports from the local path
|
||||
var localFiles = IO.dir(outputPath);
|
||||
for (i = 0; i < localFiles.length; i++) {
|
||||
var localFilename = localFiles[i];
|
||||
if(localFilename.indexOf('.html') > 0) {
|
||||
IO.deleteFile(localFilename);
|
||||
}
|
||||
}
|
||||
|
||||
// Get a list of all the files in the baseline/inputs folder
|
||||
var files = IO.dir(inputPath);
|
||||
|
||||
var template = IO.readFile('tests/services/baselines/diff-template.html');
|
||||
|
||||
// For each file, get data:
|
||||
// a) Completion
|
||||
// b) Type signature
|
||||
// c) etc...
|
||||
for (i = 0; i < files.length; i++) {
|
||||
var filename = files[i].substr(files[i].lastIndexOf('\\'));
|
||||
var scriptText = IO.readFile(files[i]).trim();
|
||||
|
||||
var outputAndCheck = function(nameSuffix: string, process: any) {
|
||||
describe(nameSuffix + ' data for ' + filename + ' matches the baseline', function() {
|
||||
var data = process(scriptText);
|
||||
var stringified = JSON.stringify(data).trim();
|
||||
|
||||
var baseFilename = filename + '-' + nameSuffix + '.json';
|
||||
IO.writeFile(outputPath + '/' + baseFilename, stringified);
|
||||
|
||||
var referenceFilename = referencePath + '/' + baseFilename;
|
||||
var reference = IO.fileExists(referenceFilename) ? IO.readFile(referenceFilename) : '[{file: "(no file)"}]';
|
||||
reference = reference.trim();
|
||||
|
||||
if (reference != stringified) {
|
||||
// Emit a report file in 'local'
|
||||
var errorReportFile = outputPath + filename + '-' + nameSuffix + '-diff.html';
|
||||
IO.writeFile(errorReportFile,
|
||||
template.replace('/**REFERENCE**/', reference).replace('/**ACTUAL**/', stringified));
|
||||
throw new Error('Data does not match reference. Refer to diff report ' + errorReportFile);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Write that data out to a JSON file in the 'local' folder
|
||||
outputAndCheck('signatures', getIntellisenseSignatureRegions);
|
||||
outputAndCheck('completions', getIntellisenseCompletionListRegions);
|
||||
outputAndCheck('definitions', getIntellisenseDefinitionRegions);
|
||||
outputAndCheck('types', getIntellisenseTypeRegions);
|
||||
outputAndCheck('members', getIntellisenseMemberListRegions);
|
||||
}
|
||||
});
|
||||
@ -1,23 +0,0 @@
|
||||
module Foo { var testing = ""; test }
|
||||
|
||||
class C1 {
|
||||
public pubMeth() {this.} // test on 'this.'
|
||||
private privMeth() {}
|
||||
public pubProp;
|
||||
private privProp;
|
||||
}
|
||||
|
||||
var f = new C1();
|
||||
f. // test on F.
|
||||
module M {
|
||||
export class C { public pub; private priv; }
|
||||
export var V = 0;
|
||||
}
|
||||
|
||||
|
||||
var c = new M.C();
|
||||
|
||||
c. // test on c.
|
||||
|
||||
//Test for comment
|
||||
//c.
|
||||
@ -1,215 +0,0 @@
|
||||
interface IOptions {
|
||||
name: string;
|
||||
flag: boolean;
|
||||
short: string;
|
||||
usage: string;
|
||||
set: (s: string) => void;
|
||||
type: string;
|
||||
}
|
||||
|
||||
class OptionsParser {
|
||||
private DEFAULT_SHORT_FLAG = "-";
|
||||
private DEFAULT_LONG_FLAG = "--";
|
||||
|
||||
constructor (private host: IIO) { }
|
||||
|
||||
// Find the option record for the given string. Returns null if not found.
|
||||
private findOption(arg: string) {
|
||||
|
||||
for (var i = 0; i < this.options.length; i++) {
|
||||
|
||||
if (arg === this.options[i].short || arg === this.options[i].name) {
|
||||
return this.options[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public unnamed: string[] = [];
|
||||
|
||||
public options: IOptions[] = [];
|
||||
|
||||
public printUsage() {
|
||||
IO.printLine("Syntax: tsc [options] [file ..]");
|
||||
IO.printLine("");
|
||||
IO.printLine("Examples: tsc hello.ts");
|
||||
IO.printLine(" tsc --out foo.js foo.ts");
|
||||
IO.printLine(" tsc @args.txt");
|
||||
IO.printLine("");
|
||||
IO.printLine("Options:");
|
||||
|
||||
var output = [];
|
||||
var maxLength = 0;
|
||||
|
||||
this.options = this.options.sort(function(a, b) {
|
||||
var aName = a.name.toLowerCase();
|
||||
var bName = b.name.toLowerCase();
|
||||
|
||||
if (aName > bName) {
|
||||
return 1;
|
||||
} else if (aName < bName) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
|
||||
// Build up output array
|
||||
for (var i = 0; i < this.options.length; i++) {
|
||||
var option = this.options[i];
|
||||
|
||||
if (!option.usage)
|
||||
break;
|
||||
|
||||
var usageString = " ";
|
||||
var type = option.type ? " " + option.type.toUpperCase() : "";
|
||||
|
||||
if (option.short) {
|
||||
usageString += this.DEFAULT_SHORT_FLAG + option.short + type + ", ";
|
||||
}
|
||||
|
||||
usageString += this.DEFAULT_LONG_FLAG + option.name + type;
|
||||
|
||||
output.push([usageString, option.usage]);
|
||||
|
||||
if (usageString.length > maxLength) {
|
||||
maxLength = usageString.length;
|
||||
}
|
||||
}
|
||||
|
||||
output.push([" @<file>", "Insert command line options and files from a file."]);
|
||||
|
||||
// Print padded output
|
||||
for (var i = 0; i < output.length; i++) {
|
||||
IO.printLine(output[i][0] + (new Array(maxLength - output[i][0].length + 3)).join(" ") + output[i][1]);
|
||||
}
|
||||
}
|
||||
|
||||
public option(name: string, config: IOptions);
|
||||
public option(name: string, config: IOptions, short: string) {
|
||||
if (!config) {
|
||||
config = <any>short;
|
||||
short = null;
|
||||
}
|
||||
|
||||
config.name = name;
|
||||
config.short = short;
|
||||
config.flag = false;
|
||||
|
||||
this.options.push(config);
|
||||
}
|
||||
|
||||
public flag(name: string, config: IOptions);
|
||||
public flag(name: string, config: IOptions, short: string) {
|
||||
if (!config) {
|
||||
config = <any>short;
|
||||
short = null;
|
||||
}
|
||||
|
||||
config.name = name;
|
||||
config.short = short;
|
||||
config.flag = true
|
||||
|
||||
this.options.push(config);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Parse an arguments string
|
||||
public parseString(argString: string) {
|
||||
var position = 0;
|
||||
var tokens = argString.match(/\s+|"|[^\s"]+/g);
|
||||
|
||||
function peek() {
|
||||
return tokens[position];
|
||||
}
|
||||
|
||||
function consume() {
|
||||
return tokens[position++];
|
||||
}
|
||||
|
||||
function consumeQuotedString() {
|
||||
var value = '';
|
||||
consume(); // skip opening quote.
|
||||
|
||||
var token = peek();
|
||||
|
||||
while (token && token !== '"') {
|
||||
consume();
|
||||
|
||||
value += token;
|
||||
|
||||
token = peek();
|
||||
}
|
||||
|
||||
consume(); // skip ending quote;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
var args: string[] = [];
|
||||
var currentArg = '';
|
||||
|
||||
while (position < tokens.length) {
|
||||
var token = peek();
|
||||
|
||||
if (token === '"') {
|
||||
currentArg += consumeQuotedString();
|
||||
} else if (token.match(/\s/)) {
|
||||
if (currentArg.length > 0) {
|
||||
args.push(currentArg);
|
||||
currentArg = '';
|
||||
}
|
||||
|
||||
consume();
|
||||
} else {
|
||||
consume();
|
||||
currentArg += token;
|
||||
}
|
||||
}
|
||||
|
||||
if (currentArg.length > 0) {
|
||||
args.push(currentArg);
|
||||
}
|
||||
|
||||
this.parse(args);
|
||||
}
|
||||
|
||||
// Parse arguments as they come from the platform: split into arguments.
|
||||
public parse(args: string[]) {
|
||||
var position = 0;
|
||||
|
||||
function consume() {
|
||||
return args[position++];
|
||||
}
|
||||
|
||||
while (position < args.length) {
|
||||
var current = consume();
|
||||
var match = current.match(/^(--?|\/|@)(.*)/);
|
||||
var value = null;
|
||||
|
||||
if (match) {
|
||||
if (match[1] === '@') {
|
||||
this.parseString(IO.readFile(match[2]));
|
||||
} else {
|
||||
var arg = match[2];
|
||||
var option = this.findOption(arg);
|
||||
|
||||
if (option === null) {
|
||||
IO.printLine("Unknown option " + arg);
|
||||
IO.printLine("");
|
||||
this.printUsage();
|
||||
} else {
|
||||
if (!option.flag)
|
||||
value = consume();
|
||||
|
||||
option.set(value);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.unnamed.push(current);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -1,2 +0,0 @@
|
||||
[{"start":17,"end":31,"data":"0\t17\t34\t\ttesting\t\tFoo"},{"start":33,"end":34,"data":"0\t17\t34\t\ttesting\t\tFoo"},{"start":49,"end":60,"data":"0\t55\t180\t\tC1\t\t__GLO"},{"start":71,"end":79,"data":"0\t64\t88\t\tpubMeth\t\tC1"},{"start":82,"end":87,"data":"0\t55\t180\t\tC1\t\t__GLO"},{"start":118,"end":127,"data":"0\t110\t131\t\tprivMeth\t\tC1"},{"start":134,"end":151,"data":"0\t134\t153\t\tpubProp\t\tC1"},{"start":152,"end":153,"data":"0\t134\t153\t\tpubProp\t\tC1"},{"start":156,"end":175,"data":"0\t156\t177\t\tprivProp\t\tC1"},{"start":176,"end":177,"data":"0\t156\t177\t\tprivProp\t\tC1"},{"start":184,"end":192,"data":"0\t184\t201\t\tf\t\t__GLO"},{"start":192,"end":200,"data":"0\t55\t180\t\tC1\t\t__GLO"},{"start":200,"end":201,"data":"0\t184\t201\t\tf\t\t__GLO"},{"start":203,"end":206,"data":"0\t184\t201\t\tf\t\t__GLO"},{"start":221,"end":230,"data":"0\t221\t315\t\tM\t\t__GLO"},{"start":237,"end":252,"data":"0\t250\t289\t\tC\t\tM"},{"start":254,"end":267,"data":"0\t254\t269\t\tpub\t\tM.C"},{"start":268,"end":269,"data":"0\t254\t269\t\tpub\t\tM.C"},{"start":270,"end":285,"data":"0\t270\t287\t\tpriv\t\tM.C"},{"start":286,"end":287,"data":"0\t270\t287\t\tpriv\t\tM.C"},{"start":295,"end":310,"data":"0\t295\t312\t\tV\t\tM"},{"start":311,"end":312,"data":"0\t295\t312\t\tV\t\tM"},{"start":321,"end":329,"data":"0\t321\t339\t\tc\t\t__GLO"},{"start":329,"end":333,"data":"0\t250\t289\t\tC\t\tM"},{"start":333,"end":335,"data":"0\t221\t315\t\tM\t\t__GLO"},{"start":335,"end":338,"data":"0\t250\t289\t\tC\t\tM"},{"start":338,"end":339,"data":"0\t321\t339\t\tc\t\t__GLO"},{"start":343,"end":346,"data":"0\t321\t339\t\tc\t\t__GLO"}]
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
[{"start":87,"end":88,"data":"pubMeth\t() => void\npubProp\tnumber\nprivMeth\t() => void\nprivProp\tnumber\n"},{"start":205,"end":206,"data":"pubMeth\t() => void\npubProp\tnumber\n"},{"start":335,"end":336,"data":"C\tnew() => M.C\nV\tnumber\n"},{"start":345,"end":346,"data":"pub\tnumber\n"}]
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
[{"start":192,"end":200,"data":"C1(): C1\n"},{"start":329,"end":338,"data":"C(): C\n"}]
|
||||
|
||||
@ -1,2 +0,0 @@
|
||||
[{"start":17,"end":34,"data":"string"},{"start":34,"end":39,"data":"Foo"},{"start":39,"end":43,"data":"any"},{"start":43,"end":45,"data":"Foo"},{"start":49,"end":64,"data":"new() => C1"},{"start":64,"end":82,"data":"() => void"},{"start":82,"end":87,"data":"C1"},{"start":87,"end":88,"data":"() => void"},{"start":88,"end":89,"data":"new() => C1"},{"start":108,"end":110,"data":"new() => C1"},{"start":110,"end":131,"data":"() => void"},{"start":131,"end":134,"data":"new() => C1"},{"start":134,"end":153,"data":"number"},{"start":153,"end":156,"data":"new() => C1"},{"start":156,"end":177,"data":"number"},{"start":177,"end":180,"data":"new() => C1"},{"start":184,"end":196,"data":"C1"},{"start":196,"end":198,"data":"new() => C1"},{"start":198,"end":201,"data":"C1"},{"start":203,"end":205,"data":"C1"},{"start":221,"end":237,"data":"M"},{"start":237,"end":254,"data":"new() => C"},{"start":254,"end":269,"data":"number"},{"start":269,"end":270,"data":"new() => C"},{"start":270,"end":287,"data":"number"},{"start":287,"end":289,"data":"new() => C"},{"start":289,"end":295,"data":"M"},{"start":295,"end":312,"data":"number"},{"start":312,"end":315,"data":"M"},{"start":321,"end":333,"data":"M.C"},{"start":333,"end":334,"data":"M"},{"start":334,"end":336,"data":"new() => M.C"},{"start":336,"end":339,"data":"M.C"},{"start":343,"end":345,"data":"M.C"}]
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,2 +0,0 @@
|
||||
[{"start":3649,"end":3659,"data":"consume(): any\n"},{"start":3710,"end":3716,"data":"peek(): any\n"},{"start":3783,"end":3793,"data":"consume(): any\n"},{"start":3856,"end":3862,"data":"peek(): any\n"},{"start":3894,"end":3904,"data":"consume(): any\n"},{"start":4104,"end":4110,"data":"peek(): any\n"},{"start":4179,"end":4200,"data":"consumeQuotedString(): string\n"},{"start":4413,"end":4423,"data":"consume(): any\n"},{"start":4463,"end":4473,"data":"consume(): any\n"},{"start":4636,"end":4653,"data":"parse(args: string[]): void\n"},{"start":4956,"end":4965,"data":"consume(): string\n"},{"start":5147,"end":5164,"data":"parseString(argString: string): void\n"},{"start":5185,"end":5187,"data":"parseString(argString: string): void\n"},{"start":5289,"end":5309,"data":"findOption(arg: string): IOptions\n"},{"start":5489,"end":5507,"data":"printUsage(): void\n"},{"start":5618,"end":5627,"data":"consume(): string\n"},{"start":5656,"end":5674,"data":"set(s: string): void\n"}]
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -1,3 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
DumpAST.compareDumpFilesWithBaseline();
|
||||
@ -1,9 +0,0 @@
|
||||
///<reference path='..\..\..\harness\dumpAST-baselining.ts'/>
|
||||
|
||||
describe('dumpAST-create-baselines', function() {
|
||||
describe("create test baseline files for AST source locations", function() {
|
||||
it("create baseline files", function() {
|
||||
DumpAST.generateBaselineFiles();
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,220 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
debugger;
|
||||
|
||||
describe('getCompletionsAtPosition', function () {
|
||||
var typescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
typescriptLS.addDefaultLibrary();
|
||||
|
||||
var fileName = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition1.ts';
|
||||
var fileName2 = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition2.ts';
|
||||
var fileName3 = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition3.ts';
|
||||
var fileName4 = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition4.ts';
|
||||
var fileName5 = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition5.ts';
|
||||
var fileName6 = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition6.ts';
|
||||
var fileName7 = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition7.ts';
|
||||
var fileName8 = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition8.ts';
|
||||
var fileName9 = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition9.ts';
|
||||
var fileName10 = 'tests/cases/unittests/services/testCode/getCompletionsAtPosition10.ts';
|
||||
var fileNameBugFixes = 'tests/cases/unittests/services/testCode/getCompletionsAtPositionBugFixes.ts';
|
||||
|
||||
typescriptLS.addFile(fileName);
|
||||
typescriptLS.addFile(fileName2);
|
||||
typescriptLS.addFile(fileName3);
|
||||
typescriptLS.addFile(fileName4);
|
||||
typescriptLS.addFile(fileName5);
|
||||
typescriptLS.addFile(fileName6);
|
||||
typescriptLS.addFile(fileName7);
|
||||
typescriptLS.addFile(fileName8);
|
||||
typescriptLS.addFile(fileName9);
|
||||
typescriptLS.addFile(fileName10);
|
||||
typescriptLS.addFile(fileNameBugFixes);
|
||||
|
||||
var ls = typescriptLS.getLanguageService();
|
||||
|
||||
//
|
||||
// line and column are 1-based
|
||||
//
|
||||
function lineColToPosition(fileName: string, line: number, col: number): number {
|
||||
var script = ls.languageService.getScriptAST(fileName);
|
||||
assert.notNull(script);
|
||||
|
||||
var lineMap = script.locationInfo.lineMap;
|
||||
|
||||
assert.is(line >= 1);
|
||||
assert.is(col >= 1);
|
||||
assert.is(line <= lineMap.length);
|
||||
var offset = lineMap[line - 1] + (col - 1);
|
||||
|
||||
assert.is(offset < script.limChar);
|
||||
return offset;
|
||||
}
|
||||
|
||||
//
|
||||
// line and column are 1-based
|
||||
//
|
||||
function getCompletionList(fileName, line, column, isMemberCompletion) {
|
||||
var position = lineColToPosition(fileName, line, column);
|
||||
return ls.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion);
|
||||
}
|
||||
|
||||
describe("test cases for completion list", function () {
|
||||
|
||||
//it("contains a private variable defined in a module", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileName, 45, false);
|
||||
// assert.arrayContainsOnce(result.entries, (x: Services.CompletionEntry) => x.name == "testing" && x.type == "string");
|
||||
//});
|
||||
|
||||
//it("'this.' member completion for class containing privates", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileName, 85, true);
|
||||
// assert.arrayContainsOnce(result.entries, (x: Services.CompletionEntry) => x.name == "privMeth" && x.type == "() => void");
|
||||
// assert.arrayContainsOnce(result.entries, (x: Services.CompletionEntry) => x.name == "pubMeth" && x.type == "() => void");
|
||||
// assert.arrayContainsOnce(result.entries, (x: Services.CompletionEntry) => x.name == "pubProp" && x.type == "number");
|
||||
//});
|
||||
|
||||
//it("member completion for class containing privates, outside of class scope", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileName, 203, true);
|
||||
|
||||
// assert.arrayContainsOnce(result.entries, (x: Services.CompletionEntry) => x.name == "pubMeth" && x.type == "() => void");
|
||||
// assert.arrayContainsOnce(result.entries, (x: Services.CompletionEntry) => x.name == "pubProp" && x.type == "number");
|
||||
//});
|
||||
|
||||
//it("member completion for module-exported class containing privates, outside of class and module scopes", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileName, 343, true);
|
||||
// assert.notNull(result);
|
||||
// assert.notNull(result.entries);
|
||||
// assert.equal(true, result.isMemberCompletion);
|
||||
// assert.arrayContainsOnce(result.entries, (x: Services.CompletionEntry) => x.name == "pub" && x.type == "number");
|
||||
|
||||
//});
|
||||
|
||||
//it("member completion for dotted typeref works", function () {
|
||||
// assert.equal(125, lineColToPosition(fileName2, 12, 11));
|
||||
// var result = getCompletionList(fileName2, 12, 11, true);
|
||||
// assert.notEqual(null, result);
|
||||
// assert.notEqual(null, result.entries);
|
||||
// assert.equal(true, result.isMemberCompletion);
|
||||
// assert.equal(2, result.entries.length);
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "Bar"; });
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "Blah"; });
|
||||
//});
|
||||
|
||||
// Negative Cases
|
||||
it("doesnt return anything from a comment-1", function () {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName, lineColToPosition(fileName, 23, 5), true);
|
||||
assert.equal(result.isMemberCompletion, true);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
it("doesnt return anything from a comment-2", function () {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName, lineColToPosition(fileName, 23, 5), false);
|
||||
assert.equal(result.isMemberCompletion, false);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
it("doesnt return anything from a comment-3", function () {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName, lineColToPosition(fileName, 23, 6), true);
|
||||
assert.equal(result.isMemberCompletion, true);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
it("doesnt return anything from a comment-4", function () {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName, lineColToPosition(fileName, 23, 6), false);
|
||||
assert.equal(result.isMemberCompletion, false);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
it("checks for completion in comment", function () {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName3, lineColToPosition(fileName3, 1, 4), false);
|
||||
assert.equal(result.isMemberCompletion, false);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
/*
|
||||
it("checks for completion in var decl", function() {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName3, lineColToPosition(fileName3, 2, 5), false);
|
||||
assert.equal(result.wasMemberCompletion, false);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
|
||||
it("checks for completion in class decl", function() {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName4, lineColToPosition(fileName4, 1, 7), false);
|
||||
assert.equal(result.wasMemberCompletion, false);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
|
||||
it("checks for completion in module decl", function() {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName5, lineColToPosition(fileName5, 1, 7), false);
|
||||
assert.equal(result.wasMemberCompletion, false);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
it("checks for completion in interface decl", function() {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName6, lineColToPosition(fileName6, 1, 11), false);
|
||||
assert.equal(result.wasMemberCompletion, false);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
|
||||
it("checks for completion in function decl", function() {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName7, lineColToPosition(fileName7, 1, 10), false);
|
||||
assert.equal(result.wasMemberCompletion, false);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
*/
|
||||
|
||||
it("checks for completion after single dot", function () {
|
||||
var result = ls.languageService.getCompletionsAtPosition(fileName8, lineColToPosition(fileName8, 1, 1), true);
|
||||
assert.equal(result.isMemberCompletion, true);
|
||||
assert.equal(result.entries.length, 0);
|
||||
});
|
||||
|
||||
//it("checks for completion at declaration of parameter type", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileName9, lineColToPosition(fileName9, 9, 17), false);
|
||||
// assert.equal(result.isMemberCompletion, false);
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "Bar"; });
|
||||
//});
|
||||
|
||||
//it("checks for completion after class extends", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileName9, lineColToPosition(fileName9, 5, 30), false);
|
||||
// assert.equal(result.isMemberCompletion, false);
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "Bar"; });
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "Bleah"; });
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "Foo"; });
|
||||
//});
|
||||
|
||||
//it("checks for completion at reference to function parameter", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileName10, lineColToPosition(fileName10, 4, 31), true);
|
||||
// assert.equal(result.isMemberCompletion, true);
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "charAt"; });
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "charCodeAt"; });
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "length"; });
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "concat"; });
|
||||
//});
|
||||
|
||||
//it("checks for completion at enum", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileNameBugFixes, lineColToPosition(fileNameBugFixes, 7, 22), true);
|
||||
// assert.equal(result.isMemberCompletion, true);
|
||||
// assert.equal(result.entries.length, 2);
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "bar"; });
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "baz"; });
|
||||
//});
|
||||
|
||||
//it("checks for completion at imported enum", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileNameBugFixes, lineColToPosition(fileNameBugFixes, 10, 9), true);
|
||||
// assert.equal(result.isMemberCompletion, true);
|
||||
// assert.equal(result.entries.length, 2);
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "bar"; });
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "baz"; });
|
||||
//});
|
||||
|
||||
//it("checks for completion inside target typed function", function () {
|
||||
// var result = ls.languageService.getCompletionsAtPosition(fileNameBugFixes, lineColToPosition(fileNameBugFixes, 15, 40), false);
|
||||
// assert.equal(result.isMemberCompletion, false);
|
||||
// assert.arrayContainsOnce(result.entries, function (item: Services.CompletionEntry) { return item.name === "elem" && item.type === "string"; });
|
||||
//});
|
||||
});
|
||||
});
|
||||
@ -1,55 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
describe('getCompletionsAtPositionAfterEdits', function () {
|
||||
var typescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
typescriptLS.addDefaultLibrary();
|
||||
|
||||
var fileName = 'tests/cases/unittests/services/testCode/getCompletionsAtPositionAfterEdits.ts';
|
||||
var fileName2 = 'otherScript.ts';
|
||||
|
||||
typescriptLS.addFile(fileName);
|
||||
typescriptLS.addScript(fileName2, typescriptLS.getScriptContent(1));
|
||||
|
||||
var ls = typescriptLS.getLanguageService();
|
||||
|
||||
//
|
||||
// line and column are 1-based
|
||||
//
|
||||
function getCompletionList(fileName: string, position: number, isMemberCompletion: boolean): Services.CompletionInfo {
|
||||
return ls.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion);
|
||||
}
|
||||
|
||||
function typeCharacters(fileName: string, line: number, column: number, text: string): number {
|
||||
var pos = typescriptLS.lineColToPosition(fileName, line, column);
|
||||
for (var i = 0; i < text.length; i++) {
|
||||
typescriptLS.editScript(fileName, pos, pos, text.charAt(i));
|
||||
pos++;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
|
||||
describe("test cases for completion list after edits inside source file", function () {
|
||||
|
||||
it("verify function arguments are available after edits at end of function", function () {
|
||||
// Apply edit
|
||||
var pos = typescriptLS.lineColToPosition(fileName, 5, 13);
|
||||
var text = "this.children = ch";
|
||||
typescriptLS.editScript(fileName, pos, pos, text);
|
||||
var result = getCompletionList(fileName, pos + text.length - 2 /*ch*/, false);
|
||||
var entry = result.entries.filter(x => x.name == "children");
|
||||
assert.notNull(entry);
|
||||
assert.equal(1, entry.length);
|
||||
});
|
||||
|
||||
it("verify function arguments are available after edits at end of function after multiple edits", function () {
|
||||
// Apply edit
|
||||
var text = "this.children = ch";
|
||||
var pos = typeCharacters(fileName2, 5, 13, text);
|
||||
var result = getCompletionList(fileName2, pos - 2 /*ch*/, false);
|
||||
var entry = result.entries.filter(x => x.name == "children");
|
||||
assert.notNull(entry);
|
||||
assert.equal(1, entry.length);
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,100 +0,0 @@
|
||||
/////<reference path='_project.ts'/>
|
||||
|
||||
//describe('getCompletionsAtPositionObjectLiterals', function () {
|
||||
// var typescriptls = new Harness.TypeScriptLS();
|
||||
|
||||
// typescriptls.addDefaultLibrary();
|
||||
|
||||
// var fileNameObjectLiterals = 'tests/cases/unittests/services/testCode/getCompletionsAtPositionObjectLiterals.ts';
|
||||
|
||||
// typescriptls.addFile(fileNameObjectLiterals);
|
||||
|
||||
// var ls = typescriptls.getLanguageService();
|
||||
|
||||
// //
|
||||
// // line and column are 1-based
|
||||
// //
|
||||
// function getCompletionList(fileName: string, line: number, column: number, isMemberCompletion: boolean): Services.CompletionInfo {
|
||||
// var position = typescriptls.lineColToPosition(fileName, line, column);
|
||||
// return ls.languageService.getCompletionsAtPosition(fileName, position, isMemberCompletion);
|
||||
// }
|
||||
|
||||
// function assertIsMemberCompletions(result: Services.CompletionInfo) {
|
||||
// assert.notNull(result);
|
||||
// assert.is(result.isMemberCompletion, "isMemberCompletion should be set");
|
||||
// assert.is(!result.maybeInaccurate, "CompletionInfo should be accurate");
|
||||
// assert.is(result.entries.length == 2, "Completion should contain only 2 members of object literal");
|
||||
// assert.arrayContainsOnce(result.entries, (x: Services.CompletionEntry) => x.name == "x1" && x.type == "number");
|
||||
// assert.arrayContainsOnce(result.entries, (x: Services.CompletionEntry) => x.name == "y1" && x.type == "number");
|
||||
// }
|
||||
|
||||
// function assertIsGlobalCompletions(result: Services.CompletionInfo) {
|
||||
// assert.notNull(result);
|
||||
// assert.is(!result.isMemberCompletion, "isMemberCompletion should be not be set");
|
||||
// assert.is(!result.maybeInaccurate, "CompletionInfo should be accurate");
|
||||
// assert.is(result.entries.length >= 10, "Completion should be global completion set");
|
||||
// }
|
||||
|
||||
// function assertIsNoCompletions(result: Services.CompletionInfo) {
|
||||
// assert.notNull(result);
|
||||
// assert.is(result.entries.length == 0, "Completion should be empty (i.e. no completion)");
|
||||
// }
|
||||
|
||||
// describe("test cases for completion list inside object literals", function () {
|
||||
// it("Literal member completion inside empty literal", function () {
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 8, 9, false);
|
||||
// assertIsMemberCompletions(result);
|
||||
// });
|
||||
|
||||
// it("Literal member completion for 2nd member name", function () {
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 13, 9, false);
|
||||
// assertIsMemberCompletions(result);
|
||||
// });
|
||||
|
||||
// it("Literal member completion at existing member name location", function () {
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 17, 9, false);
|
||||
// assertIsMemberCompletions(result);
|
||||
// });
|
||||
|
||||
// it("Literal member completion after existing member name location", function () {
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 17, 12, false);
|
||||
// assertIsMemberCompletions(result);
|
||||
// });
|
||||
|
||||
// });
|
||||
|
||||
// describe("test cases for global completion list inside object literals", function () {
|
||||
// it("Literal member completion after member name with empty member expression and missing colon", function () {
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 27, 13, false);
|
||||
// assertIsGlobalCompletions(result);
|
||||
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 28, 5, false);
|
||||
// assertIsGlobalCompletions(result);
|
||||
// });
|
||||
|
||||
// it("Literal member completion after member name with empty member expression", function () {
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 31, 13, false);
|
||||
// assertIsGlobalCompletions(result);
|
||||
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 31, 22, false);
|
||||
// assertIsGlobalCompletions(result);
|
||||
// });
|
||||
|
||||
// it("No completion on '{' location", function () {
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 7, 23, false);
|
||||
// assertIsGlobalCompletions(result);
|
||||
// });
|
||||
// });
|
||||
|
||||
// describe("test cases for no completion list inside object literals", function () {
|
||||
// it("No completion on comments (1)", function () {
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 8, 12, false);
|
||||
// assertIsNoCompletions(result);
|
||||
// });
|
||||
|
||||
// it("No completion on comments (2)", function () {
|
||||
// var result = getCompletionList(fileNameObjectLiterals, 8, 18, false);
|
||||
// assertIsNoCompletions(result);
|
||||
// });
|
||||
// });
|
||||
//});
|
||||
@ -1,193 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
describe('getDefinitionPositionAtPosition', function() {
|
||||
var typescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
typescriptLS.addDefaultLibrary();
|
||||
|
||||
var fileName = 'tests/cases/unittests/services/testCode/getDefinitionsAtPosition.ts';
|
||||
var fileName2 = 'tests/cases/unittests/services/testCode/getDefinitionsAtPosition2.ts';
|
||||
var fileName3 = 'tests/cases/unittests/services/testCode/getDefinitionsAtPosition3.ts';
|
||||
|
||||
typescriptLS.addFile(fileName);
|
||||
typescriptLS.addFile(fileName2);
|
||||
typescriptLS.addFile(fileName3);
|
||||
|
||||
var ls = typescriptLS.getLanguageService();
|
||||
|
||||
function lineToOffset(line: number, col = 0, sFile?) {
|
||||
var script: TypeScript.Script;
|
||||
if (sFile) {
|
||||
if (sFile === 1){
|
||||
script = ls.languageService.getScriptAST(fileName);
|
||||
} else if (sFile === 2) {
|
||||
script = ls.languageService.getScriptAST(fileName2);
|
||||
} else if (sFile === 3){
|
||||
script = ls.languageService.getScriptAST(fileName3);
|
||||
}
|
||||
}
|
||||
else {
|
||||
script = ls.languageService.getScriptAST(fileName);
|
||||
}
|
||||
return script.locationInfo.lineMap[line - 1] + col;
|
||||
}
|
||||
|
||||
function definitionAtPos(line: number, col: number) {
|
||||
var result = ls.getDefinitionAtPosition(fileName, lineToOffset(line, col));
|
||||
if (result.substr(0,9) === "##ERROR##") {
|
||||
return null;
|
||||
}
|
||||
var parts = result.split('\t');
|
||||
var defScriptIndex = parts[0];
|
||||
var defPosition = parts[1];
|
||||
return { index : defScriptIndex, pos : defPosition }
|
||||
}
|
||||
|
||||
function verifyDefinition(indexAndPos: {index: string; pos: string;}, line: number, col: number, fileNum: number) {
|
||||
if (indexAndPos.index !== fileNum.toString()) {
|
||||
throw new Error("Expected file index to be " + fileNum + " but it was " + indexAndPos.index + " instead.");
|
||||
}
|
||||
if (indexAndPos.pos!== lineToOffset(line, col, fileNum).toString()) {
|
||||
throw new Error("Expected offset to be " + lineToOffset(line, col, fileNum).toString() + " but it was " + indexAndPos.pos + " instead.");
|
||||
}
|
||||
}
|
||||
|
||||
describe('GoTo Definition', function() {
|
||||
/*
|
||||
LOCAL
|
||||
*/
|
||||
|
||||
it("A variable that is defined in the same file", function() {
|
||||
var indexAndPos = definitionAtPos(8, 0);
|
||||
verifyDefinition(indexAndPos, 2, 0, 1);
|
||||
});
|
||||
|
||||
it("A function that is defined in the same file", function() {
|
||||
var indexAndPos = definitionAtPos(9, 0);
|
||||
verifyDefinition(indexAndPos, 3, 0, 1);
|
||||
});
|
||||
|
||||
it("A class that is defined in the same file", function() {
|
||||
var indexAndPos = definitionAtPos(10, 16);
|
||||
verifyDefinition(indexAndPos, 4, 0, 1);
|
||||
});
|
||||
|
||||
it("An interface that is defined in the same file", function() {
|
||||
var indexAndPos = definitionAtPos(11, 26);
|
||||
verifyDefinition(indexAndPos, 5, 0, 1);
|
||||
});
|
||||
|
||||
it("A module that is defined in the same file", function() {
|
||||
var indexAndPos = definitionAtPos(12, 15);
|
||||
verifyDefinition(indexAndPos, 6, 0, 1);
|
||||
});
|
||||
|
||||
/*
|
||||
REMOTE
|
||||
*/
|
||||
|
||||
it("A variable that is defined in a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(14, 0);
|
||||
verifyDefinition(indexAndPos, 2, 0, 2);
|
||||
});
|
||||
|
||||
it("A function that is defined in a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(15, 0);
|
||||
verifyDefinition(indexAndPos, 3, 0, 2);
|
||||
});
|
||||
|
||||
it("A class that is defined in a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(16, 19);
|
||||
verifyDefinition(indexAndPos, 4, 0, 2);
|
||||
});
|
||||
|
||||
it("An interface that is defined in a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(17, 29);
|
||||
verifyDefinition(indexAndPos, 5, 0, 2);
|
||||
});
|
||||
|
||||
it("A module that is defined in a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(18, 18);
|
||||
verifyDefinition(indexAndPos, 6, 0, 2);
|
||||
});
|
||||
|
||||
/*
|
||||
REMOTE -> REMOTE
|
||||
*/
|
||||
|
||||
it("A variable that is defined in a remote file that is referenced from a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(20, 0);
|
||||
verifyDefinition(indexAndPos, 1, 0, 3);
|
||||
});
|
||||
|
||||
it("A function that is defined in a remote file that is referenced from a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(21, 0);
|
||||
verifyDefinition(indexAndPos, 2, 0, 3);
|
||||
});
|
||||
|
||||
it("A class that is defined in a remote file that is referenced from a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(22, 19);
|
||||
verifyDefinition(indexAndPos, 3, 0, 3);
|
||||
});
|
||||
|
||||
it("An interface that is defined in a remote file that is referenced from a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(23, 29);
|
||||
verifyDefinition(indexAndPos, 4, 0, 3);
|
||||
});
|
||||
|
||||
it("A module that is defined in a remote file that is referenced from a remote file", function() {
|
||||
var indexAndPos = definitionAtPos(24, 18);
|
||||
verifyDefinition(indexAndPos, 5, 0, 3);
|
||||
});
|
||||
|
||||
/*
|
||||
Others
|
||||
*/
|
||||
|
||||
it("A shadowed variable inside a module", function() {
|
||||
var indexAndPos = definitionAtPos(29, 6);
|
||||
verifyDefinition(indexAndPos, 28, 4, 1);
|
||||
});
|
||||
|
||||
it("A function being overloaded on global - 1", function() {
|
||||
var indexAndPos = definitionAtPos(32, 9);
|
||||
verifyDefinition(indexAndPos, 34, 0, 1);
|
||||
});
|
||||
|
||||
it("A function being overloaded on global - 2", function() {
|
||||
var indexAndPos = definitionAtPos(36, 0);
|
||||
verifyDefinition(indexAndPos, 34, 0, 1);
|
||||
});
|
||||
|
||||
it("Constructor being overloaded in class", function() {
|
||||
var indexAndPos = definitionAtPos(40, 4);
|
||||
verifyDefinition(indexAndPos, 42, 4, 1);
|
||||
});
|
||||
|
||||
it("A function being overloaded in class - 1", function() {
|
||||
var indexAndPos = definitionAtPos(52, 11);
|
||||
verifyDefinition(indexAndPos, 54, 4, 1);
|
||||
});
|
||||
|
||||
it("A static function being overloaded in class - 1", function() {
|
||||
var indexAndPos = definitionAtPos(50, 11);
|
||||
verifyDefinition(indexAndPos, 51, 4, 1);
|
||||
});
|
||||
|
||||
it("Calling a static function of a class", function() {
|
||||
var indexAndPos = definitionAtPos(63, 19);
|
||||
verifyDefinition(indexAndPos, 51, 4, 1);
|
||||
});
|
||||
|
||||
it("A class implementing an interface", function() {
|
||||
var indexAndPos = definitionAtPos(83, 24);
|
||||
verifyDefinition(indexAndPos, 78, 0, 1);
|
||||
});
|
||||
|
||||
it("An ambient variable", function() {
|
||||
var indexAndPos = definitionAtPos(91, 0);
|
||||
verifyDefinition(indexAndPos, 89, 0, 1);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,29 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
describe('getDefinitionPositionAtPositionPartialInterface', function() {
|
||||
var typescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
typescriptLS.addDefaultLibrary();
|
||||
|
||||
var fileName = 'tests/cases/unittests/services/testCode/getDefinitionsAtPositionPartialInterface1.ts';
|
||||
var fileName2 = 'tests/cases/unittests/services/testCode/getDefinitionsAtPositionPartialInterface2.ts';
|
||||
|
||||
typescriptLS.addFile(fileName);
|
||||
typescriptLS.addFile(fileName2);
|
||||
|
||||
var ls = typescriptLS.getLanguageService()
|
||||
function definitionAtPos(fileName:string, line: number, col: number) {
|
||||
return ls.languageService.getDefinitionAtPosition(fileName, typescriptLS.lineColToPosition(fileName, line, col));
|
||||
}
|
||||
|
||||
describe('GoTo Definition', function() {
|
||||
it("returns the location of the first part of a partial interface", function() {
|
||||
var def = definitionAtPos(fileName2, 8, 13);
|
||||
assert.notNull(def);
|
||||
assert.equal(def.unitIndex, 1);
|
||||
assert.equal(typescriptLS.positionToZeroBasedLineCol(fileName, def.minChar).line + 1, 2);
|
||||
assert.equal(typescriptLS.positionToZeroBasedLineCol(fileName, def.minChar).col + 1, 5);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,73 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
describe('getImplementorsAtPosition', function () {
|
||||
var typescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
typescriptLS.addDefaultLibrary();
|
||||
|
||||
var fileName = 'tests/cases/unittests/services/testCode/getImplementorsAtPosition.ts';
|
||||
|
||||
typescriptLS.addFile(fileName);
|
||||
|
||||
var ls = typescriptLS.getLanguageService();
|
||||
|
||||
|
||||
function getImplementorsAtPos(fileName:string, line: number, col: number): Services.ReferenceEntry[] {
|
||||
var pos = typescriptLS.lineColToPosition(fileName, line, col);
|
||||
|
||||
return ls.languageService.getImplementorsAtPosition(fileName, pos);
|
||||
}
|
||||
|
||||
describe('Get Implementors At Position Simple Tests', function () {
|
||||
it("Find derived class from base class", function() {
|
||||
var result = getImplementorsAtPos(fileName, 2, 12);
|
||||
assert.notNull(result);
|
||||
assert.equal(2, result.length);
|
||||
});
|
||||
|
||||
it("Should not find base class from derived class", function() {
|
||||
var result = getImplementorsAtPos(fileName, 6, 12);
|
||||
assert.notNull(result);
|
||||
assert.equal(1, result.length);
|
||||
});
|
||||
|
||||
it("Find derived interface from base interface", function() {
|
||||
var result = getImplementorsAtPos(fileName, 13, 16);
|
||||
assert.notNull(result);
|
||||
assert.equal(2, result.length);
|
||||
});
|
||||
|
||||
it("Should not find base interface from derived interface", function() {
|
||||
var result = getImplementorsAtPos(fileName, 16, 16);
|
||||
assert.notNull(result);
|
||||
assert.equal(1, result.length);
|
||||
});
|
||||
|
||||
it("Find dervied class from base interface", function() {
|
||||
var result = getImplementorsAtPos(fileName, 22, 16);
|
||||
assert.notNull(result);
|
||||
assert.equal(2, result.length);
|
||||
});
|
||||
|
||||
it("Should not find base interface from derived class", function() {
|
||||
var result = getImplementorsAtPos(fileName, 25, 12);
|
||||
assert.notNull(result);
|
||||
assert.equal(1, result.length);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Get Implementors At Position Complex Tests', function () {
|
||||
it("Find derived classes and interfaces from top level interface", function() {
|
||||
var result = getImplementorsAtPos(fileName, 32, 17);
|
||||
assert.notNull(result);
|
||||
assert.equal(6, result.length);
|
||||
});
|
||||
|
||||
it("Find derived classes and interfaces from middle interface", function() {
|
||||
var result = getImplementorsAtPos(fileName, 41, 18);
|
||||
assert.notNull(result);
|
||||
assert.equal(4, result.length);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,188 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
debugger;
|
||||
|
||||
describe('getReferencesAtPosition', function() {
|
||||
var typescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
typescriptLS.addDefaultLibrary();
|
||||
|
||||
var fileName1 = 'tests/cases/unittests/services/testCode/getReferencesAtPositionTest.ts';
|
||||
var fileName2 = 'tests/cases/unittests/services/testCode/getReferencesAtPositionTest2.ts';
|
||||
var fileName3 = 'tests/cases/unittests/services/testCode/getReferencesAtPositionTest3.ts';
|
||||
var fileName4 = 'tests/cases/unittests/services/testCode/getReferencesAtPositionTest4.ts';
|
||||
|
||||
typescriptLS.addFile(fileName1);
|
||||
typescriptLS.addFile(fileName2);
|
||||
typescriptLS.addFile(fileName3);
|
||||
typescriptLS.addFile(fileName4);
|
||||
|
||||
var ls = typescriptLS.getLanguageService();
|
||||
|
||||
// Returns the offset corresponding to the line + column given
|
||||
function lineToOffset(line: number, col = 0, fileName?: string = fileName1) {
|
||||
var script: TypeScript.Script = ls.languageService.getScriptAST(fileName);
|
||||
return script.locationInfo.lineMap[line - 1] + col;
|
||||
}
|
||||
|
||||
describe("local get references", function() {
|
||||
|
||||
it("finds references to comment", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(2, 25));
|
||||
assert.equal(1, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to type", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(3, 15));
|
||||
var count = 0;
|
||||
// Filter out the lib.d.ts
|
||||
var items = result.split("\n");
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
if (items[i].split(" ")[0] !== "0") {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
assert.equal(10, count);
|
||||
});
|
||||
|
||||
it("find references to a variable declared in global", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(3, 4));
|
||||
assert.equal(12, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a variable declared in a class", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(8, 8));
|
||||
assert.equal(3, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to static variable declared in a class", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(6, 16));
|
||||
assert.equal(7, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a variable declared in a function", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(22, 8));
|
||||
assert.equal(3, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a class parameter", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(15, 17));
|
||||
assert.equal(2, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a function parameter", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(20, 14));
|
||||
assert.equal(3, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a function argument", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(66, 8));
|
||||
assert.equal(12, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a class argument", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(65, 29));
|
||||
assert.equal(12, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to illegal assignment", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(75, 0));
|
||||
assert.equal(8, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to unresolved symbol", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(76, 0));
|
||||
assert.equal(1, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to no context", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(77, 0));
|
||||
assert.equal(1, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to shadowed function parameter", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(79, 20));
|
||||
assert.equal(4, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find reference misses function parameter", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(115, 11));
|
||||
assert.equal(3, result.split("\n").length);
|
||||
});
|
||||
});
|
||||
|
||||
describe("remote get references", function() {
|
||||
it("find references to a variable declared in global", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(96, 0));
|
||||
assert.equal(12, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a type", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(87, 23));
|
||||
assert.equal(9, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a function argument", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(91, 19));
|
||||
assert.equal(12, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a class argument", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName1, lineToOffset(90, 43));
|
||||
assert.equal(12, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to a variable declared in a class", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName2, lineToOffset(5, 8, fileName2));
|
||||
assert.equal(3, result.split("\n").length);
|
||||
});
|
||||
|
||||
it("find references to static variable declared in a class", function() {
|
||||
var result = ls.getReferencesAtPosition(fileName2, lineToOffset(6, 11, fileName2));
|
||||
assert.equal(7, result.split("\n").length);
|
||||
});
|
||||
});
|
||||
|
||||
describe("get references for overrides", function() {
|
||||
it("find references to a field declared in a base class", function() {
|
||||
var result = ls.languageService.getReferencesAtPosition(fileName3, lineToOffset(62, 11, fileName3));
|
||||
assert.equal(3, result.length);
|
||||
});
|
||||
|
||||
it("find references to a field declared in a base interface", function() {
|
||||
var result = ls.languageService.getReferencesAtPosition(fileName3, lineToOffset(65, 11, fileName3));
|
||||
assert.equal(3, result.length);
|
||||
});
|
||||
|
||||
it("find references to a field declared in a chain of base class and interfaces", function() {
|
||||
var result = ls.languageService.getReferencesAtPosition(fileName3, lineToOffset(68, 11, fileName3));
|
||||
assert.equal(6, result.length);
|
||||
});
|
||||
});
|
||||
|
||||
describe("get references for statics with same names as members", function() {
|
||||
it("find references to a member method with the same name as a static", function() {
|
||||
/* public foo(): void */
|
||||
var result = ls.languageService.getReferencesAtPosition(fileName4, lineToOffset(7, 21, fileName4));
|
||||
assert.equal(3, result.length);
|
||||
});
|
||||
|
||||
it("find references to a static method with the same name as a member", function() {
|
||||
/* public static foo(): void */
|
||||
var result = ls.languageService.getReferencesAtPosition(fileName4, lineToOffset(9, 28, fileName4));
|
||||
assert.equal(2, result.length);
|
||||
});
|
||||
|
||||
it("find references to a member property with the same name as a static", function() {
|
||||
/* bar: Foo */
|
||||
var result = ls.languageService.getReferencesAtPosition(fileName4, lineToOffset(4, 14, fileName4));
|
||||
assert.equal(3, result.length);
|
||||
});
|
||||
|
||||
it("find references to a static property with the same name as a member", function() {
|
||||
/* static bar: Foo */
|
||||
var result = ls.languageService.getReferencesAtPosition(fileName4, lineToOffset(5, 21, fileName4));
|
||||
assert.equal(2, result.length);
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,235 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
function testFileForReferenceHighlighting(filename: string, expectedMissingCount ?= 0, expectedExtraCount ?= 0) {
|
||||
describe(
|
||||
'The file ' + filename + ' has ' + expectedMissingCount + ' missing reference highlights and ' + expectedExtraCount + ' extra reference highlights',
|
||||
function(filename: string, expectedMissingCount: number, expectedExtraCount: number) {
|
||||
return function() {
|
||||
validateReferencesFile(filename, expectedMissingCount, expectedExtraCount);
|
||||
}
|
||||
}(filename, expectedMissingCount, expectedExtraCount)
|
||||
);
|
||||
}
|
||||
|
||||
function validateReferencesFile(filename: string, expectedMissingCount: number, expectedExtraCount: number) {
|
||||
var __typescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
// Read the input file and split it apart into sub-files
|
||||
var testFile = IO.readFile(filename);
|
||||
var testFileParts = splitFile(testFile);
|
||||
|
||||
var testFileNames: string[] = [];
|
||||
var testFileContents: string[] = [];
|
||||
|
||||
// For each sub-file, add it to the project and collect its spans
|
||||
var spans: Span[] = [];
|
||||
var caretPositions: Span[] = [];
|
||||
var i;
|
||||
for(i = 0; i < testFileParts.length; i++) {
|
||||
var partSpans: Span[] = [];
|
||||
var partCarets: Span[] = [];
|
||||
var transformedCode = extractCodeSpans(testFileParts[i], partSpans, partCarets);
|
||||
|
||||
partSpans.forEach(function(sp) {
|
||||
sp.fileIndex = i;
|
||||
spans.push(sp);
|
||||
});
|
||||
|
||||
partCarets.forEach(function(sp) {
|
||||
sp.fileIndex = i;
|
||||
caretPositions.push(sp);
|
||||
});
|
||||
|
||||
var tempFilename = 'tempFile' + i + '.ts';
|
||||
testFileNames.push(tempFilename);
|
||||
testFileContents.push(transformedCode);
|
||||
__typescriptLS.addScript(tempFilename , transformedCode);
|
||||
}
|
||||
|
||||
// Be sure to do this last so file indices don't get off-by-n'd by the default library
|
||||
__typescriptLS.addDefaultLibrary();
|
||||
testFileContents.push(Harness.Compiler.libText);
|
||||
|
||||
// If there's no caret position, someone screwed up the test authoring
|
||||
if(caretPositions.length === 0) {
|
||||
throw new Error('No caret positions in ' + filename + ' - did you forget to add some?');
|
||||
}
|
||||
|
||||
var __ls = __typescriptLS.getLanguageService();
|
||||
|
||||
for(var caretIndex = 0; caretIndex < caretPositions.length; caretIndex++) {
|
||||
var caret = caretPositions[caretIndex];
|
||||
describe('Returns the correct references at caret position = ' + caret, function() {
|
||||
var references = __ls.getReferencesAtPosition(testFileNames[caret.fileIndex], caret.start);
|
||||
var referencesList = Span.fromReferenceLines(references);
|
||||
referencesList.forEach(function(rf) { rf.getContent(testFileContents); });
|
||||
|
||||
var diff = diffLists(spans, referencesList, function(s1, s2) { return s1.equals(s2); });
|
||||
if(expectedExtraCount === 0) {
|
||||
it('Has no extra highlights', function() {
|
||||
assert.equal('', diff.extraItems.join(', '));
|
||||
});
|
||||
} else {
|
||||
it('Has ' + expectedExtraCount + ' extra highlights', function() {
|
||||
assert.equal(expectedExtraCount, diff.extraItems.length);
|
||||
});
|
||||
}
|
||||
|
||||
if(expectedMissingCount === 0) {
|
||||
it('Has no missing highlights', function() {
|
||||
assert.equal('', diff.missingItems.join(', '));
|
||||
});
|
||||
} else {
|
||||
it('Has ' + expectedMissingCount + ' missing highlights', function() {
|
||||
assert.equal(expectedMissingCount, diff.missingItems.length);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
interface ListDiffResult {
|
||||
areIdentical: boolean;
|
||||
extraItems: any[];
|
||||
missingItems: any[];
|
||||
}
|
||||
|
||||
function diffLists(expected: any[], actual: any[], equals: (expct: any, actl: any) => boolean) : ListDiffResult {
|
||||
var result = { areIdentical: false, extraItems: actual.slice(0), missingItems: expected.slice(0) };
|
||||
|
||||
var i, j;
|
||||
for(i = 0; i < result.extraItems.length; i++) {
|
||||
for(j = 0; j < result.missingItems.length; j++) {
|
||||
if(equals(result.missingItems[j], result.extraItems[i])) {
|
||||
result.extraItems.splice(i, 1);
|
||||
result.missingItems.splice(j, 1);
|
||||
i--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result.areIdentical = result.extraItems.length === 0 && result.missingItems.length === 0;
|
||||
return result;
|
||||
}
|
||||
|
||||
class Span {
|
||||
constructor (public start: number, public length: number, public content: string) { }
|
||||
|
||||
public fileIndex: number = null;
|
||||
|
||||
public getContent(fileContents: string[]) {
|
||||
this.content = fileContents[this.fileIndex].substr(this.start, this.length);
|
||||
}
|
||||
|
||||
static fromReferenceLine(line: string): Span {
|
||||
var parts = line.split(' ');
|
||||
var fileNumber = parseInt(parts[0]);
|
||||
var start = parseInt(parts[1]);
|
||||
var end = parseInt(parts[2]);
|
||||
|
||||
var result = new Span(start, end - start, "<???>");
|
||||
result.fileIndex = fileNumber;
|
||||
return result;
|
||||
}
|
||||
|
||||
static fromReferenceLines(lines: string): Span[] {
|
||||
var result: Span[] = [];
|
||||
lines.split('\n').forEach(function(ln: string) {
|
||||
if(ln) {
|
||||
result.push(fromReferenceLine(ln));
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
public toString(): string {
|
||||
return '[File = ' + this.fileIndex + ', Start = ' + this.start + ', Length = ' + this.length + ', Content = "' + this.content + '"]';
|
||||
}
|
||||
|
||||
public equals(other: Span) {
|
||||
if(!other) return false;
|
||||
// Don't check 'content' as that won't be populated in all cases (it's only for diagnostic purposes)
|
||||
return other.start === this.start &&
|
||||
other.length === this.length &&
|
||||
other.fileIndex === this.fileIndex;
|
||||
}
|
||||
}
|
||||
|
||||
function splitFile(contents: string): string[] {
|
||||
var delimiterChar = '=';
|
||||
var delimiterStr = delimiterChar + delimiterChar + delimiterChar + delimiterChar;
|
||||
|
||||
var result: string[] = [];
|
||||
|
||||
while(true) {
|
||||
var delimIndex = contents.indexOf(delimiterStr);
|
||||
if(delimIndex === -1) {
|
||||
result.push(contents);
|
||||
break;
|
||||
} else {
|
||||
result.push(contents.substr(0, delimIndex - 1));
|
||||
while(contents.charAt(delimIndex) === delimiterChar) {
|
||||
delimIndex++;
|
||||
}
|
||||
contents = contents.substr(delimIndex);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function extractCodeSpans(code: string, outputSpans: Span[], caretPositions: Span[]): string {
|
||||
var startTag = '[|';
|
||||
var endTag = '|]';
|
||||
var caretMarker = '^^';
|
||||
var result = code;
|
||||
while(true) {
|
||||
var caretIndex = result.indexOf(caretMarker);
|
||||
var tagStartIndex = result.indexOf(startTag);
|
||||
if(tagStartIndex === -1 && caretIndex === -1) break; // No more matches
|
||||
|
||||
if(tagStartIndex != -1 && ((tagStartIndex < caretIndex) || (caretIndex === -1))) {
|
||||
// Tag series is first
|
||||
var tagEndIndex = result.indexOf(endTag, tagStartIndex + tagStartIndex.length);
|
||||
if(tagEndIndex === -1) throw new Error('Unbalanced ' + startTag + '/' + endTag + ' pairs - expected to find a ' + startTag);
|
||||
|
||||
var interiorStart = tagStartIndex + startTag.length;
|
||||
var content = result.substr(interiorStart, tagEndIndex - interiorStart);
|
||||
var contentCaretIndex = content.indexOf(caretMarker);
|
||||
// Need to handle the case where there are caret[s] inside the tag markers
|
||||
while(contentCaretIndex != -1) {
|
||||
caretPositions.push(new Span(contentCaretIndex + tagStartIndex, 0, '<caret>'));
|
||||
content = content.substring(0, contentCaretIndex) + content.substring(contentCaretIndex + caretMarker.length);
|
||||
contentCaretIndex = content.indexOf(caretMarker);
|
||||
}
|
||||
|
||||
outputSpans.push(new Span(tagStartIndex, content.length, content));
|
||||
result = result.substr(0, tagStartIndex) + content + result.substr(tagEndIndex + endTag.length);
|
||||
} else {
|
||||
// Cursor marker is first
|
||||
caretPositions.push(new Span(caretIndex, 0, '<caret>'));
|
||||
result = result.substr(0, caretIndex) + result.substr(caretIndex + caretMarker.length);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
var refFile = function(fn) { return Harness.userSpecifiedroot + 'tests/cases/unittests/services/testCode/references/' + fn; };
|
||||
|
||||
testFileForReferenceHighlighting(refFile('classLocal.ts'));
|
||||
|
||||
testFileForReferenceHighlighting(refFile('classParameter.ts'));
|
||||
|
||||
testFileForReferenceHighlighting(refFile('comment.ts'));
|
||||
|
||||
testFileForReferenceHighlighting(refFile('functionOverloads.ts'));
|
||||
testFileForReferenceHighlighting(refFile('functionParameter.ts'));
|
||||
|
||||
testFileForReferenceHighlighting(refFile('illegalAssignment1.ts'));
|
||||
testFileForReferenceHighlighting(refFile('illegalAssignment2.ts'));
|
||||
|
||||
testFileForReferenceHighlighting(refFile('noContext.ts'));
|
||||
testFileForReferenceHighlighting(refFile('referenceToClass.ts'));
|
||||
testFileForReferenceHighlighting(refFile('static.ts'));
|
||||
@ -1,904 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
describe('getScriptLexicalStructure', function () {
|
||||
var typescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
typescriptLS.addDefaultLibrary();
|
||||
|
||||
var fileName = 'tests/cases/unittests/services/testCode/getScriptLexicalStructure.ts';
|
||||
|
||||
typescriptLS.addFile(fileName);
|
||||
|
||||
var __ls = typescriptLS.getLanguageService();
|
||||
|
||||
|
||||
function getScriptLexicalStructure(fileName: string): Services.NavigateToItem[] {
|
||||
return __ls.languageService.getScriptLexicalStructure(fileName);
|
||||
}
|
||||
|
||||
describe('Get script lexical structure', function () {
|
||||
it("Cover all kinds of structure elements", function () {
|
||||
var result = getScriptLexicalStructure(fileName);
|
||||
|
||||
// Note: This baseline can be easily regenerated by taking the output of the test
|
||||
// resulting from the call to "assert.equal" below.
|
||||
var baseline =
|
||||
[
|
||||
{
|
||||
"name": "Bar",
|
||||
"kind": "module",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 0,
|
||||
"limChar": 1501,
|
||||
"containerName": "",
|
||||
"containerKind": ""
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"kind": "var",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 47,
|
||||
"limChar": 61,
|
||||
"containerName": "Bar",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "f",
|
||||
"kind": "function",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 92,
|
||||
"limChar": 114,
|
||||
"containerName": "Bar",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "IFoo",
|
||||
"kind": "interface",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 139,
|
||||
"limChar": 411,
|
||||
"containerName": "Bar",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "()",
|
||||
"kind": "call",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 165,
|
||||
"limChar": 183,
|
||||
"containerName": "Bar.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "new()",
|
||||
"kind": "construct",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 212,
|
||||
"limChar": 225,
|
||||
"containerName": "Bar.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "[]",
|
||||
"kind": "index",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 264,
|
||||
"limChar": 284,
|
||||
"containerName": "Bar.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "foo",
|
||||
"kind": "property",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 312,
|
||||
"limChar": 324,
|
||||
"containerName": "Bar.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "bar",
|
||||
"kind": "method",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 363,
|
||||
"limChar": 375,
|
||||
"containerName": "Bar.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "Blah",
|
||||
"kind": "enum",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 419,
|
||||
"limChar": 491,
|
||||
"containerName": "Bar",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "foo",
|
||||
"kind": "property",
|
||||
"kindModifiers": "export",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 440,
|
||||
"limChar": 447,
|
||||
"containerName": "Bar.Blah",
|
||||
"containerKind": "enum"
|
||||
},
|
||||
{
|
||||
"name": "Bar",
|
||||
"kind": "class",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 499,
|
||||
"limChar": 1498,
|
||||
"containerName": "Bar",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "constructor",
|
||||
"kind": "constructor",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 520,
|
||||
"limChar": 556,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barVar",
|
||||
"kind": "property",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 532,
|
||||
"limChar": 551,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barProp",
|
||||
"kind": "property",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 597,
|
||||
"limChar": 620,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barPropFunc",
|
||||
"kind": "method",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 672,
|
||||
"limChar": 702,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1",
|
||||
"kind": "getter",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 747,
|
||||
"limChar": 775,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1",
|
||||
"kind": "setter",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 822,
|
||||
"limChar": 844,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barPropP",
|
||||
"kind": "property",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 899,
|
||||
"limChar": 924,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barPropFuncP",
|
||||
"kind": "method",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 974,
|
||||
"limChar": 1006,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1P",
|
||||
"kind": "getter",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1049,
|
||||
"limChar": 1079,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1P",
|
||||
"kind": "setter",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1124,
|
||||
"limChar": 1148,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "foo",
|
||||
"kind": "property",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1201,
|
||||
"limChar": 1220,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "bar",
|
||||
"kind": "method",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1276,
|
||||
"limChar": 1298,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "foo2",
|
||||
"kind": "getter",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1351,
|
||||
"limChar": 1378,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "foo2",
|
||||
"kind": "setter",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1426,
|
||||
"limChar": 1447,
|
||||
"containerName": "Bar.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "Bar2",
|
||||
"kind": "module",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1505,
|
||||
"limChar": 3051,
|
||||
"containerName": "",
|
||||
"containerKind": ""
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"kind": "var",
|
||||
"kindModifiers": "export",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1560,
|
||||
"limChar": 1581,
|
||||
"containerName": "Bar2",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "f",
|
||||
"kind": "function",
|
||||
"kindModifiers": "export",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1613,
|
||||
"limChar": 1642,
|
||||
"containerName": "Bar2",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "IFoo",
|
||||
"kind": "interface",
|
||||
"kindModifiers": "export",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1668,
|
||||
"limChar": 1947,
|
||||
"containerName": "Bar2",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "()",
|
||||
"kind": "call",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1701,
|
||||
"limChar": 1719,
|
||||
"containerName": "Bar2.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "new()",
|
||||
"kind": "construct",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1748,
|
||||
"limChar": 1761,
|
||||
"containerName": "Bar2.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "[]",
|
||||
"kind": "index",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1800,
|
||||
"limChar": 1820,
|
||||
"containerName": "Bar2.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "foo",
|
||||
"kind": "property",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1848,
|
||||
"limChar": 1860,
|
||||
"containerName": "Bar2.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "bar",
|
||||
"kind": "method",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1899,
|
||||
"limChar": 1911,
|
||||
"containerName": "Bar2.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "Blah",
|
||||
"kind": "enum",
|
||||
"kindModifiers": "export",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1955,
|
||||
"limChar": 2034,
|
||||
"containerName": "Bar2",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "foo",
|
||||
"kind": "property",
|
||||
"kindModifiers": "export",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 1983,
|
||||
"limChar": 1990,
|
||||
"containerName": "Bar2.Blah",
|
||||
"containerKind": "enum"
|
||||
},
|
||||
{
|
||||
"name": "Bar",
|
||||
"kind": "class",
|
||||
"kindModifiers": "export",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2042,
|
||||
"limChar": 3048,
|
||||
"containerName": "Bar2",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "constructor",
|
||||
"kind": "constructor",
|
||||
"kindModifiers": "export",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2070,
|
||||
"limChar": 2106,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barVar",
|
||||
"kind": "property",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2082,
|
||||
"limChar": 2101,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barProp",
|
||||
"kind": "property",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2147,
|
||||
"limChar": 2170,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barPropFunc",
|
||||
"kind": "method",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2222,
|
||||
"limChar": 2252,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1",
|
||||
"kind": "getter",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2297,
|
||||
"limChar": 2325,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1",
|
||||
"kind": "setter",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2372,
|
||||
"limChar": 2394,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barPropP",
|
||||
"kind": "property",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2449,
|
||||
"limChar": 2474,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barPropFuncP",
|
||||
"kind": "method",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2524,
|
||||
"limChar": 2556,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1P",
|
||||
"kind": "getter",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2599,
|
||||
"limChar": 2629,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1P",
|
||||
"kind": "setter",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2674,
|
||||
"limChar": 2698,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "foo",
|
||||
"kind": "property",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2751,
|
||||
"limChar": 2770,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "bar",
|
||||
"kind": "method",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2826,
|
||||
"limChar": 2848,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "foo2",
|
||||
"kind": "getter",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2901,
|
||||
"limChar": 2928,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "foo2",
|
||||
"kind": "setter",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 2976,
|
||||
"limChar": 2997,
|
||||
"containerName": "Bar2.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "Bar3",
|
||||
"kind": "module",
|
||||
"kindModifiers": "declare",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3057,
|
||||
"limChar": 3083,
|
||||
"containerName": "",
|
||||
"containerKind": ""
|
||||
},
|
||||
{
|
||||
"name": "Bar4",
|
||||
"kind": "module",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3087,
|
||||
"limChar": 4611,
|
||||
"containerName": "",
|
||||
"containerKind": ""
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"kind": "var",
|
||||
"kindModifiers": "declare",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3134,
|
||||
"limChar": 3156,
|
||||
"containerName": "Bar4",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "f",
|
||||
"kind": "function",
|
||||
"kindModifiers": "declare",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3179,
|
||||
"limChar": 3206,
|
||||
"containerName": "Bar4",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "IFoo",
|
||||
"kind": "interface",
|
||||
"kindModifiers": "",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3226,
|
||||
"limChar": 3506,
|
||||
"containerName": "Bar4",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "()",
|
||||
"kind": "call",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3260,
|
||||
"limChar": 3278,
|
||||
"containerName": "Bar4.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "new()",
|
||||
"kind": "construct",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3307,
|
||||
"limChar": 3320,
|
||||
"containerName": "Bar4.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "[]",
|
||||
"kind": "index",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3359,
|
||||
"limChar": 3379,
|
||||
"containerName": "Bar4.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "foo",
|
||||
"kind": "property",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3407,
|
||||
"limChar": 3419,
|
||||
"containerName": "Bar4.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "bar",
|
||||
"kind": "method",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3458,
|
||||
"limChar": 3470,
|
||||
"containerName": "Bar4.IFoo",
|
||||
"containerKind": "interface"
|
||||
},
|
||||
{
|
||||
"name": "Blah",
|
||||
"kind": "enum",
|
||||
"kindModifiers": "declare",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3514,
|
||||
"limChar": 3594,
|
||||
"containerName": "Bar4",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "foo",
|
||||
"kind": "property",
|
||||
"kindModifiers": "export",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3543,
|
||||
"limChar": 3550,
|
||||
"containerName": "Bar4.Blah",
|
||||
"containerKind": "enum"
|
||||
},
|
||||
{
|
||||
"name": "Bar",
|
||||
"kind": "class",
|
||||
"kindModifiers": "declare",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3602,
|
||||
"limChar": 4608,
|
||||
"containerName": "Bar4",
|
||||
"containerKind": "module"
|
||||
},
|
||||
{
|
||||
"name": "constructor",
|
||||
"kind": "constructor",
|
||||
"kindModifiers": "declare",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3631,
|
||||
"limChar": 3665,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barVar",
|
||||
"kind": "property",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3644,
|
||||
"limChar": 3663,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barProp",
|
||||
"kind": "property",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3707,
|
||||
"limChar": 3730,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barPropFunc",
|
||||
"kind": "method",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3782,
|
||||
"limChar": 3809,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1",
|
||||
"kind": "getter",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3857,
|
||||
"limChar": 3882,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1",
|
||||
"kind": "setter",
|
||||
"kindModifiers": "public",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 3932,
|
||||
"limChar": 3951,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barPropP",
|
||||
"kind": "property",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 4009,
|
||||
"limChar": 4034,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "barPropFuncP",
|
||||
"kind": "method",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 4084,
|
||||
"limChar": 4113,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1P",
|
||||
"kind": "getter",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 4159,
|
||||
"limChar": 4186,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "prop1P",
|
||||
"kind": "setter",
|
||||
"kindModifiers": "private",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 4234,
|
||||
"limChar": 4255,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "foo",
|
||||
"kind": "property",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 4311,
|
||||
"limChar": 4330,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "bar",
|
||||
"kind": "method",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 4386,
|
||||
"limChar": 4405,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "foo2",
|
||||
"kind": "getter",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 4461,
|
||||
"limChar": 4485,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
},
|
||||
{
|
||||
"name": "foo2",
|
||||
"kind": "setter",
|
||||
"kindModifiers": "public,static",
|
||||
"matchKind": "exact",
|
||||
"unitIndex": 1,
|
||||
"minChar": 4536,
|
||||
"limChar": 4554,
|
||||
"containerName": "Bar4.Bar",
|
||||
"containerKind": "class"
|
||||
}
|
||||
];
|
||||
var baselineText = JSON.stringify(baseline, null, " ");
|
||||
var resultText = JSON.stringify(result, null, " ");
|
||||
assert.notNull(result);
|
||||
assert.equal(79, result.length);
|
||||
assert.equal(baselineText, resultText);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,493 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
describe('getSignatureAtPosition', function () {
|
||||
var mytypescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
mytypescriptLS.addDefaultLibrary();
|
||||
|
||||
var fileName = 'tests/cases/unittests/services/testCode/getSignatureAtPositionTest.ts';
|
||||
var fileName2 = 'tests/cases/unittests/services/testCode/getSignatureAtPositionTestEOF.ts';
|
||||
|
||||
mytypescriptLS.addFile(fileName);
|
||||
mytypescriptLS.addFile(fileName2);
|
||||
|
||||
var myls = mytypescriptLS.getLanguageService();
|
||||
|
||||
function singatureAtPos(line: number, col: number): Services.SignatureInfo {
|
||||
return myls.languageService.getSignatureAtPosition(fileName, mytypescriptLS.lineColToPosition(fileName, line, col));
|
||||
}
|
||||
|
||||
function singatureAtPos2(line: number, col: number): Services.SignatureInfo {
|
||||
return myls.languageService.getSignatureAtPosition(fileName2, mytypescriptLS.lineColToPosition(fileName2, line, col));
|
||||
}
|
||||
|
||||
describe('Get signatures from position', function () {
|
||||
it("Comment", function () {
|
||||
var result = singatureAtPos(1, 4);
|
||||
assert.equal(null, result);
|
||||
});
|
||||
|
||||
it("No Context", function () {
|
||||
var result = singatureAtPos(2, 1);
|
||||
assert.equal(null, result);
|
||||
});
|
||||
|
||||
it("Construct expression", function () {
|
||||
var result = singatureAtPos(3, 23);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("sampleCls", formal.name);
|
||||
assert.equal(1, formal.signatureGroup.length);
|
||||
assert.equal(2, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("str", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("num", formal.signatureGroup[0].parameters[1].name);
|
||||
assert.equal("number", formal.signatureGroup[0].parameters[1].type);
|
||||
assert.equal("sampleCls", formal.signatureGroup[0].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 3, 22), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 3, 29), actual.closeParenLimChar);
|
||||
assert.equal(2, actual.parameters.length);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 3, 23), actual.parameters[0].minChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 3, 25), actual.parameters[0].limChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 3, 27), actual.parameters[1].minChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 3, 28), actual.parameters[1].limChar);
|
||||
|
||||
assert.equal(0, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Wrong context", function () {
|
||||
var result = singatureAtPos(4, 11);
|
||||
assert.equal(null, result);
|
||||
});
|
||||
|
||||
it("Call expression", function () {
|
||||
var result = singatureAtPos(7, 8);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("fnTest", formal.name);
|
||||
assert.equal(1, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(2, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("str", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("num", formal.signatureGroup[0].parameters[1].name);
|
||||
assert.equal("number", formal.signatureGroup[0].parameters[1].type);
|
||||
assert.equal("void", formal.signatureGroup[0].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 7, 7), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 7, 9), actual.closeParenLimChar);
|
||||
assert.equal(0, actual.parameters.length);
|
||||
|
||||
assert.equal(-1, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Overloaded function", function () {
|
||||
var result = singatureAtPos(11, 12);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("fnOverload", formal.name);
|
||||
assert.equal(2, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(0, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("any", formal.signatureGroup[0].returnType);
|
||||
|
||||
assert.equal(1, formal.signatureGroup[1].parameters.length);
|
||||
assert.equal("test", formal.signatureGroup[1].parameters[0].name);
|
||||
assert.equal("string", formal.signatureGroup[1].parameters[0].type);
|
||||
assert.equal("any", formal.signatureGroup[1].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 11, 11), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 11, 13), actual.closeParenLimChar);
|
||||
assert.equal(0, actual.parameters.length);
|
||||
|
||||
assert.equal(0, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Overloaded function 2", function () {
|
||||
var result = singatureAtPos(12, 12);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("fnOverload", formal.name);
|
||||
assert.equal(2, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(0, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("any", formal.signatureGroup[0].returnType);
|
||||
|
||||
assert.equal(1, formal.signatureGroup[1].parameters.length);
|
||||
assert.equal("test", formal.signatureGroup[1].parameters[0].name);
|
||||
assert.equal("string", formal.signatureGroup[1].parameters[0].type);
|
||||
assert.equal("any", formal.signatureGroup[1].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 12, 11), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 12, 15), actual.closeParenLimChar);
|
||||
assert.equal(1, actual.parameters.length);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 12, 12), actual.parameters[0].minChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 12, 14), actual.parameters[0].limChar);
|
||||
|
||||
assert.equal(1, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Overloaded construct - before open paren", function () {
|
||||
var result = singatureAtPos(15, 24);
|
||||
assert.equal(null, result);
|
||||
});
|
||||
|
||||
it("Overloaded construct - after close paren", function () {
|
||||
var result = singatureAtPos(15, 26);
|
||||
assert.equal(null, result);
|
||||
});
|
||||
|
||||
it("Overloaded construct", function () {
|
||||
var result = singatureAtPos(15, 25);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("clsOverload", formal.name);
|
||||
assert.equal(2, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(0, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("clsOverload", formal.signatureGroup[0].returnType);
|
||||
|
||||
assert.equal(1, formal.signatureGroup[1].parameters.length);
|
||||
assert.equal("test", formal.signatureGroup[1].parameters[0].name);
|
||||
assert.equal("string", formal.signatureGroup[1].parameters[0].type);
|
||||
assert.equal("clsOverload", formal.signatureGroup[1].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 15, 24), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 15, 26), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(0, actual.parameters.length);
|
||||
|
||||
assert.equal(0, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Overloaded construct: call second overload", function () {
|
||||
var result = singatureAtPos(16, 25);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("clsOverload", formal.name);
|
||||
assert.equal(2, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(0, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("clsOverload", formal.signatureGroup[0].returnType);
|
||||
|
||||
assert.equal(1, formal.signatureGroup[1].parameters.length);
|
||||
assert.equal("test", formal.signatureGroup[1].parameters[0].name);
|
||||
assert.equal("string", formal.signatureGroup[1].parameters[0].type);
|
||||
assert.equal("clsOverload", formal.signatureGroup[1].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 16, 24), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 16, 28), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(1, actual.parameters.length);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 16, 25), actual.parameters[0].minChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 16, 27), actual.parameters[0].limChar);
|
||||
|
||||
assert.equal(1, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Incomplete call (with statements after the incomple call)", function () {
|
||||
var result = singatureAtPos(31, 14);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("f1", formal.name);
|
||||
assert.equal(1, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(0, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("void", formal.signatureGroup[0].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 31, 13), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 34, 10), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(1, actual.parameters.length);
|
||||
|
||||
assert.equal(-1, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Incomplete call 2 (inside another incomplete call)", function () {
|
||||
var result = singatureAtPos(32, 14);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("f2", formal.name);
|
||||
assert.equal(1, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(1, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("n", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("number", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("void", formal.signatureGroup[0].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 32, 13), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 34, 10), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(2, actual.parameters.length);
|
||||
|
||||
assert.equal(-1, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Incomplete call 3 (close curly after incomplete call)", function () {
|
||||
var result = singatureAtPos(33, 14);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("f3", formal.name);
|
||||
assert.equal(1, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(2, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("n", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("number", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("s", formal.signatureGroup[0].parameters[1].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[1].type);
|
||||
assert.equal("void", formal.signatureGroup[0].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 33, 13), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 34, 10), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(2, actual.parameters.length);
|
||||
|
||||
assert.equal(0, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Calling off a parameter function", function () {
|
||||
var result = singatureAtPos(44, 22);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("callback", formal.name);
|
||||
assert.equal(1, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(2, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("a", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("number", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("b", formal.signatureGroup[0].parameters[1].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[1].type);
|
||||
assert.equal("string", formal.signatureGroup[0].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 44, 21), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 44, 28), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(2, actual.parameters.length);
|
||||
|
||||
assert.equal(0, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Calling off a returned function", function () {
|
||||
var result = singatureAtPos(53, 15);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("", formal.name);
|
||||
assert.equal(1, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(2, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("a", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("number", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("b", formal.signatureGroup[0].parameters[1].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[1].type);
|
||||
assert.equal("string", formal.signatureGroup[0].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 53, 14), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 53, 21), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(2, actual.parameters.length);
|
||||
|
||||
assert.equal(0, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Calling off a object literal property function", function () {
|
||||
var result = singatureAtPos(58, 9);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("f", formal.name);
|
||||
assert.equal(1, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(2, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("a", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("number", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("b", formal.signatureGroup[0].parameters[1].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[1].type);
|
||||
assert.equal("string", formal.signatureGroup[0].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 58, 8), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 58, 15), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(2, actual.parameters.length);
|
||||
|
||||
assert.equal(0, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Calling off super constructor", function() {
|
||||
var result = singatureAtPos(69, 19);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("base", formal.name);
|
||||
assert.equal(2, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(1, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("s", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("base", formal.signatureGroup[0].returnType);
|
||||
|
||||
assert.equal(1, formal.signatureGroup[1].parameters.length);
|
||||
assert.equal("n", formal.signatureGroup[1].parameters[0].name);
|
||||
assert.equal("number", formal.signatureGroup[1].parameters[0].type);
|
||||
assert.equal("base", formal.signatureGroup[1].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 69, 18), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 69, 22), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(1, actual.parameters.length);
|
||||
assert.equal(0, result.activeFormal);
|
||||
});
|
||||
|
||||
it("Calling off super of super constructor", function() {
|
||||
var result = singatureAtPos(79, 19);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("B2", formal.name);
|
||||
assert.equal(2, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(1, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("s", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("B2", formal.signatureGroup[0].returnType);
|
||||
|
||||
assert.equal(1, formal.signatureGroup[1].parameters.length);
|
||||
assert.equal("n", formal.signatureGroup[1].parameters[0].name);
|
||||
assert.equal("number", formal.signatureGroup[1].parameters[0].type);
|
||||
assert.equal("B2", formal.signatureGroup[1].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 79, 18), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName, 79, 22), actual.closeParenLimChar);
|
||||
|
||||
assert.equal(1, actual.parameters.length);
|
||||
assert.equal(0, result.activeFormal);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Get signatures at EOF', function () {
|
||||
it("Function signature at EOF", function () {
|
||||
var result = singatureAtPos2(5, 5);
|
||||
assert.notNull(result);
|
||||
|
||||
var formal = result.formal;
|
||||
assert.notNull(formal);
|
||||
|
||||
assert.equal(false, formal.isNew);
|
||||
assert.equal("Foo", formal.name);
|
||||
assert.equal(1, formal.signatureGroup.length);
|
||||
|
||||
assert.equal(2, formal.signatureGroup[0].parameters.length);
|
||||
assert.equal("arg1", formal.signatureGroup[0].parameters[0].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[0].type);
|
||||
assert.equal("arg2", formal.signatureGroup[0].parameters[1].name);
|
||||
assert.equal("string", formal.signatureGroup[0].parameters[1].type);
|
||||
assert.equal("void", formal.signatureGroup[0].returnType);
|
||||
|
||||
var actual = result.actual;
|
||||
assert.notNull(actual);
|
||||
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName2, 5, 4), actual.openParenMinChar);
|
||||
assert.equal(mytypescriptLS.lineColToPosition(fileName2, 5, 5), actual.closeParenLimChar);
|
||||
assert.equal(0, actual.currentParameter);
|
||||
|
||||
assert.equal(1, actual.parameters.length);
|
||||
|
||||
assert.equal(-1, result.activeFormal);
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,103 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
module IncrementalParserTest {
|
||||
export class State {
|
||||
private fileName: string;
|
||||
private typescriptLS: Harness.TypeScriptLS;
|
||||
private ls: Services.ILanguageServiceShim;
|
||||
private logger: TypeScript.BufferedLogger;
|
||||
private parser: TypeScript.IncrementalParser;
|
||||
private script: TypeScript.Script;
|
||||
private newSourceText: TypeScript.IScriptSnapshot;
|
||||
|
||||
public applyEditInRange(fileName, startLine, startCol, endLine, endCol, newText) {
|
||||
this.initFileName(fileName);
|
||||
|
||||
var result = this.applyIncrementalParser(startLine, startCol, endLine, endCol, newText);
|
||||
if (result === null) {
|
||||
var sep = "\r\n | ";
|
||||
throw new Error("Incremental parser should not have bailed out:" + sep + this.logger.logContents.join(sep));
|
||||
}
|
||||
|
||||
this.assertTreesAreEqual(result);
|
||||
}
|
||||
|
||||
public assertBailout(fileName, startLine, startCol, endLine, endCol, newText) {
|
||||
this.initFileName(fileName);
|
||||
var result = this.applyIncrementalParser(startLine, startCol, endLine, endCol, newText);
|
||||
assert.is(result == null, "Incremental parser should have bailed out");
|
||||
}
|
||||
|
||||
private applyIncrementalParser(startLine, startCol, endLine, endCol, newText): TypeScript.UpdateUnitResult {
|
||||
var fileName = this.fileName;
|
||||
var offset1 = this.typescriptLS.lineColToPosition(fileName, startLine, startCol);
|
||||
var offset2 = this.typescriptLS.lineColToPosition(fileName, endLine, endCol);
|
||||
var textEdit = new Services.TextEdit(offset1, offset2, newText);
|
||||
var newContent = this.typescriptLS.applyEdits(this.typescriptLS.getScriptContent(1), [textEdit]);
|
||||
this.newSourceText = new TypeScript.StringScriptSnapshot(newContent);
|
||||
|
||||
var result = this.parser.attemptIncrementalUpdateUnit(this.script, fileName, this.newSourceText,
|
||||
new TypeScript.TextChangeRange(TypeScript.TextSpan.fromBounds(offset1, offset2), newText.length));
|
||||
return result;
|
||||
}
|
||||
|
||||
private initFileName(fileName: string) {
|
||||
this.fileName = fileName;
|
||||
this.typescriptLS = this.createLS(fileName);
|
||||
this.ls = this.typescriptLS.getLanguageService();
|
||||
this.logger = new TypeScript.BufferedLogger();
|
||||
this.parser = new TypeScript.IncrementalParser(this.logger);
|
||||
this.script = this.ls.languageService.getScriptAST(fileName);
|
||||
assert.notNull(this.script);
|
||||
}
|
||||
|
||||
private assertTreesAreEqual(result: TypeScript.UpdateUnitResult) {
|
||||
assert.notNull(result);
|
||||
this.parser.mergeTrees(result);
|
||||
|
||||
var finalScript = result.script1;
|
||||
var nonIncrementalScript = this.typescriptLS.parseSourceText(this.fileName, this.newSourceText);
|
||||
|
||||
var logger1 = new TypeScript.BufferedLogger();
|
||||
var astLogger1 = new TypeScript.AstLogger(logger1);
|
||||
astLogger1.logScript(finalScript);
|
||||
|
||||
var logger2 = new TypeScript.BufferedLogger();
|
||||
var astLogger2 = new TypeScript.AstLogger(logger2);
|
||||
astLogger2.logScript(nonIncrementalScript);
|
||||
|
||||
var log1 = logger1.logContents.join("\r\n");
|
||||
var log2 = logger2.logContents.join("\r\n");
|
||||
|
||||
assert.noDiff(log1, log2);
|
||||
}
|
||||
|
||||
private createLS(fileName: string): Harness.TypeScriptLS {
|
||||
var typescriptLS = new Harness.TypeScriptLS();
|
||||
typescriptLS.addDefaultLibrary();
|
||||
typescriptLS.addFile(fileName);
|
||||
return typescriptLS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
describe('incrementalParser tests', function () {
|
||||
var fileName = 'tests/cases/unittests/services/testCode/incrementalParser.ts';
|
||||
var fileName2 = 'tests/cases/unittests/services/testCode/incrementalParser2.ts';
|
||||
|
||||
|
||||
describe('Incremental edits to unit', function () {
|
||||
it("Simple delete inside a function should be incremental", function () {
|
||||
new IncrementalParserTest.State().applyEditInRange(fileName, 10, 5, 10, 39, "");
|
||||
});
|
||||
it("Simple insert inside a function should be incremental", function () {
|
||||
new IncrementalParserTest.State().applyEditInRange(fileName, 10, 5, 10, 6, "test-test-test");
|
||||
});
|
||||
});
|
||||
|
||||
describe('Bail out tests', function () {
|
||||
it("Adding semicolon at end of interface function should force bailout", function () {
|
||||
new IncrementalParserTest.State().assertBailout(fileName2, 4, 16, 4, 16, ";");
|
||||
});
|
||||
});
|
||||
});
|
||||
@ -1,82 +0,0 @@
|
||||
///<reference path='_project.ts'/>
|
||||
|
||||
describe('overridesCollector', function () {
|
||||
var typescriptLS = new Harness.TypeScriptLS();
|
||||
|
||||
typescriptLS.addDefaultLibrary();
|
||||
|
||||
var fileName = 'tests/cases/unittests/services/testCode/overridesCollector.ts';
|
||||
|
||||
typescriptLS.addFile(fileName);
|
||||
|
||||
var ls = typescriptLS.getLanguageService();
|
||||
|
||||
|
||||
function getOverridesAtPos(fileName:string, line: number, col: number): Services.SymbolSet {
|
||||
var pos = typescriptLS.lineColToPosition(fileName, line, col);
|
||||
|
||||
var script = ls.languageService.getScriptAST(fileName);
|
||||
assert.notNull(script);
|
||||
|
||||
var sym = ls.languageService.getSymbolAtPosition(script, pos);
|
||||
assert.notNull(sym);
|
||||
|
||||
var symbolTree = ls.languageService.getSymbolTree();
|
||||
assert.notNull(symbolTree);
|
||||
|
||||
var collector = new Services.OverridesCollector(symbolTree);
|
||||
return collector.findMemberOverrides(sym);
|
||||
}
|
||||
|
||||
describe('Overrides Collector Simple Tests', function () {
|
||||
it("Find method override from base class", function() {
|
||||
var result = getOverridesAtPos(fileName, 3, 17);
|
||||
assert.notNull(result);
|
||||
assert.equal(2, result.getAll().length);
|
||||
});
|
||||
|
||||
it("Find method override from derived class", function() {
|
||||
var result = getOverridesAtPos(fileName, 7, 17);
|
||||
assert.notNull(result);
|
||||
assert.equal(2, result.getAll().length);
|
||||
});
|
||||
|
||||
it("Find method override from derived interface", function() {
|
||||
var result = getOverridesAtPos(fileName, 17, 10);
|
||||
assert.notNull(result);
|
||||
assert.equal(2, result.getAll().length);
|
||||
});
|
||||
|
||||
it("Find method override from base interface", function() {
|
||||
var result = getOverridesAtPos(fileName, 14, 10);
|
||||
assert.notNull(result);
|
||||
assert.equal(2, result.getAll().length);
|
||||
});
|
||||
|
||||
it("Find interface method override from derived class", function() {
|
||||
var result = getOverridesAtPos(fileName, 26, 17);
|
||||
assert.notNull(result);
|
||||
assert.equal(2, result.getAll().length);
|
||||
});
|
||||
|
||||
it("Find interface method override from base interface", function() {
|
||||
var result = getOverridesAtPos(fileName, 23, 11);
|
||||
assert.notNull(result);
|
||||
assert.equal(2, result.getAll().length);
|
||||
});
|
||||
});
|
||||
describe('Overrides Collector Complex Tests', function () {
|
||||
it("Find field override in deep hierarchy", function() {
|
||||
var result = getOverridesAtPos(fileName, 42, 12);
|
||||
assert.notNull(result);
|
||||
assert.equal(5, result.getAll().length);
|
||||
});
|
||||
|
||||
it("Find method override in deep hierarchy", function() {
|
||||
var result = getOverridesAtPos(fileName, 46, 13);
|
||||
assert.notNull(result);
|
||||
assert.equal(3, result.getAll().length);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
module Foo {
|
||||
class Bar {
|
||||
private f() {
|
||||
var a:any[] = [[1, 2], [3, 4], 5];
|
||||
return ((1 + 1));
|
||||
}
|
||||
|
||||
private f2() {
|
||||
if(true) { }{ };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// { }
|
||||
// ( )
|
||||
// [ ]
|
||||
// < >
|
||||
|
||||
class TemplateTest <T1, T2 extends Array> {
|
||||
public foo(a, b) {
|
||||
return <any> a;
|
||||
}
|
||||
public bar(a, b) {
|
||||
return a < b || a > b;
|
||||
}
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
module Foo { var testing = ""; test }
|
||||
|
||||
class C1 {
|
||||
public pubMeth() {this.} // test on 'this.'
|
||||
private privMeth() {}
|
||||
public pubProp = 0;
|
||||
private privProp = 0;
|
||||
}
|
||||
|
||||
var f = new C1();
|
||||
f. // test on F.
|
||||
module M {
|
||||
export class C { public pub = 0; private priv = 1; }
|
||||
export var V = 0;
|
||||
}
|
||||
|
||||
|
||||
var c = new M.C();
|
||||
|
||||
c. // test on c.
|
||||
|
||||
//Test for comment
|
||||
//c.
|
||||
@ -1,5 +0,0 @@
|
||||
module Test10
|
||||
{
|
||||
var x: string[] = [];
|
||||
x.forEach(function(y) { y. });
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
module Foo {
|
||||
export class Bar {
|
||||
|
||||
}
|
||||
|
||||
|
||||
export module Blah {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
var x:Foo.
|
||||
@ -1,2 +0,0 @@
|
||||
//
|
||||
var
|
||||
@ -1,4 +0,0 @@
|
||||
class
|
||||
{
|
||||
|
||||
}
|
||||
@ -1,3 +0,0 @@
|
||||
module
|
||||
{
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
interface
|
||||
@ -1 +0,0 @@
|
||||
function
|
||||
@ -1,10 +0,0 @@
|
||||
module Bar
|
||||
{
|
||||
export class Bleah {
|
||||
}
|
||||
export class Foo extends Bleah {
|
||||
}
|
||||
}
|
||||
|
||||
function Blah(x:Bar.Bleah) {
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
module Test1 {
|
||||
class Person {
|
||||
children: string[];
|
||||
constructor (public name:string, children:string[]) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
module BugFixes {
|
||||
enum Foo {
|
||||
bar,
|
||||
baz
|
||||
}
|
||||
|
||||
var f: Foo = Foo./*here*/;
|
||||
|
||||
import foo f = Foo;
|
||||
foo./*here*/;
|
||||
}
|
||||
|
||||
module BugFix2 {
|
||||
interface iFace { (event: string); }
|
||||
var foo: iFace = function (elem) { /*here*/ }
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
module ObjectLiterals {
|
||||
interface MyPoint {
|
||||
x1: number;
|
||||
y1: number;
|
||||
}
|
||||
|
||||
var p1: MyPoint = {
|
||||
/*here*/
|
||||
};
|
||||
|
||||
var p2: MyPoint = {
|
||||
x1: 5,
|
||||
/*here*/
|
||||
};
|
||||
|
||||
var p3: MyPoint = {
|
||||
x1 /*here*/
|
||||
};
|
||||
|
||||
var p4: MyPoint = {
|
||||
x1: 5,
|
||||
y1 /*here*/ : 6
|
||||
};
|
||||
|
||||
// Negative cases (global completion)
|
||||
var n4: MyPoint = {
|
||||
x1: /*here*/
|
||||
};
|
||||
|
||||
var n2: MyPoint = {
|
||||
x1: /*here*/,
|
||||
};
|
||||
}
|
||||
@ -1,91 +0,0 @@
|
||||
///<reference path='getDefinitionsAtPosition2.ts' />
|
||||
var locVar;
|
||||
function locFn() { }
|
||||
class locCls { }
|
||||
interface locInt{ }
|
||||
module locMod{ export var foo = 1;}
|
||||
|
||||
locVar = 1;
|
||||
locFn();
|
||||
var foo = new locCls();
|
||||
class fooCls implements locInt { }
|
||||
var fooVar = locMod.foo;
|
||||
|
||||
remVar = 1;
|
||||
remFn();
|
||||
var remfoo = new remCls();
|
||||
class remfooCls implements remInt { }
|
||||
var remfooVar = remMod.foo;
|
||||
|
||||
rem2Var = 1;
|
||||
rem2Fn();
|
||||
var rem2foo = new rem2Cls();
|
||||
class rem2fooCls implements rem2Int { }
|
||||
var rem2fooVar = rem2Mod.foo;
|
||||
|
||||
var shdVar = "foo";
|
||||
module shdModule {
|
||||
var shdVar;
|
||||
shdVar = 1;
|
||||
}
|
||||
|
||||
function fnOverload( );
|
||||
function fnOverload(foo: string);
|
||||
function fnOverload(foo: any) { };
|
||||
|
||||
fnOverload();
|
||||
fnOverload("test");
|
||||
|
||||
class clsOverload {
|
||||
constructor ();
|
||||
constructor (foo: string);
|
||||
constructor (foo: any) { }
|
||||
};
|
||||
|
||||
var clsOverloadVar = new clsOverload();
|
||||
clsOverloadVar = new clsOverload("test");
|
||||
|
||||
class clsInOverload {
|
||||
static fnOverload( );
|
||||
static fnOverload(foo: string);
|
||||
static fnOverload(foo: any) { };
|
||||
public fnOverload():any;
|
||||
public fnOverload(foo: string);
|
||||
public fnOverload(foo: any) { return "foo" };
|
||||
public fnOverload1():any;
|
||||
public fnOverload1(foo: string);
|
||||
public fnOverload1(foo: any) { return "foo" };
|
||||
|
||||
constructor () { }
|
||||
}
|
||||
|
||||
clsInOverload.fnOverload();
|
||||
clsInOverload.fnOverload("test");
|
||||
|
||||
var clsInOverloadVar = new clsInOverload();
|
||||
var foo3 = clsInOverloadVar.fnOverload();
|
||||
foo3 = clsInOverloadVar.fnOverload("test");
|
||||
|
||||
function fnInOverload() {
|
||||
static fnOverload():any;
|
||||
static fnOverload(foo: string);
|
||||
static fnOverload(foo: any){ return "foo" };
|
||||
}
|
||||
|
||||
fnInOverload.fnOverload();
|
||||
fnInOverload.fnOverload("test");
|
||||
|
||||
interface sInt {
|
||||
sVar: number;
|
||||
sFn: () => void;
|
||||
}
|
||||
|
||||
class iClass implements sInt {
|
||||
public sVar = 1;
|
||||
public sFn() {
|
||||
}
|
||||
}
|
||||
|
||||
declare var ambientVar;
|
||||
|
||||
ambientVar = 1;
|
||||
@ -1,6 +0,0 @@
|
||||
///<reference path='getDefinitionsAtPosition3.ts' />
|
||||
var remVar;
|
||||
function remFn() { }
|
||||
class remCls { }
|
||||
interface remInt{ }
|
||||
module remMod{ export var foo;}
|
||||
@ -1,5 +0,0 @@
|
||||
var rem2Var;
|
||||
function rem2Fn() { }
|
||||
class rem2Cls { }
|
||||
interface rem2Int{ }
|
||||
module rem2Mod{ export var foo; }
|
||||
@ -1,5 +0,0 @@
|
||||
module A {
|
||||
export interface IA {
|
||||
y: string;
|
||||
}
|
||||
}
|
||||
@ -1,9 +0,0 @@
|
||||
/// <reference path="getDefinitionsAtPositionPartialInterface1.ts"/>
|
||||
|
||||
module A {
|
||||
export interface IA {
|
||||
x: number;
|
||||
}
|
||||
|
||||
var x: IA;
|
||||
}
|
||||
@ -1,57 +0,0 @@
|
||||
module SimpleClassTest {
|
||||
class Foo {
|
||||
public foo(): void {
|
||||
}
|
||||
}
|
||||
class Bar extends Foo {
|
||||
public foo(): void {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module SimpleInterfaceTest {
|
||||
interface IFoo {
|
||||
foo(): void;
|
||||
}
|
||||
interface IBar extends IFoo {
|
||||
foo(): void;
|
||||
}
|
||||
}
|
||||
|
||||
module SimpleClassInterfaceTest {
|
||||
interface IFoo {
|
||||
foo(): void;
|
||||
}
|
||||
class Bar implements IFoo {
|
||||
public foo(): void {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module Test {
|
||||
interface IBase {
|
||||
field: string;
|
||||
method(): void;
|
||||
}
|
||||
|
||||
interface IBlah extends IBase {
|
||||
field: string;
|
||||
}
|
||||
|
||||
interface IBlah2 extends IBlah {
|
||||
field: string;
|
||||
}
|
||||
|
||||
interface IDerived extends IBlah2 {
|
||||
method(): void;
|
||||
}
|
||||
|
||||
class Bar implements IDerived {
|
||||
public field: string;
|
||||
public method(): void { }
|
||||
}
|
||||
|
||||
class BarBlah extends Bar {
|
||||
public field: string;
|
||||
}
|
||||
}
|
||||
@ -1,117 +0,0 @@
|
||||
///<reference path='getReferencesAtPositionTest2.ts' />
|
||||
// Comment Refence Test: globalVar
|
||||
var globalVar: number = 2;
|
||||
|
||||
class fooCls {
|
||||
static clsSVar = 1;
|
||||
//Declare
|
||||
clsVar = 1;
|
||||
|
||||
constructor (public clsParam: number) {
|
||||
//Increments
|
||||
globalVar++;
|
||||
this.clsVar++;
|
||||
fooCls.clsSVar++;
|
||||
this.clsParam++;
|
||||
modTest.modVar++;
|
||||
}
|
||||
}
|
||||
|
||||
function foo(x: number) {
|
||||
//Declare
|
||||
var fnVar = 1;
|
||||
|
||||
//Increments
|
||||
fooCls.clsSVar++;
|
||||
globalVar++;
|
||||
modTest.modVar++;
|
||||
fnVar++;
|
||||
|
||||
//Return
|
||||
return x++;
|
||||
}
|
||||
|
||||
module modTest {
|
||||
//Declare
|
||||
export var modVar:number;
|
||||
|
||||
//Increments
|
||||
globalVar++;
|
||||
fooCls.clsSVar++;
|
||||
modVar++;
|
||||
|
||||
class testCls {
|
||||
static boo = foo;
|
||||
}
|
||||
|
||||
function testFn(){
|
||||
static boo = foo;
|
||||
|
||||
//Increments
|
||||
globalVar++;
|
||||
fooCls.clsSVar++;
|
||||
modVar++;
|
||||
}
|
||||
|
||||
module testMod {
|
||||
var boo = foo;
|
||||
}
|
||||
}
|
||||
|
||||
//Type test
|
||||
var clsTest: fooCls;
|
||||
|
||||
//Arguments
|
||||
clsTest = new fooCls(globalVar);
|
||||
foo(globalVar);
|
||||
|
||||
//Increments
|
||||
fooCls.clsSVar++;
|
||||
modTest.modVar++;
|
||||
globalVar = globalVar + globalVar;
|
||||
|
||||
//ETC - Other cases
|
||||
globalVar = 3;
|
||||
foo = foo + 1;
|
||||
err = err++;
|
||||
|
||||
//Shadowed fn Parameter
|
||||
function shdw(globalVar: number) {
|
||||
//Increments
|
||||
globalVar++;
|
||||
return globalVar;
|
||||
}
|
||||
|
||||
//Remotes
|
||||
//Type test
|
||||
var remoteclsTest: remotefooCls;
|
||||
|
||||
//Arguments
|
||||
remoteclsTest = new remotefooCls(remoteglobalVar);
|
||||
remotefoo(remoteglobalVar);
|
||||
|
||||
//Increments
|
||||
remotefooCls.remoteclsSVar++;
|
||||
remotemodTest.remotemodVar++;
|
||||
remoteglobalVar = remoteglobalVar + remoteglobalVar;
|
||||
|
||||
//ETC - Other cases
|
||||
remoteglobalVar = 3;
|
||||
|
||||
//Find References misses method param
|
||||
var
|
||||
|
||||
|
||||
|
||||
array = ["f", "o", "o"];
|
||||
|
||||
array.forEach(
|
||||
|
||||
|
||||
function(str) {
|
||||
|
||||
|
||||
|
||||
return str + " ";
|
||||
|
||||
});
|
||||
@ -1,59 +0,0 @@
|
||||
var remoteglobalVar: number = 2;
|
||||
|
||||
class remotefooCls {
|
||||
//Declare
|
||||
remoteclsVar = 1;
|
||||
static remoteclsSVar = 1;
|
||||
|
||||
constructor (public remoteclsParam: number) {
|
||||
//Increments
|
||||
remoteglobalVar++;
|
||||
this.remoteclsVar++;
|
||||
remotefooCls.remoteclsSVar++;
|
||||
this.remoteclsParam++;
|
||||
remotemodTest.remotemodVar++;
|
||||
}
|
||||
}
|
||||
|
||||
function remotefoo(remotex: number) {
|
||||
//Declare
|
||||
var remotefnVar = 1;
|
||||
|
||||
//Increments
|
||||
remotefooCls.remoteclsSVar++;
|
||||
remoteglobalVar++;
|
||||
remotemodTest.remotemodVar++;
|
||||
remotefnVar++;
|
||||
|
||||
//Return
|
||||
return remotex++;
|
||||
}
|
||||
|
||||
module remotemodTest {
|
||||
//Declare
|
||||
export var remotemodVar:number;
|
||||
|
||||
//Increments
|
||||
remoteglobalVar++;
|
||||
remotefooCls.remoteclsSVar++;
|
||||
remotemodVar++;
|
||||
|
||||
class remotetestCls {
|
||||
static remoteboo = remotefoo;
|
||||
}
|
||||
|
||||
function remotetestFn(){
|
||||
static remoteboo = remotefoo;
|
||||
|
||||
//Increments
|
||||
remoteglobalVar++;
|
||||
remotefooCls.remoteclsSVar++;
|
||||
remotemodVar++;
|
||||
}
|
||||
|
||||
module remotetestMod {
|
||||
var remoteboo = remotefoo;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,70 +0,0 @@
|
||||
module FindRef3 {
|
||||
module SimpleClassTest {
|
||||
export class Foo {
|
||||
public foo(): void {
|
||||
}
|
||||
}
|
||||
export class Bar extends Foo {
|
||||
public foo(): void {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module SimpleInterfaceTest {
|
||||
export interface IFoo {
|
||||
foo(): void;
|
||||
}
|
||||
export interface IBar extends IFoo {
|
||||
foo(): void;
|
||||
}
|
||||
}
|
||||
|
||||
module SimpleClassInterfaceTest {
|
||||
export interface IFoo {
|
||||
foo(): void;
|
||||
}
|
||||
export class Bar implements IFoo {
|
||||
public foo(): void {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module Test {
|
||||
export interface IBase {
|
||||
field: string;
|
||||
method(): void;
|
||||
}
|
||||
|
||||
export interface IBlah extends IBase {
|
||||
field: string;
|
||||
}
|
||||
|
||||
export interface IBlah2 extends IBlah {
|
||||
field: string;
|
||||
}
|
||||
|
||||
export interface IDerived extends IBlah2 {
|
||||
method(): void;
|
||||
}
|
||||
|
||||
export class Bar implements IDerived {
|
||||
public field: string;
|
||||
public method(): void { }
|
||||
}
|
||||
|
||||
export class BarBlah extends Bar {
|
||||
public field: string;
|
||||
}
|
||||
}
|
||||
|
||||
function test() {
|
||||
var x = new SimpleClassTest.Bar();
|
||||
x.foo();
|
||||
|
||||
var y: SimpleInterfaceTest.IBar = null;
|
||||
y.foo();
|
||||
|
||||
var z = new Test.BarBlah();
|
||||
z.field = "";
|
||||
}
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
module FindRef4 {
|
||||
module MixedStaticsClassTest {
|
||||
export class Foo {
|
||||
bar: Foo;
|
||||
static bar: Foo;
|
||||
|
||||
public foo(): void {
|
||||
}
|
||||
public static foo(): void {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function test() {
|
||||
// instance function
|
||||
var x = new MixedStaticsClassTest.Foo();
|
||||
x.foo();
|
||||
x.bar;
|
||||
|
||||
var y = new MixedStaticsClassTest.Foo();
|
||||
y.foo();
|
||||
y.bar;
|
||||
|
||||
// static function
|
||||
MixedStaticsClassTest.Foo.foo();
|
||||
MixedStaticsClassTest.Foo.bar;
|
||||
}
|
||||
}
|
||||
@ -1,112 +0,0 @@
|
||||
module Bar { // Module
|
||||
var x: number; // Variable
|
||||
function f(): void { } // Function
|
||||
|
||||
interface IFoo {
|
||||
(i: number): IFoo; // CallSignature
|
||||
new (): IFoo; // ConstructSignature
|
||||
[i: number]: number; // IndexSignature
|
||||
foo: number; // PropertySignature
|
||||
bar(): void; // FunctionSignature
|
||||
}
|
||||
|
||||
enum Blah {
|
||||
foo = 2 // EnumMemberDeclaration
|
||||
}
|
||||
|
||||
class Bar {
|
||||
constructor(private barVar: Bar) { } // ConstructorImplementation
|
||||
|
||||
public barProp: number; // MemberVariableDeclaration
|
||||
public barPropFunc(): void { } // MemberFunctionDeclaration
|
||||
public get prop1(): void { } // MemberAccessorDeclaration
|
||||
public set prop1() { } // MemberAccessorDeclaration
|
||||
|
||||
private barPropP: number; // MemberVariableDeclaration
|
||||
private barPropFuncP(): void { } // MemberFunctionDeclaration
|
||||
private get prop1P(): void { } // MemberAccessorDeclaration
|
||||
private set prop1P() { } // MemberAccessorDeclaration
|
||||
|
||||
static foo: number; // StaticVariableDeclaration
|
||||
static bar(): void { } // StaticFunctionDeclaration
|
||||
static get foo2(): void { } // StaticAccessorDeclaration
|
||||
static set foo2() { } // StaticAccessorDeclaration
|
||||
}
|
||||
}
|
||||
|
||||
module Bar2 { // Module
|
||||
export var x: number; // Variable
|
||||
export function f(): void { } // Function
|
||||
|
||||
export interface IFoo {
|
||||
(i: number): IFoo; // CallSignature
|
||||
new (): IFoo; // ConstructSignature
|
||||
[i: number]: number; // IndexSignature
|
||||
foo: number; // PropertySignature
|
||||
bar(): void; // FunctionSignature
|
||||
}
|
||||
|
||||
export enum Blah {
|
||||
foo = 2 // EnumMemberDeclaration
|
||||
}
|
||||
|
||||
export class Bar {
|
||||
constructor(private barVar: Bar) { } // ConstructorImplementation
|
||||
|
||||
public barProp: number; // MemberVariableDeclaration
|
||||
public barPropFunc(): void { } // MemberFunctionDeclaration
|
||||
public get prop1(): void { } // MemberAccessorDeclaration
|
||||
public set prop1() { } // MemberAccessorDeclaration
|
||||
|
||||
private barPropP: number; // MemberVariableDeclaration
|
||||
private barPropFuncP(): void { } // MemberFunctionDeclaration
|
||||
private get prop1P(): void { } // MemberAccessorDeclaration
|
||||
private set prop1P() { } // MemberAccessorDeclaration
|
||||
|
||||
static foo: number; // StaticVariableDeclaration
|
||||
static bar(): void { } // StaticFunctionDeclaration
|
||||
static get foo2(): void { } // StaticAccessorDeclaration
|
||||
static set foo2() { } // StaticAccessorDeclaration
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
declare module Bar3 {
|
||||
|
||||
}
|
||||
|
||||
module Bar4 { // Module
|
||||
declare var x: number; // Variable
|
||||
declare function f(): void; // Function
|
||||
|
||||
declare interface IFoo {
|
||||
(i: number): IFoo; // CallSignature
|
||||
new (): IFoo; // ConstructSignature
|
||||
[i: number]: number; // IndexSignature
|
||||
foo: number; // PropertySignature
|
||||
bar(): void; // FunctionSignature
|
||||
}
|
||||
|
||||
declare enum Blah {
|
||||
foo = 2 // EnumMemberDeclaration
|
||||
}
|
||||
|
||||
declare class Bar {
|
||||
constructor (private barVar: Bar); // ConstructorImplementation
|
||||
|
||||
public barProp: number; // MemberVariableDeclaration
|
||||
public barPropFunc(): void; // MemberFunctionDeclaration
|
||||
public get prop1(): void; // MemberAccessorDeclaration
|
||||
public set prop1(); // MemberAccessorDeclaration
|
||||
|
||||
private barPropP: number; // MemberVariableDeclaration
|
||||
private barPropFuncP(): void; // MemberFunctionDeclaration
|
||||
private get prop1P(): void; // MemberAccessorDeclaration
|
||||
private set prop1P(); // MemberAccessorDeclaration
|
||||
|
||||
static foo: number; // StaticVariableDeclaration
|
||||
static bar(): void; // StaticFunctionDeclaration
|
||||
static get foo2(): void; // StaticAccessorDeclaration
|
||||
static set foo2(); // StaticAccessorDeclaration
|
||||
}
|
||||
}
|
||||
@ -1,85 +0,0 @@
|
||||
//Comment
|
||||
class sampleCls { constructor (str: string, num: number) { } }
|
||||
var x = new sampleCls("", 5); // new() test
|
||||
sampleCls(); // negative test
|
||||
|
||||
function fnTest(str: string, num: number) { }
|
||||
fnTest(); // simple function test
|
||||
|
||||
function fnOverload();
|
||||
function fnOverload(test: string); function fnOverload(test: string) { }
|
||||
fnOverload()
|
||||
fnOverload("")
|
||||
|
||||
class clsOverload { constructor (); constructor (test: string); constructor (test?: string) { } }
|
||||
var x = new clsOverload();
|
||||
var x = new clsOverload("");
|
||||
|
||||
module SimpleTests {
|
||||
module CallExpressions {
|
||||
class Foo {
|
||||
public f1() { }
|
||||
public f2(n: number) { }
|
||||
public f3(n: number, s: string) { }
|
||||
|
||||
}
|
||||
|
||||
var x = new Foo();
|
||||
x.f1();
|
||||
x.f2(5);
|
||||
x.f3(5, "");
|
||||
x.f1(
|
||||
x.f2(5,
|
||||
x.f3(5,
|
||||
}
|
||||
|
||||
module NewExpressions {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
module OverloadTests {
|
||||
module CallExpressions {
|
||||
function foo(callback: (a: number, b: string) => string) {
|
||||
callback(5, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module AnonymousFunctionTest {
|
||||
var x2 = function (n: number, s: string): (a: number, b: string) => string {
|
||||
return null;
|
||||
}
|
||||
x2(5, "")(1, "");
|
||||
}
|
||||
|
||||
module ObjectLiteralTest {
|
||||
var x = { n: 5, s: "", f: (a: number, b: string) => "" };
|
||||
x.f(4, "");
|
||||
}
|
||||
|
||||
module SuperCallTest {
|
||||
class base {
|
||||
constructor(s: string);
|
||||
constructor(n: number);
|
||||
constructor(a: any) { }
|
||||
}
|
||||
class A extends base {
|
||||
constructor() {
|
||||
super("");
|
||||
}
|
||||
}
|
||||
|
||||
class B extends base {
|
||||
}
|
||||
class B2 extends B {
|
||||
}
|
||||
class B3 extends B2 {
|
||||
constructor() {
|
||||
super("");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
function Foo(arg1: string, arg2: string) {
|
||||
|
||||
}
|
||||
|
||||
Foo(
|
||||
@ -1,132 +0,0 @@
|
||||
module Foo {
|
||||
|
||||
class Bar {
|
||||
|
||||
private foo:string = "";
|
||||
|
||||
private f() {
|
||||
var a:any[] = [[1, 2], [3, 4], 5];
|
||||
|
||||
return ((1 + 1));
|
||||
}
|
||||
|
||||
private f2() {
|
||||
if(true) { }{ };
|
||||
}
|
||||
}
|
||||
|
||||
interface Foo {
|
||||
|
||||
x:number;
|
||||
|
||||
foo():number;
|
||||
|
||||
}
|
||||
|
||||
module Foo2 {
|
||||
|
||||
function f() {
|
||||
}
|
||||
|
||||
var x: number;
|
||||
|
||||
}
|
||||
|
||||
enum Foo3 {
|
||||
|
||||
val1,
|
||||
|
||||
val2,
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function foo(bar,
|
||||
blah,
|
||||
|
||||
);
|
||||
|
||||
|
||||
function test() {
|
||||
for (var i = 0; i < 10; i++) {
|
||||
|
||||
}
|
||||
|
||||
for (var e in foo.bar) {
|
||||
|
||||
}
|
||||
|
||||
with (foo.bar) {
|
||||
|
||||
}
|
||||
|
||||
switch(foo.bar) {
|
||||
|
||||
}
|
||||
|
||||
switch (foo.bar) {
|
||||
|
||||
case 1:
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function tryCatch() {
|
||||
|
||||
try {
|
||||
|
||||
}
|
||||
|
||||
catch(err) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function tryFinally() {
|
||||
|
||||
try {
|
||||
|
||||
}
|
||||
|
||||
finally {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function tryCatchFinally() {
|
||||
|
||||
try {
|
||||
|
||||
}
|
||||
|
||||
catch(err) {
|
||||
|
||||
}
|
||||
|
||||
finally {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
module SwitchTest {
|
||||
var a = 3;
|
||||
|
||||
if (a == 5) {
|
||||
switch (a) {
|
||||
case 1:
|
||||
if (a == 5) {
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
//
|
||||
// Note: Do not add more tests at the end of this file, as
|
||||
// the purpose of this test is to verity smart indent
|
||||
// works for unterminated function arguments at the end of a file.
|
||||
//
|
||||
|
||||
function foo(a,
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
//
|
||||
// Note: Do not add more tests at the end of this file, as
|
||||
// the purpose of this test is to verity smart indent
|
||||
// works for unterminated if statements at the end of a file.
|
||||
//
|
||||
if (true)
|
||||
@ -1,24 +0,0 @@
|
||||
// djf dasjkfh asdkfjhsa dfjhgsdfhjdfg dasfg asdjfhg asdfjga sfjhgdf jhfg asfsadfhg afjh gfjds
|
||||
// djf dasjkfh asdkfjhsa dfjhgsdfhjdfg dasfg asdjfhg asdfjga sfjhgdf jhfg asfsadfhg afjh gfjds
|
||||
// djf dasjkfh asdkfjhsa dfjhgsdfhjdfg dasfg asdjfhg asdfjga sfjhgdf jhfg asfsadfhg afjh gfjds
|
||||
// djf dasjkfh asdkfjhsa dfjhgsdfhjdfg dasfg asdjfhg asdfjga sfjhgdf jhfg asfsadfhg afjh gfjds
|
||||
// djf dasjkfh asdkfjhsa dfjhgsdfhjdfg dasfg asdjfhg asdfjga sfjhgdf jhfg asfsadfhg afjh gfjds
|
||||
// djf dasjkfh asdkfjhsa dfjhgsdfhjdfg dasfg asdjfhg asdfjga sfjhgdf jhfg asfsadfhg afjh gfjds
|
||||
// djf dasjkfh asdkfjhsa dfjhgsdfhjdfg dasfg asdjfhg asdfjga sfjhgdf jhfg asfsadfhg afjh gfjds
|
||||
|
||||
function tryCatchFinally() {
|
||||
addsdfsdafsdafsdfdsfdsfsfsaafdsddfsdaf;
|
||||
try {
|
||||
|
||||
}
|
||||
|
||||
catch(err) {
|
||||
|
||||
}
|
||||
|
||||
finally {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
interface bah {
|
||||
(y: number);
|
||||
x: number;
|
||||
(z: string)
|
||||
}
|
||||
@ -1,57 +0,0 @@
|
||||
module SimpleClassTest {
|
||||
class Foo {
|
||||
public foo(): void {
|
||||
}
|
||||
}
|
||||
class Bar extends Foo {
|
||||
public foo(): void {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module SimpleInterfaceTest {
|
||||
interface IFoo {
|
||||
foo(): void;
|
||||
}
|
||||
interface IBar extends IFoo {
|
||||
foo(): void;
|
||||
}
|
||||
}
|
||||
|
||||
module SimpleClassInterfaceTest {
|
||||
interface IFoo {
|
||||
foo(): void;
|
||||
}
|
||||
class Bar implements IFoo {
|
||||
public foo(): void {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module Test {
|
||||
interface IBase {
|
||||
field: string;
|
||||
method(): void;
|
||||
}
|
||||
|
||||
interface IBlah extends IBase {
|
||||
field: string;
|
||||
}
|
||||
|
||||
interface IBlah2 extends IBlah {
|
||||
field: string;
|
||||
}
|
||||
|
||||
interface IDerived extends IBlah2 {
|
||||
method(): void;
|
||||
}
|
||||
|
||||
class Bar implements IDerived {
|
||||
public field: string;
|
||||
public method(): void { }
|
||||
}
|
||||
|
||||
class BarBlah extends Bar {
|
||||
public field: string;
|
||||
}
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
// Local inside a class
|
||||
|
||||
var n = 14;
|
||||
|
||||
class foo {
|
||||
private ^^[|n|] = 0;
|
||||
|
||||
public bar() {
|
||||
this.[|n|] = 9;
|
||||
}
|
||||
|
||||
constructor() {
|
||||
this.[|n|]^^ = 4;
|
||||
}
|
||||
|
||||
public bar2() {
|
||||
var n = 12;
|
||||
}
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
// Reference to a class parameter
|
||||
|
||||
var p = 2;
|
||||
|
||||
class p { }
|
||||
|
||||
class foo {
|
||||
constructor (public p: any) {
|
||||
}
|
||||
|
||||
public f(p) {
|
||||
this.^^[|p|] = p;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var n = new foo(undefined);
|
||||
n.^^[|p|] = null;
|
||||
@ -1,4 +0,0 @@
|
||||
// References to ^^foo or b^^ar
|
||||
/* in comments should not find fo^^o or bar^^ */
|
||||
class foo { }
|
||||
var bar = 0;
|
||||
@ -1,6 +0,0 @@
|
||||
// function overloads should be highlighted together
|
||||
|
||||
function [|^^foo|](x: string);
|
||||
function [|^^foo|](x: string, y: number) {
|
||||
[|^^foo|]('', 43);
|
||||
}
|
||||
@ -1,7 +0,0 @@
|
||||
var x;
|
||||
var n;
|
||||
|
||||
function n(x: number, [|n|]^^: number) {
|
||||
^^[|n|] = 32;
|
||||
x = [|n|];
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
// Global variable reference
|
||||
|
||||
var ^^global = 2;
|
||||
|
||||
class foo {
|
||||
constructor (public global) { }
|
||||
public f(global) { }
|
||||
public f2(global) { }
|
||||
}
|
||||
|
||||
class bar {
|
||||
constructor () {
|
||||
var n = [|global|];
|
||||
|
||||
var f = new foo('');
|
||||
f.global = '';
|
||||
}
|
||||
}
|
||||
|
||||
var k = [|global|];
|
||||
|
||||
================
|
||||
var m = [|global|];
|
||||
@ -1,2 +0,0 @@
|
||||
// Neither should cause highlighting to occur
|
||||
f^^oo = fo^^o;
|
||||
@ -1,4 +0,0 @@
|
||||
// Should still highlight even though it's invalid assignment
|
||||
var ^^[|foo|] = function() { };
|
||||
|
||||
[|fo^^o|] = [|f^^oo|] + 1;
|
||||
@ -1,20 +0,0 @@
|
||||
module modTest {
|
||||
//Declare
|
||||
export var modVar:number;
|
||||
^^
|
||||
|
||||
//Increments
|
||||
modVar++;
|
||||
|
||||
class testCls{
|
||||
^^
|
||||
}
|
||||
|
||||
function testFn(){
|
||||
//Increments
|
||||
modVar++;
|
||||
} ^^
|
||||
^^
|
||||
module testMod {
|
||||
}
|
||||
}
|
||||
@ -1,17 +0,0 @@
|
||||
// Class references should work across file and not find local variables
|
||||
class [|foo|]^^ {
|
||||
public n: ^^[|foo|];
|
||||
public foo: number;
|
||||
}
|
||||
|
||||
class bar {
|
||||
public n: [|f^^o^^o|];
|
||||
public k = new [|foo|]();
|
||||
}
|
||||
|
||||
module mod {
|
||||
var k: [|foo|] = null;
|
||||
}
|
||||
|
||||
===================
|
||||
var k: ^^[|foo|];
|
||||
@ -1,28 +0,0 @@
|
||||
// reference a class static
|
||||
|
||||
var n = 43;
|
||||
|
||||
class foo {
|
||||
static [|n|] = '';
|
||||
|
||||
public bar() {
|
||||
foo.^^[|n|] = "'";
|
||||
if(foo.[|n|]) {
|
||||
var x = foo.[|n|];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class foo2 {
|
||||
private x = foo.[|n|]^^;
|
||||
constructor() {
|
||||
foo.^^[|n|] = x;
|
||||
}
|
||||
|
||||
function b(n) {
|
||||
n = foo.[|n|];
|
||||
}
|
||||
}
|
||||
|
||||
=================
|
||||
var q = foo.[|n|];
|
||||
Loading…
x
Reference in New Issue
Block a user