diff --git a/tests/Core/Serialization/XmlSerializerTest.php b/tests/Core/Serialization/XmlSerializerTest.php index f42d685c..78fe00c5 100644 --- a/tests/Core/Serialization/XmlSerializerTest.php +++ b/tests/Core/Serialization/XmlSerializerTest.php @@ -23,17 +23,77 @@ namespace CycloneDX\Tests\Core\Serialization; +use CycloneDX\Core\Models\Bom; +use CycloneDX\Core\Serialization\DOM; +use CycloneDX\Core\Serialization\XmlSerializer; +use DOMDocument; +use DOMElement; +use Generator; use PHPUnit\Framework\TestCase; /** * @covers \CycloneDX\Core\Serialization\XmlSerializer * - * @TODO + * @uses \CycloneDX\Core\Serialization\BaseSerializer + * @uses \CycloneDX\Core\Serialization\BomRefDiscriminator */ class XmlSerializerTest extends TestCase { - public function testTodo(): void + /** + * @dataProvider dpSerializeStructure + */ + public function testSerialize(string $xmlVersion, string $xmlEncoding, ?bool $prettyPrint, DOMElement $normalized, string $expected): void { - $this->markTestSkipped('TODO'); + $bom = $this->createStub(Bom::class); + $bomNormalizer = $this->createMock(DOM\Normalizers\BomNormalizer::class); + $normalizerFactory = $this->createConfiguredMock(DOM\NormalizerFactory::class, [ + 'makeForBom' => $bomNormalizer, + ]); + $bomNormalizer->method('normalize') + ->with($bom) + ->willReturn($normalized); + $serializer = new XmlSerializer($normalizerFactory, $xmlVersion, $xmlEncoding); + + $actual = $serializer->serialize($bom, $prettyPrint); + + self::assertSame($expected, $actual); + } + + public function dpSerializeStructure(): Generator + { + $doc = new DOMDocument(); + $dummyText = uniqid('normalized', true); + $xmlNS = 'normalized'; + $normalizedDummy = $doc->createElementNS($xmlNS, 'dummyElement'); + $normalizedDummy->appendChild($doc->createElement($xmlNS, $dummyText)); + + yield 'plain xml1.1 ISO-8859-1' => [ + '1.1', 'ISO-8859-1', null, + $normalizedDummy, + <<<"XML" + + $dummyText\n + XML, + ]; + + yield 'pretty=false' => [ + '1.0', 'UTF-8', false, + $normalizedDummy, + <<<"XML" + + $dummyText\n + XML, + ]; + + yield 'pretty=true' => [ + '1.0', 'UTF-8', true, + $normalizedDummy, + <<<"XML" + + + $dummyText + \n + XML, + ]; } }