Project

General

Profile

Download (4.87 KB) Statistics
| Branch: | Tag: | Revision:
1
<?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
		$this->assertEquals("bar", config_get_path("foo"));
9
		// With leading /
10
		$this->assertEquals("bar", config_get_path("/foo"));
11
		// 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
		// Root
18
		$this->assertIsArray(config_get_path("/"));
19
		// Sublist
20
		$this->assertEquals('one', config_get_path("sublist/0"));
21
		// Non-null default returned for key to empty string element
22
		$this->assertEquals('', config_get_path('bar/foobang'));
23
		$this->assertEquals('foo', config_get_path('bar/foobang', 'foo'));
24
		// Non-null default not returned for key to 0
25
		$this->assertEquals(0, config_get_path('bar/foobaz'));
26
		$this->assertEquals(0, config_get_path('bar/foobaz', 'foo'));
27

    
28
	}
29

    
30
	public function test_config_set_path(): void {
31
		// Root element
32
		$this->assertEquals("barbaz", config_set_path("baz", "barbaz"));
33
		$this->assertEquals("barbaz", config_get_path("baz", "barbaz"));
34
		// Root element already exists
35
		$this->assertEquals("barbaz", config_set_path("bar", "barbaz"));
36
		$this->assertEquals("barbaz", config_get_path("bar", "barbaz"));
37
		// Parent doesn't exist
38
		$this->assertEquals("bang", config_set_path("barbang/baz", "bang"));
39
		$this->assertEquals("bang", config_get_path("barbang/baz"));
40
		// Path doesn't exist
41
		$this->assertEquals("bang", config_set_path("foobar/foobaz/foobang", "bang"));
42
		$this->assertEquals("bang", config_get_path("foobar/foobaz/foobang"));
43
		// Parent is scalar, no changes are made
44
		$this->assertNull(config_set_path("barbang/baz/foo", "bar"));
45
		$this->assertEquals("bang", config_get_path("barbang/baz"));
46
		// Parent is scalar, non-null default return and no changes are made
47
		$this->assertEquals(-1, config_set_path("barbang/baz/foo", "bang", -1));
48
		$this->assertEquals("bang", config_get_path("barbang/baz"));
49
		// Parent is empty scalar, replaced with array
50
		$this->assertEquals("bang", config_set_path("emptybar/baz", "bang"));
51
		$this->assertEquals("bang", config_get_path("emptybar/baz"));
52
		// Subarray
53
		$this->assertIsArray(config_set_path("barbang", []));
54
		$this->assertEquals("bang", config_set_path("barbang/baz", "bang"));
55
		$this->assertEquals("bang", config_get_path("barbang/baz"));
56
		// Key exists, replace with array
57
		$this->assertNotNull(config_get_path("foo"));
58
		$this->assertNotNull(config_set_path("foo", ["bar" => "barbaz", "baz" => "barbaz"]));
59
		$this->assertEquals("barbaz", config_get_path("foo/bar"));
60
		$this->assertEquals("barbaz", config_get_path("foo/baz"));
61
		// Key in subarray exists
62
		$this->assertIsArray(config_set_path("bar", []));
63
		$this->assertEquals("barbaz", config_set_path("bar/baz", "barbaz"));
64
		$this->assertEquals("barbaz", config_get_path("bar/baz"));
65
		// Sublist
66
		$this->assertIsArray(config_set_path('sublist/0', ['0_foo' => '0_bar']));
67
		$this->assertEquals('0_bar', config_get_path('sublist/0/0_foo'));
68
	}
69

    
70
	public function test_config_path_enabled(): void {
71
		// True value in enable
72
		$this->assertTrue(config_path_enabled('servicefoo'));
73
		// False value in enable
74
		$this->assertTrue(config_path_enabled('servicebar'));
75
		// null value in enable
76
		$this->assertFalse(config_path_enabled('servicebaz'));
77
		// Alternate enable key
78
		$this->assertTrue(config_path_enabled('servicebang', 'otherkey'));
79
		// nonexistent path
80
		$this->assertFalse(config_path_enabled('servicebazbang'));
81
		// Key in root
82
		$this->assertTrue(config_path_enabled('', 'rootkey'));
83
		$this->assertTrue(config_path_enabled('/', 'rootkey'));
84
	}
85

    
86
	public function test_config_del_path(): void {
87
		global $config;
88
		// Path not in config
89
		$this->assertNull(config_del_path("foobang/fooband"));
90
		// Scalar value
91
		$this->assertEquals('bar', config_del_path('foo'));
92
		$this->assertArrayNotHasKey('foo', $config);
93
		// Subarray
94
		$expect = $config['bar'];
95
		$val = config_del_path('bar');
96
		$this->assertSame($expect, $val);
97
		$this->assertArrayNotHasKey('bar', $config);
98
		// Sublist
99
		$expect = $config['sublist'][0];
100
		$val = config_del_path('sublist/0');
101
		$this->assertSame($expect, $val);
102
		$this->assertArrayNotHasKey('0', $config['sublist']);
103
	}
104

    
105
	public function setUp(): void {
106
		global $config;
107
		$config = array(
108
			"foo" => "bar",
109
			"bar" => array(
110
				"baz" => "bang",
111
				"foobar" => "foobaz",
112
				"foobang" => "",
113
				"foobaz" => 0
114
			),
115
			"emptybar" => null,
116
			"servicefoo" => array(
117
				"enable" => true
118
			),
119
			"servicebar" => array(
120
				"enable" => false
121
			),
122
			"servicebaz" => array(
123
				"enable" => null
124
			),
125
			"servicebang" => array(
126
				"otherkey" => true
127
			),
128
			"rootkey" => true,
129
			"sublist" => ["one", "two", "three"]
130
		);
131
	}
132
}
133
?>
(1-1/62)