1 |
92abdaf0
|
Reid Linnemann
|
<?php
|
2 |
|
|
require_once("config.lib.inc");
|
3 |
|
|
use PHPUnit\Framework\TestCase;
|
4 |
|
|
|
5 |
|
|
class ConfigLibTest extends TestCase {
|
6 |
|
|
public function test_config_get_path(): void {
|
7 |
|
|
// Root element access
|
8 |
c4117e83
|
Reid Linnemann
|
$this->assertEquals("bar", config_get_path("foo"));
|
9 |
92539bd2
|
Reid Linnemann
|
// With leading /
|
10 |
|
|
$this->assertEquals("bar", config_get_path("/foo"));
|
11 |
92abdaf0
|
Reid Linnemann
|
// Unfound element returns default, even if non-null
|
12 |
|
|
$this->assertNull(config_get_path("foobaz", null));
|
13 |
|
|
$this->assertEquals("test", config_get_path("foobaz", "test"));
|
14 |
|
|
// Subarray
|
15 |
|
|
$this->assertIsArray(config_get_path("bar", null));
|
16 |
|
|
$this->assertEquals("bang", config_get_path("bar/baz", null));
|
17 |
92539bd2
|
Reid Linnemann
|
// Root
|
18 |
|
|
$this->assertIsArray(config_get_path("/"));
|
19 |
4b78c041
|
Reid Linnemann
|
// Sublist
|
20 |
|
|
$this->assertEquals('one', config_get_path("sublist/0"));
|
21 |
1333725e
|
Reid Linnemann
|
// Non-null default returned for key to empty element
|
22 |
|
|
$this->assertEquals('', config_get_path('bar/foobang'));
|
23 |
|
|
$this->assertEquals('foo', config_get_path('bar/foobang', 'foo'));
|
24 |
92abdaf0
|
Reid Linnemann
|
}
|
25 |
|
|
|
26 |
|
|
public function test_config_set_path(): void {
|
27 |
|
|
// Root element
|
28 |
|
|
$this->assertEquals("barbaz", config_set_path("baz", "barbaz"));
|
29 |
|
|
$this->assertEquals("barbaz", config_get_path("baz", "barbaz"));
|
30 |
|
|
// Root element already exists
|
31 |
|
|
$this->assertEquals("barbaz", config_set_path("bar", "barbaz"));
|
32 |
|
|
$this->assertEquals("barbaz", config_get_path("bar", "barbaz"));
|
33 |
|
|
// Parent doesn't exist
|
34 |
c4117e83
|
Reid Linnemann
|
$this->assertEquals("bang", config_set_path("barbang/baz", "bang"));
|
35 |
|
|
$this->assertEquals("bang", config_get_path("barbang/baz"));
|
36 |
|
|
// Path doesn't exist
|
37 |
|
|
$this->assertEquals("bang", config_set_path("foobar/foobaz/foobang", "bang"));
|
38 |
|
|
$this->assertEquals("bang", config_get_path("foobar/foobaz/foobang"));
|
39 |
|
|
// Parent is scalar, no changes are made
|
40 |
|
|
$this->assertNull(config_set_path("barbang/baz/foo", "bar"));
|
41 |
|
|
$this->assertEquals("bang", config_get_path("barbang/baz"));
|
42 |
|
|
// Parent is scalar, non-null default return and no changes are made
|
43 |
|
|
$this->assertEquals(-1, config_set_path("barbang/baz/foo", "bang", -1));
|
44 |
|
|
$this->assertEquals("bang", config_get_path("barbang/baz"));
|
45 |
|
|
// Parent is empty scalar, replaced with array
|
46 |
|
|
$this->assertEquals("bang", config_set_path("emptybar/baz", "bang"));
|
47 |
|
|
$this->assertEquals("bang", config_get_path("emptybar/baz"));
|
48 |
92abdaf0
|
Reid Linnemann
|
// Subarray
|
49 |
c4117e83
|
Reid Linnemann
|
$this->assertIsArray(config_set_path("barbang", []));
|
50 |
92abdaf0
|
Reid Linnemann
|
$this->assertEquals("bang", config_set_path("barbang/baz", "bang"));
|
51 |
c4117e83
|
Reid Linnemann
|
$this->assertEquals("bang", config_get_path("barbang/baz"));
|
52 |
92abdaf0
|
Reid Linnemann
|
// Key exists, replace with array
|
53 |
c4117e83
|
Reid Linnemann
|
$this->assertNotNull(config_get_path("foo"));
|
54 |
92abdaf0
|
Reid Linnemann
|
$this->assertNotNull(config_set_path("foo", ["bar" => "barbaz", "baz" => "barbaz"]));
|
55 |
c4117e83
|
Reid Linnemann
|
$this->assertEquals("barbaz", config_get_path("foo/bar"));
|
56 |
|
|
$this->assertEquals("barbaz", config_get_path("foo/baz"));
|
57 |
92abdaf0
|
Reid Linnemann
|
// Key in subarray exists
|
58 |
c4117e83
|
Reid Linnemann
|
$this->assertIsArray(config_set_path("bar", []));
|
59 |
92abdaf0
|
Reid Linnemann
|
$this->assertEquals("barbaz", config_set_path("bar/baz", "barbaz"));
|
60 |
c4117e83
|
Reid Linnemann
|
$this->assertEquals("barbaz", config_get_path("bar/baz"));
|
61 |
4b78c041
|
Reid Linnemann
|
// Sublist
|
62 |
|
|
$this->assertIsArray(config_set_path('sublist/0', ['0_foo' => '0_bar']));
|
63 |
|
|
$this->assertEquals('0_bar', config_get_path('sublist/0/0_foo'));
|
64 |
92abdaf0
|
Reid Linnemann
|
}
|
65 |
03215791
|
Reid Linnemann
|
|
66 |
|
|
public function test_config_path_enabled(): void {
|
67 |
|
|
// True value in enable
|
68 |
|
|
$this->assertTrue(config_path_enabled('servicefoo'));
|
69 |
|
|
// False value in enable
|
70 |
|
|
$this->assertTrue(config_path_enabled('servicebar'));
|
71 |
|
|
// null value in enable
|
72 |
|
|
$this->assertFalse(config_path_enabled('servicebaz'));
|
73 |
|
|
// Alternate enable key
|
74 |
|
|
$this->assertTrue(config_path_enabled('servicebang', 'otherkey'));
|
75 |
|
|
// nonexistent path
|
76 |
|
|
$this->assertFalse(config_path_enabled('servicebazbang'));
|
77 |
92539bd2
|
Reid Linnemann
|
// Key in root
|
78 |
|
|
$this->assertTrue(config_path_enabled('', 'rootkey'));
|
79 |
|
|
$this->assertTrue(config_path_enabled('/', 'rootkey'));
|
80 |
03215791
|
Reid Linnemann
|
}
|
81 |
|
|
|
82 |
eec3ca7f
|
Reid Linnemann
|
public function test_config_del_path(): void {
|
83 |
|
|
global $config;
|
84 |
|
|
// Path not in config
|
85 |
|
|
$this->assertNull(config_del_path("foobang/fooband"));
|
86 |
|
|
// Scalar value
|
87 |
|
|
$this->assertEquals('bar', config_del_path('foo'));
|
88 |
|
|
$this->assertArrayNotHasKey('foo', $config);
|
89 |
|
|
// Subarray
|
90 |
|
|
$expect = $config['bar'];
|
91 |
|
|
$val = config_del_path('bar');
|
92 |
|
|
$this->assertSame($expect, $val);
|
93 |
4b78c041
|
Reid Linnemann
|
$this->assertArrayNotHasKey('bar', $config);
|
94 |
|
|
// Sublist
|
95 |
|
|
$expect = $config['sublist'][0];
|
96 |
|
|
$val = config_del_path('sublist/0');
|
97 |
|
|
$this->assertSame($expect, $val);
|
98 |
|
|
$this->assertArrayNotHasKey('0', $config['sublist']);
|
99 |
eec3ca7f
|
Reid Linnemann
|
}
|
100 |
|
|
|
101 |
92abdaf0
|
Reid Linnemann
|
public function setUp(): void {
|
102 |
|
|
global $config;
|
103 |
|
|
$config = array(
|
104 |
|
|
"foo" => "bar",
|
105 |
|
|
"bar" => array(
|
106 |
|
|
"baz" => "bang",
|
107 |
1333725e
|
Reid Linnemann
|
"foobar" => "foobaz",
|
108 |
|
|
"foobang" => ""
|
109 |
03215791
|
Reid Linnemann
|
),
|
110 |
c4117e83
|
Reid Linnemann
|
"emptybar" => null,
|
111 |
03215791
|
Reid Linnemann
|
"servicefoo" => array(
|
112 |
|
|
"enable" => true
|
113 |
|
|
),
|
114 |
|
|
"servicebar" => array(
|
115 |
|
|
"enable" => false
|
116 |
|
|
),
|
117 |
|
|
"servicebaz" => array(
|
118 |
|
|
"enable" => null
|
119 |
|
|
),
|
120 |
|
|
"servicebang" => array(
|
121 |
|
|
"otherkey" => true
|
122 |
92539bd2
|
Reid Linnemann
|
),
|
123 |
4b78c041
|
Reid Linnemann
|
"rootkey" => true,
|
124 |
|
|
"sublist" => ["one", "two", "three"]
|
125 |
92abdaf0
|
Reid Linnemann
|
);
|
126 |
|
|
}
|
127 |
|
|
}
|
128 |
|
|
?>
|