nginxsonarrradarrplexorganizrdashboardbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbget
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							198 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							198 lines
						
					
					
						
							5.0 KiB
						
					
					
				
								<?php
							 | 
						|
								namespace Hamcrest\Xml;
							 | 
						|
								
							 | 
						|
								class HasXPathTest extends \Hamcrest\AbstractMatcherTest
							 | 
						|
								{
							 | 
						|
								    protected static $xml;
							 | 
						|
								    protected static $doc;
							 | 
						|
								    protected static $html;
							 | 
						|
								
							 | 
						|
								    public static function setUpBeforeClass()
							 | 
						|
								    {
							 | 
						|
								        self::$xml = <<<XML
							 | 
						|
								<?xml version="1.0"?>
							 | 
						|
								<users>
							 | 
						|
								    <user>
							 | 
						|
								        <id>alice</id>
							 | 
						|
								        <name>Alice Frankel</name>
							 | 
						|
								        <role>admin</role>
							 | 
						|
								    </user>
							 | 
						|
								    <user>
							 | 
						|
								        <id>bob</id>
							 | 
						|
								        <name>Bob Frankel</name>
							 | 
						|
								        <role>user</role>
							 | 
						|
								    </user>
							 | 
						|
								    <user>
							 | 
						|
								        <id>charlie</id>
							 | 
						|
								        <name>Charlie Chan</name>
							 | 
						|
								        <role>user</role>
							 | 
						|
								    </user>
							 | 
						|
								</users>
							 | 
						|
								XML;
							 | 
						|
								        self::$doc = new \DOMDocument();
							 | 
						|
								        self::$doc->loadXML(self::$xml);
							 | 
						|
								
							 | 
						|
								        self::$html = <<<HTML
							 | 
						|
								<html>
							 | 
						|
								    <head>
							 | 
						|
								        <title>Home Page</title>
							 | 
						|
								    </head>
							 | 
						|
								    <body>
							 | 
						|
								        <h1>Heading</h1>
							 | 
						|
								        <p>Some text</p>
							 | 
						|
								    </body>
							 | 
						|
								</html>
							 | 
						|
								HTML;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    protected function createMatcher()
							 | 
						|
								    {
							 | 
						|
								        return \Hamcrest\Xml\HasXPath::hasXPath('/users/user');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testMatchesWhenXPathIsFound()
							 | 
						|
								    {
							 | 
						|
								        assertThat('one match', self::$doc, hasXPath('user[id = "bob"]'));
							 | 
						|
								        assertThat('two matches', self::$doc, hasXPath('user[role = "user"]'));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testDoesNotMatchWhenXPathIsNotFound()
							 | 
						|
								    {
							 | 
						|
								        assertThat(
							 | 
						|
								            'no match',
							 | 
						|
								            self::$doc,
							 | 
						|
								            not(hasXPath('user[contains(id, "frank")]'))
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testMatchesWhenExpressionWithoutMatcherEvaluatesToTrue()
							 | 
						|
								    {
							 | 
						|
								        assertThat(
							 | 
						|
								            'one match',
							 | 
						|
								            self::$doc,
							 | 
						|
								            hasXPath('count(user[id = "bob"])')
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testDoesNotMatchWhenExpressionWithoutMatcherEvaluatesToFalse()
							 | 
						|
								    {
							 | 
						|
								        assertThat(
							 | 
						|
								            'no matches',
							 | 
						|
								            self::$doc,
							 | 
						|
								            not(hasXPath('count(user[id = "frank"])'))
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testMatchesWhenExpressionIsEqual()
							 | 
						|
								    {
							 | 
						|
								        assertThat(
							 | 
						|
								            'one match',
							 | 
						|
								            self::$doc,
							 | 
						|
								            hasXPath('count(user[id = "bob"])', 1)
							 | 
						|
								        );
							 | 
						|
								        assertThat(
							 | 
						|
								            'two matches',
							 | 
						|
								            self::$doc,
							 | 
						|
								            hasXPath('count(user[role = "user"])', 2)
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testDoesNotMatchWhenExpressionIsNotEqual()
							 | 
						|
								    {
							 | 
						|
								        assertThat(
							 | 
						|
								            'no match',
							 | 
						|
								            self::$doc,
							 | 
						|
								            not(hasXPath('count(user[id = "frank"])', 2))
							 | 
						|
								        );
							 | 
						|
								        assertThat(
							 | 
						|
								            'one match',
							 | 
						|
								            self::$doc,
							 | 
						|
								            not(hasXPath('count(user[role = "admin"])', 2))
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testMatchesWhenContentMatches()
							 | 
						|
								    {
							 | 
						|
								        assertThat(
							 | 
						|
								            'one match',
							 | 
						|
								            self::$doc,
							 | 
						|
								            hasXPath('user/name', containsString('ice'))
							 | 
						|
								        );
							 | 
						|
								        assertThat(
							 | 
						|
								            'two matches',
							 | 
						|
								            self::$doc,
							 | 
						|
								            hasXPath('user/role', equalTo('user'))
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testDoesNotMatchWhenContentDoesNotMatch()
							 | 
						|
								    {
							 | 
						|
								        assertThat(
							 | 
						|
								            'no match',
							 | 
						|
								            self::$doc,
							 | 
						|
								            not(hasXPath('user/name', containsString('Bobby')))
							 | 
						|
								        );
							 | 
						|
								        assertThat(
							 | 
						|
								            'no matches',
							 | 
						|
								            self::$doc,
							 | 
						|
								            not(hasXPath('user/role', equalTo('owner')))
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testProvidesConvenientShortcutForHasXPathEqualTo()
							 | 
						|
								    {
							 | 
						|
								        assertThat('matches', self::$doc, hasXPath('count(user)', 3));
							 | 
						|
								        assertThat('matches', self::$doc, hasXPath('user[2]/id', 'bob'));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testProvidesConvenientShortcutForHasXPathCountEqualTo()
							 | 
						|
								    {
							 | 
						|
								        assertThat('matches', self::$doc, hasXPath('user[id = "charlie"]', 1));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testMatchesAcceptsXmlString()
							 | 
						|
								    {
							 | 
						|
								        assertThat('accepts XML string', self::$xml, hasXPath('user'));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testMatchesAcceptsHtmlString()
							 | 
						|
								    {
							 | 
						|
								        assertThat('accepts HTML string', self::$html, hasXPath('body/h1', 'Heading'));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testHasAReadableDescription()
							 | 
						|
								    {
							 | 
						|
								        $this->assertDescription(
							 | 
						|
								            'XML or HTML document with XPath "/users/user"',
							 | 
						|
								            hasXPath('/users/user')
							 | 
						|
								        );
							 | 
						|
								        $this->assertDescription(
							 | 
						|
								            'XML or HTML document with XPath "count(/users/user)" <2>',
							 | 
						|
								            hasXPath('/users/user', 2)
							 | 
						|
								        );
							 | 
						|
								        $this->assertDescription(
							 | 
						|
								            'XML or HTML document with XPath "/users/user/name"'
							 | 
						|
								            . ' a string starting with "Alice"',
							 | 
						|
								            hasXPath('/users/user/name', startsWith('Alice'))
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function testHasAReadableMismatchDescription()
							 | 
						|
								    {
							 | 
						|
								        $this->assertMismatchDescription(
							 | 
						|
								            'XPath returned no results',
							 | 
						|
								            hasXPath('/users/name'),
							 | 
						|
								            self::$doc
							 | 
						|
								        );
							 | 
						|
								        $this->assertMismatchDescription(
							 | 
						|
								            'XPath expression result was <3F>',
							 | 
						|
								            hasXPath('/users/user', 2),
							 | 
						|
								            self::$doc
							 | 
						|
								        );
							 | 
						|
								        $this->assertMismatchDescription(
							 | 
						|
								            'XPath returned ["alice", "bob", "charlie"]',
							 | 
						|
								            hasXPath('/users/user/id', 'Frank'),
							 | 
						|
								            self::$doc
							 | 
						|
								        );
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |