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);
 }