<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -13,13 +13,26 @@ var JsUnitTest = {
         if (useDoubleQuotes) return '&quot;' + escapedString.replace(/&quot;/g, '\\&quot;') + '&quot;';
         return &quot;'&quot; + escapedString.replace(/'/g, '\\\'') + &quot;'&quot;;
       };
+			if (JsUnitTest.getClass(object) === 'Object') {
+        var keys_values = new Array(), prefix = 'Object: { ';
+        for (property in object) {
+          keys_values.push(property + ': ' + object[property]);
+        }
+        return (prefix + keys_values.join(', ') + ' }');
+      }
       return String(object);
     } catch (e) {
       if (e instanceof RangeError) return '...';
       throw e;
     }
   },
-  $: function(element) {
+
+  getClass: function(object) {
+    return Object.prototype.toString.call(object)
+     .match(/^\[object\s(.*)\]$/)[1]; 
+  },
+
+	$: function(element) {
     if (arguments.length &gt; 1) {
       for (var i = 0, elements = [], length = arguments.length; i &lt; length; i++)
         elements.push(this.$(arguments[i]));
@@ -29,7 +42,8 @@ var JsUnitTest = {
       element = document.getElementById(element);
     return element;
   },
-  gsub: function(source, pattern, replacement) {
+
+	gsub: function(source, pattern, replacement) {
     var result = '', match;
     replacement = arguments.callee.prepareReplacement(replacement);
 
@@ -60,6 +74,34 @@ var JsUnitTest = {
 
   	return myarray;
   },
+  
+  // from now we recursively zip &amp; compare nested arrays
+  areArraysEqual: function(expected, actual) {
+    var expected_array = JsUnitTest.flattenArray(expected);
+    var actual_array   = JsUnitTest.flattenArray(actual);
+    if (expected_array.length == actual_array.length) {
+      for (var i=0; i &lt; expected_array.length; i++) {
+        if (expected_array[i] != actual_array[i]) return false;
+      };
+      return true;
+    }
+    return false;
+  },
+  
+  areArraysNotEqual: function(expected, actual) {
+    return !this.areArraysEqual(expected, actual);
+  },
+
+  areHashesEqual: function(expected, actual) {
+    var expected_array = JsUnitTest.hashToSortedArray(expected);
+    var actual_array   = JsUnitTest.hashToSortedArray(actual);
+    return this.areArraysEqual(expected_array, actual_array);
+  },
+  
+  areHashesNotEqual: function(expected, actual) {
+    return !this.areHashesEqual(expected, actual);
+  },
+  
   hashToSortedArray: function(hash) {
     var results = [];
     for (key in hash) {
@@ -150,7 +192,8 @@ var JsUnitTest = {
 
     return match;
   },
-  toQueryParams: function(query, separator) {
+  
+	toQueryParams: function(query, separator) {
     var query = query || window.location.search;
     var match = query.replace(/^\s+/, '').replace(/\s+$/, '').match(/([^?#]*)(#.*)?$/);
     if (!match) return { };
@@ -188,4 +231,4 @@ JsUnitTest.gsub.prepareReplacement = function(replacement) {
   if (typeof replacement == &quot;function&quot;) return replacement;
   var template = new Template(replacement);
   return function(match) { return template.evaluate(match) };
-};
\ No newline at end of file
+};</diff>
      <filename>src/common.js</filename>
    </modified>
    <modified>
      <diff>@@ -86,7 +86,7 @@
       testcase.error({name: &quot;name&quot;, message: &quot;An Error&quot;});
       assertEqual(0, testcase.assertions, &quot;Assertions&quot;);
       assertEqual(1, testcase.errors, &quot;Errors&quot;);
-      assertEqual(&quot;name: An Error([object Object])&quot;, testcase.messages[0], 'Should be equal');
+      assertEqual(&quot;name: An Error(Object: { name: name, message: An Error })&quot;, testcase.messages[0], 'Should be equal');
       assertEqual('error', testcase.status(), 'Should be equal');
     }},
 
@@ -94,4 +94,4 @@
 // ]]&gt;
 &lt;/script&gt;
 &lt;/body&gt;
-&lt;/html&gt;
\ No newline at end of file
+&lt;/html&gt;</diff>
      <filename>test/unit/test_case_test.html</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>14444b93e91eaca23982d73b2992827a394ec893</id>
    </parent>
    <parent>
      <id>fbf544339388063b5cc9fa29541aa968c0518438</id>
    </parent>
  </parents>
  <author>
    <name>Dr Nic Williams</name>
    <email>drnicwilliams@gmail.com</email>
  </author>
  <url>http://github.com/drnic/jsunittest/commit/a774b95645b368f9aa36d448954a48206cad82b5</url>
  <id>a774b95645b368f9aa36d448954a48206cad82b5</id>
  <committed-date>2009-03-21T07:46:20-07:00</committed-date>
  <authored-date>2009-03-21T07:46:20-07:00</authored-date>
  <message>Merge branch 'master' of git://github.com/kristopher/jsunittest into integration</message>
  <tree>ad121a8c25590e80b22c939d0f0531ad1ce7c429</tree>
  <committer>
    <name>Dr Nic Williams</name>
    <email>drnicwilliams@gmail.com</email>
  </committer>
</commit>
