/**
  * @covers AuthorizationPolicy
  */
 public function testAuthorizationPolicy()
 {
     $policy = new AuthorizationPolicy('some message');
     // Test advice.
     self::assertTrue($policy->hasAdvice(AUTHORIZATION_ADVICE_DENY_MESSAGE));
     self::assertFalse($policy->hasAdvice(AUTHORIZATION_ADVICE_CALL_ON_DENY));
     self::assertEquals('some message', $policy->getAdvice(AUTHORIZATION_ADVICE_DENY_MESSAGE));
     self::assertNull($policy->getAdvice(AUTHORIZATION_ADVICE_CALL_ON_DENY));
     // Test authorized context objects.
     self::assertFalse($policy->hasAuthorizedContextObject(ASSOC_TYPE_USER_GROUP));
     $someContextObject = new DataObject();
     $someContextObject->setData('test1', 'test1');
     $policy->addAuthorizedContextObject(ASSOC_TYPE_USER_GROUP, $someContextObject);
     self::assertTrue($policy->hasAuthorizedContextObject(ASSOC_TYPE_USER_GROUP));
     self::assertEquals($someContextObject, $policy->getAuthorizedContextObject(ASSOC_TYPE_USER_GROUP));
     self::assertEquals(array(ASSOC_TYPE_USER_GROUP => $someContextObject), $policy->getAuthorizedContext());
     // Test authorized context.
     $someOtherContextObject = new DataObject();
     $someOtherContextObject->setData('test2', 'test2');
     $authorizedContext = array(ASSOC_TYPE_USER_GROUP => $someOtherContextObject);
     $policy->setAuthorizedContext($authorizedContext);
     self::assertEquals($authorizedContext, $policy->getAuthorizedContext());
     // Test default policies.
     self::assertTrue($policy->applies());
     self::assertEquals(AUTHORIZATION_DENY, $policy->effect());
 }
 /**
  * @covers DataObject::setData
  * @covers DataObject::getData
  * @covers DataObject::getAllData
  */
 public function testSetGetData()
 {
     // Set data with and without locale
     $this->dataObject->setData('testVar1', 'testVal1');
     $this->dataObject->setData('testVar2', 'testVal2_US', 'en_US');
     $this->dataObject->setData('testVar2', 'testVal2_DE', 'de_DE');
     $expectedResult = array('testVar1' => 'testVal1', 'testVar2' => array('en_US' => 'testVal2_US', 'de_DE' => 'testVal2_DE'));
     self::assertEquals($expectedResult, $this->dataObject->getAllData());
     self::assertEquals('testVal1', $this->dataObject->getData('testVar1'));
     // test for http://bugs.php.net/bug.php?id=29848
     self::assertNull($this->dataObject->getData('testVar1', 'en_US'));
     self::assertEquals('testVal2_US', $this->dataObject->getData('testVar2', 'en_US'));
     // Unset a few values
     $this->dataObject->setData('testVar1', null);
     $this->dataObject->setData('testVar2', null, 'en_US');
     $expectedResult = array('testVar2' => array('de_DE' => 'testVal2_DE'));
     self::assertEquals($expectedResult, $this->dataObject->getAllData());
     // Make sure that un-setting a non-existent value doesn't hurt
     $this->dataObject->setData('testVar1', null);
     $this->dataObject->setData('testVar2', null, 'en_US');
     self::assertEquals($expectedResult, $this->dataObject->getAllData());
     // Make sure that getting a non-existent value doesn't hurt
     self::assertNull($this->dataObject->getData('testVar1'));
     self::assertNull($this->dataObject->getData('testVar1', 'en_US'));
     self::assertNull($this->dataObject->getData('testVar2', 'en_US'));
     // Make sure that unsetting the last translation will also kill the variable
     $this->dataObject->setData('testVar2', null, 'de_DE');
     self::assertEquals(array(), $this->dataObject->getAllData());
     // Test by-ref behaviour
     $testVal1 = 'testVal1';
     $testVal2 = 'testVal2';
     $this->dataObject->setData('testVar1', $testVal1);
     $this->dataObject->setData('testVar2', $testVal2, 'en_US');
     $testVal1 = $testVal2 = 'something else';
     $expectedResult = array('testVar1' => 'testVal1', 'testVar2' => array('en_US' => 'testVal2'));
     $result =& $this->dataObject->getAllData();
     self::assertEquals($expectedResult, $result);
     // Should be returned by-ref:
     $testVal1 =& $this->dataObject->getData('testVar1');
     $testVal2 =& $this->dataObject->getData('testVar2', 'en_US');
     $testVal1 = $testVal2 = 'something else';
     $expectedResult = array('testVar1' => 'something else', 'testVar2' => array('en_US' => 'something else'));
     $result =& $this->dataObject->getAllData();
     self::assertEquals($expectedResult, $result);
 }
 public function test_unsetData()
 {
     /* unset root */
     $obj = new DataObject('data');
     $this->assertEquals('data', $obj->getData());
     $obj->unsetData();
     $this->assertNull($obj->getData());
     /* unset key in root array */
     $obj->setKey('dataKey');
     $obj->setOther('dataOther');
     $this->assertEquals('dataKey', $obj->getKey());
     $obj->unsetKey();
     $this->assertNull($obj->getKey());
     $this->assertEquals('dataOther', $obj->getOther());
     /* unset by path */
     $obj->setData('Other/Node', 'dataNode');
     $this->assertEquals('dataNode', $obj->getData('/Other/Node'));
     $obj->unsetData('/Other/Node');
     /* wrong path */
     $obj->unsetData('/Other/WrongNode');
 }