index/tests/NullConfigTest.php

82 lines
2.9 KiB
PHP
Raw Normal View History

2024-10-04 22:28:27 +00:00
<?php
// NullConfigTest.php
// Created: 2023-10-20
// Updated: 2024-10-04
declare(strict_types=1);
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\Attributes\CoversClass;
use Index\Config\GetValuesTrait;
use Index\Config\Null\NullConfig;
#[CoversClass(NullConfig::class)]
#[CoversClass(GetValuesTrait::class)]
final class NullConfigTest extends TestCase {
public function testNullConfig(): void {
$config = new NullConfig;
// no-ops but run anyway to ensure no screaming
$config->removeValues('test');
$config->setString('stringval', 'the');
$config->setInteger('intval', 1234);
$config->setFloat('floatval', 56.78);
$config->setBoolean('boolval', true);
$config->setArray('arrval', ['meow']);
$config->setValues([
'stringval' => 'the',
'intval' => 1234,
'floatval' => 56.78,
'boolval' => true,
'arrval' => ['meow'],
]);
// NullConfig currently returns itself when scoping
// might change this depending on whether the scope prefix will be exposed or not
$scoped = $config->scopeTo('scoped');
$this->assertEquals($config, $scoped);
// hasValues should always return true when the list is empty
$this->assertTrue($config->hasValues([]));
$this->assertFalse($config->hasValues('anything'));
$this->assertFalse($config->hasValues(['manything1', 'manything2']));
$this->assertEmpty($config->getAllValueInfos());
$this->assertEmpty($config->getValueInfos('the'));
$expected = [
'test_no_type' => null,
'test_yes_type' => false,
'test_no_type_yes_default' => 1234,
'test_yes_type_yes_default' => 56.78,
'aliased' => null,
];
$values = $config->getValues([
'test_no_type',
'test_yes_type:b',
['test_no_type_yes_default', 1234],
['test_yes_type_yes_default:d', 56.78],
['test_no_default_yes_alias', null, 'aliased'],
]);
$this->assertEqualsCanonicalizing($expected, $values);
$this->assertNull($config->getValueInfo('value'));
$this->assertEquals('', $config->getString('string'));
$this->assertEquals('default', $config->getString('string', 'default'));
$this->assertEquals(0, $config->getInteger('int'));
$this->assertEquals(960, $config->getInteger('int', 960));
$this->assertEquals(0, $config->getFloat('float'));
$this->assertEquals(67.7, $config->getFloat('float', 67.7));
$this->assertFalse($config->getBoolean('bool'));
$this->assertTrue($config->getBoolean('bool', true));
$this->assertEmpty($config->getArray('arr'));
$this->assertEqualsCanonicalizing(['de', 'het', 'een'], $config->getArray('the', ['de', 'het', 'een']));
}
}