From 6faed1838f3dcd6797fa40070361efc9fc37d054 Mon Sep 17 00:00:00 2001 From: Jared Allard Date: Wed, 24 Feb 2016 14:28:55 -0800 Subject: [PATCH] test: track tets/{mocha.opts, test.js} --- test/mocha.opts | 1 + test/test.js | 197 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 198 insertions(+) create mode 100644 test/mocha.opts create mode 100644 test/test.js diff --git a/test/mocha.opts b/test/mocha.opts new file mode 100644 index 0000000..da3ea00 --- /dev/null +++ b/test/mocha.opts @@ -0,0 +1 @@ +--timeout 100000000 diff --git a/test/test.js b/test/test.js new file mode 100644 index 0000000..e06be3c --- /dev/null +++ b/test/test.js @@ -0,0 +1,197 @@ +/** + * Test runner for nexe + * + * @author Jared Allard + * @license MIT + **/ + +'use strict'; + +const NEXE_VERSION = require('../package.json').version; + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const spawn = require('child_process').spawn; + +let testBase = __dirname; + +const compileTest = function(test, cb) { + let testDir = path.join(testBase, test); + if(!fs.existsSync(testDir)) { + throw new Error('Test not found'); + return cb(false); + } + + let testinst = spawn('../../bin/nexe', [], { + cwd: testDir + }); + + testinst.on('error', function() { + throw new Error('Test failed to compile'); + return cb(false); + }); + + testinst.on('close', function(code) { + let err = null; + if(code !== 0) { + throw new Error('Test gave non-zero code'); + err = false; + } + + return cb(err); + }); +}; + +const runTest = function(test, cb) { + let testDir = path.join(testBase, test); + let testBin = path.join(testDir, 'test.nex') + if(!fs.existsSync(testDir)) { + throw new Error('Test not found'); + return cb(false); + } + + if(!fs.existsSync(testBin)) { + throw new Error('Test binary not found'); + return cb(false); + } + + let returned = false; + let testinst = spawn(testBin, [], { + cwd: testDir + }) + + testinst.stdout.on('data', function(d) { + let status = d.toString('ascii'); + + if(status === true || status === 'true' || status === 'true\n') { + testinst.stdin.pause(); + testinst.kill(); + + // make it know we returned. + returned = true; + + return cb(); + } + }) + + testinst.on('close', function(c) { + if(returned !== true) { + throw new Error('Test failed (stdout never contained true)'); + return cb(false); + } + }) +} + +console.log('NOTICE: The first test may take awhile as it may compile Node.js'); + +/** + * Tests express compatability. + **/ +describe('nexe can bundle express', function() { + let testname = 'express-test'; + + describe('build', function () { + it('compiles without errors', function (next) { + compileTest(testname, function(err) { + return next(err); + }); + }); + + it('runs successfully', function(next) { + runTest(testname, function(err) { + return next(err); + }); + }); + }); +}); + +describe('nexe and embedding files', function() { + let testname = 'embeded-files'; + + describe('build', function () { + it('compiles without errors', function (next) { + compileTest(testname, function(err) { + return next(err); + }); + }); + + it('runs successfully', function(next) { + runTest(testname, function(err) { + return next(err); + }); + }); + }); +}); + +describe('v8 flags test (strict mode)', function() { + let testname = 'flags-test'; + + describe('build', function () { + it('compiles without errors', function (next) { + compileTest(testname, function(err) { + return next(err); + }); + }); + + it('runs successfully', function(next) { + runTest(testname, function(err) { + return next(err); + }); + }); + }); +}); + +describe('nexe can be utilized in gulp test', function() { + let testname = 'gulp-test-170'; + + describe('build', function () { + it('compiles without errors', function (next) { + compileTest(testname, function(err) { + return next(err); + }); + }); + + it('runs successfully', function(next) { + runTest(testname, function(err) { + return next(err); + }); + }); + }); +}); + +describe('can ignore node.js flags test', function() { + let testname = 'ignoreFlags-test'; + + describe('build', function () { + it('compiles without errors', function (next) { + compileTest(testname, function(err) { + return next(err); + }); + }); + + it('runs successfully', function(next) { + runTest(testname, function(err) { + return next(err); + }); + }); + }); +}); + +describe('nexe supports js-yaml test', function() { + let testname = 'js-yaml-148'; + + describe('build', function () { + it('compiles without errors', function (next) { + compileTest(testname, function(err) { + return next(err); + }); + }); + + it('runs successfully', function(next) { + runTest(testname, function(err) { + return next(err); + }); + }); + }); +});