Hello, Attached are two patches. The first one contains some unit tests for the first half of opensrf.js. These make use of the DOH (Dojo Objective Harness) framework that Dan Scott had put into place in this commit: http://svn.open-ils.org/trac/OpenSRF/changeset/2217/
The second patch contains a fix for a bug I found in opensrf.js while writing the unit tests. There were references to arguments that weren't declared in several of the function declarations. Natually, many of the unit tests will not pass until this fix is put into place. Kevin Beswick
Index: src/javascript/opensrf.js =================================================================== --- src/javascript/opensrf.js (revision 2228) +++ src/javascript/opensrf.js (working copy) @@ -90,12 +90,12 @@ function osrfMethod(hash) { this.hash = hash; this._encodehash = true; } -osrfMethod.prototype.method = function() { +osrfMethod.prototype.method = function(d) { if(arguments.length == 1) this.hash.method = d; return this.hash.method; }; -osrfMethod.prototype.params = function() { +osrfMethod.prototype.params = function(d) { if(arguments.length == 1) this.hash.params = d; return this.hash.params; @@ -114,12 +114,12 @@ function osrfMethodException(hash) { this.hash = hash; this._encodehash = true; } -osrfMethodException.prototype.status = function() { +osrfMethodException.prototype.status = function(d) { if(arguments.length == 1) this.hash.status = d; return this.hash.status; }; -osrfMethodException.prototype.statusCode = function() { +osrfMethodException.prototype.statusCode = function(d) { if(arguments.length == 1) this.hash.statusCode = d; return this.hash.statusCode; @@ -128,12 +128,12 @@ function osrfConnectStatus(hash) { this.hash = hash; this._encodehash = true; } -osrfConnectStatus.prototype.status = function() { +osrfConnectStatus.prototype.status = function(d) { if(arguments.length == 1) this.hash.status = d; return this.hash.status; }; -osrfConnectStatus.prototype.statusCode = function() { +osrfConnectStatus.prototype.statusCode = function(d) { if(arguments.length == 1) this.hash.statusCode = d; return this.hash.statusCode; @@ -142,17 +142,17 @@ function osrfResult(hash) { this.hash = hash; this._encodehash = true; } -osrfResult.prototype.status = function() { +osrfResult.prototype.status = function(d) { if(arguments.length == 1) this.hash.status = d; return this.hash.status; }; -osrfResult.prototype.statusCode = function() { +osrfResult.prototype.statusCode = function(d) { if(arguments.length == 1) this.hash.statusCode = d; return this.hash.statusCode; }; -osrfResult.prototype.content = function() { +osrfResult.prototype.content = function(d) { if(arguments.length == 1) this.hash.content = d; return this.hash.content; @@ -161,12 +161,12 @@ function osrfServerError(hash) { this.hash = hash; this._encodehash = true; } -osrfServerError.prototype.status = function() { +osrfServerError.prototype.status = function(d) { if(arguments.length == 1) this.hash.status = d; return this.hash.status; }; -osrfServerError.prototype.statusCode = function() { +osrfServerError.prototype.statusCode = function(d) { if(arguments.length == 1) this.hash.statusCode = d; return this.hash.statusCode; @@ -175,12 +175,12 @@ function osrfContinueStatus(hash) { this.hash = hash; this._encodehash = true; } -osrfContinueStatus.prototype.status = function() { +osrfContinueStatus.prototype.status = function(d) { if(arguments.length == 1) this.hash.status = d; return this.hash.status; }; -osrfContinueStatus.prototype.statusCode = function() { +osrfContinueStatus.prototype.statusCode = function(d) { if(arguments.length == 1) this.hash.statusCode = d; return this.hash.statusCode;
Index: src/javascript/tests/module.js =================================================================== --- src/javascript/tests/module.js (revision 2228) +++ src/javascript/tests/module.js (working copy) @@ -3,6 +3,14 @@ dojo.require("DojoSRF"); try{ dojo.require("opensrf.tests.testJSON_v1"); + dojo.require("opensrf.tests.testosrfMessage"); + dojo.require("opensrf.tests.testosrfMethod"); + dojo.require("opensrf.tests.testosrfMethodException"); + dojo.require("opensrf.tests.testosrfConnectStatus"); + dojo.require("opensrf.tests.testosrfResult"); + dojo.require("opensrf.tests.testosrfServerError"); + dojo.require("opensrf.tests.testosrfContinueStatus"); + }catch(e){ doh.debug(e); } Index: src/javascript/tests/testosrfConnectStatus.js new file mode 100644 =================================================================== ---src/javascript/tests/testosrfConnectStatus.js (revision 0) +++src/javascript/tests/testosrfConnectStatus.js (revision 0) @@ -0,0 +1,45 @@ +dojo.provide('opensrf.tests.testosrfConnectStatus'); + +dojo.require('opensrf.opensrf', true); + +var setupFunc = (function() { + var h = { status: "status", statusCode: 1 }; + this.osrfconnstatus = new osrfConnectStatus(h); +}); + +doh.register("osrfConnectStatusTests", [ +//Begin Tests +{ + name: "osrfConnectStatusCreateTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfconnstatus); + doh.assertTrue(this.osrfconnstatus.hash); + doh.assertTrue(this.osrfconnstatus.hash.status === "status"); + doh.assertTrue(this.osrfconnstatus.hash.statusCode === 1); + doh.assertTrue(this.osrfconnstatus._encodehash); + } +}, + +{ + name: "osrfConnectStatus_statusTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfconnstatus.status("newStatus") === "newStatus"); + doh.assertTrue(this.osrfconnstatus.hash.status === "newStatus"); + doh.assertTrue(this.osrfconnstatus.status("multi", "args") === "newStatus"); + } +}, + +{ + name: "osrfConnectStatus_statusCodeTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfconnstatus.statusCode(2) === 2); + doh.assertTrue(this.osrfconnstatus.hash.statusCode === 2); + doh.assertTrue(this.osrfconnstatus.statusCode(3, "args") === 2); + } +} + +//End Tests +]); Index: src/javascript/tests/testosrfContinueStatus.js new file mode 100644 =================================================================== ---src/javascript/tests/testosrfContinueStatus.js (revision 0) +++src/javascript/tests/testosrfContinueStatus.js (revision 0) @@ -0,0 +1,45 @@ +dojo.provide('opensrf.tests.testosrfContinueStatus'); + +dojo.require('opensrf.opensrf', true); + +var setupFunc = (function() { + var h = { status: "status", statusCode: 1 }; + this.osrfcontinuestatus = new osrfContinueStatus(h); +}); + +doh.register("osrfContinueStatusTests", [ +//Begin Tests +{ + name: "osrfContinueStatusCreateTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfcontinuestatus); + doh.assertTrue(this.osrfcontinuestatus.hash); + doh.assertTrue(this.osrfcontinuestatus.hash.status === "status"); + doh.assertTrue(this.osrfcontinuestatus.hash.statusCode === 1); + doh.assertTrue(this.osrfcontinuestatus._encodehash); + } +}, + +{ + name: "osrfContinueStatus_statusTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfcontinuestatus.status("newStatus") === "newStatus"); + doh.assertTrue(this.osrfcontinuestatus.hash.status === "newStatus"); + doh.assertTrue(this.osrfcontinuestatus.status("multi", "args") === "newStatus"); + } +}, + +{ + name: "osrfContinueStatus_statusCodeTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfcontinuestatus.statusCode(2) === 2); + doh.assertTrue(this.osrfcontinuestatus.hash.statusCode === 2); + doh.assertTrue(this.osrfcontinuestatus.statusCode(3, "args") === 2); + } +} + +//End Tests +]); Index: src/javascript/tests/testosrfMessage.js new file mode 100644 =================================================================== ---src/javascript/tests/testosrfMessage.js (revision 0) +++src/javascript/tests/testosrfMessage.js (revision 0) @@ -0,0 +1,89 @@ +dojo.provide('opensrf.tests.testosrfMessage'); + +dojo.require('opensrf.opensrf', true); + +var setupFunc = (function() { + var h = { locale: "" }; + this.osrfmsg = new osrfMessage(h); +}); + +doh.register("osrfMessageTests", [ +//Begin Tests +{ + name: "osrfMessageCreateTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmsg.hash.locale === 'en-US'); + doh.assertTrue(this.osrfmsg._encodehash); + } +}, + +{ + name: "osrfMessage_threadTraceTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmsg.threadTrace() == undefined); + doh.assertTrue(this.osrfmsg.threadTrace("abc") === "abc"); + doh.assertTrue(this.osrfmsg.threadTrace("123", "456") === "abc"); + doh.assertTrue(this.osrfmsg.hash.threadTrace === "abc"); + } +}, + +{ + name: "osrfMessage_typeTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmsg.type() == undefined); + doh.assertTrue(this.osrfmsg.type("type") === "type"); + doh.assertTrue(this.osrfmsg.type("multi", "argument") === "type"); + doh.assertTrue(this.osrfmsg.hash.type === "type"); + } +}, + +{ + name: "osrfMessage_payloadTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmsg.payload() == undefined); + doh.assertTrue(this.osrfmsg.payload("pay") === "pay"); + doh.assertTrue(this.osrfmsg.payload("multi", "argument") === "pay"); + doh.assertTrue(this.osrfmsg.hash.payload === "pay"); + } +}, + +{ + name: "osrfMessage_localeTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmsg.locale() == "en-US"); + doh.assertTrue(this.osrfmsg.locale("fr-CA") === "fr-CA"); + doh.assertTrue(this.osrfmsg.locale("multi", "argument") === "fr-CA"); + doh.assertTrue(this.osrfmsg.hash.locale === "fr-CA"); + } +}, + +{ + name: "osrfMessage_typeTest", + setUp: function() { + var h = { locale: "" }; + this.osrfmsg = new osrfMessage(h); + + this.res = { + "__c": "osrfMessage", + "__p": { + "threadTrace" : null, + "type" : null, + "payload" : "null", + "locale" : "en-US" + } + }; + }, + runTest: function() { + //XXX there is probably a better way of comparing two js objects + doh.assertTrue(js2JSON(this.osrfmsg.serialize()) === js2JSON(this.res)); + //TODO test when there is a payload + } +} + +//End Tests +]); Index: src/javascript/tests/testosrfMethod.js new file mode 100644 =================================================================== ---src/javascript/tests/testosrfMethod.js (revision 0) +++src/javascript/tests/testosrfMethod.js (revision 0) @@ -0,0 +1,64 @@ +dojo.provide('opensrf.tests.testosrfMethod'); + +dojo.require('opensrf.opensrf', true); + +var setupFunc = (function() { + var h = { method: "someMethod" }; + this.osrfmethod = new osrfMethod(h); +}); + +doh.register("osrfMethodTests", [ +//Begin Tests +{ + name: "osrfMethodCreateTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmethod); + doh.assertTrue(this.osrfmethod.hash); + doh.assertTrue(this.osrfmethod._encodehash); + doh.assertTrue(this.osrfmethod.hash.method === "someMethod"); + } +}, + +{ + name: "osrfMethod_methodTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmethod.method("otherMethod") === "otherMethod"); + doh.assertTrue(this.osrfmethod.hash.method === "otherMethod"); + doh.assertTrue(this.osrfmethod.method("multi", "args") === "otherMethod"); + } +}, + +{ + name: "osrfMethod_paramsTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmethod.params("param1") === "param1"); + doh.assertTrue(this.osrfmethod.hash.params === "param1"); + doh.assertTrue(this.osrfmethod.params("multi", "args") === "param1"); + } +}, + +{ + name: "osrfMethod_serializeTest", + setUp: function() { + var h = { method: "someMethod", params: "param1" }; + this.osrfmethod = new osrfMethod(h); + this.res = { + "__c" : "osrfMethod", + "__p" : { + "method" : "someMethod", + "params" : "param1" + } + }; + }, + runTest: function() { + doh.assertTrue(js2JSON(this.osrfmethod.serialize()) === js2JSON(this.res)); + } +} + + + +//End Tests +]); Index: src/javascript/tests/testosrfMethodException.js new file mode 100644 =================================================================== ---src/javascript/tests/testosrfMethodException.js (revision 0) +++src/javascript/tests/testosrfMethodException.js (revision 0) @@ -0,0 +1,45 @@ +dojo.provide('opensrf.tests.testosrfMethodException'); + +dojo.require('opensrf.opensrf', true); + +var setupFunc = (function() { + var h = { status: "status", statusCode: 1 }; + this.osrfmethodex = new osrfMethodException(h); +}); + +doh.register("osrfMethodExceptionTests", [ +//Begin Tests +{ + name: "osrfMethodExceptionCreateTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmethodex); + doh.assertTrue(this.osrfmethodex.hash); + doh.assertTrue(this.osrfmethodex.hash.status === "status"); + doh.assertTrue(this.osrfmethodex.hash.statusCode === 1); + doh.assertTrue(this.osrfmethodex._encodehash); + } +}, + +{ + name: "osrfMethodException_statusTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmethodex.status("newStatus") === "newStatus"); + doh.assertTrue(this.osrfmethodex.hash.status === "newStatus"); + doh.assertTrue(this.osrfmethodex.status("multi", "args") === "newStatus"); + } +}, + +{ + name: "osrfMethodException_statusCodeTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfmethodex.statusCode(2) === 2); + doh.assertTrue(this.osrfmethodex.hash.statusCode === 2); + doh.assertTrue(this.osrfmethodex.statusCode(3, "args") === 2); + } +} + +//End Tests +]); Index: src/javascript/tests/testosrfResult.js new file mode 100644 =================================================================== ---src/javascript/tests/testosrfResult.js (revision 0) +++src/javascript/tests/testosrfResult.js (revision 0) @@ -0,0 +1,56 @@ +dojo.provide('opensrf.tests.testosrfResult'); + +dojo.require('opensrf.opensrf', true); + +var setupFunc = (function() { + var h = { status: "status", statusCode: 1, content: "content" }; + this.osrfresult = new osrfResult(h); +}); + +doh.register("osrfResultTests", [ +//Begin Tests +{ + name: "osrfResultCreateTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfresult); + doh.assertTrue(this.osrfresult.hash); + doh.assertTrue(this.osrfresult.hash.status === "status"); + doh.assertTrue(this.osrfresult.hash.statusCode === 1); + doh.assertTrue(this.osrfresult.hash.content === "content"); + doh.assertTrue(this.osrfresult._encodehash); + } +}, + +{ + name: "osrfResult_statusTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfresult.status("newStatus") === "newStatus"); + doh.assertTrue(this.osrfresult.hash.status === "newStatus"); + doh.assertTrue(this.osrfresult.status("multi", "args") === "newStatus"); + } +}, + +{ + name: "osrfResult_statusCodeTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfresult.statusCode(2) === 2); + doh.assertTrue(this.osrfresult.hash.statusCode === 2); + doh.assertTrue(this.osrfresult.statusCode(3, "args") === 2); + } +}, + +{ + name: "osrfResult_contentTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfresult.content("stuff") === "stuff"); + doh.assertTrue(this.osrfresult.hash.content === "stuff"); + doh.assertTrue(this.osrfresult.content("multi", "args") === "stuff"); + } +} + +//End Tests +]); Index: src/javascript/tests/testosrfServerError.js new file mode 100644 =================================================================== ---src/javascript/tests/testosrfServerError.js (revision 0) +++src/javascript/tests/testosrfServerError.js (revision 0) @@ -0,0 +1,45 @@ +dojo.provide('opensrf.tests.testosrfServerError'); + +dojo.require('opensrf.opensrf', true); + +var setupFunc = (function() { + var h = { status: "status", statusCode: 1 }; + this.osrfservererror = new osrfServerError(h); +}); + +doh.register("osrfServerErrorTests", [ +//Begin Tests +{ + name: "osrfServerErrorCreateTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfservererror); + doh.assertTrue(this.osrfservererror.hash); + doh.assertTrue(this.osrfservererror.hash.status === "status"); + doh.assertTrue(this.osrfservererror.hash.statusCode === 1); + doh.assertTrue(this.osrfservererror._encodehash); + } +}, + +{ + name: "osrfServerError_statusTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfservererror.status("newStatus") === "newStatus"); + doh.assertTrue(this.osrfservererror.hash.status === "newStatus"); + doh.assertTrue(this.osrfservererror.status("multi", "args") === "newStatus"); + } +}, + +{ + name: "osrfServerError_statusCodeTest", + setUp: setupFunc, + runTest: function() { + doh.assertTrue(this.osrfservererror.statusCode(2) === 2); + doh.assertTrue(this.osrfservererror.hash.statusCode === 2); + doh.assertTrue(this.osrfservererror.statusCode(3, "args") === 2); + } +} + +//End Tests +]);