1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Dgame\Soap\Test; |
4
|
|
|
|
5
|
|
|
use Dgame\Soap\Hydrator\ClassMapper; |
6
|
|
|
use Dgame\Soap\Hydrator\Dom\Hydrator; |
7
|
|
|
use Dgame\Soap\Test\Object\Address; |
8
|
|
|
use Dgame\Soap\Test\Object\Car; |
9
|
|
|
use Dgame\Soap\Test\Object\Person; |
10
|
|
|
use Dgame\Soap\Test\Object\Phone; |
11
|
|
|
use Dgame\Soap\Test\Object\Root; |
12
|
|
|
use DOMDocument; |
13
|
|
|
use PHPUnit\Framework\TestCase; |
14
|
|
|
|
15
|
|
|
/** |
16
|
|
|
* Class DeHydrationTest |
17
|
|
|
* @package Dgame\Soap\Test |
18
|
|
|
*/ |
19
|
|
|
final class DeHydrationTest extends TestCase |
20
|
|
|
{ |
21
|
|
|
public function testDehydration() |
22
|
|
|
{ |
23
|
|
|
$doc = new DOMDocument('1.0', 'utf-8'); |
24
|
|
|
$doc->formatOutput = false; |
25
|
|
|
$doc->preserveWhiteSpace = false; |
26
|
|
|
$doc->load(__DIR__ . '/xml/test1.xml'); |
27
|
|
|
|
28
|
|
|
$mapper = new ClassMapper( |
29
|
|
|
[ |
30
|
|
|
'Root' => Root::class, |
31
|
|
|
'Person' => Person::class, |
32
|
|
|
'Car' => Car::class, |
33
|
|
|
'Phone' => Phone::class, |
34
|
|
|
'Address' => Address::class |
35
|
|
|
] |
36
|
|
|
); |
37
|
|
|
$mapper->appendPattern('/^(?:soap\-?)?env(?:elope)?/iS', 'Root'); |
38
|
|
|
|
39
|
|
|
$hydrator = new Hydrator($mapper); |
40
|
|
|
$objects = $hydrator->hydrateDocument($doc); |
41
|
|
|
|
42
|
|
|
$this->assertCount(1, $objects); |
43
|
|
|
|
44
|
|
|
/** @var Root $root */ |
45
|
|
|
$root = $objects[0]; |
46
|
|
|
|
47
|
|
|
$this->assertNotNull($root); |
48
|
|
|
$this->assertInstanceOf(Root::class, $root); |
49
|
|
|
|
50
|
|
|
$doc2 = new DOMDocument('1.0', 'utf-8'); |
51
|
|
|
$hydrator->assemble($root, $doc2); |
52
|
|
|
|
53
|
|
|
$xml = preg_replace('#<([^>]+)(\s*[^>]*)></\1>#', '<$1$2/>', $doc2->saveXml()); |
54
|
|
|
$this->assertEquals($doc->saveXML(), $xml); |
55
|
|
|
} |
56
|
|
|
} |