-
Notifications
You must be signed in to change notification settings - Fork 279
/
Copy pathManipulatorTest.php
86 lines (81 loc) · 3.36 KB
/
ManipulatorTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
namespace Behat\Mink\Tests\Selector\Xpath;
use Behat\Mink\Selector\Xpath\Manipulator;
use PHPUnit\Framework\TestCase;
class ManipulatorTest extends TestCase
{
/**
* @dataProvider getPrependedXpath
*/
public function testPrepend(string $prefix, string $xpath, string $expectedXpath)
{
$manipulator = new Manipulator();
$this->assertEquals($expectedXpath, $manipulator->prepend($xpath, $prefix));
}
public static function getPrependedXpath()
{
return array(
'simple' => array(
'some_xpath',
'some_tag1',
'some_xpath/some_tag1',
),
'with slash' => array(
'some_xpath',
'/some_tag1',
'some_xpath/some_tag1',
),
'union' => array(
'some_xpath',
'some_tag1 | some_tag2',
'some_xpath/some_tag1 | some_xpath/some_tag2',
),
'wrapped union' => array(
'some_xpath',
'(some_tag1 | some_tag2)/some_child',
'(some_xpath/some_tag1 | some_xpath/some_tag2)/some_child',
),
'multiple wrapped union' => array(
'some_xpath',
'( ( some_tag1 | some_tag2)/some_child | some_tag3)/leaf',
'( ( some_xpath/some_tag1 | some_xpath/some_tag2)/some_child | some_xpath/some_tag3)/leaf',
),
'parent union' => array(
'some_xpath | another_xpath',
'some_tag1 | some_tag2',
'(some_xpath | another_xpath)/some_tag1 | (some_xpath | another_xpath)/some_tag2',
),
'complex condition' => array(
'some_xpath',
'some_tag1 | some_tag2[@foo = "bar|"] | some_tag3[foo | bar]',
'some_xpath/some_tag1 | some_xpath/some_tag2[@foo = "bar|"] | some_xpath/some_tag3[foo | bar]',
),
'multiline' => array(
'some_xpath',
"some_tag1 | some_tag2[@foo =\n 'bar|']\n | some_tag3[foo | bar]",
"some_xpath/some_tag1 | some_xpath/some_tag2[@foo =\n 'bar|'] | some_xpath/some_tag3[foo | bar]",
),
'containing pipe' => array(
'some_xpath',
"some_tag[(contains(normalize-space(string(.)), 'foo|bar') | other_tag[contains(./@some_attribute, 'foo|bar')])]",
"some_xpath/some_tag[(contains(normalize-space(string(.)), 'foo|bar') | other_tag[contains(./@some_attribute, 'foo|bar')])]",
),
// Invalid XPath queries should be handled gracefully to let the DOMQuery report a proper failure for them later
'unclosed string literal single quote' => array(
'some_xpath',
"some_tag1 | some_tag2[@foo = 'bar]",
"some_xpath/some_tag1 | some_tag2[@foo = 'bar]",
),
'unclosed string literal double quote' => array(
'some_xpath',
'some_tag1 | some_tag2[@foo = "bar]',
'some_xpath/some_tag1 | some_tag2[@foo = "bar]',
),
'unclosed bracket' => array(
'some_xpath',
'some_tag1 | some_tag2[@foo = "bar"',
'some_xpath/some_tag1 | some_tag2[@foo = "bar"',
),
);
}
}