diff --git a/lib/js/test/test.js b/lib/js/test/test.js
index 01d09ce..ee14612 100755
--- a/lib/js/test/test.js
+++ b/lib/js/test/test.js
@@ -17,7 +17,7 @@
  * under the License.
  */
  /* jshint -W100 */
- 
+
 /*
  * JavaScript test suite for ThriftTest.thrift. These tests
  * will run against Normal (-gen js) and jQuery (-gen js:jquery)
@@ -26,15 +26,15 @@
  * Synchronous blocking calls should be identical in both 
  * Normal and jQuery interfaces. All synchronous tests belong
  * here.
- * 
- * Asynchronous success callbacks passed as the last parameter 
+ *
+ * Asynchronous success callbacks passed as the last parameter
  * of an RPC call should be identical in both Normal and jQuery
  * interfaces. Async success tests belong here.
- * 
+ *
  * Asynchronous exception processing is different in Normal
  * and jQuery interfaces. Such tests belong in the test-nojq.js
  * or test-jq.js files respectively. jQuery specific XHR object
- * tests also belong in test-jq.js. Do not create any jQuery 
+ * tests also belong in test-jq.js. Do not create any jQuery
  * dependencies in this file or in test-nojq.js
  *
  * To compile client code for this test use:
@@ -43,7 +43,7 @@
  *      $ thrift -gen js:jquery ThriftTest.thrift
  *
  * See also:
- * ++ test-nojq.js for "-gen js" only tests  
+ * ++ test-nojq.js for "-gen js" only tests
  * ++ test-jq.js for "-gen js:jquery" only tests
  */
 
@@ -68,7 +68,7 @@
 
 // all Languages in UTF-8
 var stringTest = "Afrikaans, Alemannisch, Aragonés, العربية, مصرى, Asturianu, Aymar aru, Azərbaycan, Башҡорт, Boarisch, Žemaitėška, Беларуская, Беларуская (тарашкевіца), Български, Bamanankan, বাংলা, Brezhoneg, Bosanski, Català, Mìng-dĕ̤ng-ngṳ̄, Нохчийн, Cebuano, ᏣᎳᎩ, Česky, Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ, Чӑвашла, Cymraeg, Dansk, Zazaki, ދިވެހިބަސް, Ελληνικά, Emiliàn e rumagnòl, English, Esperanto, Español, Eesti, Euskara, فارسی, Suomi, Võro, Føroyskt, Français, Arpetan, Furlan, Frysk, Gaeilge, 贛語, Gàidhlig, Galego, Avañe'ẽ, ગુજરાતી, Gaelg, עברית, हिन्दी, Fiji Hindi, Hrvatski, Kreyòl ayisyen, Magyar, Հայերեն, Interlingua, Bahasa Indonesia, Ilokano, Ido, Íslenska, Italiano, 日本語, Lojban, Basa Jawa, ქართული, Kongo, Kalaallisut, ಕನ್ನಡ, 한국어, Къарачай-Малкъар, Ripoarisch, Kurdî, Коми, Kernewek, Кыргызча, Latina, Ladino, Lëtzebuergesch, Limburgs, Lingála, ລາວ, Lietuvių, Latviešu, Basa Banyumasan, Malagasy, Македонски, മലയാളം, मराठी, Bahasa Melayu, مازِرونی, Nnapulitano, Nedersaksisch, नेपाल भाषा, Nederlands, ‪Norsk (nynorsk)‬, ‪Norsk (bokmål)‬, Nouormand, Diné bizaad, Occitan, Иронау, Papiamentu, Deitsch, Norfuk / Pitkern, Polski, پنجابی, پښتو, Português, Runa Simi, Rumantsch, Romani, Română, Русский, Саха тыла, Sardu, Sicilianu, Scots, Sámegiella, Simple English, Slovenčina, Slovenščina, Српски / Srpski, Seeltersk, Svenska, Kiswahili, தமிழ், తెలుగు, Тоҷикӣ, ไทย, Türkmençe, Tagalog, Türkçe, Татарча/Tatarça, Українська, اردو, Tiếng Việt, Volapük, Walon, Winaray, 吴语, isiXhosa, ייִדיש, Yorùbá, Zeêuws, 中文, Bân-lâm-gú, 粵語";
-  
+
 function checkRecursively(map1, map2) {
   if (typeof map1 !== 'function' && typeof map2 !== 'function') {
     if (!map1 || typeof map1 !== 'object') {
@@ -136,7 +136,7 @@
     equal(structTestOutput.byte_thing, structTestInput.byte_thing);
     equal(structTestOutput.i32_thing, structTestInput.i32_thing);
     equal(structTestOutput.i64_thing, structTestInput.i64_thing);
-    
+
     equal(JSON.stringify(structTestOutput), JSON.stringify(structTestInput));
   });
 
@@ -147,21 +147,21 @@
     xtrTestInput.i32_thing = Math.pow(2,30);
     //This is usually 2^60 but JS cannot represent anything over 2^52 accurately
     xtrTestInput.i64_thing = Math.pow(2,52);
-    
+
     var nestTestInput = new ThriftTest.Xtruct2();
     nestTestInput.byte_thing = 0x02;
     nestTestInput.struct_thing = xtrTestInput;
     nestTestInput.i32_thing = Math.pow(2,15);
-    
+
     var nestTestOutput = client.testNest(nestTestInput);
-    
+
     equal(nestTestOutput.byte_thing, nestTestInput.byte_thing);
     equal(nestTestOutput.struct_thing.string_thing, nestTestInput.struct_thing.string_thing);
     equal(nestTestOutput.struct_thing.byte_thing, nestTestInput.struct_thing.byte_thing);
     equal(nestTestOutput.struct_thing.i32_thing, nestTestInput.struct_thing.i32_thing);
     equal(nestTestOutput.struct_thing.i64_thing, nestTestInput.struct_thing.i64_thing);
     equal(nestTestOutput.i32_thing, nestTestInput.i32_thing);
-    
+
     equal(JSON.stringify(nestTestOutput), JSON.stringify(nestTestInput));
   });
 
@@ -217,7 +217,7 @@
       input.readMessageBegin();
       input.readStructBegin();
 
-      // read Xtruct data with Xtruct3 
+      // read Xtruct data with Xtruct3
       input.readFieldBegin();
       xtruct3.read(input);
       input.readFieldEnd();
@@ -262,7 +262,7 @@
         equal(mapMapTestOutput[key][key2], mapMapTestExpectedResult[key][key2]);
       }
     }
-    
+
     checkRecursively(mapMapTestOutput, mapMapTestExpectedResult);
   });
 
@@ -289,7 +289,7 @@
 
   test("TException", function() {
     //ThriftTest does not list TException as a legal exception so it will
-    // generate an exception on the server that does not propagate back to 
+    // generate an exception on the server that does not propagate back to
     // the client. This test has been modified to equate to "no exception"
     expect(1);
     try{
