2008-05-30 11:40:08 +00:00
< ? php
/**
2009-03-18 17:55:58 +00:00
* XmlTest file
2008-05-30 11:40:08 +00:00
*
2010-07-27 00:31:39 +00:00
* PHP 5
2008-05-30 11:40:08 +00:00
*
2010-05-19 01:15:13 +00:00
* CakePHP ( tm ) Tests < http :// book . cakephp . org / view / 1196 / Testing >
2010-01-26 19:18:20 +00:00
* Copyright 2005 - 2010 , Cake Software Foundation , Inc . ( http :// cakefoundation . org )
2008-05-30 11:40:08 +00:00
*
* Licensed under The Open Group Test Suite License
* Redistributions of files must retain the above copyright notice .
*
2010-01-26 19:18:20 +00:00
* @ copyright Copyright 2005 - 2010 , Cake Software Foundation , Inc . ( http :// cakefoundation . org )
2010-05-19 01:15:13 +00:00
* @ link http :// book . cakephp . org / view / 1196 / Testing CakePHP ( tm ) Tests
2009-03-18 17:55:58 +00:00
* @ package cake
2008-10-30 17:30:26 +00:00
* @ subpackage cake . tests . cases . libs
* @ since CakePHP ( tm ) v 1.2 . 0.5432
* @ license http :// www . opensource . org / licenses / opengroup . php The Open Group Test Suite License
2008-05-30 11:40:08 +00:00
*/
App :: import ( 'Core' , 'Xml' );
2009-07-24 19:18:37 +00:00
2008-05-30 11:40:08 +00:00
/**
2009-03-18 17:55:58 +00:00
* XmlTest class
2008-05-30 11:40:08 +00:00
*
2009-03-18 17:55:58 +00:00
* @ package cake
2008-10-30 17:30:26 +00:00
* @ subpackage cake . tests . cases . libs
2008-05-30 11:40:08 +00:00
*/
2008-07-21 02:40:58 +00:00
class XmlTest extends CakeTestCase {
2009-07-24 19:18:37 +00:00
2010-09-08 22:40:33 +00:00
/**
* setup method
*
* @ access public
* @ return void
*/
function setUp () {
parent :: setup ();
$this -> _appEncoding = Configure :: read ( 'App.encoding' );
Configure :: write ( 'App.encoding' , 'UTF-8' );
}
/**
* tearDown method
*
* @ access public
* @ return void
*/
function tearDown () {
parent :: tearDown ();
Configure :: write ( 'App.encoding' , $this -> _appEncoding );
}
2009-03-18 17:55:58 +00:00
/**
2010-07-27 00:31:39 +00:00
* testBuild method
2009-03-18 17:55:58 +00:00
*
* @ return void
*/
2010-09-01 23:09:03 +00:00
public function testBuild () {
2010-07-27 00:31:39 +00:00
$xml = '<tag>value</tag>' ;
$obj = Xml :: build ( $xml );
$this -> assertTrue ( $obj instanceof SimpleXMLElement );
$this -> assertEqual (( string ) $obj -> getName (), 'tag' );
$this -> assertEqual (( string ) $obj , 'value' );
2009-07-24 19:18:37 +00:00
2010-09-08 22:40:33 +00:00
$xml = '<?xml version="1.0" encoding="UTF-8"?><tag>value</tag>' ;
2010-07-27 00:31:39 +00:00
$this -> assertEqual ( $obj , Xml :: build ( $xml ));
2009-07-24 19:18:37 +00:00
2010-09-08 23:30:04 +00:00
$obj = Xml :: build ( $xml , array ( 'return' => 'domdocument' ));
$this -> assertTrue ( $obj instanceof DOMDocument );
$this -> assertEqual ( $obj -> firstChild -> nodeName , 'tag' );
$this -> assertEqual ( $obj -> firstChild -> nodeValue , 'value' );
2010-07-27 02:16:23 +00:00
$xml = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'fixtures' . DS . 'sample.xml' ;
2010-07-27 00:31:39 +00:00
$obj = Xml :: build ( $xml );
$this -> assertEqual ( $obj -> getName (), 'tags' );
$this -> assertEqual ( count ( $obj ), 2 );
2008-05-30 11:40:08 +00:00
2010-07-27 00:31:39 +00:00
$this -> assertEqual ( Xml :: build ( $xml ), Xml :: build ( file_get_contents ( $xml )));
2008-05-30 11:40:08 +00:00
2010-09-08 23:30:04 +00:00
$obj = Xml :: build ( $xml , array ( 'return' => 'domdocument' ));
$this -> assertEqual ( $obj -> firstChild -> nodeName , 'tags' );
$this -> assertEqual ( Xml :: build ( $xml , array ( 'return' => 'domdocument' )), Xml :: build ( file_get_contents ( $xml ), array ( 'return' => 'domdocument' )));
$this -> assertEqual ( Xml :: build ( $xml , array ( 'return' => 'simplexml' )), Xml :: build ( $xml , 'simplexml' ));
2010-07-27 00:31:39 +00:00
$xml = array ( 'tag' => 'value' );
$obj = Xml :: build ( $xml );
$this -> assertEqual ( $obj -> getName (), 'tag' );
$this -> assertEqual (( string ) $obj , 'value' );
2010-09-08 23:30:04 +00:00
$obj = Xml :: build ( $xml , array ( 'return' => 'domdocument' ));
$this -> assertEqual ( $obj -> firstChild -> nodeName , 'tag' );
$this -> assertEqual ( $obj -> firstChild -> nodeValue , 'value' );
2010-09-12 01:12:54 +00:00
$obj = Xml :: build ( $xml , array ( 'return' => 'domdocument' , 'encoding' => null ));
$this -> assertNoPattern ( '/encoding/' , $obj -> saveXML ());
2008-05-30 11:40:08 +00:00
}
2009-06-30 01:14:20 +00:00
2009-08-02 06:47:28 +00:00
/**
2010-08-23 03:19:54 +00:00
* data provider function for testBuildInvalidData
2010-07-27 02:25:55 +00:00
*
2010-08-23 21:23:53 +00:00
* @ return array
2010-07-27 02:25:55 +00:00
*/
2010-08-23 03:19:54 +00:00
public static function invalidDataProvider () {
return array (
array ( null ),
array ( false ),
array ( '' ),
array ( '<tag>' )
);
2010-07-27 02:25:55 +00:00
}
2008-05-30 11:40:08 +00:00
2010-07-27 02:25:55 +00:00
/**
2010-08-23 03:19:54 +00:00
* testBuildInvalidData
2010-07-27 02:25:55 +00:00
*
2010-08-23 03:19:54 +00:00
* @ dataProvider invalidDataProvider
2010-07-27 02:25:55 +00:00
* @ expectedException Exception
* return void
*/
2010-09-01 23:09:03 +00:00
public function testBuildInvalidData ( $value ) {
2010-08-23 03:19:54 +00:00
Xml :: build ( $value );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
2010-07-27 00:31:39 +00:00
* testFromArray method
2008-06-05 15:20:45 +00:00
*
2008-06-02 19:22:55 +00:00
* @ return void
*/
2010-09-01 23:09:03 +00:00
public function testFromArray () {
2010-07-27 00:31:39 +00:00
$xml = array ( 'tag' => 'value' );
$obj = Xml :: fromArray ( $xml );
$this -> assertEqual ( $obj -> getName (), 'tag' );
$this -> assertEqual (( string ) $obj , 'value' );
2008-05-30 11:40:08 +00:00
2010-07-27 00:31:39 +00:00
$xml = array ( 'tag' => null );
$obj = Xml :: fromArray ( $xml );
$this -> assertEqual ( $obj -> getName (), 'tag' );
$this -> assertEqual (( string ) $obj , '' );
2009-07-24 19:18:37 +00:00
2010-08-23 04:33:06 +00:00
$xml = array ( 'tag' => array ( '@' => 'value' ));
$obj = Xml :: fromArray ( $xml );
$this -> assertEqual ( $obj -> getName (), 'tag' );
$this -> assertEqual (( string ) $obj , 'value' );
2010-07-27 00:31:39 +00:00
$xml = array (
'tags' => array (
'tag' => array (
array (
'id' => '1' ,
'name' => 'defect'
),
array (
'id' => '2' ,
'name' => 'enhancement'
)
2008-05-30 11:40:08 +00:00
)
)
);
2010-09-07 02:11:45 +00:00
$obj = Xml :: fromArray ( $xml , 'attributes' );
2010-07-27 00:31:39 +00:00
$this -> assertTrue ( $obj instanceof SimpleXMLElement );
$this -> assertEqual ( $obj -> getName (), 'tags' );
$this -> assertEqual ( count ( $obj ), 2 );
2010-09-08 22:40:33 +00:00
$xmlText = '<' . '?xml version="1.0" encoding="UTF-8"?><tags><tag id="1" name="defect"/><tag id="2" name="enhancement"/></tags>' ;
2010-07-27 00:31:39 +00:00
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $obj -> asXML ()), $xmlText );
2010-09-07 02:11:45 +00:00
$obj = Xml :: fromArray ( $xml );
2010-07-27 00:31:39 +00:00
$this -> assertTrue ( $obj instanceof SimpleXMLElement );
$this -> assertEqual ( $obj -> getName (), 'tags' );
$this -> assertEqual ( count ( $obj ), 2 );
2010-09-08 22:40:33 +00:00
$xmlText = '<' . '?xml version="1.0" encoding="UTF-8"?><tags><tag><id>1</id><name>defect</name></tag><tag><id>2</id><name>enhancement</name></tag></tags>' ;
2010-07-27 00:31:39 +00:00
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $obj -> asXML ()), $xmlText );
$xml = array (
'tags' => array (
2008-05-30 11:40:08 +00:00
)
);
2010-07-27 00:31:39 +00:00
$obj = Xml :: fromArray ( $xml );
$this -> assertEqual ( $obj -> getName (), 'tags' );
$this -> assertEqual (( string ) $obj , '' );
$xml = array (
'tags' => array (
'bool' => true ,
'int' => 1 ,
'float' => 10.2 ,
'string' => 'ok' ,
'null' => null ,
'array' => array ()
2008-05-30 11:40:08 +00:00
)
);
2010-07-27 00:31:39 +00:00
$obj = Xml :: fromArray ( $xml , 'tags' );
$this -> assertEqual ( count ( $obj ), 6 );
$this -> assertIdentical (( string ) $obj -> bool , '1' );
$this -> assertIdentical (( string ) $obj -> int , '1' );
$this -> assertIdentical (( string ) $obj -> float , '10.2' );
$this -> assertIdentical (( string ) $obj -> string , 'ok' );
$this -> assertIdentical (( string ) $obj -> null , '' );
$this -> assertIdentical (( string ) $obj -> array , '' );
2010-08-23 03:48:34 +00:00
$xml = array (
'tags' => array (
'tag' => array (
array (
'@id' => '1' ,
'name' => 'defect'
),
array (
'@id' => '2' ,
'name' => 'enhancement'
)
)
)
);
$obj = Xml :: fromArray ( $xml , 'tags' );
2010-09-08 22:40:33 +00:00
$xmlText = '<' . '?xml version="1.0" encoding="UTF-8"?><tags><tag id="1"><name>defect</name></tag><tag id="2"><name>enhancement</name></tag></tags>' ;
2010-08-23 03:48:34 +00:00
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $obj -> asXML ()), $xmlText );
2010-08-23 04:33:06 +00:00
$xml = array (
'tags' => array (
'tag' => array (
array (
'@id' => '1' ,
'name' => 'defect' ,
'@' => 'Tag 1'
),
array (
'@id' => '2' ,
'name' => 'enhancement'
),
),
'@' => 'All tags'
)
);
$obj = Xml :: fromArray ( $xml , 'tags' );
2010-09-08 22:40:33 +00:00
$xmlText = '<' . '?xml version="1.0" encoding="UTF-8"?><tags>All tags<tag id="1">Tag 1<name>defect</name></tag><tag id="2"><name>enhancement</name></tag></tags>' ;
2010-08-23 04:33:06 +00:00
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $obj -> asXML ()), $xmlText );
$xml = array (
'tags' => array (
'tag' => array (
'id' => 1 ,
'@' => 'defect'
)
)
);
2010-09-07 02:11:45 +00:00
$obj = Xml :: fromArray ( $xml , 'attributes' );
2010-09-08 22:40:33 +00:00
$xmlText = '<' . '?xml version="1.0" encoding="UTF-8"?><tags><tag id="1">defect</tag></tags>' ;
2010-08-23 04:33:06 +00:00
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $obj -> asXML ()), $xmlText );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
2010-08-23 03:19:54 +00:00
* data provider for fromArray () failures
2008-06-05 15:20:45 +00:00
*
2010-08-23 21:23:53 +00:00
* @ return array
2008-06-02 19:22:55 +00:00
*/
2010-08-23 03:19:54 +00:00
public static function invalidArrayDataProvider () {
return array (
array ( '' ),
array ( null ),
array ( false ),
array ( array ()),
2010-08-23 21:23:53 +00:00
array ( array ( 'numeric key as root' )),
array ( array ( 'item1' => '' , 'item2' => '' )),
array ( array ( 'items' => array ( 'item1' , 'item2' ))),
2010-08-23 03:19:54 +00:00
array ( array (
2010-07-27 00:31:39 +00:00
'tags' => array (
'tag' => array (
array (
array (
'string'
)
)
)
2009-07-01 18:58:05 +00:00
)
2010-08-23 03:19:54 +00:00
)),
2010-08-23 04:46:31 +00:00
array ( array (
2010-08-23 03:48:34 +00:00
'tags' => array (
'@tag' => array (
array (
'@id' => '1' ,
'name' => 'defect'
),
array (
'@id' => '2' ,
'name' => 'enhancement'
)
)
)
2010-08-23 04:46:31 +00:00
)),
2010-08-23 03:19:54 +00:00
array ( new DateTime ())
);
2010-07-27 02:25:55 +00:00
}
2008-07-31 23:50:32 +00:00
2010-07-27 02:25:55 +00:00
/**
2010-08-23 03:19:54 +00:00
* testFromArrayFail method
2010-07-27 02:25:55 +00:00
*
2010-08-23 03:19:54 +00:00
* @ dataProvider invalidArrayDataProvider
2010-07-27 02:25:55 +00:00
* @ expectedException Exception
*/
2010-09-01 23:09:03 +00:00
public function testFromArrayFail ( $value ) {
2010-08-23 03:19:54 +00:00
Xml :: fromArray ( $value );
2010-07-27 02:25:55 +00:00
}
2008-07-31 23:50:32 +00:00
2010-07-27 02:25:55 +00:00
/**
* testToArray method
*
* @ return void
*/
2010-09-01 23:09:03 +00:00
public function testToArray () {
2010-07-27 00:31:39 +00:00
$xml = '<tag>name</tag>' ;
$obj = Xml :: build ( $xml );
$this -> assertEqual ( Xml :: toArray ( $obj ), array ( 'tag' => 'name' ));
2008-08-10 16:26:43 +00:00
2010-07-27 02:16:23 +00:00
$xml = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'fixtures' . DS . 'sample.xml' ;
2010-07-27 00:31:39 +00:00
$obj = Xml :: build ( $xml );
2008-08-10 16:26:43 +00:00
$expected = array (
2010-08-23 03:24:56 +00:00
'tags' => array (
'tag' => array (
array (
'@id' => '1' ,
'name' => 'defect'
),
array (
'@id' => '2' ,
'name' => 'enhancement'
)
)
)
);
$this -> assertEqual ( Xml :: toArray ( $obj ), $expected );
$array = array (
2010-07-27 00:31:39 +00:00
'tags' => array (
'tag' => array (
2008-07-31 23:50:32 +00:00
array (
2010-07-27 00:31:39 +00:00
'id' => '1' ,
'name' => 'defect'
2008-07-31 23:50:32 +00:00
),
array (
2010-07-27 00:31:39 +00:00
'id' => '2' ,
'name' => 'enhancement'
2008-07-31 23:50:32 +00:00
)
)
)
2010-07-27 00:31:39 +00:00
);
2010-08-23 03:24:56 +00:00
$this -> assertEqual ( Xml :: toArray ( Xml :: fromArray ( $array , 'tags' )), $array );
2008-09-05 17:20:18 +00:00
2010-07-27 00:31:39 +00:00
$expected = array (
2010-08-23 03:24:56 +00:00
'tags' => array (
'tag' => array (
array (
'@id' => '1' ,
'@name' => 'defect'
),
array (
'@id' => '2' ,
'@name' => 'enhancement'
)
)
)
);
2010-09-07 02:11:45 +00:00
$this -> assertEqual ( Xml :: toArray ( Xml :: fromArray ( $array , 'attributes' )), $expected );
2010-09-12 14:25:37 +00:00
$this -> assertEqual ( Xml :: toArray ( Xml :: fromArray ( $array , array ( 'return' => 'domdocument' , 'format' => 'attributes' ))), $expected );
2010-09-07 02:11:45 +00:00
$this -> assertEqual ( Xml :: toArray ( Xml :: fromArray ( $array )), $array );
2010-09-12 14:25:37 +00:00
$this -> assertEqual ( Xml :: toArray ( Xml :: fromArray ( $array , array ( 'return' => 'domdocument' ))), $array );
2010-08-23 03:24:56 +00:00
$array = array (
2010-07-27 00:31:39 +00:00
'tags' => array (
'tag' => array (
'id' => '1' ,
'posts' => array (
array ( 'id' => '1' ),
array ( 'id' => '2' )
2008-09-05 17:20:18 +00:00
)
),
2010-07-27 00:31:39 +00:00
'tagOther' => array (
'subtag' => array (
'id' => '1'
2008-09-05 17:20:18 +00:00
)
)
)
2009-09-22 20:47:11 +00:00
);
2010-08-23 03:24:56 +00:00
$expected = array (
'tags' => array (
'tag' => array (
'@id' => '1' ,
'posts' => array (
array ( '@id' => '1' ),
array ( '@id' => '2' )
)
),
'tagOther' => array (
'subtag' => array (
'@id' => '1'
)
)
)
);
2010-09-07 02:11:45 +00:00
$this -> assertEqual ( Xml :: toArray ( Xml :: fromArray ( $array , 'attributes' )), $expected );
2010-09-12 14:25:37 +00:00
$this -> assertEqual ( Xml :: toArray ( Xml :: fromArray ( $array , array ( 'format' => 'attributes' , 'return' => 'domdocument' ))), $expected );
2010-03-26 08:59:09 +00:00
2010-07-28 21:53:36 +00:00
$xml = '<root>' ;
$xml .= '<tag id="1">defect</tag>' ;
$xml .= '</root>' ;
$obj = Xml :: build ( $xml );
$expected = array (
'root' => array (
'tag' => array (
2010-08-23 03:24:56 +00:00
'@id' => 1 ,
2010-08-23 04:33:06 +00:00
'@' => 'defect'
2010-07-28 21:53:36 +00:00
)
)
);
$this -> assertEqual ( Xml :: toArray ( $obj ), $expected );
2010-07-27 00:31:39 +00:00
$xml = '<root>' ;
$xml .= '<table xmlns="http://www.w3.org/TR/html4/"><tr><td>Apples</td><td>Bananas</td></tr></table>' ;
$xml .= '<table xmlns="http://www.cakephp.org"><name>CakePHP</name><license>MIT</license></table>' ;
$xml .= '<table>The book is on the table.</table>' ;
$xml .= '</root>' ;
$obj = Xml :: build ( $xml );
2010-03-26 08:59:09 +00:00
$expected = array (
2010-07-27 00:31:39 +00:00
'root' => array (
'table' => array (
array ( 'tr' => array ( 'td' => array ( 'Apples' , 'Bananas' ))),
array ( 'name' => 'CakePHP' , 'license' => 'MIT' ),
'The book is on the table.'
2010-03-26 08:59:09 +00:00
)
2010-07-27 00:31:39 +00:00
)
2010-03-26 08:59:09 +00:00
);
2010-07-27 00:31:39 +00:00
$this -> assertEqual ( Xml :: toArray ( $obj ), $expected );
2010-07-28 22:46:35 +00:00
$xml = '<root xmlns:cake="http://www.cakephp.org/">' ;
$xml .= '<tag>defect</tag>' ;
$xml .= '<cake:bug>1</cake:bug>' ;
$xml .= '</root>' ;
$obj = Xml :: build ( $xml );
$expected = array (
'root' => array (
'tag' => 'defect' ,
2010-09-07 03:31:50 +00:00
'cake:bug' => 1
2010-07-28 22:46:35 +00:00
)
);
$this -> assertEqual ( Xml :: toArray ( $obj ), $expected );
2008-10-04 19:50:38 +00:00
}
2010-03-27 16:48:31 +00:00
2010-09-01 23:06:56 +00:00
/**
2010-09-12 14:54:11 +00:00
* testRss
2010-09-01 23:06:56 +00:00
*
* @ return void
*/
2010-09-12 14:54:11 +00:00
public function testRss () {
2010-09-01 23:22:39 +00:00
$rss = file_get_contents ( TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'fixtures' . DS . 'rss.xml' );
2010-09-01 23:06:56 +00:00
$rssAsArray = Xml :: toArray ( Xml :: build ( $rss ));
$this -> assertEqual ( $rssAsArray [ 'rss' ][ '@version' ], '2.0' );
$this -> assertEqual ( count ( $rssAsArray [ 'rss' ][ 'channel' ][ 'item' ]), 2 );
2010-09-07 03:31:50 +00:00
$atomLink = array ( '@href' => 'http://bakery.cakephp.org/articles/rss' , '@rel' => 'self' , '@type' => 'application/rss+xml' );
$this -> assertEqual ( $rssAsArray [ 'rss' ][ 'channel' ][ 'atom:link' ], $atomLink );
$this -> assertEqual ( $rssAsArray [ 'rss' ][ 'channel' ][ 'link' ], 'http://bakery.cakephp.org/' );
2010-09-01 23:06:56 +00:00
$expected = array (
'title' => 'Alertpay automated sales via IPN' ,
'link' => 'http://bakery.cakephp.org/articles/view/alertpay-automated-sales-via-ipn' ,
'description' => 'I\'m going to show you how I implemented a payment module via the Alertpay payment processor.' ,
'pubDate' => 'Tue, 31 Aug 2010 01:42:00 -0500' ,
'guid' => 'http://bakery.cakephp.org/articles/view/alertpay-automated-sales-via-ipn'
);
$this -> assertIdentical ( $rssAsArray [ 'rss' ][ 'channel' ][ 'item' ][ 1 ], $expected );
2010-09-12 14:54:11 +00:00
$rss = array (
'rss' => array (
'xmlns:atom' => 'http://www.w3.org/2005/Atom' ,
'@version' => '2.0' ,
'channel' => array (
'atom:link' => array (
'@href' => 'http://bakery.cakephp.org/articles/rss' ,
'@rel' => 'self' ,
'@type' => 'application/rss+xml'
),
'title' => 'The Bakery: ' ,
'link' => 'http://bakery.cakephp.org/' ,
'description' => 'Recent Articles at The Bakery.' ,
'pubDate' => 'Sun, 12 Sep 2010 04:18:26 -0500' ,
'item' => array (
array (
'title' => 'CakePHP 1.3.4 released' ,
'link' => 'http://bakery.cakephp.org/articles/view/cakephp-1-3-4-released'
),
array (
'title' => 'Wizard Component 1.2 Tutorial' ,
'link' => 'http://bakery.cakephp.org/articles/view/wizard-component-1-2-tutorial'
)
)
)
)
);
$rssAsSimpleXML = Xml :: fromArray ( $rss );
$xmlText = '<' . '?xml version="1.0" encoding="UTF-8"?>' ;
$xmlText .= '<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">' ;
$xmlText .= '<channel>' ;
$xmlText .= '<atom:link href="http://bakery.cakephp.org/articles/rss" rel="self" type="application/rss+xml"/>' ;
$xmlText .= '<title>The Bakery: </title>' ;
$xmlText .= '<link>http://bakery.cakephp.org/</link>' ;
$xmlText .= '<description>Recent Articles at The Bakery.</description>' ;
$xmlText .= '<pubDate>Sun, 12 Sep 2010 04:18:26 -0500</pubDate>' ;
$xmlText .= '<item><title>CakePHP 1.3.4 released</title><link>http://bakery.cakephp.org/articles/view/cakephp-1-3-4-released</link></item>' ;
$xmlText .= '<item><title>Wizard Component 1.2 Tutorial</title><link>http://bakery.cakephp.org/articles/view/wizard-component-1-2-tutorial</link></item>' ;
$xmlText .= '</channel></rss>' ;
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $rssAsSimpleXML -> asXML ()), $xmlText );
2010-09-01 23:06:56 +00:00
}
2010-09-02 00:04:53 +00:00
/**
* testXmlRpc
*
* @ return void
*/
public function testXmlRpc () {
$xml = Xml :: build ( '<methodCall><methodName>test</methodName><params /></methodCall>' );
$expected = array (
'methodCall' => array (
'methodName' => 'test' ,
'params' => ''
)
);
$this -> assertIdentical ( Xml :: toArray ( $xml ), $expected );
$xml = Xml :: build ( '<methodCall><methodName>test</methodName><params><param><value><array><data><value><int>12</int></value><value><string>Egypt</string></value><value><boolean>0</boolean></value><value><int>-31</int></value></data></array></value></param></params></methodCall>' );
$expected = array (
'methodCall' => array (
'methodName' => 'test' ,
'params' => array (
'param' => array (
'value' => array (
'array' => array (
'data' => array (
'value' => array (
array ( 'int' => '12' ),
array ( 'string' => 'Egypt' ),
array ( 'boolean' => '0' ),
array ( 'int' => '-31' )
)
)
)
)
)
)
)
);
$this -> assertIdentical ( Xml :: toArray ( $xml ), $expected );
2010-09-08 22:40:33 +00:00
$xmlText = '<?xml version="1.0" encoding="UTF-8"?><methodResponse><params><param><value><array><data><value><int>1</int></value><value><string>testing</string></value></data></array></value></param></params></methodResponse>' ;
2010-09-02 00:04:53 +00:00
$xml = Xml :: build ( $xmlText );
$expected = array (
'methodResponse' => array (
'params' => array (
'param' => array (
'value' => array (
'array' => array (
'data' => array (
'value' => array (
array ( 'int' => '1' ),
array ( 'string' => 'testing' )
)
)
)
)
)
)
)
);
$this -> assertIdentical ( Xml :: toArray ( $xml ), $expected );
$xml = Xml :: fromArray ( $expected , 'tags' );
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $xml -> asXML ()), $xmlText );
}
2010-09-02 00:37:32 +00:00
/**
* testSoap
*
* @ return void
*/
public function testSoap () {
$xmlRequest = Xml :: build ( TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'fixtures' . DS . 'soap_request.xml' );
$expected = array (
'Envelope' => array (
2010-09-07 03:31:50 +00:00
'@soap:encodingStyle' => 'http://www.w3.org/2001/12/soap-encoding' ,
'soap:Body' => array (
'm:GetStockPrice' => array (
'm:StockName' => 'IBM'
2010-09-02 00:37:32 +00:00
)
)
)
);
$this -> assertEqual ( Xml :: toArray ( $xmlRequest ), $expected );
$xmlResponse = Xml :: build ( TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'fixtures' . DS . 'soap_response.xml' );
$expected = array (
'Envelope' => array (
2010-09-07 03:31:50 +00:00
'@soap:encodingStyle' => 'http://www.w3.org/2001/12/soap-encoding' ,
'soap:Body' => array (
'm:GetStockPriceResponse' => array (
'm:Price' => '34.5'
2010-09-02 00:37:32 +00:00
)
)
)
);
2010-09-06 23:17:30 +00:00
$this -> assertEqual ( Xml :: toArray ( $xmlResponse ), $expected );
2010-09-02 00:37:32 +00:00
}
2010-09-07 03:31:50 +00:00
/**
* testNamespace
*
* @ retun void
*/
public function testNamespace () {
$xmlResponse = Xml :: build ( '<root xmlns:ns="http://cakephp.org"><ns:tag id="1"><child>good</child><otherchild>bad</otherchild></ns:tag><tag>Tag without ns</tag></root>' );
$expected = array (
'root' => array (
'ns:tag' => array (
'@id' => '1' ,
'child' => 'good' ,
'otherchild' => 'bad'
),
'tag' => 'Tag without ns'
)
);
$this -> assertEqual ( Xml :: toArray ( $xmlResponse ), $expected );
$xmlResponse = Xml :: build ( '<root xmlns:ns="http://cakephp.org"><ns:tag id="1" /><tag><id>1</id></tag></root>' );
$expected = array (
'root' => array (
'ns:tag' => array (
'@id' => '1'
),
'tag' => array (
'id' => '1'
)
)
);
$this -> assertEqual ( Xml :: toArray ( $xmlResponse ), $expected );
$xmlResponse = Xml :: build ( '<root xmlns:ns="http://cakephp.org"><ns:attr>1</ns:attr></root>' );
$expected = array (
'root' => array (
'ns:attr' => '1'
)
);
$this -> assertEqual ( Xml :: toArray ( $xmlResponse ), $expected );
$xmlResponse = Xml :: build ( '<root><ns:attr xmlns:ns="http://cakephp.org">1</ns:attr></root>' );
$this -> assertEqual ( Xml :: toArray ( $xmlResponse ), $expected );
2010-09-11 15:36:43 +00:00
$xml = array (
'root' => array (
'ns:attr' => array (
'xmlns:ns' => 'http://cakephp.org' ,
'@' => 1
)
)
);
$expected = '<' . '?xml version="1.0" encoding="UTF-8"?><root><ns:attr xmlns:ns="http://cakephp.org">1</ns:attr></root>' ;
$xmlResponse = Xml :: fromArray ( $xml );
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $xmlResponse -> asXML ()), $expected );
$xml = array (
'root' => array (
'tag' => array (
'xmlns:pref' => 'http://cakephp.org' ,
'pref:item' => array (
'item 1' ,
'item 2'
)
)
)
);
$expected = '<' . '?xml version="1.0" encoding="UTF-8"?><root><tag xmlns:pref="http://cakephp.org"><pref:item>item 1</pref:item><pref:item>item 2</pref:item></tag></root>' ;
$xmlResponse = Xml :: fromArray ( $xml );
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $xmlResponse -> asXML ()), $expected );
$xml = array (
'root' => array (
'tag' => array (
'xmlns:' => 'http://cakephp.org'
)
)
);
$expected = '<' . '?xml version="1.0" encoding="UTF-8"?><root><tag xmlns="http://cakephp.org"/></root>' ;
$xmlResponse = Xml :: fromArray ( $xml );
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $xmlResponse -> asXML ()), $expected );
$xml = array (
'root' => array (
'xmlns:' => 'http://cakephp.org'
)
);
$expected = '<' . '?xml version="1.0" encoding="UTF-8"?><root xmlns="http://cakephp.org"/>' ;
$xmlResponse = Xml :: fromArray ( $xml );
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $xmlResponse -> asXML ()), $expected );
$xml = array (
'root' => array (
'xmlns:ns' => 'http://cakephp.org'
)
);
$expected = '<' . '?xml version="1.0" encoding="UTF-8"?><root xmlns:ns="http://cakephp.org"/>' ;
$xmlResponse = Xml :: fromArray ( $xml );
$this -> assertEqual ( str_replace ( array ( " \r " , " \n " ), '' , $xmlResponse -> asXML ()), $expected );
2010-09-07 03:31:50 +00:00
}
2010-08-23 21:30:03 +00:00
/**
* data provider for toArray () failures
*
* @ return array
*/
public static function invalidToArrayDataProvider () {
return array (
array ( new DateTime ()),
array ( array ())
);
}
/**
* testToArrayFail method
*
* @ dataProvider invalidToArrayDataProvider
* @ expectedException Exception
*/
2010-09-01 23:09:03 +00:00
public function testToArrayFail ( $value ) {
2010-08-23 21:30:03 +00:00
Xml :: toArray ( $value );
}
2008-05-30 11:40:08 +00:00
}