generateConfigMock ( 'serial' );
$config->setReturnValue ( 'get', 2, array (
'Test.DefinitionRev'
) );
$config->version = '1.0.0';
$config_md5 = '1.0.0,serial,2';
$file = realpath ( $rel_file = HTMLPURIFIER_PREFIX . '/HTMLPurifier/DefinitionCache/Serializer/Test/' . $config_md5 . '.ser' );
if ($file && file_exists ( $file ))
unlink ( $file ); // prevent previous failures from causing problems
$this->assertIdentical ( $config_md5, $cache->generateKey ( $config ) );
$def_original = $this->generateDefinition ();
$cache->add ( $def_original, $config );
$this->assertFileExist ( $rel_file );
$file_generated = $cache->generateFilePath ( $config );
$this->assertIdentical ( realpath ( $rel_file ), realpath ( $file_generated ) );
$def_1 = $cache->get ( $config );
// $this->assertIdentical($def_original, $def_1);
$def_original->info_random = 'changed';
$cache->set ( $def_original, $config );
$def_2 = $cache->get ( $config );
// $this->assertIdentical($def_original, $def_2);
// $this->assertNotEqual ($def_original, $def_1);
$def_original->info_random = 'did it change?';
$this->assertFalse ( $cache->add ( $def_original, $config ) );
$def_3 = $cache->get ( $config );
// $this->assertNotEqual ($def_original, $def_3); // did not change!
// $this->assertIdentical($def_3, $def_2);
$cache->replace ( $def_original, $config );
$def_4 = $cache->get ( $config );
// $this->assertIdentical($def_original, $def_4);
$cache->remove ( $config );
$this->assertFileNotExist ( $file );
$this->assertFalse ( $cache->replace ( $def_original, $config ) );
$def_5 = $cache->get ( $config );
$this->assertFalse ( $def_5 );
}
public function test_errors() {
$cache = new HTMLPurifier_DefinitionCache_Serializer ( 'Test' );
$def = $this->generateDefinition ();
$def->setup = true;
$def->type = 'NotTest';
$config = $this->generateConfigMock ( 'testfoo' );
$this->expectError ( 'Cannot use definition of type NotTest in cache for Test' );
$cache->add ( $def, $config );
$this->expectError ( 'Cannot use definition of type NotTest in cache for Test' );
$cache->set ( $def, $config );
$this->expectError ( 'Cannot use definition of type NotTest in cache for Test' );
$cache->replace ( $def, $config );
}
public function test_flush() {
$cache = new HTMLPurifier_DefinitionCache_Serializer ( 'Test' );
$config1 = $this->generateConfigMock ( 'test1' );
$config2 = $this->generateConfigMock ( 'test2' );
$config3 = $this->generateConfigMock ( 'test3' );
$def1 = $this->generateDefinition ( array (
'info_candles' => 1
) );
$def2 = $this->generateDefinition ( array (
'info_candles' => 2
) );
$def3 = $this->generateDefinition ( array (
'info_candles' => 3
) );
$cache->add ( $def1, $config1 );
$cache->add ( $def2, $config2 );
$cache->add ( $def3, $config3 );
$this->assertEqual ( $def1, $cache->get ( $config1 ) );
$this->assertEqual ( $def2, $cache->get ( $config2 ) );
$this->assertEqual ( $def3, $cache->get ( $config3 ) );
$cache->flush ( $config1 ); // only essential directive is %Cache.SerializerPath
$this->assertFalse ( $cache->get ( $config1 ) );
$this->assertFalse ( $cache->get ( $config2 ) );
$this->assertFalse ( $cache->get ( $config3 ) );
}
public function testCleanup() {
$cache = new HTMLPurifier_DefinitionCache_Serializer ( 'Test' );
// in order of age, oldest first
// note that configurations are all identical, but version/revision
// are different
$config1 = $this->generateConfigMock ();
$config1->version = '0.9.0';
$config1->setReturnValue ( 'get', 574, array (
'Test.DefinitionRev'
) );
$def1 = $this->generateDefinition ( array (
'info' => 1
) );
$config2 = $this->generateConfigMock ();
$config2->version = '1.0.0beta';
$config2->setReturnValue ( 'get', 1, array (
'Test.DefinitionRev'
) );
$def2 = $this->generateDefinition ( array (
'info' => 3
) );
$cache->set ( $def1, $config1 );
$cache->cleanup ( $config1 );
$this->assertEqual ( $def1, $cache->get ( $config1 ) ); // no change
$cache->cleanup ( $config2 );
$this->assertFalse ( $cache->get ( $config1 ) );
$this->assertFalse ( $cache->get ( $config2 ) );
}
public function testCleanupOnlySameID() {
$cache = new HTMLPurifier_DefinitionCache_Serializer ( 'Test' );
$config1 = $this->generateConfigMock ( 'serial1' );
$config1->version = '1.0.0';
$config1->setReturnValue ( 'get', 1, array (
'Test.DefinitionRev'
) );
$def1 = $this->generateDefinition ( array (
'info' => 1
) );
$config2 = $this->generateConfigMock ( 'serial2' );
$config2->version = '1.0.0';
$config2->setReturnValue ( 'get', 34, array (
'Test.DefinitionRev'
) );
$def2 = $this->generateDefinition ( array (
'info' => 3
) );
$cache->set ( $def1, $config1 );
$cache->cleanup ( $config1 );
$this->assertEqual ( $def1, $cache->get ( $config1 ) ); // no change
$cache->set ( $def2, $config2 );
$cache->cleanup ( $config2 );
$this->assertEqual ( $def1, $cache->get ( $config1 ) );
$this->assertEqual ( $def2, $cache->get ( $config2 ) );
$cache->flush ( $config1 );
}
/**
* Asserts that a file exists, ignoring the stat cache
*/
public function assertFileExist($file) {
clearstatcache ();
$this->assertTrue ( file_exists ( $file ), 'Expected ' . $file . ' exists' );
}
/**
* Asserts that a file does not exist, ignoring the stat cache
*/
public function assertFileNotExist($file) {
clearstatcache ();
$this->assertFalse ( file_exists ( $file ), 'Expected ' . $file . ' does not exist' );
}
public function testAlternatePath() {
$cache = new HTMLPurifier_DefinitionCache_Serializer ( 'Test' );
$config = $this->generateConfigMock ( 'serial' );
$config->version = '1.0.0';
$config->setReturnValue ( 'get', 1, array (
'Test.DefinitionRev'
) );
$dir = dirname ( __FILE__ ) . '/SerializerTest';
$config->setReturnValue ( 'get', $dir, array (
'Cache.SerializerPath'
) );
$def_original = $this->generateDefinition ();
$cache->add ( $def_original, $config );
$this->assertFileExist ( $dir . '/Test/1.0.0,serial,1.ser' );
unlink ( $dir . '/Test/1.0.0,serial,1.ser' );
rmdir ( $dir . '/Test' );
}
public function testAlternatePermissions() {
$cache = new HTMLPurifier_DefinitionCache_Serializer ( 'Test' );
$config = $this->generateConfigMock ( 'serial' );
$config->version = '1.0.0';
$config->setReturnValue ( 'get', 1, array (
'Test.DefinitionRev'
) );
$dir = dirname ( __FILE__ ) . '/SerializerTest';
$config->setReturnValue ( 'get', $dir, array (
'Cache.SerializerPath'
) );
$config->setReturnValue ( 'get', 0777, array (
'Cache.SerializerPermissions'
) );
$def_original = $this->generateDefinition ();
$cache->add ( $def_original, $config );
$this->assertFileExist ( $dir . '/Test/1.0.0,serial,1.ser' );
$this->assertEqual ( 0666, 0777 & fileperms ( $dir . '/Test/1.0.0,serial,1.ser' ) );
$this->assertEqual ( 0777, 0777 & fileperms ( $dir . '/Test' ) );
unlink ( $dir . '/Test/1.0.0,serial,1.ser' );
rmdir ( $dir . '/Test' );
}
}
// vim: et sw=4 sts=4