Vous êtes connecté en tant que anonymous Se Deconnecter
instance = new Structure($this->getTestData()); } /** * getTestData * * @return array */ protected function getTestData() { return [ 'flower' => 'sakura', 'olive' => 'peace', 'pos1' => [ 'sunflower' => 'love', ], 'pos2' => [ 'cornflower' => 'elegant', ], 'array' => [ 'A', 'B', 'C', ], ]; } /** * Tears down the fixture, for example, closes a network connection. * This method is called after a test is executed. * * @return void */ protected function tearDown(): void { } /** * Method to test __clone(). * * @return void * * @covers \Windwalker\Structure\Structure::__clone */ public function test__clone() { $structure1 = new Structure($this->getTestData()); $structure2 = clone $structure1; $this->assertEquals($structure1, $structure2); } /** * Method to test __toString(). * * @return void * * @covers \Windwalker\Structure\Structure::__toString */ public function test__toString() { $this->assertJsonStringEqualsJsonString(json_encode($this->getTestData()), (string) $this->instance); } /** * Method to test jsonSerialize(). * * @return void * * @covers \Windwalker\Structure\Structure::jsonSerialize */ public function testJsonSerialize() { $this->assertJsonStringEqualsJsonString(json_encode($this->getTestData()), (string) $this->instance); } /** * Method to test def(). * * @return void * * @covers \Windwalker\Structure\Structure::def */ public function testDef() { $this->assertNull($this->instance->get('lily')); $this->instance->def('lily', 'love'); $this->assertEquals('love', $this->instance->get('lily')); } /** * Method to test exists(). * * @return void * * @covers \Windwalker\Structure\Structure::exists */ public function testExists() { $this->assertFalse($this->instance->exists('rose')); $this->assertTrue($this->instance->exists('flower')); } /** * Method to test get(). * * @return void * * @covers \Windwalker\Structure\Structure::get */ public function testGet() { $this->assertEquals($this->instance->get('flower', 'canna'), 'sakura'); $this->assertEquals($this->instance->get('not.exists', 'canna'), 'canna'); $this->assertNull($this->instance->get('not.exists')); $this->assertEquals($this->instance->get('pos1.sunflower'), 'love'); } /** * Method to test loadArray(). * * @return void * * @covers \Windwalker\Structure\Structure::load */ public function testLoadArray() { $structure = new Structure(); $structure->load($this->getTestData()); $this->assertEquals($structure->get('olive'), 'peace'); $this->assertEquals($structure->get('pos1.sunflower'), 'love'); } /** * Method to test loadObject(). * * @return void * * @covers \Windwalker\Structure\Structure::load */ public function testLoadObject() { $structure = new Structure(); $structure->load((object) $this->getTestData()); $this->assertEquals($structure->get('olive'), 'peace'); $this->assertEquals($structure->get('pos1.sunflower'), 'love'); } /** * Method to test loadFile(). * * @return void * * @covers \Windwalker\Structure\Structure::loadFile */ public function testLoadFile() { $structure = new Structure(); $this->assertEquals( $structure->reset()->loadFile(__DIR__ . '/Stubs/flower.json', 'json')->get('flower'), 'sakura' ); $this->assertEquals( $structure->reset()->loadFile(__DIR__ . '/Stubs/flower.yml', 'yaml')->get('flower'), 'sakura' ); $this->assertEquals( $structure->reset()->loadFile(__DIR__ . '/Stubs/flower.ini', 'ini')->get('flower'), 'sakura' ); $this->assertEquals( $structure->reset()->loadFile(__DIR__ . '/Stubs/flower.xml', 'xml')->get('flower'), 'sakura' ); $this->assertEquals( $structure->reset()->loadFile(__DIR__ . '/Stubs/flower.php', 'php')->get('flower'), 'sakura' ); } /** * Method to test loadString(). * * @return void * * @covers \Windwalker\Structure\Structure::loadString * @throws \Exception */ public function testLoadString() { $structure = new Structure(); $this->assertEquals( $structure->reset()->loadString( file_get_contents(__DIR__ . '/Stubs/flower.json'), 'json' )->get('flower'), 'sakura' ); $this->assertEquals( $structure->reset()->loadString( file_get_contents(__DIR__ . '/Stubs/flower.yml'), 'yaml' )->get('flower'), 'sakura' ); $this->assertEquals( $structure->reset()->loadString( file_get_contents(__DIR__ . '/Stubs/flower.ini'), 'ini' )->get('flower'), 'sakura' ); $this->assertEquals( $structure->reset()->loadString( file_get_contents(__DIR__ . '/Stubs/flower.xml'), 'xml' )->get('flower'), 'sakura' ); $this->assertEquals( $structure->reset()->loadString( file_get_contents(__DIR__ . '/Stubs/flower.hjson'), 'hjson' )->get('flower'), 'sakura' ); $this->assertEquals( $structure->reset()->loadString( file_get_contents(__DIR__ . '/Stubs/flower.toml'), 'toml', ['load_raw' => true] )->get('flower'), 'sakura' ); } /** * Method to test merge(). * * @return void * * @covers \Windwalker\Structure\Structure::merge * @throws \Exception */ public function testMerge() { // Test recursive merge $object1 = '{ "foo" : "foo value", "bar" : { "bar1" : "bar value 1", "bar2" : "bar value 2", "bar3" : "bar value 3" } }'; $object2 = '{ "foo" : "foo value", "bar" : { "bar2" : "new bar value 2", "bar3" : null } }'; $structure1 = new Structure(json_decode($object1)); $structure2 = new Structure(json_decode($object2)); $structure1->merge($structure2); $this->assertEquals( 'new bar value 2', $structure1->get('bar.bar2'), 'Line: ' . __LINE__ . '. bar.bar2 should be override.' ); $this->assertEquals( 'bar value 1', $structure1->get('bar.bar1'), 'Line: ' . __LINE__ . '. bar.bar1 should not be override.' ); $this->assertSame( 'bar value 3', $structure1->get('bar.bar3'), 'Line: ' . __LINE__ . '. bar.bar3 should not be override.' ); $structure = new Structure(['flower' => 'rose', 'honor' => 'Osmanthus month']); $structure->merge($this->instance); $this->assertEquals($structure->get('flower'), 'sakura'); $this->assertEquals($structure->get('honor'), 'Osmanthus month'); } /** * Method to test merge(). * * @return void * * @covers \Windwalker\Structure\Structure::merge */ public function testMergeWithIgnoreValues() { // Test recursive merge $object1 = '{ "foo" : "foo value", "bar" : { "bar1" : "bar value 1", "bar2" : "bar value 2", "bar3" : "bar value 3" } }'; $object2 = '{ "foo" : "foo value", "bar" : { "bar2" : "new bar value 2", "bar3" : "" } }'; $structure1 = new Structure(json_decode($object1)); $structure2 = new Structure(json_decode($object2)); $structure1->setIgnoreValues([null, '']); $structure1->merge($structure2); $this->assertEquals( 'new bar value 2', $structure1->get('bar.bar2'), 'Line: ' . __LINE__ . '. bar.bar2 should be override.' ); $this->assertEquals( 'bar value 1', $structure1->get('bar.bar1'), 'Line: ' . __LINE__ . '. bar.bar1 should not be override.' ); $this->assertSame( 'bar value 3', $structure1->get('bar.bar3'), 'Line: ' . __LINE__ . '. bar.bar3 should not be override.' ); $structure = new Structure(['flower' => 'rose', 'honor' => 'Osmanthus month']); $structure->merge($this->instance); $this->assertEquals($structure->get('flower'), 'sakura'); $this->assertEquals($structure->get('honor'), 'Osmanthus month'); } /** * testMergeTo * * @return void * * @covers \Windwalker\Structure\Structure::mergeTo */ public function testMergeTo() { $structure = new Structure(['sunflower' => 'shine', 'honor' => 'Osmanthus month']); $this->instance->mergeTo('pos1', $structure); $this->assertEquals($this->instance->get('pos1.sunflower'), 'shine'); $this->assertEquals($this->instance->get('pos1.honor'), 'Osmanthus month'); $this->instance->mergeTo('foo.bar', $structure); $this->assertEquals($this->instance->get('foo.bar.sunflower'), 'shine'); $this->assertEquals($this->instance->get('foo.bar.honor'), 'Osmanthus month'); } /** * Method to test offsetExists(). * * @return void * * @covers \Windwalker\Structure\Structure::offsetExists */ public function testOffsetExists() { $this->assertTrue(isset($this->instance['flower'])); $this->assertFalse(isset($this->instance['carbon'])); } /** * Method to test offsetGet(). * * @return void * * @covers \Windwalker\Structure\Structure::offsetGet */ public function testOffsetGet() { $this->assertEquals($this->instance['flower'], 'sakura'); } /** * Method to test offsetSet(). * * @return void * * @covers \Windwalker\Structure\Structure::offsetSet */ public function testOffsetSet() { $this->instance['bird'] = 'flying'; $this->assertEquals($this->instance['bird'], 'flying'); } /** * Method to test offsetUnset(). * * @return void * * @covers \Windwalker\Structure\Structure::offsetUnset */ public function testOffsetUnset() { unset($this->instance['bird']); $this->assertEquals($this->instance['bird'], null); } /** * Method to test set(). * * @return void * * @covers \Windwalker\Structure\Structure::set */ public function testSet() { $this->instance->set('tree.bird', 'sleeping'); $this->assertEquals($this->instance->get('tree.bird'), 'sleeping'); } /** * Method to test setRaw() * * @return void * * @covers \Windwalker\Structure\Structure::setRaw */ public function testSetRaw() { $object = (object) ['foo' => 'bar']; $this->instance->setRaw('tree.bird', $object); $this->assertEquals('bar', $this->instance->get('tree.bird.foo')); $this->assertSame($object, $this->instance->get('tree.bird')); } /** * Method to test toArray(). * * @return void * * @covers \Windwalker\Structure\Structure::toArray */ public function testToArray() { $structure = new Structure($this->getTestData()); $this->assertEquals($structure->toArray(), $this->getTestData()); } /** * Method to test toObject(). * * @return void * * @covers \Windwalker\Structure\Structure::toObject */ public function testToObject() { $structure = new Structure($this->getTestData()); $this->assertEquals($structure->toObject(), StructureHelper::toObject($this->getTestData())); } /** * Method to test toString(). * * @return void * * @covers \Windwalker\Structure\Structure::toString */ public function testToString() { $structure = new Structure($this->getTestData()); $this->assertStringSafeEquals($this->loadFile(__DIR__ . '/Stubs/flower.ini'), $structure->toString('ini')); $this->assertStringSafeEquals($this->loadFile(__DIR__ . '/Stubs/flower.json'), $structure->toString('json')); $this->assertStringSafeEquals($this->loadFile(__DIR__ . '/Stubs/flower.yml'), $structure->toString('yml')); $this->assertStringSafeEquals($this->loadFile(__DIR__ . '/Stubs/flower.xml'), $structure->toString('xml')); $this->assertStringSafeEquals($this->loadFile(__DIR__ . '/Stubs/flower.php'), $structure->toString('php', ['strict' => true])); } /** * Method to test flatten(). * * @return void * * @covers \Windwalker\Structure\Structure::flatten */ public function testFlatten() { $flatted = $this->instance->flatten(); $this->assertEquals($flatted['pos1.sunflower'], 'love'); $flatted = $this->instance->flatten('/'); $this->assertEquals($flatted['pos1/sunflower'], 'love'); } /** * testAppend * * @return void * * @covers \Windwalker\Structure\Structure::push */ public function testPush() { $structure = new Structure(); $structure->set('foo', ['var1', 'var2', 'var3']); $structure->push('foo', 'var4'); $this->assertEquals('var4', $structure->get('foo.3')); $structure->push('foo', 'var5', 'var6'); $this->assertEquals('var5', $structure->get('foo.4')); $this->assertEquals('var6', $structure->get('foo.5')); $structure->setRaw('foo2', (object) ['var1', 'var2', 'var3']); $b = $structure->get('foo2'); $this->assertTrue(is_object($b)); $structure->push('foo2', 'var4'); $b = $structure->get('foo2'); $this->assertTrue(is_array($b)); } /** * testShift * * @return void * * @covers \Windwalker\Structure\Structure::shift */ public function testShift() { $structure = new Structure(); $structure->set('foo.bar', ['var1', 'var2', 'var3']); $this->assertEquals('var1', $structure->shift('foo.bar')); $this->assertEquals('var2', $structure->get('foo.bar.0')); $structure->setRaw('foo.bar2', (object) ['v1' => 'var1', 'v2' => 'var2', 'v3' => 'var3']); $this->assertEquals('var1', $structure->shift('foo.bar2')); $this->assertEquals('var2', $structure->get('foo.bar2.v2')); $this->assertTrue(is_array($structure->get('foo.bar2'))); } /** * testPop * * @return void * * @covers \Windwalker\Structure\Structure::pop */ public function testPop() { $structure = new Structure(); $structure->set('foo.bar', ['var1', 'var2', 'var3']); $this->assertEquals('var3', $structure->pop('foo.bar')); $this->assertNull($structure->get('foo.bar.2')); $structure->setRaw('foo.bar2', (object) ['v1' => 'var1', 'v2' => 'var2', 'v3' => 'var3']); $this->assertEquals('var3', $structure->pop('foo.bar2')); $this->assertNull($structure->get('foo.bar2.v3')); $this->assertTrue(is_array($structure->get('foo.bar2'))); } /** * testUnshift * * @return void * * @covers \Windwalker\Structure\Structure::unshift */ public function testUnshift() { $structure = new Structure(); $structure->set('foo', ['var1', 'var2', 'var3']); $structure->unshift('foo', 'var4'); $this->assertEquals('var4', $structure->get('foo.0')); $structure->unshift('foo', 'var5', 'var6'); $this->assertEquals('var5', $structure->get('foo.0')); $this->assertEquals('var6', $structure->get('foo.1')); $structure->setRaw('foo2', (object) ['var1', 'var2', 'var3']); $b = $structure->get('foo2'); $this->assertTrue(is_object($b)); $structure->unshift('foo2', 'var4'); $b = $structure->get('foo2'); $this->assertTrue(is_array($b)); } /** * testReset * * @return void * * @covers \Windwalker\Structure\Structure::reset */ public function testReset() { $this->instance->reset(); $this->assertEquals([], $this->instance->getRaw()); } /** * testGetRaw * * @return void * * @covers \Windwalker\Structure\Structure::getRaw */ public function testGetRaw() { $this->assertEquals($this->getTestData(), $this->instance->getRaw()); } /** * testGetIterator * * @return void * * @covers \Windwalker\Structure\Structure::getIterator */ public function testGetIterator() { $this->assertInstanceOf('RecursiveArrayIterator', $this->instance->getIterator()); $this->assertEquals($this->getTestData(), iterator_to_array($this->instance)); $this->assertEquals( iterator_to_array(new \RecursiveIteratorIterator(new \RecursiveArrayIterator($this->getTestData()))), iterator_to_array(new \RecursiveIteratorIterator($this->instance)) ); } /** * testCount * * @return void * * @covers \Windwalker\Structure\Structure::count */ public function testCount() { $this->assertEquals(5, count($this->instance)); } /** * loadFile * * @param string $file * * @return string */ protected function loadFile($file) { $text = file_get_contents($file); return $text; } }