From 60d6859ad7036c69edbf4ca0b285eee8be293230 Mon Sep 17 00:00:00 2001 From: Jason Mulligan <jason.mulligan@avoidwork.com> Date: Wed, 30 Sep 2015 06:45:22 -0400 Subject: [PATCH] Adding a missing worker method (`close()`), adding tests --- Gruntfile.js | 6 ++++- lib/worker.js | 3 +++ package.json | 3 ++- src/worker.js | 3 +++ test/worker_repeater.js | 3 +++ test/worker_test.js | 54 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 test/worker_repeater.js create mode 100644 test/worker_test.js diff --git a/Gruntfile.js b/Gruntfile.js index b66631e..0ae1f95 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -18,6 +18,9 @@ module.exports = function (grunt) { eslint: { target: ["src/*.js"] }, + nodeunit : { + all : ["test/*_test.js"] + }, watch : { js : { files : ["src/*.js"], @@ -31,12 +34,13 @@ module.exports = function (grunt) { }); // tasks + grunt.loadNpmTasks("grunt-contrib-nodeunit"); grunt.loadNpmTasks("grunt-contrib-watch"); grunt.loadNpmTasks("grunt-babel"); grunt.loadNpmTasks("grunt-eslint"); // aliases - grunt.registerTask("test", ["eslint"]); + grunt.registerTask("test", ["eslint", "nodeunit"]); grunt.registerTask("build", ["babel"]); grunt.registerTask("default", ["build", "test"]); }; diff --git a/lib/worker.js b/lib/worker.js index 40478fc..4ee31f6 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -26,6 +26,9 @@ process.once("message", function (obj) { sexp = undefined; global.self = { + close: function close() { + process.exit(0); + }, postMessage: function postMessage(msg) { process.send(JSON.stringify({ data: msg })); }, diff --git a/package.json b/package.json index 66f96a8..27c2a53 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tiny-worker", - "version": "1.0.3", + "version": "1.0.4", "description": "Tiny WebWorker for Server", "main": "lib/index.js", "scripts": { @@ -27,6 +27,7 @@ "grunt": "^0.4.5", "grunt-babel": "^5.0.0", "grunt-cli": "^0.1.13", + "grunt-contrib-nodeunit": "^0.4.1", "grunt-contrib-watch": "^0.6.1", "grunt-eslint": "^17.1.0" }, diff --git a/src/worker.js b/src/worker.js index dde73a4..9ee0f0f 100644 --- a/src/worker.js +++ b/src/worker.js @@ -24,6 +24,9 @@ process.once("message", function (obj) { sexp; global.self = { + close: function () { + process.exit(0); + }, postMessage: function (msg) { process.send(JSON.stringify({data: msg})); }, diff --git a/test/worker_repeater.js b/test/worker_repeater.js new file mode 100644 index 0000000..75eb464 --- /dev/null +++ b/test/worker_repeater.js @@ -0,0 +1,3 @@ +self.onmessage = function (ev) { + postMessage(ev.data); +}; \ No newline at end of file diff --git a/test/worker_test.js b/test/worker_test.js new file mode 100644 index 0000000..f156b0a --- /dev/null +++ b/test/worker_test.js @@ -0,0 +1,54 @@ +var path = require("path"), + Worker = require(path.join("..", "lib", "index.js")); + +exports["external script"] = { + setUp: function (done) { + this.worker = new Worker(path.join(__dirname, "worker_repeater.js")); + this.msg = "Hello World!"; + this.response = ""; + done(); + }, + test: function (test) { + var self = this; + + test.expect(2); + test.notEqual(this.msg, this.response, "Should not match"); + + this.worker.onmessage = function (ev) { + self.response = ev.data; + self.worker.terminate(); + test.equal(self.msg, self.response, "Should be a match"); + test.done(); + }; + + this.worker.postMessage(this.msg); + } +}; + +exports["inline script"] = { + setUp: function (done) { + this.worker = new Worker(function () { + self.onmessage = function (ev) { + postMessage(ev.data); + }; + }); + this.msg = "Hello World!"; + this.response = ""; + done(); + }, + test: function (test) { + var self = this; + + test.expect(2); + test.notEqual(this.msg, this.response, "Should not match"); + + this.worker.onmessage = function (ev) { + self.response = ev.data; + self.worker.terminate(); + test.equal(self.msg, self.response, "Should be a match"); + test.done(); + }; + + this.worker.postMessage(this.msg); + } +}; -- GitLab