Implement AbsolutePath and IEConditionalComments filters. Add an xc namespace (urn...
[xhtml-compiler.git] / tests / XHTMLCompiler / FilterManagerTest.php
blob1990bfeab127a9755c44fdcf0d3f2d6dda40af25
1 <?php
3 class XHTMLCompiler_FilterManagerTest_DOMFilter extends XHTMLCompiler_DOMFilter
5 protected $name = 'Test';
6 function process(DOMDocument $dom, $page) {
7 $dom->getElementById('document')->appendChild($dom->createElement('p', 'DOMFilter'));
11 class XHTMLCompiler_FilterManagerTest extends UnitTestCase
14 function test_addFilter() {
15 $manager = new XHTMLCompiler_FilterManager();
16 $filter = new XHTMLCompiler_DOMFilterMock($this);
17 $filter->expectOnce('getName');
18 $filter->setReturnValue('getName', 'filter');
19 $filter->setReturnValue('getXCAttributesDefined', array());
20 $manager->addDOMFilter($filter);
21 $filter->tally();
24 function test_addFilter_Duplicate() {
25 $manager = new XHTMLCompiler_FilterManager();
26 $filter = new XHTMLCompiler_DOMFilterMock($this);
27 $filter->setReturnValue('getName', 'filter');
28 $filter->setReturnValue('getXCAttributesDefined', array());
29 $filter2 = new XHTMLCompiler_DOMFilterMock($this);
30 $filter2->setReturnValue('getName', 'filter');
31 $manager->addDOMFilter($filter);
32 $this->expectException();
33 $manager->addDOMFilter($filter2);
36 function test_process() {
37 $manager = new XHTMLCompiler_FilterManager();
38 $page = new XHTMLCompiler_PageMock();
39 $input = '1';
41 $pre_text_filter = new XHTMLCompiler_TextFilterMock($this);
42 $pre_text_filter->setReturnValue('getName', 'banana-filter');
43 $pre_text_filter->expectOnce('process', array('1', $page));
44 $pre_text_filter->setReturnValue('process', '2');
45 $pre_text_filter2 = new XHTMLCompiler_TextFilterMock($this);
46 $pre_text_filter2->setReturnValue('getName', 'apple-filter');
47 $pre_text_filter2->expectOnce('process', array('2', $page));
48 $pre_text_filter2->setReturnValue('process',
49 '<?xml version="1.0" encoding="UTF-8"?>
50 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
51 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
52 xmlns:proprietary="urn:foobar:foofoofoo">
53 <head><title>Hmmm...</title></head>
54 <body id="document"><p>Meta.</p></body>
55 </html>
56 ');
58 // the first two DOMFilters are duds that don't do anything
59 $dom_filter = new XHTMLCompiler_DOMFilterMock($this);
60 $dom_filter->setReturnValue('getName', 'filter');
61 $dom_filter->setReturnValue('getXCAttributesDefined', array());
62 $dom_filter->expectOnce('process');
63 $dom_filter2 = new XHTMLCompiler_DOMFilterMock($this);
64 $dom_filter2->setReturnValue('getName', 'filter2');
65 $dom_filter2->setReturnValue('getXCAttributesDefined', array());
66 $dom_filter2->expectOnce('process');
67 $dom_filter3 = new XHTMLCompiler_FilterManagerTest_DOMFilter();
69 $post_text_filter = new XHTMLCompiler_TextFilterMock($this);
70 $post_text_filter->setReturnValue('getName', 'Masumune Plus!');
71 $post_text_filter->expectOnce('process', array(new PatternExpectation('/Meta.+?DOMFilter/s'), $page));
72 $post_text_filter->setReturnValue('process', '3');
73 $post_text_filter2 = new XHTMLCompiler_TextFilterMock($this);
74 $post_text_filter2->setReturnValue('getName', 'Piffle-rockers');
75 $post_text_filter2->expectOnce('process', array('3', $page));
76 $post_text_filter2->setReturnValue('process',
77 '<?xml version="1.0" encoding="UTF-8"?>
78 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
79 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
80 <head><title>Hmmm...</title></head>
81 <body><b><p>Hotdog.</p></b></body>
82 </html>
83 ');
85 $manager->addPreTextFilter($pre_text_filter);
86 $manager->addPreTextFilter($pre_text_filter2);
87 $manager->addDOMFilter($dom_filter);
88 $manager->addDOMFilter($dom_filter2);
89 $manager->addDOMFilter($dom_filter3);
90 $manager->addPostTextFilter($post_text_filter);
91 $manager->addPostTextFilter($post_text_filter2);
93 $text = $manager->process('1', $page);
95 // assert that the final PostTextFilter worked
96 $this->assertPattern('/Hotdog/', $text);
98 // assert that the validation errors were caught and
99 // displayed accordingly
100 $this->assertPattern('/Error/i', $text);
102 // assert that the xml processing instruction was scrubbed
103 $this->assertNoPattern('/<\?xml/', $text);
105 // assert that all proprietary namespaces were scrubbed
106 $this->assertNoPattern('/proprietary/', $text);
108 $dom_filter->tally();
109 $dom_filter2->tally();
110 $pre_text_filter->tally();
111 $pre_text_filter2->tally();
112 $post_text_filter->tally();
113 $post_text_filter2->tally();