protected function createManager() { $manager = new HTMLPurifier_HTMLModuleManager(); $this->config->set('HTML.CustomDoctype', 'Blank'); $manager->doctypes->register('Blank'); $attrdef_nmtokens = new HTMLPurifier_AttrDef_HTML_Nmtokens(); generate_mock_once('HTMLPurifier_AttrDef'); $attrdef = new HTMLPurifier_AttrDefMock(); $attrdef->setReturnValue('make', $attrdef_nmtokens); $manager->attrTypes->set('NMTOKENS', $attrdef); return $manager; }
function test() { generate_mock_once('HTMLPurifier_AttrDef'); $config = HTMLPurifier_Config::createDefault(); $context = new HTMLPurifier_Context(); // first test: value properly validates on first definition // so second def is never called $def1 = new HTMLPurifier_AttrDefMock(); $def2 = new HTMLPurifier_AttrDefMock(); $defs = array(&$def1, &$def2); $def = new HTMLPurifier_AttrDef_CSS_Composite_Testable($defs); $input = 'FOOBAR'; $output = 'foobar'; $def1_params = array($input, $config, $context); $def1->expectOnce('validate', $def1_params); $def1->setReturnValue('validate', $output, $def1_params); $def2->expectNever('validate'); $result = $def->validate($input, $config, $context); $this->assertIdentical($output, $result); // second test, first def fails, second def works $def1 = new HTMLPurifier_AttrDefMock(); $def2 = new HTMLPurifier_AttrDefMock(); $defs = array(&$def1, &$def2); $def = new HTMLPurifier_AttrDef_CSS_Composite_Testable($defs); $input = 'BOOMA'; $output = 'booma'; $def_params = array($input, $config, $context); $def1->expectOnce('validate', $def_params); $def1->setReturnValue('validate', false, $def_params); $def2->expectOnce('validate', $def_params); $def2->setReturnValue('validate', $output, $def_params); $result = $def->validate($input, $config, $context); $this->assertIdentical($output, $result); // third test, all fail, so composite faiils $def1 = new HTMLPurifier_AttrDefMock(); $def2 = new HTMLPurifier_AttrDefMock(); $defs = array(&$def1, &$def2); $def = new HTMLPurifier_AttrDef_CSS_Composite_Testable($defs); $input = 'BOOMA'; $output = false; $def_params = array($input, $config, $context); $def1->expectOnce('validate', $def_params); $def1->setReturnValue('validate', false, $def_params); $def2->expectOnce('validate', $def_params); $def2->setReturnValue('validate', false, $def_params); $result = $def->validate($input, $config, $context); $this->assertIdentical($output, $result); }