aboutsummaryrefslogtreecommitdiffstats
path: root/lib/htmlpurifier/tests/HTMLPurifier/HTMLModuleManagerTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/htmlpurifier/tests/HTMLPurifier/HTMLModuleManagerTest.php')
-rw-r--r--lib/htmlpurifier/tests/HTMLPurifier/HTMLModuleManagerTest.php120
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