$t->is($response->getGuid(), 'guid', '->unwriteDocument() unwrites the GUID');
$fields = array('isStored' => xfField::STORED, 'isIndexed' => xfField::INDEXED, 'isTokenized' => xfField::TOKENIZED, 'isBinary' => xfField::BINARY);
foreach ($fields as $property => $type) {
    $name = 'test';
    $field = new Zend_Search_Lucene_Field($name, 'bar', 'utf8', false, false, false, false);
    $field->{$property} = true;
    $doc->addField($field);
    $doc->addField(Zend_Search_Lucene_Field::UnIndexed('__boosts', serialize(array('test' => 1))));
    $response = $engine->unwriteDocument($doc)->getField('test')->getField()->getType();
    $t->is($response, $type, '->unwriteDocument() can exclusively handle "' . $property . '"');
}
$t->diag('->add()');
$doc = new xfDocument('guid');
$doc->addField(new xfFieldValue(new xfField('name', xfField::KEYWORD), 'carl'));
$doc->addField(new xfFieldValue(new xfField('age', xfField::STORED), 18));
$engine->add($doc);
$engine->commit();
$t->is($engine->count(), 1, '->add() adds a document');
$parent = new xfDocument('parent');
$child = new xfDocument('child');
$pet = new xfDocument('pet');
$parent->addChild($child);
$child->addChild($pet);
$engine->add($parent);
$engine->commit();
$t->is($engine->count(), 4, '->add() adds a document and every subdocument');
$t->diag('->findGuid()');
$doc = $engine->findGuid('guid');
$t->isa_ok($doc, 'xfDocument', '->findGuid() returns an xfDocument');
$t->is($doc->getGuid(), 'guid', '->findGuid() returns the correct document');
$doc = $engine->findGuid('parent');
require 'engine/xfLuceneHits.class.php';
require 'engine/xfEngine.interface.php';
require 'engine/xfLuceneEngine.class.php';
require 'criteria/xfCriterion.interface.php';
require 'result/xfDocumentHit.class.php';
require 'document/xfDocument.class.php';
require 'document/xfField.class.php';
require 'document/xfFieldValue.class.php';
require 'addon/xfLuceneEnhancedFilesystem.class.php';
$t = new lime_test(17, new lime_output_color());
$doc = new xfDocument('foobar');
$doc->addField(new xfFieldValue(new xfField('title', xfField::TEXT), 'foobar'));
$engine = new xfLuceneEngine(dirname(__FILE__) . '/../../sandbox/index');
$engine->erase();
$engine->open();
$engine->add($doc);
$engine->commit();
$zhits = $engine->getIndex()->find('foobar');
$hits = new xfLuceneHits($engine, $zhits);
$t->diag('->current()');
$r = $hits->current();
$t->isa_ok($r, 'xfDocumentHit', '->current() returns an xfDocumentHit');
$t->is($r->getOption('score'), $zhits[0]->score, '->current() returns an xfDocumentHit with correct score');
$t->is($r->getOption('id'), $zhits[0]->id, '->current() returns an xfDocumentHit with correct id');
$t->is($r->getDocument()->getField('title')->getValue(), 'foobar', '->current() communicates with the unwriter correctly');
$t->ok($r === $hits->current(), '->current() caches the response');
$t->diag('->key(), ->next(), ->valid(), ->rewind(), ->seek()');
$t->is($hits->key(), 0, '->key() returns the current key');
$t->ok($hits->valid(), '->valid() returns true if key exists');
$hits->next();
$t->is($hits->key(), 1, '->next() advances the key by one');