3 * This file is part of PHPUnit.
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
12 * @since Class available since Release 3.3.0
13 * @covers PHPUnit_Util_XML
15 class Util_XMLTest extends PHPUnit_Framework_TestCase
17 public function testAssertValidKeysValidKeys()
19 $options = array('testA' => 1, 'testB' => 2, 'testC' => 3);
20 $valid = array('testA', 'testB', 'testC');
21 $expected = array('testA' => 1, 'testB' => 2, 'testC' => 3);
22 $validated = PHPUnit_Util_XML::assertValidKeys($options, $valid);
24 $this->assertEquals($expected, $validated);
27 public function testAssertValidKeysValidKeysEmpty()
29 $options = array('testA' => 1, 'testB' => 2);
30 $valid = array('testA', 'testB', 'testC');
31 $expected = array('testA' => 1, 'testB' => 2, 'testC' => null);
32 $validated = PHPUnit_Util_XML::assertValidKeys($options, $valid);
34 $this->assertEquals($expected, $validated);
37 public function testAssertValidKeysDefaultValuesA()
39 $options = array('testA' => 1, 'testB' => 2);
40 $valid = array('testA' => 23, 'testB' => 24, 'testC' => 25);
41 $expected = array('testA' => 1, 'testB' => 2, 'testC' => 25);
42 $validated = PHPUnit_Util_XML::assertValidKeys($options, $valid);
44 $this->assertEquals($expected, $validated);
47 public function testAssertValidKeysDefaultValuesB()
50 $valid = array('testA' => 23, 'testB' => 24, 'testC' => 25);
51 $expected = array('testA' => 23, 'testB' => 24, 'testC' => 25);
52 $validated = PHPUnit_Util_XML::assertValidKeys($options, $valid);
54 $this->assertEquals($expected, $validated);
57 public function testAssertValidKeysInvalidKey()
59 $options = array('testA' => 1, 'testB' => 2, 'testD' => 3);
60 $valid = array('testA', 'testB', 'testC');
63 $validated = PHPUnit_Util_XML::assertValidKeys($options, $valid);
65 } catch (PHPUnit_Framework_Exception $e) {
66 $this->assertEquals('Unknown key(s): testD', $e->getMessage());
70 public function testAssertValidKeysInvalidKeys()
72 $options = array('testA' => 1, 'testD' => 2, 'testE' => 3);
73 $valid = array('testA', 'testB', 'testC');
76 $validated = PHPUnit_Util_XML::assertValidKeys($options, $valid);
78 } catch (PHPUnit_Framework_Exception $e) {
79 $this->assertEquals('Unknown key(s): testD, testE', $e->getMessage());
83 public function testConvertAssertSelect()
85 $selector = 'div#folder.open a[href="http://www.xerox.com"][title="xerox"].selected.big > span + h1';
86 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
87 $tag = array('tag' => 'div',
90 'descendant' => array('tag' => 'a',
91 'class' => 'selected big',
92 'attributes' => array('href' => 'http://www.xerox.com',
94 'child' => array('tag' => 'span',
95 'adjacent-sibling' => array('tag' => 'h1'))));
96 $this->assertEquals($tag, $converted);
99 public function testConvertAssertSelectElt()
102 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
103 $tag = array('tag' => 'div');
105 $this->assertEquals($tag, $converted);
108 public function testConvertAssertClass()
111 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
112 $tag = array('class' => 'foo');
114 $this->assertEquals($tag, $converted);
117 public function testConvertAssertId()
120 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
121 $tag = array('id' => 'foo');
123 $this->assertEquals($tag, $converted);
126 public function testConvertAssertAttribute()
128 $selector = '[foo="bar"]';
129 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
130 $tag = array('attributes' => array('foo' => 'bar'));
132 $this->assertEquals($tag, $converted);
135 public function testConvertAssertAttributeSpaces()
137 $selector = '[foo="bar baz"] div[value="foo bar"]';
138 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
139 $tag = array('attributes' => array('foo' => 'bar baz'),
140 'descendant' => array('tag' => 'div',
141 'attributes' => array('value' => 'foo bar')));
142 $this->assertEquals($tag, $converted);
145 public function testConvertAssertAttributeMultipleSpaces()
147 $selector = '[foo="bar baz"] div[value="foo bar baz"]';
148 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
149 $tag = array('attributes' => array('foo' => 'bar baz'),
150 'descendant' => array('tag' => 'div',
151 'attributes' => array('value' => 'foo bar baz')));
152 $this->assertEquals($tag, $converted);
155 public function testConvertAssertSelectEltClass()
157 $selector = 'div.foo';
158 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
159 $tag = array('tag' => 'div', 'class' => 'foo');
161 $this->assertEquals($tag, $converted);
164 public function testConvertAssertSelectEltId()
166 $selector = 'div#foo';
167 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
168 $tag = array('tag' => 'div', 'id' => 'foo');
170 $this->assertEquals($tag, $converted);
173 public function testConvertAssertSelectEltAttrEqual()
175 $selector = 'div[foo="bar"]';
176 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
177 $tag = array('tag' => 'div', 'attributes' => array('foo' => 'bar'));
179 $this->assertEquals($tag, $converted);
182 public function testConvertAssertSelectEltMultiAttrEqual()
184 $selector = 'div[foo="bar"][baz="fob"]';
185 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
186 $tag = array('tag' => 'div', 'attributes' => array('foo' => 'bar', 'baz' => 'fob'));
188 $this->assertEquals($tag, $converted);
191 public function testConvertAssertSelectEltAttrHasOne()
193 $selector = 'div[foo~="bar"]';
194 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
195 $tag = array('tag' => 'div', 'attributes' => array('foo' => 'regexp:/.*\bbar\b.*/'));
197 $this->assertEquals($tag, $converted);
200 public function testConvertAssertSelectEltAttrContains()
202 $selector = 'div[foo*="bar"]';
203 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
204 $tag = array('tag' => 'div', 'attributes' => array('foo' => 'regexp:/.*bar.*/'));
206 $this->assertEquals($tag, $converted);
209 public function testConvertAssertSelectEltChild()
211 $selector = 'div > a';
212 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
213 $tag = array('tag' => 'div', 'child' => array('tag' => 'a'));
215 $this->assertEquals($tag, $converted);
218 public function testConvertAssertSelectEltAdjacentSibling()
220 $selector = 'div + a';
221 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
222 $tag = array('tag' => 'div', 'adjacent-sibling' => array('tag' => 'a'));
224 $this->assertEquals($tag, $converted);
227 public function testConvertAssertSelectEltDescendant()
230 $converted = PHPUnit_Util_XML::convertSelectToTag($selector);
231 $tag = array('tag' => 'div', 'descendant' => array('tag' => 'a'));
233 $this->assertEquals($tag, $converted);
236 public function testConvertAssertSelectContent()
239 $content = 'div contents';
240 $converted = PHPUnit_Util_XML::convertSelectToTag($selector, $content);
241 $tag = array('id' => 'foo', 'content' => 'div contents');
243 $this->assertEquals($tag, $converted);
246 public function testConvertAssertSelectTrue()
250 $converted = PHPUnit_Util_XML::convertSelectToTag($selector, $content);
251 $tag = array('id' => 'foo');
253 $this->assertEquals($tag, $converted);
256 public function testConvertAssertSelectFalse()
260 $converted = PHPUnit_Util_XML::convertSelectToTag($selector, $content);
261 $tag = array('id' => 'foo');
263 $this->assertEquals($tag, $converted);
266 public function testConvertAssertNumber()
270 $converted = PHPUnit_Util_XML::convertSelectToTag($selector, $content);
271 $tag = array('class' => 'foo');
273 $this->assertEquals($tag, $converted);
276 public function testConvertAssertRange()
279 $content = array('greater_than' => 5, 'less_than' => 10);
280 $converted = PHPUnit_Util_XML::convertSelectToTag($selector, $content);
281 $tag = array('id' => 'foo');
283 $this->assertEquals($tag, $converted);
287 * @dataProvider charProvider
289 public function testPrepareString($char)
293 $escapedString = PHPUnit_Util_XML::prepareString($char);
294 $xml = "<?xml version='1.0' encoding='UTF-8' ?><tag>$escapedString</tag>";
295 $dom = new DomDocument('1.0', 'UTF-8');
299 } catch (Exception $e) {
302 $this->assertNull($e, sprintf(
303 'PHPUnit_Util_XML::prepareString("\x%02x") should not crash DomDocument',
308 public function charProvider()
312 for ($i = 0; $i < 256; $i++) {
313 $data[] = array(chr($i));
320 * @expectedException PHPUnit_Framework_Exception
321 * @expectedExceptionMessage Could not load XML from empty string
323 public function testLoadEmptyString()
325 PHPUnit_Util_XML::load('');
329 * @expectedException PHPUnit_Framework_Exception
330 * @expectedExceptionMessage Could not load XML from array
332 public function testLoadArray()
334 PHPUnit_Util_XML::load(array(1, 2, 3));
338 * @expectedException PHPUnit_Framework_Exception
339 * @expectedExceptionMessage Could not load XML from boolean
341 public function testLoadBoolean()
343 PHPUnit_Util_XML::load(false);
346 public function testNestedXmlToVariable()
348 $xml = '<array><element key="a"><array><element key="b"><string>foo</string></element></array></element><element key="c"><string>bar</string></element></array>';
349 $dom = new DOMDocument();
359 $actual = PHPUnit_Util_XML::xmlToVariable($dom->documentElement);
361 $this->assertSame($expected, $actual);