public function testInputOutput()
 {
     $this->control = new \stdClass();
     $this->control->page = 'sheet1';
     $this->control->data = array(array('hair' => 'blond', 'eyes' => 'green', 'pants' => 'jeans'), array('hair' => 'brown', 'eyes' => 'blue'));
     /**
      * Assert get() returns an empty array after construction
      */
     $_control_group = 'ExportData::get';
     // Desired test result
     $control = array();
     // The test and result
     $object = new ExportData($this->control->page);
     $return = $object->get();
     $result = $return;
     $this->assertIdentical($control, $result, "Assert get() returns an empty array after construction", $_control_group);
     // Assert after added two rows of data, get returns the correct expected array
     $control = array('sheet1' => array(0 => array('hair' => 'blond', 'eyes' => 'green', 'pants' => 'jeans'), 1 => array('hair' => 'brown', 'eyes' => 'blue')));
     foreach ($this->control->data as $row) {
         foreach ($row as $key => $value) {
             $object->add($key, $value);
         }
         $object->next();
     }
     $result = $object->get();
     $this->assertIdentical($control, $result, "Assert after added two rows of data, get returns the correct expected array", $_control_group);
     // Assert getPointer returns the expected value
     $control = 2;
     $result = $object->getPointer();
     $this->assertIdentical($control, $result, "Assert getPointer returns the expected value", $_control_group);
     // Assert getCurrent will return empty array on new line
     $control = array();
     $result = $object->getCurrent();
     $this->assertIdentical($control, $result, "Assert getCurrent will return empty array on new line", $_control_group);
     // Assert getCurrent after setting back to prev rows returns the row as expected
     $control = array('hair' => 'brown', 'eyes' => 'blue');
     $object->setPointer(1);
     $result = $object->getCurrent();
     $this->assertIdentical($control, $result, "Assert getCurrent after setting back to prev rows returns the row as expected", $_control_group);
     // Assert getCurrent with an argument returns expected value
     $control = 'blue';
     $result = $object->getCurrent('eyes');
     $this->assertIdentical($control, $result, "Assert getCurrent with an argument returns expected value", $_control_group);
     // Assert normalize works correctly for a single page
     $control = array('sheet1' => array(0 => array('hair' => 'blond', 'eyes' => 'green', 'pants' => 'jeans'), 1 => array('hair' => 'brown', 'eyes' => 'blue', 'pants' => '—')));
     // The test and result
     $return = $object->normalize('—');
     $result = $object->get();
     $this->assertIdentical($control, $result, "Assert normalize works correctly for a single page", $_control_group);
     // Assert find with min arguments returns pointer and key value in array
     $control = array(1 => array('eyes' => 'blue'));
     $result = $object->find('blue');
     $this->assertIdentical($control, $result, "Assert find with min arguments works correctly", $_control_group);
     // Assert find with key argument returns correctly
     $control = array(1 => array('eyes' => 'blue'));
     $result = $object->find('blue', 'eyes');
     $this->assertIdentical($control, $result, "Assert find with key argument", $_control_group);
     // Assert find with key argument that does not contain the value returns empty array
     $control = array();
     $result = $object->find('hair', 'eyes');
     $this->assertIdentical($control, $result, "Assert find with key argument", $_control_group);
     // Assert setPointer with a NULL value moves the pointer to the end
     $control = 2;
     $object->setPointer();
     $result = $object->getPointer();
     $this->assertIdentical($control, $result, "Assert setPointer with a NULL value moves the pointer to the end", $_control_group);
     // Assert find with 1 argument does not return multiple records when possible, only one and it's the earliest
     $control = array(1 => array('eyes' => 'blue'));
     $object->add('eyes', 'blue');
     $object->add('pants', 'blue');
     $result = $object->find('blue');
     $this->assertIdentical($control, $result, "Assert find with 1 argument does not return multiple records when possible, only one and it's the most recent", $_control_group);
     // Assert find asking for 1 record but searching descending returns the most recent record
     $control = array(2 => array('eyes' => 'blue', 'pants' => 'blue'));
     $result = $object->find('blue', NULL, 1, 1);
     $this->assertIdentical($control, $result, "Assert find asking for 1 record but searching descending returns the most recent record", $_control_group);
     // Assert find asking for 1 record with key but searching descending returns the most recent record
     $control = array(2 => array('eyes' => 'blue'));
     $result = $object->find('blue', 'eyes', 1, 1);
     $this->assertIdentical($control, $result, "Assert find asking for 1 record but searching descending returns the most recent record", $_control_group);
     // Assert find asking for all records with key but searching descending returns what we expect
     $control = array(2 => array('eyes' => 'blue'), 1 => array('eyes' => 'blue'));
     $result = $object->find('blue', 'eyes', 0, 1);
     $this->assertIdentical($control, $result, "Assert find asking for all records with key but searching descending returns what we expect", $_control_group);
     // END ASSERT
 }