Release 2.0.1, merged in 1181 to HEAD.
[htmlpurifier.git] / tests / HTMLPurifier / DefinitionCache / SerializerTest.php
blob4925ff8e5d90e9072c8050ab85d077d4f91717a0
1 <?php
3 require_once 'HTMLPurifier/DefinitionCacheHarness.php';
4 require_once 'HTMLPurifier/DefinitionCache/Serializer.php';
6 class HTMLPurifier_DefinitionCache_SerializerTest extends HTMLPurifier_DefinitionCacheHarness
9 function test() {
11 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
13 $config = $this->generateConfigMock('serial');
14 $config->setReturnValue('get', 2, array('Test', 'DefinitionRev'));
15 $config->version = '1.0.0';
17 $config_md5 = '1.0.0-serial-2';
19 $file = realpath(
20 $rel_file = dirname(__FILE__) .
21 '/../../../library/HTMLPurifier/DefinitionCache/Serializer/Test/' .
22 $config_md5 . '.ser'
24 if($file && file_exists($file)) unlink($file); // prevent previous failures from causing problems
26 $this->assertIdentical($config_md5, $cache->generateKey($config));
28 $def_original = $this->generateDefinition();
30 $cache->add($def_original, $config);
31 $this->assertFileExist($rel_file);
33 $file_generated = $cache->generateFilePath($config);
34 $this->assertIdentical(realpath($rel_file), realpath($file_generated));
36 $def_1 = $cache->get($config);
37 $this->assertIdentical($def_original, $def_1);
39 $def_original->info_random = 'changed';
41 $cache->set($def_original, $config);
42 $def_2 = $cache->get($config);
44 $this->assertIdentical($def_original, $def_2);
45 $this->assertNotEqual ($def_original, $def_1);
47 $def_original->info_random = 'did it change?';
49 $this->assertFalse($cache->add($def_original, $config));
50 $def_3 = $cache->get($config);
52 $this->assertNotEqual ($def_original, $def_3); // did not change!
53 $this->assertIdentical($def_3, $def_2);
55 $cache->replace($def_original, $config);
56 $def_4 = $cache->get($config);
57 $this->assertIdentical($def_original, $def_4);
59 $cache->remove($config);
60 $this->assertFileNotExist($file);
62 $this->assertFalse($cache->replace($def_original, $config));
63 $def_5 = $cache->get($config);
64 $this->assertFalse($def_5);
68 function test_errors() {
69 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
70 $def = new HTMLPurifier_Definition();
71 $def->setup = true;
72 $def->type = 'NotTest';
73 $config = $this->generateConfigMock('testfoo');
75 $this->expectError('Cannot use definition of type NotTest in cache for Test');
76 $cache->add($def, $config);
78 $this->expectError('Cannot use definition of type NotTest in cache for Test');
79 $cache->set($def, $config);
81 $this->expectError('Cannot use definition of type NotTest in cache for Test');
82 $cache->replace($def, $config);
85 function test_flush() {
87 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
89 $config1 = $this->generateConfigMock('test1');
90 $config2 = $this->generateConfigMock('test2');
91 $config3 = $this->generateConfigMock('test3');
93 $def1 = $this->generateDefinition(array('info_candles' => 1));
94 $def2 = $this->generateDefinition(array('info_candles' => 2));
95 $def3 = $this->generateDefinition(array('info_candles' => 3));
97 $cache->add($def1, $config1);
98 $cache->add($def2, $config2);
99 $cache->add($def3, $config3);
101 $this->assertEqual($def1, $cache->get($config1));
102 $this->assertEqual($def2, $cache->get($config2));
103 $this->assertEqual($def3, $cache->get($config3));
105 $cache->flush($config1); // only essential directive is %Cache.SerializerPath
107 $this->assertFalse($cache->get($config1));
108 $this->assertFalse($cache->get($config2));
109 $this->assertFalse($cache->get($config3));
113 function testCleanup() {
115 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
117 // in order of age, oldest first
118 // note that configurations are all identical, but version/revision
119 // are different
121 $config1 = $this->generateConfigMock();
122 $config1->version = '0.9.0';
123 $config1->setReturnValue('get', 574, array('Test', 'DefinitionRev'));
124 $def1 = $this->generateDefinition(array('info' => 1));
126 $config2 = $this->generateConfigMock();
127 $config2->version = '1.0.0beta';
128 $config2->setReturnValue('get', 1, array('Test', 'DefinitionRev'));
129 $def2 = $this->generateDefinition(array('info' => 3));
131 $cache->set($def1, $config1);
132 $cache->cleanup($config1);
133 $this->assertEqual($def1, $cache->get($config1)); // no change
135 $cache->cleanup($config2);
136 $this->assertFalse($cache->get($config1));
137 $this->assertFalse($cache->get($config2));
141 function testCleanupOnlySameID() {
143 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
145 $config1 = $this->generateConfigMock('serial1');
146 $config1->version = '1.0.0';
147 $config1->setReturnValue('get', 1, array('Test', 'DefinitionRev'));
148 $def1 = $this->generateDefinition(array('info' => 1));
150 $config2 = $this->generateConfigMock('serial2');
151 $config2->version = '1.0.0';
152 $config2->setReturnValue('get', 34, array('Test', 'DefinitionRev'));
153 $def2 = $this->generateDefinition(array('info' => 3));
155 $cache->set($def1, $config1);
156 $cache->cleanup($config1);
157 $this->assertEqual($def1, $cache->get($config1)); // no change
159 $cache->set($def2, $config2);
160 $cache->cleanup($config2);
161 $this->assertEqual($def1, $cache->get($config1));
162 $this->assertEqual($def2, $cache->get($config2));
164 $cache->flush($config1);
168 * Asserts that a file exists, ignoring the stat cache
170 function assertFileExist($file) {
171 clearstatcache();
172 $this->assertTrue(file_exists($file), 'Expected ' . $file . ' exists');
176 * Asserts that a file does not exist, ignoring the stat cache
178 function assertFileNotExist($file) {
179 $this->assertFalse(file_exists($file), 'Expected ' . $file . ' does not exist');
182 function testAlternatePath() {
184 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
185 $config = $this->generateConfigMock('serial');
186 $config->version = '1.0.0';
187 $config->setReturnValue('get', 1, array('Test', 'DefinitionRev'));
188 $dir = dirname(__FILE__) . '/SerializerTest';
189 $config->setReturnValue('get', $dir, array('Cache', 'SerializerPath'));
191 $def_original = $this->generateDefinition();
192 $cache->add($def_original, $config);
193 $this->assertFileExist($dir . '/Test/1.0.0-serial-1.ser');
195 unlink($dir . '/Test/1.0.0-serial-1.ser');
196 rmdir( $dir . '/Test');