Release 2.1.0, merged in 1313 to HEAD.
[htmlpurifier.git] / tests / HTMLPurifier / DefinitionCache / SerializerTest.php
blobcf4249af373204f40ec1b31af14a15a7c3d60f06
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 = HTMLPURIFIER_PREFIX . '/HTMLPurifier/DefinitionCache/Serializer/Test/' .
21 $config_md5 . '.ser'
23 if($file && file_exists($file)) unlink($file); // prevent previous failures from causing problems
25 $this->assertIdentical($config_md5, $cache->generateKey($config));
27 $def_original = $this->generateDefinition();
29 $cache->add($def_original, $config);
30 $this->assertFileExist($rel_file);
32 $file_generated = $cache->generateFilePath($config);
33 $this->assertIdentical(realpath($rel_file), realpath($file_generated));
35 $def_1 = $cache->get($config);
36 $this->assertIdentical($def_original, $def_1);
38 $def_original->info_random = 'changed';
40 $cache->set($def_original, $config);
41 $def_2 = $cache->get($config);
43 $this->assertIdentical($def_original, $def_2);
44 $this->assertNotEqual ($def_original, $def_1);
46 $def_original->info_random = 'did it change?';
48 $this->assertFalse($cache->add($def_original, $config));
49 $def_3 = $cache->get($config);
51 $this->assertNotEqual ($def_original, $def_3); // did not change!
52 $this->assertIdentical($def_3, $def_2);
54 $cache->replace($def_original, $config);
55 $def_4 = $cache->get($config);
56 $this->assertIdentical($def_original, $def_4);
58 $cache->remove($config);
59 $this->assertFileNotExist($file);
61 $this->assertFalse($cache->replace($def_original, $config));
62 $def_5 = $cache->get($config);
63 $this->assertFalse($def_5);
67 function test_errors() {
68 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
69 $def = new HTMLPurifier_Definition();
70 $def->setup = true;
71 $def->type = 'NotTest';
72 $config = $this->generateConfigMock('testfoo');
74 $this->expectError('Cannot use definition of type NotTest in cache for Test');
75 $cache->add($def, $config);
77 $this->expectError('Cannot use definition of type NotTest in cache for Test');
78 $cache->set($def, $config);
80 $this->expectError('Cannot use definition of type NotTest in cache for Test');
81 $cache->replace($def, $config);
84 function test_flush() {
86 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
88 $config1 = $this->generateConfigMock('test1');
89 $config2 = $this->generateConfigMock('test2');
90 $config3 = $this->generateConfigMock('test3');
92 $def1 = $this->generateDefinition(array('info_candles' => 1));
93 $def2 = $this->generateDefinition(array('info_candles' => 2));
94 $def3 = $this->generateDefinition(array('info_candles' => 3));
96 $cache->add($def1, $config1);
97 $cache->add($def2, $config2);
98 $cache->add($def3, $config3);
100 $this->assertEqual($def1, $cache->get($config1));
101 $this->assertEqual($def2, $cache->get($config2));
102 $this->assertEqual($def3, $cache->get($config3));
104 $cache->flush($config1); // only essential directive is %Cache.SerializerPath
106 $this->assertFalse($cache->get($config1));
107 $this->assertFalse($cache->get($config2));
108 $this->assertFalse($cache->get($config3));
112 function testCleanup() {
114 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
116 // in order of age, oldest first
117 // note that configurations are all identical, but version/revision
118 // are different
120 $config1 = $this->generateConfigMock();
121 $config1->version = '0.9.0';
122 $config1->setReturnValue('get', 574, array('Test', 'DefinitionRev'));
123 $def1 = $this->generateDefinition(array('info' => 1));
125 $config2 = $this->generateConfigMock();
126 $config2->version = '1.0.0beta';
127 $config2->setReturnValue('get', 1, array('Test', 'DefinitionRev'));
128 $def2 = $this->generateDefinition(array('info' => 3));
130 $cache->set($def1, $config1);
131 $cache->cleanup($config1);
132 $this->assertEqual($def1, $cache->get($config1)); // no change
134 $cache->cleanup($config2);
135 $this->assertFalse($cache->get($config1));
136 $this->assertFalse($cache->get($config2));
140 function testCleanupOnlySameID() {
142 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
144 $config1 = $this->generateConfigMock('serial1');
145 $config1->version = '1.0.0';
146 $config1->setReturnValue('get', 1, array('Test', 'DefinitionRev'));
147 $def1 = $this->generateDefinition(array('info' => 1));
149 $config2 = $this->generateConfigMock('serial2');
150 $config2->version = '1.0.0';
151 $config2->setReturnValue('get', 34, array('Test', 'DefinitionRev'));
152 $def2 = $this->generateDefinition(array('info' => 3));
154 $cache->set($def1, $config1);
155 $cache->cleanup($config1);
156 $this->assertEqual($def1, $cache->get($config1)); // no change
158 $cache->set($def2, $config2);
159 $cache->cleanup($config2);
160 $this->assertEqual($def1, $cache->get($config1));
161 $this->assertEqual($def2, $cache->get($config2));
163 $cache->flush($config1);
167 * Asserts that a file exists, ignoring the stat cache
169 function assertFileExist($file) {
170 clearstatcache();
171 $this->assertTrue(file_exists($file), 'Expected ' . $file . ' exists');
175 * Asserts that a file does not exist, ignoring the stat cache
177 function assertFileNotExist($file) {
178 $this->assertFalse(file_exists($file), 'Expected ' . $file . ' does not exist');
181 function testAlternatePath() {
183 $cache = new HTMLPurifier_DefinitionCache_Serializer('Test');
184 $config = $this->generateConfigMock('serial');
185 $config->version = '1.0.0';
186 $config->setReturnValue('get', 1, array('Test', 'DefinitionRev'));
187 $dir = dirname(__FILE__) . '/SerializerTest';
188 $config->setReturnValue('get', $dir, array('Cache', 'SerializerPath'));
190 $def_original = $this->generateDefinition();
191 $cache->add($def_original, $config);
192 $this->assertFileExist($dir . '/Test/1.0.0-serial-1.ser');
194 unlink($dir . '/Test/1.0.0-serial-1.ser');
195 rmdir( $dir . '/Test');