fabiencrassat /
CurriculumVitaeBundle
| 1 | <?php |
||||
| 2 | |||||
| 3 | /* |
||||
| 4 | * This file is part of the FabienCrassat\CurriculumVitaeBundle Symfony bundle. |
||||
| 5 | * |
||||
| 6 | * (c) Fabien Crassat <[email protected]> |
||||
| 7 | * |
||||
| 8 | * For the full copyright and license information, please view the LICENSE |
||||
| 9 | * file that was distributed with this source code. |
||||
| 10 | */ |
||||
| 11 | |||||
| 12 | namespace FabienCrassat\CurriculumVitaeBundle\Tests\Entity; |
||||
| 13 | |||||
| 14 | use FabienCrassat\CurriculumVitaeBundle\Entity\Xml2arrayFunctions; |
||||
| 15 | |||||
| 16 | class Xml2arrayFunctionsTest extends \PHPUnit\Framework\TestCase |
||||
| 17 | { |
||||
| 18 | private $xml2arrayFunctions; |
||||
| 19 | |||||
| 20 | public function testXml2arrayEmpty() { |
||||
| 21 | $string = <<<XML |
||||
| 22 | <?xml version='1.0'?> |
||||
| 23 | <document> |
||||
| 24 | </document> |
||||
| 25 | XML; |
||||
| 26 | $expected = []; |
||||
| 27 | |||||
| 28 | $this->assertXml2Array($expected, $string, $string); |
||||
| 29 | } |
||||
| 30 | |||||
| 31 | public function testXml2arrayWithBadLanguage() { |
||||
| 32 | $string = <<<XML |
||||
| 33 | <?xml version='1.0'?> |
||||
| 34 | <document> |
||||
| 35 | <node lang='unknown'>something we don't want</node> |
||||
| 36 | </document> |
||||
| 37 | XML; |
||||
| 38 | $expected = []; |
||||
| 39 | |||||
| 40 | $this->assertXml2Array($expected, $string, $string); |
||||
| 41 | } |
||||
| 42 | |||||
| 43 | public function testXml2arraySimple() { |
||||
| 44 | $string = <<<XML |
||||
| 45 | <?xml version='1.0'?> |
||||
| 46 | <document> |
||||
| 47 | <title>Forty What?</title> |
||||
| 48 | <from>Joe</from> |
||||
| 49 | <to>Jane</to> |
||||
| 50 | <body> |
||||
| 51 | I know that's the answer -- but what's the question? |
||||
| 52 | </body> |
||||
| 53 | </document> |
||||
| 54 | XML; |
||||
| 55 | $expected = [ |
||||
| 56 | 'title' => 'Forty What?', |
||||
| 57 | 'from' => 'Joe', |
||||
| 58 | 'to' => 'Jane', |
||||
| 59 | 'body' => "I know that's the answer -- but what's the question?" |
||||
| 60 | ]; |
||||
| 61 | |||||
| 62 | $this->assertXml2Array($expected, $string, $string); |
||||
| 63 | } |
||||
| 64 | |||||
| 65 | public function testXml2arrayWithAttribute() { |
||||
| 66 | $string = <<<XML |
||||
| 67 | <?xml version='1.0'?> |
||||
| 68 | <document> |
||||
| 69 | <attr attributekey="we don't care">The value win, not the attribute!!!</attr> |
||||
| 70 | <attr2 attributekey="attributevalue"><product>product</product></attr2> |
||||
| 71 | <onlyattribute attributekey="attributevalue"></onlyattribute> |
||||
| 72 | <value>value</value> |
||||
| 73 | <id id="id"></id> |
||||
| 74 | <ref ref="ref"></ref> |
||||
| 75 | <lang lang="lang"></lang> |
||||
| 76 | </document> |
||||
| 77 | XML; |
||||
| 78 | $expected = [ |
||||
| 79 | 'attr' => 'The value win, not the attribute!!!', |
||||
| 80 | 'onlyattribute' => [ |
||||
| 81 | 'attributekey' => 'attributevalue'], |
||||
| 82 | 'attr2' => [ |
||||
| 83 | 'attributekey' => 'attributevalue', |
||||
| 84 | 'product' => 'product'], |
||||
| 85 | 'value' => 'value' |
||||
| 86 | ]; |
||||
| 87 | |||||
| 88 | $this->assertXml2Array($expected, $string, $string); |
||||
| 89 | } |
||||
| 90 | |||||
| 91 | public function testXml2arrayWithCrossRefDepth1() { |
||||
| 92 | $curriculumVitae = <<<XML |
||||
| 93 | <?xml version='1.0'?> |
||||
| 94 | <document> |
||||
| 95 | <mysociety crossref="societies/society[@ref='SocietyFoo']/*"></mysociety> |
||||
| 96 | <societies> |
||||
| 97 | <society ref="SocietyFoo"> |
||||
| 98 | <name>SocietyFoo</name> |
||||
| 99 | <anaddress>An address</anaddress> |
||||
| 100 | <url>http://www.google.com</url> |
||||
| 101 | </society> |
||||
| 102 | </societies> |
||||
| 103 | </document> |
||||
| 104 | XML; |
||||
| 105 | |||||
| 106 | $string = <<<XML |
||||
| 107 | <?xml version='1.0'?> |
||||
| 108 | <document> |
||||
| 109 | <mysociety crossref="societies/society[@ref='SocietyFoo']/*"></mysociety> |
||||
| 110 | </document> |
||||
| 111 | XML; |
||||
| 112 | |||||
| 113 | $expected = ['mysociety' => [ |
||||
| 114 | 'name' => 'SocietyFoo', |
||||
| 115 | 'anaddress' => 'An address', |
||||
| 116 | 'url' => 'http://www.google.com' |
||||
| 117 | ]]; |
||||
| 118 | |||||
| 119 | $this->assertXml2Array($expected, $curriculumVitae, $string); |
||||
| 120 | } |
||||
| 121 | |||||
| 122 | public function testXml2arrayWithCrossRefDepth2() { |
||||
| 123 | $curriculumVitae = <<<XML |
||||
| 124 | <?xml version='1.0'?> |
||||
| 125 | <document> |
||||
| 126 | <job crossref="experience[@id='OneExperience']/*"></job> |
||||
| 127 | <experience id="OneExperience"> |
||||
| 128 | <asociety crossref="societies/society[@ref='SocietyBar']/*"></asociety> |
||||
| 129 | <job>My first job</job> |
||||
| 130 | </experience> |
||||
| 131 | <societies> |
||||
| 132 | <society ref="SocietyBar"> |
||||
| 133 | <name>OneSociety</name> |
||||
| 134 | <address>An address</address> |
||||
| 135 | <linktositeurl>http://www.anurl.com</linktositeurl> |
||||
| 136 | </society> |
||||
| 137 | </societies> |
||||
| 138 | </document> |
||||
| 139 | XML; |
||||
| 140 | |||||
| 141 | $string = <<<XML |
||||
| 142 | <?xml version='1.0'?> |
||||
| 143 | <document> |
||||
| 144 | <job crossref="experience[@id='OneExperience']/*"></job> |
||||
| 145 | </document> |
||||
| 146 | XML; |
||||
| 147 | |||||
| 148 | $society = [ |
||||
| 149 | 'name' => 'OneSociety', |
||||
| 150 | 'address' => 'An address', |
||||
| 151 | 'linktositeurl' => 'http://www.anurl.com' |
||||
| 152 | ]; |
||||
| 153 | |||||
| 154 | $expected = ['job' => [ |
||||
| 155 | 'asociety' => $society, |
||||
| 156 | 'job' => 'My first job' |
||||
| 157 | ]]; |
||||
| 158 | |||||
| 159 | $this->assertXml2Array($expected, $curriculumVitae, $string); |
||||
| 160 | |||||
| 161 | $string = <<<XML |
||||
| 162 | <?xml version='1.0'?> |
||||
| 163 | <document> |
||||
| 164 | <experience id="OneExperience"> |
||||
| 165 | <asociety crossref="societies/society[@ref='SocietyBar']/*"></asociety> |
||||
| 166 | <job>My first job</job> |
||||
| 167 | </experience> |
||||
| 168 | </document> |
||||
| 169 | XML; |
||||
| 170 | |||||
| 171 | $expected = ['OneExperience' => [ |
||||
| 172 | 'asociety' => $society, |
||||
| 173 | 'job' => 'My first job' |
||||
| 174 | ]]; |
||||
| 175 | |||||
| 176 | $this->assertXml2Array($expected, $curriculumVitae, $string); |
||||
| 177 | |||||
| 178 | $string = <<<XML |
||||
| 179 | <?xml version='1.0'?> |
||||
| 180 | <document> |
||||
| 181 | <asociety crossref="societies/society[@ref='SocietyBar']/*"></asociety> |
||||
| 182 | </document> |
||||
| 183 | XML; |
||||
| 184 | |||||
| 185 | $expected = ['asociety' => $society]; |
||||
| 186 | |||||
| 187 | $this->assertXml2Array($expected, $curriculumVitae, $string); |
||||
| 188 | } |
||||
| 189 | |||||
| 190 | public function testXml2arrayWithCrossRef() { |
||||
| 191 | $curriculumVitae = <<<XML |
||||
| 192 | <?xml version='1.0'?> |
||||
| 193 | <document> |
||||
| 194 | <job crossref="experience[@id='OneExperience']/*"></job> |
||||
| 195 | <experience id="OneExperience"> |
||||
| 196 | <society crossref="societies/society[@ref='MySociety']/*"></society> |
||||
| 197 | <job>A experience</job> |
||||
| 198 | </experience> |
||||
| 199 | <societies> |
||||
| 200 | <society ref="MySociety"> |
||||
| 201 | <name>MySociety</name> |
||||
| 202 | <oneaddress>My address</oneaddress> |
||||
| 203 | <siteurl>http://www.crassat.com</siteurl> |
||||
| 204 | </society> |
||||
| 205 | </societies> |
||||
| 206 | </document> |
||||
| 207 | XML; |
||||
| 208 | |||||
| 209 | $string = <<<XML |
||||
| 210 | <?xml version='1.0'?> |
||||
| 211 | <document> |
||||
| 212 | <job crossref="experience[@id='OneExperience']/*"></job> |
||||
| 213 | </document> |
||||
| 214 | XML; |
||||
| 215 | |||||
| 216 | $expected = ['job' => [ |
||||
| 217 | 'society' => [ |
||||
| 218 | 'name' => 'MySociety', |
||||
| 219 | 'oneaddress' => 'My address', |
||||
| 220 | 'siteurl' => 'http://www.crassat.com'], |
||||
| 221 | 'job' => 'A experience' |
||||
| 222 | ]]; |
||||
| 223 | |||||
| 224 | $this->assertXml2Array($expected, $curriculumVitae, $string); |
||||
| 225 | } |
||||
| 226 | |||||
| 227 | public function testXml2arrayWithCVCrossRef() { |
||||
| 228 | $curriculumVitae = <<<XML |
||||
| 229 | <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> |
||||
| 230 | <root> |
||||
| 231 | <langs> |
||||
| 232 | <lang id="en">English</lang><lang id="fr">Français</lang> |
||||
| 233 | </langs> |
||||
| 234 | <curriculumVitae> |
||||
| 235 | <lookingFor> |
||||
| 236 | <experience crossref="curriculumVitae/experiences/items/experience[@id='SecondJob']/*"></experience> |
||||
| 237 | <presentation lang="en">A good presentation.</presentation> |
||||
| 238 | <presentation lang="fr">Une bonne présentation.</presentation> |
||||
| 239 | </lookingFor> |
||||
| 240 | <experiences anchor="experiences"> |
||||
| 241 | <anchorTitle lang="en">Experiences</anchorTitle> |
||||
| 242 | <anchorTitle lang="fr">Expériences Professionnelles</anchorTitle> |
||||
| 243 | <items> |
||||
| 244 | <experience id="SecondJob"> |
||||
| 245 | <date lang="en">Apr 2011 - Present</date> |
||||
| 246 | <date lang="fr">Avr. 2011 - Aujourd'hui</date> |
||||
| 247 | <job lang="en">Second Job</job> |
||||
| 248 | <job lang="fr">Deuxième Job</job> |
||||
| 249 | <onesociety crossref="societies/society[@ref='ASociety']/*"></onesociety> |
||||
| 250 | <missions lang="en"> |
||||
| 251 | <item>A mission of my second job.</item> |
||||
| 252 | </missions> |
||||
| 253 | <missions lang="fr"> |
||||
| 254 | <item>Une mission de mon deuxième job.</item> |
||||
| 255 | </missions> |
||||
| 256 | </experience> |
||||
| 257 | <experience id="FirstJob"> |
||||
| 258 | <date lang="en">Nov 2009 - Apr 2011</date> |
||||
| 259 | <date lang="fr">Nov. 2009 - Avr. 2011</date> |
||||
| 260 | <job lang="en">First Job</job> |
||||
| 261 | <job lang="fr">Premier Job</job> |
||||
| 262 | <onesociety crossref="societies/society[@ref='ASociety']/*"></onesociety> |
||||
| 263 | <missions lang="en"> |
||||
| 264 | <item>A mission of my first job.</item> |
||||
| 265 | </missions> |
||||
| 266 | <missions lang="fr"> |
||||
| 267 | <item>Une mission de mon premier job.</item> |
||||
| 268 | </missions> |
||||
| 269 | </experience> |
||||
| 270 | </items> |
||||
| 271 | </experiences> |
||||
| 272 | </curriculumVitae> |
||||
| 273 | <societies> |
||||
| 274 | <society ref="ASociety"> |
||||
| 275 | <name>ASociety</name> |
||||
| 276 | <myaddress>myaddress</myaddress> |
||||
| 277 | <siteurl>http://cv.crassat.com</siteurl> |
||||
| 278 | </society> |
||||
| 279 | </societies> |
||||
| 280 | </root> |
||||
| 281 | XML; |
||||
| 282 | |||||
| 283 | $society = [ |
||||
| 284 | 'name' => 'ASociety', |
||||
| 285 | 'myaddress' => 'myaddress', |
||||
| 286 | 'siteurl' => 'http://cv.crassat.com']; |
||||
| 287 | $currentExperience = [ |
||||
| 288 | 'job' => 'Second Job', |
||||
| 289 | 'date' => 'Apr 2011 - Present', |
||||
| 290 | 'onesociety' => $society, |
||||
| 291 | 'missions' => [ |
||||
| 292 | 'item' => ['A mission of my second job.']]]; |
||||
| 293 | |||||
| 294 | $expected = [ |
||||
| 295 | 'langs' => [ |
||||
| 296 | 'en' => 'English', |
||||
| 297 | 'fr' => 'Français'], |
||||
| 298 | 'curriculumVitae' => [ |
||||
| 299 | 'lookingFor' => [ |
||||
| 300 | 'experience' => $currentExperience, |
||||
| 301 | 'presentation' => 'A good presentation.'], |
||||
| 302 | 'experiences' => [ |
||||
| 303 | 'anchorTitle' => 'Experiences', |
||||
| 304 | 'items' => [ |
||||
| 305 | 'SecondJob' => $currentExperience, |
||||
| 306 | 'FirstJob' => [ |
||||
| 307 | 'job' => 'First Job', |
||||
| 308 | 'date' => 'Nov 2009 - Apr 2011', |
||||
| 309 | 'onesociety' => $society, |
||||
| 310 | 'missions' => [ |
||||
| 311 | 'item' => ['A mission of my first job.']]]], |
||||
| 312 | 'anchor' => 'experiences']], |
||||
| 313 | 'societies' => ['society' => $society] |
||||
| 314 | ]; |
||||
| 315 | |||||
| 316 | $this->assertXml2Array($expected, $curriculumVitae, $curriculumVitae); |
||||
| 317 | } |
||||
| 318 | |||||
| 319 | /** |
||||
| 320 | * @param string $curriculumVitae |
||||
| 321 | * @param string $xml |
||||
| 322 | */ |
||||
| 323 | private function assertXml2Array($expected, $curriculumVitae, $xml) { |
||||
| 324 | $this->xml2arrayFunctions = new Xml2arrayFunctions(simplexml_load_string($curriculumVitae)); |
||||
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||
| 325 | |||||
| 326 | $result = $this->xml2arrayFunctions->xml2array(simplexml_load_string($xml)); |
||||
|
0 ignored issues
–
show
It seems like
simplexml_load_string($xml) can also be of type false; however, parameter $xml of FabienCrassat\Curriculum...yFunctions::xml2array() does only seem to accept SimpleXMLElement, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
| 327 | |||||
| 328 | $this->assertEquals($expected, $result); |
||||
| 329 | } |
||||
| 330 | } |
||||
| 331 |