2 namespace Masterminds\HTML5\Tests\Serializer;
4 use Masterminds\HTML5\Serializer\OutputRules;
5 use Masterminds\HTML5\Serializer\Traverser;
6 use Masterminds\HTML5\Parser;
8 class TraverserTest extends \Masterminds\HTML5\Tests\TestCase
11 protected $markup = '<!doctype html>
14 <meta charset="utf-8">
18 <p>This is a test.</p>
22 public function setUp()
24 $this->html5 = $this->getInstance();
28 * Using reflection we make a protected method accessible for testing.
31 * The name of the method on the Traverser class to test.
33 * @return \ReflectionMethod \ReflectionMethod for the specified method
35 public function getProtectedMethod($name)
37 $class = new \ReflectionClass('\Masterminds\HTML5\Serializer\Traverser');
38 $method = $class->getMethod($name);
39 $method->setAccessible(true);
44 public function getTraverser()
46 $stream = fopen('php://temp', 'w');
48 $dom = $this->html5->loadHTML($this->markup);
49 $t = new Traverser($dom, $stream, $html5->getOptions());
51 // We return both the traverser and stream so we can pull from it.
58 public function testConstruct()
60 // The traverser needs a place to write the output to. In our case we
61 // use a stream in temp space.
62 $stream = fopen('php://temp', 'w');
64 $html5 = $this->getInstance();
66 $r = new OutputRules($stream, $this->html5->getOptions());
67 $dom = $this->html5->loadHTML($this->markup);
69 $t = new Traverser($dom, $stream, $r, $html5->getOptions());
71 $this->assertInstanceOf('\Masterminds\HTML5\Serializer\Traverser', $t);
74 public function testFragment()
76 $html = '<span class="bar">foo</span><span></span><div>bar</div>';
77 $input = new \Masterminds\HTML5\Parser\StringInputStream($html);
78 $dom = $this->html5->parseFragment($input);
80 $this->assertInstanceOf('\DOMDocumentFragment', $dom);
82 $stream = fopen('php://temp', 'w');
83 $r = new OutputRules($stream, $this->html5->getOptions());
84 $t = new Traverser($dom, $stream, $r, $this->html5->getOptions());
87 $this->assertEquals($html, stream_get_contents($stream, - 1, 0));
90 public function testProcessorInstruction()
92 $html = '<?foo bar ?>';
93 $input = new \Masterminds\HTML5\Parser\StringInputStream($html);
94 $dom = $this->html5->parseFragment($input);
96 $this->assertInstanceOf('\DOMDocumentFragment', $dom);
98 $stream = fopen('php://temp', 'w');
99 $r = new OutputRules($stream, $this->html5->getOptions());
100 $t = new Traverser($dom, $stream, $r, $this->html5->getOptions());
103 $this->assertEquals($html, stream_get_contents($stream, - 1, 0));