| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 | 
							- <?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
 
-         );
 
-     }
 
- }
 
 
  |