diff options
Diffstat (limited to 'lib/plugins/config/_test')
-rw-r--r-- | lib/plugins/config/_test/ConfigParserTest.php (renamed from lib/plugins/config/_test/configuration.test.php) | 32 | ||||
-rw-r--r-- | lib/plugins/config/_test/LoaderTest.php | 79 | ||||
-rw-r--r-- | lib/plugins/config/_test/Setting/AbstractSettingTest.php | 99 | ||||
-rw-r--r-- | lib/plugins/config/_test/Setting/SettingArrayTest.php | 20 | ||||
-rw-r--r-- | lib/plugins/config/_test/Setting/SettingNumericTest.php | 24 | ||||
-rw-r--r-- | lib/plugins/config/_test/Setting/SettingNumericoptTest.php | 23 | ||||
-rw-r--r-- | lib/plugins/config/_test/Setting/SettingOnoffTest.php | 72 | ||||
-rw-r--r-- | lib/plugins/config/_test/Setting/SettingStringTest.php | 13 | ||||
-rw-r--r-- | lib/plugins/config/_test/Setting/SettingTest.php | 70 | ||||
-rw-r--r-- | lib/plugins/config/_test/WriterTest.php | 63 |
10 files changed, 473 insertions, 22 deletions
diff --git a/lib/plugins/config/_test/configuration.test.php b/lib/plugins/config/_test/ConfigParserTest.php index 7455461a4..b7e33a539 100644 --- a/lib/plugins/config/_test/configuration.test.php +++ b/lib/plugins/config/_test/ConfigParserTest.php @@ -1,31 +1,20 @@ <?php + +namespace dokuwiki\plugin\config\test; + +use dokuwiki\plugin\config\core\ConfigParser; + /** * @group plugin_config * @group admin_plugins * @group plugins * @group bundled_plugins */ - -class plugin_config_configuration_test extends DokuWikiTest { - - private $config = ''; - private $meta = ''; - - /** - * Load config files - */ - function __construct() { - parent::__construct(); - - $this->config = dirname(__FILE__).'/data/config.php'; - $this->meta = dirname(__FILE__).'/data/metadata.php'; - require_once(dirname(__FILE__).'/../settings/config.class.php'); - } +class ConfigParserTest extends \DokuWikiTest { function test_readconfig() { - $confmgr = new configuration($this->meta); - - $conf = $confmgr->_read_config($this->config); + $parser = new ConfigParser(); + $conf = $parser->parse(__DIR__ . '/data/config.php'); // var_dump($conf); @@ -42,9 +31,8 @@ class plugin_config_configuration_test extends DokuWikiTest { } function test_readconfig_onoff() { - $confmgr = new configuration($this->meta); - - $conf = $confmgr->_read_config($this->config); + $parser = new ConfigParser(); + $conf = $parser->parse(__DIR__ . '/data/config.php'); // var_dump($conf); diff --git a/lib/plugins/config/_test/LoaderTest.php b/lib/plugins/config/_test/LoaderTest.php new file mode 100644 index 000000000..0c315842d --- /dev/null +++ b/lib/plugins/config/_test/LoaderTest.php @@ -0,0 +1,79 @@ +<?php + +namespace dokuwiki\plugin\config\test; + +use dokuwiki\plugin\config\core\ConfigParser; +use dokuwiki\plugin\config\core\Loader; + +/** + * @group plugin_config + * @group admin_plugins + * @group plugins + * @group bundled_plugins + */ +class LoaderTest extends \DokuWikiTest { + + protected $pluginsEnabled = ['testing']; + + /** + * Ensure loading the config meta data works + */ + public function testMetaData() { + $loader = new Loader(new ConfigParser()); + + $meta = $loader->loadMeta(); + $this->assertTrue(is_array($meta)); + + // there should be some defaults + $this->assertArrayHasKey('savedir', $meta); + $this->assertEquals(['savedir', '_caution' => 'danger'], $meta['savedir']); + $this->assertArrayHasKey('proxy____port', $meta); + $this->assertEquals(['numericopt'], $meta['proxy____port']); + + // there should be plugin info + $this->assertArrayHasKey('plugin____testing____plugin_settings_name', $meta); + $this->assertEquals(['fieldset'], $meta['plugin____testing____plugin_settings_name']); + $this->assertArrayHasKey('plugin____testing____schnibble', $meta); + $this->assertEquals(['onoff'], $meta['plugin____testing____schnibble']); + } + + /** + * Ensure loading the defaults work + */ + public function testDefaults() { + $loader = new Loader(new ConfigParser()); + + $conf = $loader->loadDefaults(); + $this->assertTrue(is_array($conf)); + + // basic defaults + $this->assertArrayHasKey('title', $conf); + $this->assertEquals('DokuWiki', $conf['title']); + + // plugin defaults + $this->assertArrayHasKey('plugin____testing____schnibble', $conf); + $this->assertEquals(0, $conf['plugin____testing____schnibble']); + } + + /** + * Ensure language loading works + */ + public function testLangs() { + $loader = new Loader(new ConfigParser()); + + $lang = $loader->loadLangs(); + $this->assertTrue(is_array($lang)); + + // basics are not included in the returned array! + $this->assertArrayNotHasKey('title', $lang); + + // plugin strings + $this->assertArrayHasKey('plugin____testing____plugin_settings_name', $lang); + $this->assertEquals('Testing', $lang['plugin____testing____plugin_settings_name']); + $this->assertArrayHasKey('plugin____testing____schnibble', $lang); + $this->assertEquals( + 'Turns on the schnibble before the frobble is used', + $lang['plugin____testing____schnibble'] + ); + } +} diff --git a/lib/plugins/config/_test/Setting/AbstractSettingTest.php b/lib/plugins/config/_test/Setting/AbstractSettingTest.php new file mode 100644 index 000000000..d18f0ec17 --- /dev/null +++ b/lib/plugins/config/_test/Setting/AbstractSettingTest.php @@ -0,0 +1,99 @@ +<?php + +namespace dokuwiki\plugin\config\test\Setting; + +use dokuwiki\plugin\config\core\Setting\Setting; + +abstract class AbstractSettingTest extends \DokuWikiTest { + + /** @var string the class to test */ + protected $class; + + /** + * Sets up the proper class to test based on the test's class name + * @throws \Exception + */ + public function setUp() { + parent::setUp(); + $class = get_class($this); + $class = substr($class, strrpos($class, '\\') + 1, -4); + $class = 'dokuwiki\\plugin\\config\\core\\Setting\\' . $class; + $this->class = $class; + } + + public function testInitialBasics() { + /** @var Setting $setting */ + $setting = new $this->class('test'); + $this->assertEquals('test', $setting->getKey()); + $this->assertSame(false, $setting->isProtected()); + $this->assertSame(true, $setting->isDefault()); + $this->assertSame(false, $setting->hasError()); + $this->assertSame(false, $setting->shouldBeSaved()); + } + + public function testShouldHaveDefault() { + /** @var Setting $setting */ + $setting = new $this->class('test'); + $this->assertSame(true, $setting->shouldHaveDefault()); + } + + public function testPrettyKey() { + /** @var Setting $setting */ + $setting = new $this->class('test'); + $this->assertEquals('test', $setting->getPrettyKey(false)); + + $setting = new $this->class('test____foo'); + $this->assertEquals('test»foo', $setting->getPrettyKey(false)); + + $setting = new $this->class('test'); + $this->assertEquals( + '<a href="http://www.dokuwiki.org/config:test">test</a>', + $setting->getPrettyKey(true) + ); + + $setting = new $this->class('test____foo'); + $this->assertEquals('test»foo', $setting->getPrettyKey(true)); + + $setting = new $this->class('start'); + $this->assertEquals( + '<a href="http://www.dokuwiki.org/config:startpage">start</a>', + $setting->getPrettyKey(true) + ); + } + + public function testType() { + /** @var Setting $setting */ + $setting = new $this->class('test'); + $this->assertEquals('dokuwiki', $setting->getType()); + + $setting = new $this->class('test_foo'); + $this->assertEquals('dokuwiki', $setting->getType()); + + $setting = new $this->class('plugin____test'); + $this->assertEquals('plugin', $setting->getType()); + + $setting = new $this->class('tpl____test'); + $this->assertEquals('template', $setting->getType()); + } + + public function testCaution() { + /** @var Setting $setting */ + $setting = new $this->class('test'); + $this->assertEquals(false, $setting->caution()); + + $setting = new $this->class('test', ['_caution' => 'warning']); + $this->assertEquals('warning', $setting->caution()); + + $setting = new $this->class('test', ['_caution' => 'danger']); + $this->assertEquals('danger', $setting->caution()); + + $setting = new $this->class('test', ['_caution' => 'security']); + $this->assertEquals('security', $setting->caution()); + + $setting = new $this->class('test', ['_caution' => 'flargh']); + $this->expectException(\RuntimeException::class); + $setting->caution(); + } + + +} diff --git a/lib/plugins/config/_test/Setting/SettingArrayTest.php b/lib/plugins/config/_test/Setting/SettingArrayTest.php new file mode 100644 index 000000000..09dcf1421 --- /dev/null +++ b/lib/plugins/config/_test/Setting/SettingArrayTest.php @@ -0,0 +1,20 @@ +<?php + +namespace dokuwiki\plugin\config\test\Setting; + +/** + * @group plugin_config + * @group admin_plugins + * @group plugins + * @group bundled_plugins + */ +class SettingArrayTest extends SettingTest { + + /** @inheritdoc */ + public function dataOut() { + return [ + [ ['foo','bar'], "\$conf['test'] = array('foo', 'bar');\n"] + ]; + } + +} diff --git a/lib/plugins/config/_test/Setting/SettingNumericTest.php b/lib/plugins/config/_test/Setting/SettingNumericTest.php new file mode 100644 index 000000000..6248a06b7 --- /dev/null +++ b/lib/plugins/config/_test/Setting/SettingNumericTest.php @@ -0,0 +1,24 @@ +<?php + +namespace dokuwiki\plugin\config\test\Setting; + +/** + * @group plugin_config + * @group admin_plugins + * @group plugins + * @group bundled_plugins + */ +class SettingNumericTest extends SettingTest { + + /** @inheritdoc */ + public function dataOut() { + return [ + [42, "\$conf['test'] = 42;\n"], + [0, "\$conf['test'] = 0;\n"], + [-42, "\$conf['test'] = -42;\n"], + [-42.13, "\$conf['test'] = -42.13;\n"], + ['12*13', "\$conf['test'] = 12*13;\n"], + ]; + } + +} diff --git a/lib/plugins/config/_test/Setting/SettingNumericoptTest.php b/lib/plugins/config/_test/Setting/SettingNumericoptTest.php new file mode 100644 index 000000000..9d29f31e7 --- /dev/null +++ b/lib/plugins/config/_test/Setting/SettingNumericoptTest.php @@ -0,0 +1,23 @@ +<?php + +namespace dokuwiki\plugin\config\test\Setting; + +/** + * @group plugin_config + * @group admin_plugins + * @group plugins + * @group bundled_plugins + */ +class SettingNumericoptTest extends SettingNumericTest { + + /** @inheritdoc */ + public function dataOut() { + return array_merge( + parent::dataOut(), + [ + ['', "\$conf['test'] = '';\n"], + ] + ); + } + +} diff --git a/lib/plugins/config/_test/Setting/SettingOnoffTest.php b/lib/plugins/config/_test/Setting/SettingOnoffTest.php new file mode 100644 index 000000000..d6561bdf1 --- /dev/null +++ b/lib/plugins/config/_test/Setting/SettingOnoffTest.php @@ -0,0 +1,72 @@ +<?php + +namespace dokuwiki\plugin\config\test\Setting; + +/** + * @group plugin_config + * @group admin_plugins + * @group plugins + * @group bundled_plugins + */ +class SettingOnoffTest extends SettingTest { + + /** @inheritdoc */ + public function dataOut() { + return [ + [1, "\$conf['test'] = 1;\n"], + [0, "\$conf['test'] = 0;\n"], + + ['1', "\$conf['test'] = 1;\n"], + ['0', "\$conf['test'] = 0;\n"], + + ['on', "\$conf['test'] = 1;\n"], + ['off', "\$conf['test'] = 0;\n"], + + ['true', "\$conf['test'] = 1;\n"], + ['false', "\$conf['test'] = 0;\n"], + + ['On', "\$conf['test'] = 1;\n"], + ['Off', "\$conf['test'] = 0;\n"], + + ['True', "\$conf['test'] = 1;\n"], + ['False', "\$conf['test'] = 0;\n"], + + [true, "\$conf['test'] = 1;\n"], + [false, "\$conf['test'] = 0;\n"], + + [3, "\$conf['test'] = 1;\n"], + ['3', "\$conf['test'] = 1;\n"], + + ['', "\$conf['test'] = 0;\n"], + [' ', "\$conf['test'] = 0;\n"], + ]; + } + + /** @inheritdoc */ + public function dataShouldBeSaved() { + return [ + [0, null, false], + [1, null, false], + [0, 0, false], + [1, 1, false], + [0, 1, true], + [1, 0, true], + + ['0', '0', false], + ['1', '1', false], + ['0', '1', true], + ['1', '0', true], + + ['0', 0, false], + ['1', 1, false], + ['0', 1, true], + ['1', 0, true], + + [0, '0', false], + [1, '1', false], + [0, '1', true], + [1, '0', true], + ]; + } + +} diff --git a/lib/plugins/config/_test/Setting/SettingStringTest.php b/lib/plugins/config/_test/Setting/SettingStringTest.php new file mode 100644 index 000000000..3d6a71c9d --- /dev/null +++ b/lib/plugins/config/_test/Setting/SettingStringTest.php @@ -0,0 +1,13 @@ +<?php + +namespace dokuwiki\plugin\config\test\Setting; + +/** + * @group plugin_config + * @group admin_plugins + * @group plugins + * @group bundled_plugins + */ +class SettingStringTest extends SettingTest { + +} diff --git a/lib/plugins/config/_test/Setting/SettingTest.php b/lib/plugins/config/_test/Setting/SettingTest.php new file mode 100644 index 000000000..49e0662e0 --- /dev/null +++ b/lib/plugins/config/_test/Setting/SettingTest.php @@ -0,0 +1,70 @@ +<?php + +namespace dokuwiki\plugin\config\test\Setting; + +use dokuwiki\plugin\config\core\Setting\Setting; + +/** + * @group plugin_config + * @group admin_plugins + * @group plugins + * @group bundled_plugins + */ +class SettingTest extends AbstractSettingTest { + + /** + * Dataprovider for testOut() + * + * @return array + */ + public function dataOut() { + return [ + ['bar', "\$conf['test'] = 'bar';\n"], + ["foo'bar", "\$conf['test'] = 'foo\\'bar';\n"], + ]; + } + + /** + * Check the output + * + * @param mixed $in The value to initialize the setting with + * @param string $out The expected output (for conf[test]) + * @dataProvider dataOut + */ + public function testOut($in, $out) { + /** @var Setting $setting */ + $setting = new $this->class('test'); + $setting->initialize('ignore', $in); + + $this->assertEquals($out, $setting->out('conf')); + } + + /** + * DataProvider for testShouldBeSaved() + * + * @return array + */ + public function dataShouldBeSaved() { + return [ + ['default', null, false], + ['default', 'default', false], + ['default', 'new', true], + ]; + } + + /** + * Check if shouldBeSaved works as expected + * + * @dataProvider dataShouldBeSaved + * @param mixed $default The default value + * @param mixed $local The current local value + * @param bool $expect The expected outcome + */ + public function testShouldBeSaved($default, $local, $expect) { + /** @var Setting $setting */ + $setting = new $this->class('test'); + $setting->initialize($default, $local, null); + $this->assertSame($expect, $setting->shouldBeSaved()); + } + +} diff --git a/lib/plugins/config/_test/WriterTest.php b/lib/plugins/config/_test/WriterTest.php new file mode 100644 index 000000000..62e4a56d5 --- /dev/null +++ b/lib/plugins/config/_test/WriterTest.php @@ -0,0 +1,63 @@ +<?php + +namespace dokuwiki\plugin\config\test; +use dokuwiki\plugin\config\core\Setting\SettingString; +use dokuwiki\plugin\config\core\Writer; + +/** + * @group plugin_config + * @group admin_plugins + * @group plugins + * @group bundled_plugins + */ +class WriterTest extends \DokuWikiTest { + + public function testSave() { + global $config_cascade; + $config = end($config_cascade['main']['local']); + + $set1 = new SettingString('test1'); + $set1->initialize('foo','bar', null); + $set2 = new SettingString('test2'); + $set2->initialize('foo','foo', null); + $settings = [$set1, $set2]; + $writer = new Writer(); + + // before running, no backup should exist + $this->assertFileExists($config); + $this->assertFileNotExists("$config.bak"); + $old = filesize($config); + + /** @noinspection PhpUnhandledExceptionInspection */ + $writer->save($settings); + + // after running, both should exist + $this->assertFileExists($config); + $this->assertFileExists("$config.bak"); + $this->assertEquals($old, filesize("$config.bak"), 'backup should have size of old file'); + + // check contents + $conf = []; + include $config; + $this->assertArrayHasKey('test1', $conf); + $this->assertEquals('bar', $conf['test1']); + $this->assertArrayNotHasKey('test2', $conf); + + /** @noinspection PhpUnhandledExceptionInspection */ + $writer->save($settings); + $this->assertEquals(filesize($config), filesize("$config.bak")); + } + + public function testTouch() { + global $config_cascade; + $config = end($config_cascade['main']['local']); + $writer = new Writer(); + + $old = filemtime($config); + $this->waitForTick(true); + /** @noinspection PhpUnhandledExceptionInspection */ + $writer->touch(); + clearstatcache($config); + $this->assertGreaterThan($old, filemtime($config)); + } +} |