diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index 4a689fe..061a570 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -135,56 +135,56 @@
    * Prints "testVoid()" and returns nothing.
    */
   void         testVoid(),
-  
+
   /**
    * Prints 'testString("%s")' with thing as '%s'
    * @param string thing - the string to print
    * @return string - returns the string 'thing'
    */
   string       testString(1: string thing),
-  
+
   /**
    * Prints 'testByte("%d")' with thing as '%d'
    * @param byte thing - the byte to print
    * @return byte - returns the byte 'thing'
    */
   byte         testByte(1: byte thing),
-  
+
   /**
    * Prints 'testI32("%d")' with thing as '%d'
    * @param i32 thing - the i32 to print
    * @return i32 - returns the i32 'thing'
    */
   i32          testI32(1: i32 thing),
- 
+
   /**
    * Prints 'testI64("%d")' with thing as '%d'
    * @param i64 thing - the i64 to print
    * @return i64 - returns the i64 'thing'
    */
   i64          testI64(1: i64 thing),
-  
+
   /**
    * Prints 'testDouble("%f")' with thing as '%f'
    * @param double thing - the double to print
    * @return double - returns the double 'thing'
    */
   double       testDouble(1: double thing),
-  
+
   /**
    * Prints 'testStruct("{%s}")' where thing has been formatted into a string of comma seperated values
    * @param Xtruct thing - the Xtruct to print
    * @return Xtruct - returns the Xtruct 'thing'
    */
   Xtruct       testStruct(1: Xtruct thing),
-  
+
   /**
    * Prints 'testNest("{%s}")' where thing has been formatted into a string of the nested struct
    * @param Xtruct2 thing - the Xtruct2 to print
    * @return Xtruct2 - returns the Xtruct2 'thing'
    */
   Xtruct2      testNest(1: Xtruct2 thing),
- 
+
   /**
    * Prints 'testMap("{%s")' where thing has been formatted into a string of  'key => value' pairs
    *  seperated by commas and new lines
@@ -192,7 +192,7 @@
    * @return map<i32,i32> - returns the map<i32,i32> 'thing'
    */
   map<i32,i32> testMap(1: map<i32,i32> thing),
-  
+
   /**
    * Prints 'testStringMap("{%s}")' where thing has been formatted into a string of  'key => value' pairs
    *  seperated by commas and new lines
@@ -200,7 +200,7 @@
    * @return map<string,string> - returns the map<string,string> 'thing'
    */
   map<string,string> testStringMap(1: map<string,string> thing),
-  
+
   /**
    * Prints 'testSet("{%s}")' where thing has been formatted into a string of  values
    *  seperated by commas and new lines
@@ -208,7 +208,7 @@
    * @return set<i32> - returns the set<i32> 'thing'
    */
   set<i32>     testSet(1: set<i32> thing),
-  
+
   /**
    * Prints 'testList("{%s}")' where thing has been formatted into a string of  values
    *  seperated by commas and new lines
@@ -216,7 +216,7 @@
    * @return list<i32> - returns the list<i32> 'thing'
    */
   list<i32>    testList(1: list<i32> thing),
-  
+
   /**
    * Prints 'testEnum("%d")' where thing has been formatted into it's numeric value
    * @param Numberz thing - the Numberz to print
@@ -243,23 +243,23 @@
    * So you think you've got this all worked, out eh?
    *
    * Creates a the returned map with these values and prints it out:
-   *   { 1 => { 2 => argument, 
-   *            3 => argument, 
+   *   { 1 => { 2 => argument,
+   *            3 => argument,
    *          },
    *     2 => { 6 => <empty Insanity struct>, },
    *   }
-   * @return map<UserId, map<Numberz,Insanity>> - a map with the above values 
+   * @return map<UserId, map<Numberz,Insanity>> - a map with the above values
    */
   map<UserId, map<Numberz,Insanity>> testInsanity(1: Insanity argument),
 
   /**
    * Prints 'testMulti()'
-   * @param byte arg0 - 
-   * @param i32 arg1 - 
-   * @param i64 arg2 - 
-   * @param map<i16, string> arg3 - 
-   * @param Numberz arg4 - 
-   * @param UserId arg5 - 
+   * @param byte arg0 -
+   * @param i32 arg1 -
+   * @param i64 arg2 -
+   * @param map<i16, string> arg3 -
+   * @param Numberz arg4 -
+   * @param UserId arg5 -
    * @return Xtruct - returns an Xtruct with string_thing = "Hello2, byte_thing = arg0, i32_thing = arg1
    *    and i64_thing = arg2
    */
