<?php
declare(strict_types=1);
require_once __DIR__.'/../vendor/autoload.php'; // Autoload files using Composer
define('XMTK_XML_DOCTYPE', "<?xml version='1.0'?>");
define('XMTK_EXPECTED_SINGLETAG', '<tag>1</tag>');
define('XMTK_EXPECTED_INPARENT', '<item>
<title>example</title>
</item>');
define('XMTK_EXPECTED_SIBLINGPARENTS', '<root>
<info>
<deeper>
<note>interesting</note>
<note2>interesting too</note2>
</deeper>
<sibling>
<child>value</child>
</sibling>
</info>
</root>');
define('XMTK_EXPECTED_TWOPARENTLESS', '<tag>1</tag>
<node>2</node>');
define('XMTK_EXPECTED_COLLECTIONROOT', '<collection>
<item>salad</item>
<item>napkins</item>
<item>insecticide</item>
</collection>');
define('XMTK_EXPECTED_PARENTSCOLLECTION', '<users>
<user>
<name>Ivan</name>
</user>
<user>
<name>Nikolay</name>
</user>
</users>');
define('XMTK_EXPECTED_NODEINCOLLECTION', '<root>
<users>
<user>
<name>ivan</name>
<level>1</level>
</user>
<user>
<name>vasya</name>
<level>2</level>
</user>
<user>
<name>peter</name>
<level>4</level>
</user>
<admin>
<name>root</name>
<level>3</level>
</admin>
</users>
<info>
<note>interesting</note>
</info>
</root>');
define('XMTK_EXPECTED_WRAPPERCOLLECTION', '<parent>
<number>1</number>
<number>0</number>
</parent>');
use PHPUnit\Framework\TestCase;
use Xmtk\Writer;
/* overrides some methods of Writer */
class MyWriter extends Writer {
public $err_msg;
protected function error(string $message) {
$this->err_msg = $message;
} // error()
} // MyWriter
function expected($xml) {
return XMTK_XML_DOCTYPE.PHP_EOL.$xml.PHP_EOL;
} // expected()
/* Covers Writer */
final class WriterTests extends TestCase {
private $writer;
protected function setUp() {
$this->writer = new Writer;
} // setUp()
function testWriterCanBeCreated() {
$this->assertInstanceOf(Writer::class, $this->writer);
} // writer can be created
function testCanWriteSingleTag() {
$this->assertEquals(expected(XMTK_EXPECTED_SINGLETAG),
$this->writer->xmlWriteFromArray(['tag' => 1]));
} // can write single tag
function testCanWriteValueInsideParent() {
$this->assertEquals(expected(XMTK_EXPECTED_INPARENT),
$this->writer->xmlWriteFromArray(['item' =>
['title' => 'example']]));
} // can write value inside parent
function testCanWriteSiblingParents() {
$this->assertEquals(expected(XMTK_EXPECTED_SIBLINGPARENTS),
$this->writer->xmlWriteFromArray(['root' =>
['info' =>
['deeper' =>
['note' => 'interesting',
'note2' => 'interesting too'],
'sibling' =>
['child' => 'value']]]]));
} // can write sibling parents
function testCanWriteFirstTagOfTwoParentless() {
$this->assertEquals(expected(XMTK_EXPECTED_TWOPARENTLESS),
$this->writer->xmlWriteFromArray(['tag' => 1, 'node' => 2]));
} // can write first tag of two parentless
function testCanWriteCollectionRoot() {
$this->assertEquals(expected(XMTK_EXPECTED_COLLECTIONROOT),
$this->writer->xmlWriteFromArray(['collection' =>
['item' =>
['salad', 'napkins', 'insecticide']]]));
} // can write collection root
function testCanWriteCollectionOfParents() {
$this->assertEquals(expected(XMTK_EXPECTED_PARENTSCOLLECTION),
$this->writer->xmlWriteFromArray(['users' =>
['user' =>
[['name' => 'Ivan'],
['name' => 'Nikolay']]]]));
} // can write collection parents
function testCanWriteCollectionWithNodeInside() {
$this->assertEquals(expected(XMTK_EXPECTED_NODEINCOLLECTION),
$this->writer->xmlWriteFromArray(['root' =>
['users' =>
['user' =>
[['name' => 'ivan', 'level' => 1],
['name' => 'vasya', 'level' => 2],
['name' => 'peter', 'level' => 4]],
'admin' =>
['name' => 'root', 'level' => 3]],
'info' => ['note' => 'interesting']]]));
} // can write collection with node inside
function testCanWriteWrappedCollection() {
$this->assertEquals(expected(XMTK_EXPECTED_WRAPPERCOLLECTION),
$this->writer->xmlWriteFromArray(['parent' =>
['number' => [1, 0]]]));
} // can write wrapped collection
function testCanGetErrorMessageForCustomHandling() {
$my_writer = new MyWriter;
$my_writer->xmlWriteFromArray(NULL);
$this->assertEquals(
'\\Xmtk\\Writer: xmlWriteFromArray() expects an array.',
$my_writer->err_msg);
} // can handle error
function testReturnsFalseAfterError() {
$my_writer = new MyWriter;
$xml = $my_writer->xmlWriteFromArray('Not an XML');
$this->assertEquals('', $xml);
} // writer returns FALSE after error handled
} // class WriterTests
?>
|