public function testListSorts()
 {
     MySql::executeStatement("TRUNCATE TABLE tblCompany");
     $company = new Company();
     $repos = $company->getRepository();
     $repos->clearObjectCache();
     $company = new Company();
     $company->CompanyName = "A";
     $company->Balance = 5;
     $company->save();
     $company = new Company();
     $company->CompanyName = "B";
     $company->Balance = 3;
     $company->save();
     $company = new Company();
     $company->CompanyName = "B";
     $company->Balance = 4;
     $company->save();
     $company = new Company();
     $company->CompanyName = "B";
     $company->Balance = 2;
     $company->save();
     $company = new Company();
     $company->CompanyName = "C";
     $company->Balance = 2;
     $company->save();
     $company = new Company();
     $company->CompanyName = "D";
     $company->Balance = 1;
     $company->save();
     $list = new Collection("\\Rhubarb\\Stem\\Tests\\Fixtures\\Company");
     $list->addSort("CompanyName", true);
     // Trigger list fetching.
     sizeof($list);
     $sql = Mysql::getPreviousStatement();
     $this->assertContains("ORDER BY CompanyName ASC", $sql);
     $list->addSort("Balance", false);
     // Trigger list fetching.
     sizeof($list);
     $sql = Mysql::getPreviousStatement();
     $this->assertContains("ORDER BY CompanyName ASC, Balance DESC", $sql);
     // this should not affect our order by clause as this column isn't in our schema.
     $list->addSort("NonExistant", false);
     try {
         // Trigger list fetching.
         sizeof($list);
     } catch (SortNotValidException $er) {
     }
     $sql = Mysql::getPreviousStatement();
     // As NonExistant is at the end of the sort collection we can't use any back end performance
     // optimisation (as the manual sorting will destroy it)
     $this->assertNotContains("ORDER BY", $sql);
     $list->replaceSort(["CompanyName" => false, "Balance" => true]);
     // Trigger list fetching.
     sizeof($list);
     $this->assertEquals("D", $list[0]->CompanyName);
     $this->assertEquals("C", $list[1]->CompanyName);
     $this->assertEquals("B", $list[2]->CompanyName);
     $this->assertEquals("B", $list[3]->CompanyName);
     $this->assertEquals("B", $list[4]->CompanyName);
     $this->assertEquals("A", $list[5]->CompanyName);
     $this->assertEquals(2, $list[2]->Balance);
     $this->assertEquals(3, $list[3]->Balance);
     $this->assertEquals(4, $list[4]->Balance);
     $list->replaceSort(["CompanyName" => false, "CompanyIDSquared" => true, "Balance" => false]);
     // Trigger list fetching.
     sizeof($list);
     $this->assertEquals(3, $list[2]->Balance);
     $this->assertEquals(4, $list[3]->Balance);
     $this->assertEquals(2, $list[4]->Balance);
 }