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