diff --git a/tests/CustomResultSetOrderTestCase.php b/tests/CustomResultSetOrderTestCase.php index ba8dc1d02..73e4d3c74 100644 --- a/tests/CustomResultSetOrderTestCase.php +++ b/tests/CustomResultSetOrderTestCase.php @@ -84,7 +84,52 @@ class Doctrine_CustomResultSetOrder_TestCase extends Doctrine_UnitTestCase { $this->tables[] = "BoardWithPosition"; parent::prepareTables(); } - + /** + * Checks whether the boards are correctly assigned to the categories. + * + * The 'evil' result set that confuses the object population is displayed below. + * + * catId | catPos | catName | boardPos | board.category_id + * 1 | 0 | First | 0 | 1 + * 2 | 0 | Second | 0 | 2 <-- The split that confuses the object population + * 1 | 0 | First | 1 | 1 + * 1 | 0 | First | 2 | 1 + * 3 | 2 | Third | NULL + */ + + public function testQueryWithOrdering2() { + $q = new Doctrine_Query($this->connection); + print '
';
+        $categories = $q->select('c.*, b.*')
+                ->from('CategoryWithPosition c')
+                ->leftJoin('c.Boards b')
+                ->orderBy('c.position ASC, b.position ASC')
+                ->execute(array(), Doctrine::FETCH_ARRAY);
+
+        $this->assertEqual(3, count($categories), 'Some categories were doubled!');
+                
+        // Check each category
+        foreach ($categories as $category) {
+            switch ($category['name']) {
+                case 'First':
+                    // The first category should have 3 boards, right?
+                    // It has only 1! The other two slipped to the 2nd category!
+                    $this->assertEqual(3, count($category['Boards']));
+                break;
+                case 'Second':
+                    // The second category should have 1 board, but it got 3 now
+                    $this->assertEqual(1, count($category['Boards']));;
+                break;
+                case 'Third':
+                    // The third has no boards as expected.
+                    //print $category->Boards[0]->position;
+                    $this->assertEqual(0, count($category['Boards']));
+                break;
+            }
+            
+        }
+    }
+
     /**
      * Checks whether the boards are correctly assigned to the categories.
      *
@@ -97,31 +142,35 @@ class Doctrine_CustomResultSetOrder_TestCase extends Doctrine_UnitTestCase {
      *  1    | 0      | First    | 2        | 1
      *  3    | 2      | Third    | NULL
      */
+
     public function testQueryWithOrdering() {
         $q = new Doctrine_Query($this->connection);
-        $categories = $q->select("c.*, b.*")
-                ->from("CategoryWithPosition c")
-                ->leftJoin("c.Boards b")
-                ->orderBy("c.position ASC, b.position ASC")
+        $categories = $q->select('c.*, b.*')
+                ->from('CategoryWithPosition c')
+                ->leftJoin('c.Boards b')
+                ->orderBy('c.position ASC, b.position ASC')
                 ->execute();
-        
-        $this->assertEqual(3, $categories->count(), "Some categories were doubled!");
+
+        $this->assertEqual(3, $categories->count(), 'Some categories were doubled!');
                 
         // Check each category
         foreach ($categories as $category) {
             
             switch ($category->name) {
-                case "First":
+                case 'First':
                     // The first category should have 3 boards, right?
                     // It has only 1! The other two slipped to the 2nd category!
+                    print $category->Boards->count();
                     $this->assertEqual(3, $category->Boards->count());
                 break;
-                case "Second":
+                case 'Second':
                     // The second category should have 1 board, but it got 3 now
+                    print $category->Boards->count();
                     $this->assertEqual(1, $category->Boards->count());
                 break;
-                case "Third":
+                case 'Third':
                     // The third has no boards as expected.
+                    //print $category->Boards[0]->position;
                     $this->assertEqual(0, $category->Boards->count());
                 break;
             }