19declare(strict_types=1);
22use ILIAS\Environment\Configuration\Ini\IniFileWriteRepository;
23use PHPUnit\Framework\Attributes\DataProvider;
24use PHPUnit\Framework\TestCase;
30 protected function setUp(): void
32 $this->file = tempnam(sys_get_temp_dir(),
'ini_write_');
37 if (is_file($this->file)) {
44 $repo =
new IniFileWriteRepository($this->file);
45 $repo->set(
'server',
'absolute_path',
'/var/www');
46 self::assertSame(
'/var/www', $repo->get(
'server',
'absolute_path'));
51 $repo =
new IniFileWriteRepository($this->file);
52 $repo->addSection(
'tools');
53 self::assertTrue($repo->hasSection(
'tools'));
54 $repo->removeSection(
'tools');
55 self::assertFalse($repo->hasSection(
'tools'));
60 $repo =
new IniFileWriteRepository($this->file);
61 $repo->set(
'section',
'key',
'value');
62 $repo->remove(
'section',
'key');
63 self::assertFalse($repo->has(
'section',
'key'));
68 $repo =
new IniFileWriteRepository($this->file);
69 $repo->set(
'server',
'absolute_path',
'/var/www/ilias');
70 $repo->set(
'clients',
'default',
'default');
74 self::assertSame(
'/var/www/ilias', $reloaded->get(
'server',
'absolute_path'));
75 self::assertSame(
'default', $reloaded->get(
'clients',
'default'));
78 #[DataProvider('specialValues')]
81 $repo =
new IniFileWriteRepository($this->file);
82 $repo->set(
'section',
'key', $value);
86 self::assertSame($value, $reloaded->get(
'section',
'key'));
95 'double quote' => [
'pa"ss"word'],
96 'backslash' => [
'C:\\path\\to\\dir'],
97 'quote after backslash' => [
'a\\"b'],
98 'trailing slash' => [
'/var/www/'],
99 'equals sign' => [
'key=value'],
100 'semicolon' => [
'value;with;semicolons'],
101 'leading and trailing spaces' => [
' spaced '],
108 $repo =
new IniFileWriteRepository($this->file);
109 $this->expectException(InvalidArgumentException::class);
110 $repo->set(
'section',
'key',
"line1\nline2");
115 $repo =
new IniFileWriteRepository($this->file);
116 $this->expectException(InvalidArgumentException::class);
117 $repo->set(
'section',
'key',
"a\rb");
122 $repo =
new IniFileWriteRepository($this->file);
123 $this->expectException(InvalidArgumentException::class);
124 $repo->set(
'section',
'key',
"a\x00b");
129 $repo =
new IniFileWriteRepository($this->file);
130 $this->expectException(InvalidArgumentException::class);
131 $repo->set(
'section',
'k=bad',
'value');
136 $repo =
new IniFileWriteRepository($this->file);
137 $this->expectException(InvalidArgumentException::class);
138 $repo->set(
'bad]section',
'key',
'value');
Read-only access to an INI file.
testSetRejectsStructurallyInvalidKey()
testSetRejectsInvalidSection()
testAddAndRemoveSection()
testPersistRoundTripsSpecialCharacters(string $value)
testSetRejectsCarriageReturn()