diff --git a/Gruntfile.js b/Gruntfile.js index b66631ec0f271f02e6fa9722359bd59610897659..0ae1f95c8290631b532f1576c0262abd2aa65ae4 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 40478fceebfde7c0ae7acb10f30756a5dec92e03..4ee31f68b894e12ba15ebe2f8dd9426a7ea6be31 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 66f96a8238214a8a9d4093253139d3ed86b88fc3..27c2a532111919eefc8e06b902c2d02031d0bccb 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 dde73a48ca492fccaf5851e90ca408c1c8260549..9ee0f0fbdfb7fc73a2b2843d873fb38ed8e99d2c 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 0000000000000000000000000000000000000000..75eb4640ab58c34a99b2b962976bbf4ad4ebf76f --- /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 0000000000000000000000000000000000000000..f156b0a0bc7616e06565c29e22416d04f4a1c1a9 --- /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); + } +};