function testIterator()
 {
     $set = new DataObjectSet(array($one = new DataObject(array('Title' => 'one')), $two = new DataObject(array('Title' => 'two')), $three = new DataObject(array('Title' => 'three')), $four = new DataObject(array('Title' => 'four'))));
     // test Pos() with foreach()
     $i = 0;
     foreach ($set as $item) {
         $i++;
         $this->assertEquals($i, $item->Pos(), "Iterator position is set correctly on ViewableData when iterated with foreach()");
     }
     // test Pos() manually
     $this->assertEquals(1, $one->Pos());
     $this->assertEquals(2, $two->Pos());
     $this->assertEquals(3, $three->Pos());
     $this->assertEquals(4, $four->Pos());
     // test DataObjectSet->Count()
     $this->assertEquals(4, $set->Count());
     // test DataObjectSet->First()
     $this->assertSame($one, $set->First());
     // test DataObjectSet->Last()
     $this->assertSame($four, $set->Last());
     // test ViewableData->First()
     $this->assertTrue($one->First());
     $this->assertFalse($two->First());
     $this->assertFalse($three->First());
     $this->assertFalse($four->First());
     // test ViewableData->Last()
     $this->assertFalse($one->Last());
     $this->assertFalse($two->Last());
     $this->assertFalse($three->Last());
     $this->assertTrue($four->Last());
     // test ViewableData->Middle()
     $this->assertFalse($one->Middle());
     $this->assertTrue($two->Middle());
     $this->assertTrue($three->Middle());
     $this->assertFalse($four->Middle());
     // test ViewableData->Even()
     $this->assertFalse($one->Even());
     $this->assertTrue($two->Even());
     $this->assertFalse($three->Even());
     $this->assertTrue($four->Even());
     // test ViewableData->Odd()
     $this->assertTrue($one->Odd());
     $this->assertFalse($two->Odd());
     $this->assertTrue($three->Odd());
     $this->assertFalse($four->Odd());
 }
 /**
  * Test {@link DataObjectSet->sort()}
  */
 function testSort()
 {
     $set = new DataObjectSet(array(array('Name' => 'Object1', 'F1' => 1, 'F2' => 2, 'F3' => 3), array('Name' => 'Object2', 'F1' => 2, 'F2' => 1, 'F3' => 4), array('Name' => 'Object3', 'F1' => 5, 'F2' => 2, 'F3' => 2)));
     // test a single sort ASC
     $set->sort('F3', 'ASC');
     $this->assertEquals($set->First()->Name, 'Object3', 'Object3 should be first in the set');
     // test a single sort DESC
     $set->sort('F3', 'DESC');
     $this->assertEquals($set->First()->Name, 'Object2', 'Object2 should be first in the set');
     // test a multi sort
     $set->sort(array('F2' => 'ASC', 'F1' => 'ASC'));
     $this->assertEquals($set->Last()->Name, 'Object3', 'Object3 should be last in the set');
     // test a multi sort
     $set->sort(array('F2' => 'ASC', 'F1' => 'DESC'));
     $this->assertEquals($set->Last()->Name, 'Object1', 'Object1 should be last in the set');
 }