5 require __DIR__
."/../../vendor/autoload.php";
8 * @covers merry\Container
10 class ContainerTest
extends \PHPUnit_Framework_TestCase
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
));
21 $this->assertFalse(isset($object->bar
));
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"]));
35 public function testSetArray() {
36 $config = ["foo" => "bar", "arr" => [1,2,3]];
37 $object = new Container($config);
38 $object["foo"] = [$object->foo
, "baz"];
41 $this->assertEquals(["bar", "baz"], $object["foo"]->toArray());
42 $this->assertEquals([1,2,3,4], $object["arr"]->toArray());
44 $this->assertEquals(["foo"=>["bar","baz"], "arr"=>[1,2,3,4]], $object->toArray());
47 public function testApply() {
58 $object = new Container($config);
59 $this->assertEquals("123", $object->level1
["level2"]->level3
);
60 $reverse = function ($v){return strrev($v);};
67 "level3-1" => $reverse
81 $this->assertEquals($compare, $object->toArray());
83 $object->apply(function() {
86 $this->assertEquals(["level1" => null], $object->toArray());
89 public function testIterator() {
92 "level2-0" => "1-0.2-0",
93 "level2-1" => "1-0.2-1",
95 "level3" => "1-0.2-2.3"
102 $object = new Container($config);
104 foreach (new \
RecursiveIteratorIterator($object) as $key => $val) {
108 'level2-0' => '1-0.2-0',
109 'level2-1' => '1-0.2-1',
110 'level3' => '1-0.2-2.3',
113 $this->assertEquals($compare, $array);
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)