17878b7dc46f8a400d69b3b49e780d92f5481868
[m6w6/merry] / tests / merry / ContainerTest.php
1 <?php
2
3 namespace merry;
4
5 require __DIR__."/../../vendor/autoload.php";
6
7 /**
8 * @covers merry\Container
9 */
10 class ContainerTest extends \PHPUnit_Framework_TestCase
11 {
12 public function testBasic() {
13 $config = ["foo" => "bar", "bar" => "foo"];
14 $object = new Container($config);
15 $this->assertEquals($config, $object->toArray());
16 $this->assertEquals("bar", $object->foo);
17 $this->assertEquals("foo", $object->bar);
18 $this->assertTrue(isset($object->foo));
19 $this->assertFalse(isset($object->foobar));
20 unset($object->bar);
21 $this->assertFalse(isset($object->bar));
22 }
23
24 public function testBasicOffset() {
25 $config = ["foo" => "bar", "bar" => "foo"];
26 $object = new Container($config);
27 $this->assertEquals("bar", $object["foo"]);
28 $this->assertEquals("foo", $object["bar"]);
29 $this->assertTrue(isset($object["foo"]));
30 $this->assertFalse(isset($object["foobar"]));
31 unset($object["bar"]);
32 $this->assertFalse(isset($object["bar"]));
33 }
34
35 public function testSetArray() {
36 $config = ["foo" => "bar", "arr" => [1,2,3]];
37 $object = new Container($config);
38 $object["foo"] = [$object->foo, "baz"];
39 $object["arr"][] = 4;
40
41 $this->assertEquals(["bar", "baz"], $object["foo"]->toArray());
42 $this->assertEquals([1,2,3,4], $object["arr"]->toArray());
43
44 $this->assertEquals(["foo"=>["bar","baz"], "arr"=>[1,2,3,4]], $object->toArray());
45 }
46
47 public function testApply() {
48 $config = [
49 "level1" => [
50 "level2" => [
51 "level3" => "123"
52 ],
53 "level2-1" => [
54 "level3-1" => "321"
55 ]
56 ]
57 ];
58 $object = new Container($config);
59 $this->assertEquals("123", $object->level1["level2"]->level3);
60 $reverse = function ($v){return strrev($v);};
61 $object->apply([
62 "level1" => [
63 "level2" => [
64 "level3" => $reverse
65 ],
66 "level2-1" => [
67 "level3-1" => $reverse
68 ]
69 ]
70 ]);
71 $compare = [
72 "level1" => [
73 "level2" => [
74 "level3" => "321"
75 ],
76 "level2-1" => [
77 "level3-1" => "123"
78 ]
79 ]
80 ];
81 $this->assertEquals($compare, $object->toArray());
82
83 $object->apply(function() {
84 return null;
85 });
86 $this->assertEquals(["level1" => null], $object->toArray());
87 }
88
89 public function testIterator() {
90 $config = [
91 "level1-0" => [
92 "level2-0" => "1-0.2-0",
93 "level2-1" => "1-0.2-1",
94 "level2-2" => [
95 "level3" => "1-0.2-2.3"
96 ]
97 ],
98 "level1-1" => [
99 1,2,3
100 ]
101 ];
102 $object = new Container($config);
103 $array = [];
104 foreach (new \RecursiveIteratorIterator($object) as $key => $val) {
105 $array[$key] = $val;
106 }
107 $compare = [
108 'level2-0' => '1-0.2-0',
109 'level2-1' => '1-0.2-1',
110 'level3' => '1-0.2-2.3',
111 1, 2, 3
112 ];
113 $this->assertEquals($compare, $array);
114 }
115
116 public function testJsonSerialize() {
117 $container = new Container;
118 $container->foo = "bar";
119 $container->bar->foo = "bar";
120 $this->assertJsonStringEqualsJsonString(
121 '{"foo": "bar", "bar": {"foo": "bar"}}',
122 json_encode($container)
123 );
124 }
125 }