diff --git a/lib/js/test/test.js b/lib/js/test/test.js
index ace676f..c30287f 100755
--- a/lib/js/test/test.js
+++ b/lib/js/test/test.js
@@ -47,6 +47,7 @@
     equal(client.testVoid(), undefined);
   });
   test("String", function() {
+    equal(client.testString(''), '');
     equal(client.testString(stringTest), stringTest);
 
     var specialCharacters = 'quote: \" backslash:' +
@@ -57,16 +58,24 @@
     equal(client.testString(specialCharacters),specialCharacters);
   });
   test("Double", function() {
+    equal(client.testDouble(0), 0);
+    equal(client.testDouble(-1), -1);
     equal(client.testDouble(3.14), 3.14);
+    equal(client.testDouble(Math.pow(2,60)), Math.pow(2,60));
   });
   test("Byte", function() {
+    equal(client.testByte(0), 0);
     equal(client.testByte(0x01), 0x01);
   });
   test("I32", function() {
+    equal(client.testI32(0), 0);
     equal(client.testI32(Math.pow(2,30)), Math.pow(2,30));
+    equal(client.testI32(-Math.pow(2,30)), -Math.pow(2,30));
   });
   test("I64", function() {
+    equal(client.testI64(0), 0);
     equal(client.testI64(Math.pow(2,60)), Math.pow(2,60));
+    equal(client.testI64(-Math.pow(2,60)), -Math.pow(2,60));
   });
 
 
@@ -371,7 +380,7 @@
     client.testI64(Math.pow(-2,61), function(result) {
       equal(result, Math.pow(-2,61));
     })
-    .error( function(e) {  ok(false); } )
+    .error( function(xhr, status, e) {  ok(false, e.message); } )
     .success(function(result) {
       equal(result, Math.pow(-2,61));
     })
@@ -390,7 +399,7 @@
       ok(false);
       QUnit.start();
     })
-    .error(function(xhr,status,e){
+    .error(function(xhr, status, e){
       equal(e.errorCode, 1001);
       equal(e.message, "Xception");
       QUnit.start();
