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; } public function test_addModule() { $manager = $this->createManager (); // ...but we add user modules $common_module = new HTMLPurifier_HTMLModule (); $common_module->name = 'Common'; $common_module->attr_collections ['Common'] = array ( 'class' => 'NMTOKENS' ); $common_module->content_sets ['Flow'] = 'Block | Inline'; $manager->addModule ( $common_module ); $structural_module = new HTMLPurifier_HTMLModule (); $structural_module->name = 'Structural'; $structural_module->addElement ( 'p', 'Block', 'Inline', 'Common' ); $manager->addModule ( $structural_module ); $formatting_module = new HTMLPurifier_HTMLModule (); $formatting_module->name = 'Formatting'; $formatting_module->addElement ( 'em', 'Inline', 'Inline', 'Common' ); $manager->addModule ( $formatting_module ); $unsafe_module = new HTMLPurifier_HTMLModule (); $unsafe_module->name = 'Unsafe'; $unsafe_module->safe = false; $unsafe_module->addElement ( 'div', 'Block', 'Flow' ); $manager->addModule ( $unsafe_module ); $config = HTMLPurifier_Config::createDefault (); $config->set ( 'HTML.Trusted', false ); $config->set ( 'HTML.CustomDoctype', 'Blank' ); $manager->setup ( $config ); $attrdef_nmtokens = new HTMLPurifier_AttrDef_HTML_Nmtokens (); $p = new HTMLPurifier_ElementDef (); $p->attr ['class'] = $attrdef_nmtokens; $p->child = new HTMLPurifier_ChildDef_Optional ( array ( 'em', '#PCDATA' ) ); $p->content_model = 'em | #PCDATA'; $p->content_model_type = 'optional'; $p->descendants_are_inline = true; $em = new HTMLPurifier_ElementDef (); $em->attr ['class'] = $attrdef_nmtokens; $em->child = new HTMLPurifier_ChildDef_Optional ( array ( 'em', '#PCDATA' ) ); $em->content_model = 'em | #PCDATA'; $em->content_model_type = 'optional'; $em->descendants_are_inline = true; $this->assertEqual ( array ( 'p' => $p, 'em' => $em ), $manager->getElements () ); // test trusted parameter override $div = new HTMLPurifier_ElementDef (); $div->child = new HTMLPurifier_ChildDef_Optional ( array ( 'p', 'div', 'em', '#PCDATA' ) ); $div->content_model = 'p | div | em | #PCDATA'; $div->content_model_type = 'optional'; $div->descendants_are_inline = false; $this->assertEqual ( $div, $manager->getElement ( 'div', true ) ); } public function testAllowedModules() { $manager = new HTMLPurifier_HTMLModuleManager (); $manager->doctypes->register ( 'Fantasy Inventory 1.0', true, array ( 'Weapons', 'Magic' ) ); // register these modules so it doesn't blow up $weapons_module = new HTMLPurifier_HTMLModule (); $weapons_module->name = 'Weapons'; $manager->registerModule ( $weapons_module ); $magic_module = new HTMLPurifier_HTMLModule (); $magic_module->name = 'Magic'; $manager->registerModule ( $magic_module ); $config = HTMLPurifier_Config::create ( array ( 'HTML.CustomDoctype' => 'Fantasy Inventory 1.0', 'HTML.AllowedModules' => 'Weapons' ) ); $manager->setup ( $config ); $this->assertTrue ( isset ( $manager->modules ['Weapons'] ) ); $this->assertFalse ( isset ( $manager->modules ['Magic'] ) ); } } // vim: et sw=4 sts=4