diff options
Diffstat (limited to 'lib/htmlpurifier/tests/HTMLPurifier/HTMLModuleManagerTest.php')
-rw-r--r-- | lib/htmlpurifier/tests/HTMLPurifier/HTMLModuleManagerTest.php | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/lib/htmlpurifier/tests/HTMLPurifier/HTMLModuleManagerTest.php b/lib/htmlpurifier/tests/HTMLPurifier/HTMLModuleManagerTest.php new file mode 100644 index 000000000..2750f8924 --- /dev/null +++ b/lib/htmlpurifier/tests/HTMLPurifier/HTMLModuleManagerTest.php @@ -0,0 +1,120 @@ +<?php + +class HTMLPurifier_HTMLModuleManagerTest extends HTMLPurifier_Harness +{ + + 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_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)); + + } + + 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 |