<?php
require_once('src/Features/ConfigurationTrait.php');
require_once('src/Features/Resource/ConfigurationInterface.php');
use PHPUnit\Framework\TestCase;
use Phabstractic\Features;
use Phabstractic\Features\Resource as FeaturesResource;
use Zend\Config;
define('TESTCONFIGURABLE_CONSTANT', 'testconstant');
class TestConfigurable implements FeaturesResource\ConfigurationInterface {
use Features\ConfigurationTrait;
public $configReaders = array();
public $configWriters = array();
public function __construct($options) {
$this->configure($options);
}
public function getConfiguration() {
return $this->conf;
}
}
class TestConfigurableReader {
}
class TestConfigurableWriter {
}
class TestConfigurableProcessor {
}
class ConfigurationTraitTest extends TestCase
{
public function testInstantiation() {
$testobject = new TestConfigurable(array('option1'=>array('suboption'=>4),'option2'=>3));
$this->assertTrue($testobject instanceof Features\Resource\ConfigurationInterface);
return $testobject;
}
/**
* @depends testInstantiation
*
*/
public function testIniString($testobject) {
$inistring = $testobject->getSettings('ini');
$this->assertEquals("option2 = 3\n[option1]\nsuboption = 4\n\n", $inistring);
}
public function testIniSetString() {
$testobject = new TestConfigurable(
array(
'configuration' => "option2 = 3\n[option1]\nsuboption = 4\n\n",
'#confformat' => 'ini',
)
);
$this->assertEquals(4, $testobject->getConfiguration()->option1->suboption);
}
/**
* @depends testInstantiation
*
*/
public function testXMLString($testobject) {
$xmlstring = $testobject->getSettings('xml');
$this->assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<zend-config>
<option1>
<suboption>4</suboption>
</option1>
<option2>3</option2>
</zend-config>\n", $xmlstring);
}
public function testXMLSetString() {
$testobject = new TestConfigurable(
array(
'configuration' => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<zend-config>
<option1>
<suboption>4</suboption>
</option1>
<option2>3</option2>
</zend-config>\n",
'#confformat' => 'xml',
)
);
$this->assertEquals(4, $testobject->getConfiguration()->option1->suboption);
}
/**
* @depends testInstantiation
*
*/
public function testArrayString($testobject) {
$arraystring = $testobject->getSettings('array');
$this->assertEquals("<?php
return array (
'option1' =>
array (
'suboption' => 4,
),
'option2' => 3,
);\n", $arraystring);
}
public function testJSONSetString() {
$testobject = new TestConfigurable(
array(
'configuration' => '{"option1":{"suboption":4},"option2":3}',
'#confformat' => 'json',
)
);
$this->assertEquals(4, $testobject->getConfiguration()->option1->suboption);
}
/**
* @depends testInstantiation
*
*/
public function testJSONString($testobject) {
$jsonstring = $testobject->getSettings('json');
$this->assertEquals('{"option1":{"suboption":4},"option2":3}', $jsonstring);
}
/**
* @depends testInstantiation
*
*/
public function testYamlString($testobject) {
$yamlstring = $testobject->getSettings('yaml', array('Spyc','YAMLDump'));
$this->assertEquals("---
option1:
suboption: 4
option2: 3\n", $yamlstring);
}
public function testYamlSetString() {
$testobject = new TestConfigurable(
array(
'configuration' => "---
option1:
suboption: 4
option2: 3\n",
'#confformat' => 'yaml',
'#confcontext' => array('Spyc','YAMLLoadString'),
)
);
$this->assertEquals(4, $testobject->getConfiguration()->option1->suboption);
}
/**
* @depends testInstantiation
*
*/
public function testConfigConfigPassing($testobject) {
$testobject->configure($testobject->getConfiguration());
$this->assertInstanceOf(\Zend\Config\Config::class, $testobject->getConfiguration());
}
/**
* @expectedException \Phabstractic\Features\Exception\ClassDependencyException
*
*/
public function testYamlSetLackContext() {
$testobject = new TestConfigurable(
array(
'configuration' => "---
option1:
suboption: 4
option2: 3\n",
'#confformat' => 'yaml',
)
);
}
/**
* @depends testInstantiation
* @expectedException \Phabstractic\Features\Exception\ClassDependencyException
*
*/
public function testNonexistentReader($testobject) {
$testobject->configReaders = array('test' => '\\Zend\\Config\\Reader\\Test',);
$testobject->configure(array('configuration'=>'{"option1":{"suboption":4},"option2":3}',
'#confformat'=>'test',));
}
/**
* @depends testInstantiation
* @expectedException \Phabstractic\Features\Exception\ClassDependencyException
*
*/
public function testWrongReaderInterface($testobject) {
$testobject->configReaders = array('test' => 'TestConfigurableReader',);
$testobject->configure(array('configuration'=>'{"option1":{"suboption":4},"option2":3}',
'#confformat'=>'test',));
}
/**
* @depends testInstantiation
* @expectedException \Phabstractic\Features\Exception\ClassDependencyException
*
*/
public function testNonexitentWriter($testobject) {
$testobject->configWriters = array('test' => '\\Zend\\Config\\Writer\\Test',);
$teststring = $testobject->getSettings('test');
}
/**
* @depends testInstantiation
* @expectedException \Phabstractic\Features\Exception\ClassDependencyException
*
*/
public function testWrongWriterInterface($testobject) {
$testobject->configWriters = array('test' => 'TestConfigurableWriter',);
$teststring = $testobject->getSettings('test');
}
/**
* @depends testInstantiation
* @expectedException \Phabstractic\Features\Exception\ClassDependencyException
*
*/
public function testWrongProcessorInterface($testobject) {
$testobject->processSettings(new TestConfigurableProcessor());
}
public function testConfigurationProcessing() {
$testobject = new TestConfigurable(array('option1'=>array('suboption'=>'TESTCONFIGURABLE_CONSTANT'),'option2'=>3));
$testobject->processSettings(new Config\Processor\Constant());
$this->assertEquals('testconstant', $testobject->getConfiguration()->option1->suboption);
}
}
|