Project

General

Profile

Download (4.68 KB) Statistics
| Branch: | Tag: | Revision:
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
?>