diff --git a/_infrastructure/tests/runner.js b/_infrastructure/tests/runner.js index 0512c05e27..6495699236 100644 --- a/_infrastructure/tests/runner.js +++ b/_infrastructure/tests/runner.js @@ -127,10 +127,12 @@ var DT; var Timer = (function () { function Timer() { this.time = 0; + this.asString = ''; } Timer.prototype.start = function () { this.time = 0; this.startTime = this.now(); + this.asString = ''; }; Timer.prototype.now = function () { @@ -566,6 +568,10 @@ var DT; this.out(' \33[36m\33[1m' + file + '\33[0m\n'); }; + Print.prototype.printWarnCode = function (str) { + this.out(' \33[31m\33[1m<' + str.toLowerCase().replace(/ +/g, '-') + '>\33[0m\n'); + }; + Print.prototype.printLine = function (file) { this.out(file + '\n'); }; @@ -634,6 +640,12 @@ var DT; _this.printLine(file.filePathWithName); }); }; + + Print.prototype.printTestAll = function () { + this.printDiv(); + this.printSubHeader('Ignoring changes, testing all files'); + }; + Print.prototype.printFiles = function (files) { var _this = this; this.printDiv(); @@ -838,7 +850,7 @@ var DT; var Promise = require('bluebird'); - var endDts = /.ts$/i; + var endDts = /\w\.ts$/i; ///////////////////////////////// // .d.ts syntax inspection @@ -865,7 +877,7 @@ var DT; var Promise = require('bluebird'); - var endTestDts = /-tests?.ts$/i; + var endTestDts = /\w-tests?\.ts$/i; ///////////////////////////////// // Compile with *-tests.ts @@ -977,7 +989,7 @@ var DT; var tsExp = /\.ts$/; - DT.DEFAULT_TSC_VERSION = '0.9.1.1'; + DT.DEFAULT_TSC_VERSION = '0.9.7'; ///////////////////////////////// // Single test @@ -1119,7 +1131,9 @@ var DT; _this.print.printRelChanges(_this.index.changed); return _this.index.parseFiles(); }).then(function () { - // this.print.printRefMap(this.index, this.index.refMap); + if (_this.options.printRefMap) { + _this.print.printRefMap(_this.index, _this.index.refMap); + } if (Lazy(_this.index.missing).some(function (arr) { return arr.length > 0; })) { @@ -1129,12 +1143,17 @@ var DT; // bail return Promise.cast(false); } - - // this.print.printFiles(this.files); + if (_this.options.printFiles) { + _this.print.printFiles(_this.index.files); + } return _this.index.collectTargets().then(function (files) { - _this.print.printQueue(files); - - return _this.runTests(files); + if (_this.options.testChanges) { + _this.print.printQueue(files); + return _this.runTests(files); + } else { + _this.print.printTestAll(); + return _this.runTests(_this.index.files); + } }).then(function () { return !_this.suites.some(function (suite) { return suite.ngTests.length !== 0; @@ -1173,6 +1192,11 @@ var DT; _this.print.printSuiteHeader(suite.testSuiteName); + if (_this.options.skipTests) { + _this.print.printWarnCode('skipped test'); + return Promise.cast(count++); + } + return suite.start(files, function (testResult) { _this.print.printTestComplete(testResult); }).then(function (suite) { @@ -1249,23 +1273,39 @@ var DT; })(); DT.TestRunner = TestRunner; + var optimist = require('optimist')(process.argv); + optimist.default('try-without-tscparams', false); + optimist.default('single-thread', false); + optimist.default('tsc-version', DT.DEFAULT_TSC_VERSION); + + optimist.default('test-changes', false); + optimist.default('skip-tests', false); + optimist.default('print-files', false); + optimist.default('print-refmap', false); + + optimist.boolean('help'); + optimist.describe('help', 'print help'); + optimist.alias('h', 'help'); + + var argv = optimist.argv; + var dtPath = path.resolve(path.dirname((module).filename), '..', '..'); - var findNotRequiredTscparams = process.argv.some(function (arg) { - return arg == '--try-without-tscparams'; - }); - var tscVersionIndex = process.argv.indexOf('--tsc-version'); - var tscVersion = DT.DEFAULT_TSC_VERSION; var cpuCores = os.cpus().length; - if (tscVersionIndex > -1) { - tscVersion = process.argv[tscVersionIndex + 1]; + if (argv.help) { + optimist.showHelp(); + process.exit(0); } - var runner = new TestRunner(dtPath, { - concurrent: Math.max(cpuCores, 2), - tscVersion: tscVersion, - findNotRequiredTscparams: findNotRequiredTscparams - }); - runner.run().then(function (success) { + + new TestRunner(dtPath, { + concurrent: argv['single-thread'] ? 1 : Math.max(cpuCores, 2), + tscVersion: argv['tsc-version'], + testChanges: argv['test-changes'], + skipTests: argv['skip-tests'], + printFiles: argv['print-files'], + printRefMap: argv['print-refmap'], + findNotRequiredTscparams: argv['try-without-tscparam'] + }).run().then(function (success) { if (!success) { process.exit(1); } diff --git a/_infrastructure/tests/runner.ts b/_infrastructure/tests/runner.ts index fafe2b1454..6e71d621a1 100644 --- a/_infrastructure/tests/runner.ts +++ b/_infrastructure/tests/runner.ts @@ -32,7 +32,7 @@ module DT { var tsExp = /\.ts$/; - export var DEFAULT_TSC_VERSION = '0.9.1.1'; + export var DEFAULT_TSC_VERSION = '0.9.7'; ///////////////////////////////// // Single test @@ -123,6 +123,10 @@ module DT { export interface ITestRunnerOptions { tscVersion:string; concurrent?:number; + testChanges?:boolean; + skipTests?:boolean; + printFiles?:boolean; + printRefMap?:boolean; findNotRequiredTscparams?:boolean; } @@ -175,19 +179,27 @@ module DT { this.print.printRelChanges(this.index.changed); return this.index.parseFiles(); }).then(() => { - // this.print.printRefMap(this.index, this.index.refMap); - + if (this.options.printRefMap) { + this.print.printRefMap(this.index, this.index.refMap); + } if (Lazy(this.index.missing).some((arr: any[]) => arr.length > 0)) { this.print.printMissing(this.index, this.index.missing); this.print.printBoldDiv(); // bail return Promise.cast(false); } - // this.print.printFiles(this.files); + if (this.options.printFiles) { + this.print.printFiles(this.index.files); + } return this.index.collectTargets().then((files) => { - this.print.printQueue(files); - - return this.runTests(files); + if (this.options.testChanges) { + this.print.printQueue(files); + return this.runTests(files); + } + else { + this.print.printTestAll(); + return this.runTests(this.index.files) + } }).then(() => { return !this.suites.some((suite) => { return suite.ngTests.length !== 0 @@ -225,6 +237,11 @@ module DT { this.print.printSuiteHeader(suite.testSuiteName); + if (this.options.skipTests) { + this.print.printWarnCode('skipped test'); + return Promise.cast(count++); + } + return suite.start(files, (testResult) => { this.print.printTestComplete(testResult); }).then((suite) => { @@ -298,21 +315,39 @@ module DT { } } + var optimist: Optimist = require('optimist')(process.argv); + optimist.default('try-without-tscparams', false); + optimist.default('single-thread', false); + optimist.default('tsc-version', DEFAULT_TSC_VERSION); + + optimist.default('test-changes', false); + optimist.default('skip-tests', false); + optimist.default('print-files', false); + optimist.default('print-refmap', false); + + optimist.boolean('help'); + optimist.describe('help', 'print help'); + optimist.alias('h', 'help'); + + var argv: any = optimist.argv; + var dtPath = path.resolve(path.dirname((module).filename), '..', '..'); - var findNotRequiredTscparams = process.argv.some(arg => arg == '--try-without-tscparams'); - var tscVersionIndex = process.argv.indexOf('--tsc-version'); - var tscVersion = DEFAULT_TSC_VERSION; var cpuCores = os.cpus().length; - if (tscVersionIndex > -1) { - tscVersion = process.argv[tscVersionIndex + 1]; + if (argv.help) { + optimist.showHelp(); + process.exit(0); } - var runner = new TestRunner(dtPath, { - concurrent: Math.max(cpuCores, 2), - tscVersion: tscVersion, - findNotRequiredTscparams: findNotRequiredTscparams - }); - runner.run().then((success) => { + + new TestRunner(dtPath, { + concurrent: argv['single-thread'] ? 1 : Math.max(cpuCores, 2), + tscVersion: argv['tsc-version'], + testChanges: argv['test-changes'], + skipTests: argv['skip-tests'], + printFiles: argv['print-files'], + printRefMap: argv['print-refmap'], + findNotRequiredTscparams: argv['try-without-tscparam'] + }).run().then((success) => { if (!success) { process.exit(1); } diff --git a/_infrastructure/tests/src/printer.ts b/_infrastructure/tests/src/printer.ts index 565c4268a7..9ee01f3c6d 100644 --- a/_infrastructure/tests/src/printer.ts +++ b/_infrastructure/tests/src/printer.ts @@ -132,6 +132,10 @@ module DT { this.out(' \33[36m\33[1m' + file + '\33[0m\n'); } + public printWarnCode(str: string) { + this.out(' \33[31m\33[1m<' + str.toLowerCase().replace(/ +/g, '-') + '>\33[0m\n'); + } + public printLine(file: string) { this.out(file + '\n'); } @@ -197,8 +201,13 @@ module DT { files.forEach((file) => { this.printLine(file.filePathWithName); }); - } + + public printTestAll(): void { + this.printDiv(); + this.printSubHeader('Ignoring changes, testing all files'); + } + public printFiles(files: File[]): void { this.printDiv(); this.printSubHeader('Files'); diff --git a/_infrastructure/tests/src/suite/suite.ts b/_infrastructure/tests/src/suite/suite.ts index 5909f87c63..8624da0d37 100644 --- a/_infrastructure/tests/src/suite/suite.ts +++ b/_infrastructure/tests/src/suite/suite.ts @@ -50,7 +50,7 @@ module DT { return Promise.all(targetFiles.map((targetFile) => { return this.runTest(targetFile).then((result) => { testCallback(result); - }) + }); })); }).then(() => { this.timer.end(); diff --git a/_infrastructure/tests/src/suite/syntax.ts b/_infrastructure/tests/src/suite/syntax.ts index 2e0d0b71aa..9211c3fdef 100644 --- a/_infrastructure/tests/src/suite/syntax.ts +++ b/_infrastructure/tests/src/suite/syntax.ts @@ -6,7 +6,7 @@ module DT { var Promise: typeof Promise = require('bluebird'); - var endDts = /.ts$/i; + var endDts = /\w\.ts$/i; ///////////////////////////////// // .d.ts syntax inspection diff --git a/_infrastructure/tests/src/suite/testEval.ts b/_infrastructure/tests/src/suite/testEval.ts index 410d8998ba..abc4d50935 100644 --- a/_infrastructure/tests/src/suite/testEval.ts +++ b/_infrastructure/tests/src/suite/testEval.ts @@ -6,7 +6,7 @@ module DT { var Promise: typeof Promise = require('bluebird'); - var endTestDts = /-tests?.ts$/i; + var endTestDts = /\w-tests?\.ts$/i; ///////////////////////////////// // Compile with *-tests.ts diff --git a/_infrastructure/tests/src/timer.ts b/_infrastructure/tests/src/timer.ts index 009527109a..0f74743471 100644 --- a/_infrastructure/tests/src/timer.ts +++ b/_infrastructure/tests/src/timer.ts @@ -11,11 +11,12 @@ module DT { export class Timer { startTime: number; time = 0; - asString: string; + asString: string = '' public start() { this.time = 0; this.startTime = this.now(); + this.asString = ''; } public now(): number { diff --git a/_infrastructure/tests/typings/optimist/optimist.d.ts b/_infrastructure/tests/typings/optimist/optimist.d.ts new file mode 100644 index 0000000000..d79dcfaf0e --- /dev/null +++ b/_infrastructure/tests/typings/optimist/optimist.d.ts @@ -0,0 +1,48 @@ +// https://github.com/substack/node-optimist +// sourced from https://github.com/soywiz/typescript-node-definitions/blob/master/optimist.d.ts +// rehacked by @Bartvds + +declare module Optimist { + export interface Argv { + _: string[]; + } + export interface Optimist { + default(name: string, value: any): Optimist; + default(args: any): Optimist; + + boolean(name: string): Optimist; + boolean(names: string[]): Optimist; + + string(name: string): Optimist; + string(names: string[]): Optimist; + + wrap(columns): Optimist; + + help(): Optimist; + showHelp(fn?: Function): Optimist; + + usage(message: string): Optimist; + + demand(key: string): Optimist; + demand(key: number): Optimist; + demand(key: string[]): Optimist; + + alias(key: string, alias: string): Optimist; + + describe(key: string, desc: string): Optimist; + + options(key: string, opt: any): Optimist; + + check(fn: Function); + + parse(args: string[]): Optimist; + + argv: Argv; + } +} +interface Optimist extends Optimist.Optimist { + (args: string[]): Optimist.Optimist; +} +declare module 'optimist' { + export = Optimist; +} diff --git a/_infrastructure/tests/typings/tsd.d.ts b/_infrastructure/tests/typings/tsd.d.ts index 717e8e49a3..371833438e 100644 --- a/_infrastructure/tests/typings/tsd.d.ts +++ b/_infrastructure/tests/typings/tsd.d.ts @@ -1,3 +1,4 @@ /// /// /// +/// diff --git a/package.json b/package.json index a18c4fcd70..aded689516 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,37 @@ { "private": true, "name": "DefinitelyTyped", - "version": "0.0.0", + "version": "0.0.1", + "homepage": "https://github.com/borisyankov/DefinitelyTyped", + "repository": { + "type": "git", + "url": "https://github.com/borisyankov/DefinitelyTyped.git" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/borisyankov/DefinitelyTyped/blob/master/LICENSE" + } + ], + "bugs": { + "url": "https://github.com/borisyankov/DefinitelyTyped/issues" + }, + "engines": { + "node": ">= 0.10.0" + }, "scripts": { - "test": "node ./_infrastructure/tests/runner.js --tsc-version 0.9.7" + "test": "node ./_infrastructure/tests/runner.js --tsc-version 0.9.7 --test-changes", + "all": "node ./_infrastructure/tests/runner.js --tsc-version 0.9.7", + "dry": "node ./_infrastructure/tests/runner.js --tsc-version 0.9.7 --skip-tests --test-changes", + "list": "node ./_infrastructure/tests/runner.js --tsc-version 0.9.7 --skip-tests --print-files --print-refmap", + "help": "node ./_infrastructure/tests/runner.js -h" }, "dependencies": { + "source-map-support": "~0.2.5", "git-wrapper": "~0.1.1", "glob": "~3.2.9", - "source-map-support": "~0.2.5", "bluebird": "~1.0.7", - "lazy.js": "~0.3.2" + "lazy.js": "~0.3.2", + "optimist": "~0.6.1" } }