diff --git a/.gitignore b/.gitignore index e69de29..c111d70 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/co-mocha-1.1.2.tgz diff --git a/nodejs-co-mocha.spec b/nodejs-co-mocha.spec new file mode 100644 index 0000000..315ec82 --- /dev/null +++ b/nodejs-co-mocha.spec @@ -0,0 +1,75 @@ +%{?nodejs_find_provides_and_requires} + +%global packagename co-mocha + +# Tests disabled due to missing dependencies ('ava') +%global enable_tests 0 + +Name: nodejs-co-mocha +Version: 1.1.2 +Release: 1%{?dist} +Summary: Enable support for generators in Mocha tests + +License: MIT +URL: https://github.com/blakeembrey/co-mocha.git +Source0: https://registry.npmjs.org/%{packagename}/-/%{packagename}-%{version}.tgz +# The test files are not included in the npm tarball. +Source1: https://raw.githubusercontent.com/blakeembrey/co-mocha/v1.1.2/test.js + + + +BuildArch: noarch +%if 0%{?fedora} >= 19 +ExclusiveArch: %{nodejs_arches} noarch +%else +ExclusiveArch: %{ix86} x86_64 %{arm} noarch +%endif + +BuildRequires: nodejs-packaging +BuildRequires: npm(co) +BuildRequires: npm(is-generator) +%if 0%{?enable_tests} +BuildRequires: mocha +%endif + +%description +Enable support for generators in Mocha tests + + +%prep +%setup -q -n package + +cp -p %{SOURCE1} . + + +%build +# nothing to do! + +%install +mkdir -p %{buildroot}%{nodejs_sitelib}/%{packagename} +cp -pr package.json co-mocha.js lib/ \ + %{buildroot}%{nodejs_sitelib}/%{packagename} + +%nodejs_symlink_deps + +%check +%nodejs_symlink_deps --check +%{__nodejs} -e 'require("./")' +%if 0%{?enable_tests} +%{_bindir}/mocha --harmony -R spec --require lib/co-mocha.js --bail +%else +%{_bindir}/echo -e "\e[101m -=#=- Tests disabled -=#=- \e[0m" + +%endif + + +%files +%{!?_licensedir:%global license %doc} +%doc *.md +%license LICENSE +%{nodejs_sitelib}/%{packagename} + + +%changelog +* Mon Feb 22 2016 Jared Smith - 1.1.2-1 +- Initial packaging diff --git a/sources b/sources index e69de29..06ddcc9 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +384772cb8f8729a77f564d251b8d8bc3 co-mocha-1.1.2.tgz diff --git a/test.js b/test.js new file mode 100644 index 0000000..1571d64 --- /dev/null +++ b/test.js @@ -0,0 +1,201 @@ +/* eslint-disable no-eval */ +/* global describe, it, chai, ES6Promise */ + +var expect +var Runnable +var isNode = typeof require === 'function' + +if (isNode) { + expect = require('chai').expect + Runnable = require('mocha').Runnable +} else { + expect = chai.expect + Runnable = window.Mocha.Runnable + + ES6Promise.polyfill() +} + +/** + * Thunkify a function for `process.nextTick`. + * + * @return {Function} + */ +function defer () { + return new Promise(function (resolve) { + setTimeout(resolve, 0) + }) +} + +describe('co-mocha', function () { + describe('synchronous', function () { + it('should pass', function (done) { + var test = new Runnable('synchronous', function () {}) + + test.run(done) + }) + + it('should fail', function (done) { + var test = new Runnable('synchronous', function () { + throw new Error('You had one job') + }) + + test.run(function (err) { + expect(err).to.exist + expect(err.message).to.equal('You had one job') + + return done() + }) + }) + }) + + describe('promise', function () { + it('should pass', function (done) { + var test = new Runnable('promise', function () { + return defer() + }) + + test.run(done) + }) + + it('should fail', function (done) { + var test = new Runnable('promise', function () { + return new Promise(function (resolve, reject) { + return setTimeout(function () { + return reject(new Error('You promised me')) + }, 0) + }) + }) + + test.run(function (err) { + expect(err).to.exist + expect(err.message).to.equal('You promised me') + + return done() + }) + }) + }) + + describe('callback', function () { + it('should pass', function (done) { + var test = new Runnable('callback', function (done) { + return setTimeout(done, 0) + }) + + test.run(done) + }) + + it('should fail', function (done) { + var test = new Runnable('callback', function (done) { + return setTimeout(function () { + return done(new Error('You never called me back')) + }, 0) + }) + + test.run(function (err) { + expect(err).to.exist + expect(err.message).to.equal('You never called me back') + + return done() + }) + }) + }) + + describe('generators', function () { + var TEST_SOURCE = [ + '(function * () {', + ' yield defer()', + '})' + ].join('\n') + + var TEST_ERROR_SOURCE = [ + '(function * () {', + ' yield defer()', + ' throw new Error(\'This generation has failed\')', + '})' + ].join('\n') + + describe('es6', function () { + try { + eval('(function * () {})') + } catch (e) { + console.log('Generators are not supported natively, skipping...') + + return + } + + it('visual debugging', function * () { + yield Promise.resolve('This is purely for testing Mocha HTML output') + }) + + it('should pass', function (done) { + var test = new Runnable('es6', eval(TEST_SOURCE)) + + test.run(done) + }) + + it('should fail', function (done) { + var test = new Runnable('es6', eval(TEST_ERROR_SOURCE)) + + test.run(function (err) { + expect(err).to.exist + expect(err.message).to.equal('This generation has failed') + + return done() + }) + }) + }) + + if (isNode) { + var traceur = require('traceur') + var regenerator = require('regenerator') + + describe('regenerator', function () { + it('should pass', function (done) { + var test = new Runnable('regenerator', eval(regenerator.compile(TEST_SOURCE, { + includeRuntime: true + }).code)) + + test.run(done) + }) + + it('should fail', function (done) { + var test = new Runnable('regenerator', eval( + regenerator.compile(TEST_ERROR_SOURCE, { + includeRuntime: true + }).code + )) + + test.run(function (err) { + expect(err).to.exist + expect(err.message).to.equal('This generation has failed') + + return done() + }) + }) + }) + + describe('traceur', function () { + it('should pass', function (done) { + var test = new Runnable( + 'regenerator', eval(traceur.compile(TEST_SOURCE)) + ) + + test.run(done) + }) + + it('should fail', function (done) { + var test = new Runnable( + 'regenerator', eval(traceur.compile(TEST_ERROR_SOURCE)) + ) + + test.run(function (err) { + expect(err).to.exist + expect(err.message).to.equal('This generation has failed') + + return done() + }) + }) + }) + } + }) +})