public function testSyncModified()
{
$doc = new Document();
$doc->_id = 4;
$doc->name = 'Four';
$doc->content = 'Lorem ipsum four';
$expected = array('_id' => true, 'name' => true, 'content' => true);
$this->assertEqual($expected, $doc->modified());
$doc->sync();
$this->assertEqual(array_fill_keys(array_keys($expected), false), $doc->modified());
$doc->_id = 5;
$doc->content = null;
$doc->new = null;
$expected = array('_id' => true, 'name' => false, 'content' => true, 'new' => true);
$this->assertEqual($expected, $doc->modified());
$doc = new Document(array('model' => $this->_model));
$doc->id = 4;
$doc->name = 'Four';
$doc->content = 'Lorem ipsum four';
$doc->array = array(1, 2, 3, 4);
$doc->subdoc = array('setting' => 'something', 'foo' => 'bar', 'sub' => array('name' => 'A sub sub doc'));
$doc->subdocs = array(array('id' => 1), array('id' => 2), array('id' => 3), array('id' => 4));
$fields = array('id', 'name', 'content', 'array', 'subdoc', 'subdocs');
$expected = array_fill_keys($fields, true);
$this->assertEqual($expected, $doc->modified());
$doc->sync();
$this->assertEqual(array_fill_keys($fields, false), $doc->modified());
$doc->id = 5;
$doc->content = null;
$doc->new = null;
$doc->subdoc->foo = 'baz';
$doc->array[] = 5;
$doc->subdocs[] = array('id' => 5);
$expected['name'] = false;
$expected['new'] = true;
$fields[] = 'new';
$this->assertEqual($expected, $doc->modified());
$doc->sync();
$expected = array_fill_keys($fields, false);
$this->assertEqual($expected, $doc->modified());
$doc->sync();
$doc->subdocs[1]->updated = true;
$expected['subdocs'] = true;
$this->assertEqual($expected, $doc->modified());
$doc->sync();
$doc->array[1] = array('foo' => 'bar');
$expected['array'] = true;
$this->assertEqual($expected, $doc->modified());
$doc->sync();
}