From 962e4cace4dd8c27c87da0835332caab972d495e Mon Sep 17 00:00:00 2001 From: Blake Embrey Date: Wed, 15 Jul 2015 17:48:03 +1000 Subject: [PATCH] Add more complex examples --- src/typescript-node.spec.ts | 58 +++++++++++++++++++++++++++++++++++-- tests/complex/example.js | 1 + tests/complex/foo.ts | 1 + tests/complex/index.ts | 3 ++ tests/module.ts | 4 +-- tests/throw.ts | 5 ++++ 6 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 tests/complex/example.js create mode 100644 tests/complex/foo.ts create mode 100644 tests/complex/index.ts create mode 100644 tests/throw.ts diff --git a/src/typescript-node.spec.ts b/src/typescript-node.spec.ts index 5d2dd7757..9c01f1f17 100644 --- a/src/typescript-node.spec.ts +++ b/src/typescript-node.spec.ts @@ -8,8 +8,10 @@ const BIN_PATH = join(__dirname, '../dist/bin/ts-node') const compiler = register() describe('ts-node', function () { + this.timeout(5000) + it('should execute cli', function (done) { - exec(`node ${BIN_PATH} ${join(__dirname, '../tests/hello-world')}`, function (err, stdout) { + exec(`node ${BIN_PATH} tests/hello-world`, function (err, stdout) { expect(err).to.not.exist expect(stdout).to.equal('Hello, world!\n') @@ -17,9 +19,61 @@ describe('ts-node', function () { }) }) + it('should print scripts', function (done) { + exec(`node ${BIN_PATH} -p "import { example } from './tests/complex/index';example()"`, function (err, stdout) { + expect(err).to.not.exist + expect(stdout).to.equal('example\n') + + return done() + }) + }) + + it('should eval code', function (done) { + exec(`node ${BIN_PATH} -e "import * as m from './tests/module';console.log(m.example('test'))"`, function (err, stdout) { + expect(err).to.not.exist + expect(stdout).to.equal('TEST\n') + + return done() + }) + }) + + it('should throw errors', function (done) { + exec(`node ${BIN_PATH} -e "import * as m from './tests/module';console.log(m.example(123))"`, function (err, stdout) { + expect(err.message).to.contain('[eval].ts (1,59): Argument of type \'number\' is not assignable to parameter of type \'string\'. (2345)') + + return done() + }) + }) + + it('should be able to ignore errors', function (done) { + exec(`node ${BIN_PATH} --ignoreWarnings 2345 -e "import * as m from './tests/module';console.log(m.example(123))"`, function (err, stdout) { + expect(err.message).to.contain('TypeError: foo.toUpperCase is not a function') + + return done() + }) + }) + + it('should work with source maps', function (done) { + exec(`node ${BIN_PATH} tests/throw`, function (err, stdout) { + expect(err.message).to.contain([ + ' bar () { throw new Error(\'this is a demo\') }', + ' ^', + 'Error: this is a demo' + ].join('\n')) + + return done() + }) + }) + it('should be able to require typescript', function () { var m = require('../tests/module') - expect(m.example()).to.be.true + expect(m.example('foo')).to.equal('FOO') + }) + + it('should compile through js and ts', function () { + var m = require('../tests/complex') + + expect(m.example()).to.equal('example') }) }) diff --git a/tests/complex/example.js b/tests/complex/example.js new file mode 100644 index 000000000..3971310d0 --- /dev/null +++ b/tests/complex/example.js @@ -0,0 +1 @@ +module.exports = require('./foo').text diff --git a/tests/complex/foo.ts b/tests/complex/foo.ts new file mode 100644 index 000000000..93fb156db --- /dev/null +++ b/tests/complex/foo.ts @@ -0,0 +1 @@ +export const text = 'example' diff --git a/tests/complex/index.ts b/tests/complex/index.ts new file mode 100644 index 000000000..cbe2ca119 --- /dev/null +++ b/tests/complex/index.ts @@ -0,0 +1,3 @@ +export function example () { + return require('./example') +} diff --git a/tests/module.ts b/tests/module.ts index fda86994a..b0ec363cd 100644 --- a/tests/module.ts +++ b/tests/module.ts @@ -1,3 +1,3 @@ -export function example (foo: string): boolean { - return true +export function example (foo: string) { + return foo.toUpperCase() } diff --git a/tests/throw.ts b/tests/throw.ts new file mode 100644 index 000000000..1183d9ff5 --- /dev/null +++ b/tests/throw.ts @@ -0,0 +1,5 @@ +class Foo { + constructor () { this.bar() } + bar () { throw new Error('this is a demo') } +} +new Foo()