@@ -1061,6 +1061,51 @@ public function testCountOfNestedElements()
1061
1061
$ this ->assertCount (1 , $ crawler ->filter ('li:contains("List item 1") ' ));
1062
1062
}
1063
1063
1064
+ public function testEvaluateReturnsTypedResultOfXPathExpressionOnADocumentSubset ()
1065
+ {
1066
+ $ crawler = $ this ->createTestCrawler ();
1067
+
1068
+ $ result = $ crawler ->filterXPath ('//form/input ' )->evaluate ('substring-before(@name, "Name") ' );
1069
+
1070
+ $ this ->assertSame (array ('Text ' , 'Foo ' , 'Bar ' ), $ result );
1071
+ }
1072
+
1073
+ public function testEvaluateReturnsTypedResultOfNamespacedXPathExpressionOnADocumentSubset ()
1074
+ {
1075
+ $ crawler = $ this ->createTestXmlCrawler ();
1076
+
1077
+ $ result = $ crawler ->filterXPath ('//yt:accessControl/@action ' )->evaluate ('string(.) ' );
1078
+
1079
+ $ this ->assertSame (array ('comment ' , 'videoRespond ' ), $ result );
1080
+ }
1081
+
1082
+ public function testEvaluateReturnsTypedResultOfNamespacedXPathExpression ()
1083
+ {
1084
+ $ crawler = $ this ->createTestXmlCrawler ();
1085
+ $ crawler ->registerNamespace ('youtube ' , 'http://gdata.youtube.com/schemas/2007 ' );
1086
+
1087
+ $ result = $ crawler ->evaluate ('string(//youtube:accessControl/@action) ' );
1088
+
1089
+ $ this ->assertSame (array ('comment ' ), $ result );
1090
+ }
1091
+
1092
+ public function testEvaluateReturnsACrawlerIfXPathExpressionEvaluatesToANode ()
1093
+ {
1094
+ $ crawler = $ this ->createTestCrawler ()->evaluate ('//form/input[1] ' );
1095
+
1096
+ $ this ->assertInstanceOf (Crawler::class, $ crawler );
1097
+ $ this ->assertCount (1 , $ crawler );
1098
+ $ this ->assertSame ('input ' , $ crawler ->first ()->nodeName ());
1099
+ }
1100
+
1101
+ /**
1102
+ * @expectedException \LogicException
1103
+ */
1104
+ public function testEvaluateThrowsAnExceptionIfDocumentIsEmpty ()
1105
+ {
1106
+ (new Crawler ())->evaluate ('//form/input[1] ' );
1107
+ }
1108
+
1064
1109
public function createTestCrawler ($ uri = null )
1065
1110
{
1066
1111
$ dom = new \DOMDocument ();
0 commit comments