public function testArraySetter()
 {
     $model = new UserSetting();
     // test set
     $this->assertTrue($model->set('1.1', 'value'));
     $this->assertTrue($model->set('1.2', 'value2'));
     $this->assertTrue($model->set('key', 'value'));
     $this->assertTrue($model->set('x.y.1', 'v1'));
     $this->assertTrue($model->set('x.y.2', 'v2'));
     $this->assertFalse($model->set('x.y.2.b', '2_is_already_a_value_not_able_to_set_this_value'));
     $this->assertTrue($model->set('one.two.three', 'four'));
     $this->assertTrue($model->set('cfg.override', 1));
     // inspect array data
     $this->assertArrayHasKey('1', $model->data);
     $this->assertArrayHasKey('key', $model->data);
     $this->assertArrayHasKey('x', $model->data);
     $this->assertArrayHasKey('1', $model->data[1]);
     $this->assertArrayHasKey('2', $model->data[1]);
     $this->assertArrayHasKey('y', $model->data['x']);
     $this->assertArrayHasKey('1', $model->data['x']['y']);
     $this->assertArrayHasKey('2', $model->data['x']['y']);
     // test get
     $this->assertEquals(null, $model->get('notfound'));
     $this->assertEquals(false, $model->get('notfound', false));
     $this->assertEquals('value', $model->get('1.1'));
     $this->assertEquals('value2', $model->get('1.2'));
     $this->assertEquals('value', $model->get('key'));
     $this->assertEquals('v1', $model->get('x.y.1'));
     $this->assertEquals('v2', $model->get('x.y.2'));
     $this->assertArrayHasKey('y', $model->get('x'));
     $this->assertArrayHasKey('1', $model->get('x.y'));
     $this->assertEquals(1, $model->get('cfg.override'));
     $this->assertTrue($model->set('cfg.override', 2));
     $this->assertEquals(2, $model->get('cfg.override'));
     // test has
     $this->assertFalse($model->has('does.not.exists'));
     $this->assertFalse($model->has('does.not'));
     $this->assertFalse($model->has('does'));
     $this->assertTrue($model->has('key'));
     $this->assertTrue($model->has('x.y.1'));
     $this->assertFalse($model->has('x.y.3'));
     $this->assertFalse($model->has('x.y.1.b'));
     $this->assertFalse($model->has('x.y.2.b'));
     // remove elements and test with has
     $this->assertTrue($model->has('one.two.three'));
     $this->assertTrue($model->has('one.two'));
     $this->assertTrue($model->has('one'));
     $model->remove('one.two.three');
     $this->assertFalse($model->has('one.two.three'));
     $model->remove('one');
     $this->assertFalse($model->has('one.two.three'));
     $this->assertFalse($model->has('one.two'));
     $this->assertFalse($model->has('one'));
 }