blob: b57a19e4cfd1d34855ad11ce7fd4ef7a9201dd44 [file] [log] [blame]
<?php
/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @version //autogentag//
* @filesource
* @package PersistentObject
* @subpackage Tests
*/
/**
* Tests the ezcPersistentObjectDefinition class.
*
* @package PersistentObject
* @subpackage Tests
*/
class ezcPersistentObjectDefinitionTest extends ezcTestCase
{
protected function setUp()
{
}
protected function tearDown()
{
}
public static function suite()
{
return new PHPUnit_Framework_TestSuite( 'ezcPersistentObjectDefinitionTest' );
}
public function testConstructureSuccess()
{
$definition = new ezcPersistentObjectDefinition();
$this->assertAttributeEquals(
array(
'table' => null,
'class' => null,
'idProperty' => null,
'properties' => new ezcPersistentObjectProperties(),
'columns' => new ezcPersistentObjectColumns(),
'relations' => new ezcPersistentObjectRelations(),
),
'propertyArray',
$definition
);
$definition = new ezcPersistentObjectDefinition(
'table',
'class',
array( 'foo' => new ezcPersistentObjectProperty() ),
array(),
new ezcPersistentObjectIdProperty()
);
$res = array(
'table' => 'table',
'class' => 'class',
'idProperty' => new ezcPersistentObjectIdProperty(),
'properties' => new ezcPersistentObjectProperties(),
'columns' => new ezcPersistentObjectColumns(),
'relations' => new ezcPersistentObjectRelations(),
);
$res['properties']['foo'] = new ezcPersistentObjectProperty();
$this->assertAttributeEquals(
$res,
'propertyArray',
$definition
);
}
public function testConstructureFailure()
{
try
{
$definition = new ezcPersistentObjectDefinition(
23
);
$this->fail( 'ezcBaseValueException not thrown on invalid value for parameter $table.' );
}
catch ( ezcBaseValueException $e ) {}
try
{
$definition = new ezcPersistentObjectDefinition(
'foo',
23
);
$this->fail( 'ezcBaseValueException not thrown on invalid value for parameter $class.' );
}
catch ( ezcBaseValueException $e ) {}
}
public function testGetAccessSuccess()
{
$definition = new ezcPersistentObjectDefinition(
'table',
'class'
);
$this->assertEquals(
'table',
$definition->table
);
$this->assertEquals(
'class',
$definition->class
);
$this->assertNull(
$definition->idProperty
);
$this->assertEquals(
new ezcPersistentObjectProperties(),
$definition->properties
);
}
public function testGetAccessFailure()
{
$definition = new ezcPersistentObjectDefinition(
'table',
'class'
);
try
{
echo $definition->foo;
}
catch ( ezcBasePropertyNotFoundException $e )
{
return;
}
$this->fail( 'Exception not thrown on get access to invalid property $foo.' );
}
public function testSetAccessSuccess()
{
$definition = new ezcPersistentObjectDefinition();
$definition->class = 'class';
$definition->table = 'table';
$definition->idProperty = new ezcPersistentObjectIdProperty();
$definition->properties = new ezcPersistentObjectProperties();
$definition->columns = new ezcPersistentObjectColumns();
$definition->relations = new ezcPersistentObjectRelations();
$this->assertEquals(
'class',
$definition->class
);
$this->assertEquals(
'table',
$definition->table
);
$this->assertEquals(
new ezcPersistentObjectIdProperty(),
$definition->idProperty
);
$this->assertEquals(
new ezcPersistentObjectProperties(),
$definition->properties
);
$this->assertEquals(
new ezcPersistentObjectColumns(),
$definition->columns
);
$this->assertEquals(
new ezcPersistentObjectRelations(),
$definition->relations
);
}
public function testSetAccessFailure()
{
$definition = new ezcPersistentObjectDefinition();
$this->assertSetPropertyFails(
$definition,
'columnName',
array( true, false, 23, 23.42, array(), new stdClass() )
);
$this->assertSetPropertyFails(
$definition,
'propertyName',
array( true, false, 23, 23.42, array(), new stdClass() )
);
$this->assertSetPropertyFails(
$definition,
'propertyType',
array( true, false, 'foo', 23.42, array(), new stdClass() )
);
}
public function testIssetAccessSuccess()
{
$definition = new ezcPersistentObjectDefinition();
$this->assertTrue(
isset( $definition->class ),
'Property $class seems not to be set.'
);
$this->assertTrue(
isset( $definition->table ),
'Property $table seems not to be set.'
);
$this->assertTrue(
isset( $definition->properties ),
'Property $properties seems not to be set.'
);
$this->assertTrue(
isset( $definition->columns ),
'Property $columns seems not to be set.'
);
$this->assertTrue(
isset( $definition->relations ),
'Property $relations seems not to be set.'
);
$this->assertFalse(
isset( $definition->foo ),
'Property $foo seems to be set although it does not exist.'
);
}
public function testIssetAccessFailure()
{
$definition = new ezcPersistentObjectDefinition();
$this->assertFalse(
isset( $definition->foo ),
'Property $foo seems to be set.'
);
}
// http://ez.no/bugs/view/9189
// http://ez.no/bugs/view/9187
public function testPersistentObjectDefinitionStruct()
{
$property = new ezcPersistentObjectProperty(
"test column",
"test property",
ezcPersistentObjectProperty::PHP_TYPE_INT
);
$generator = new ezcPersistentGeneratorDefinition(
"test class",
array( "param" => 123 )
);
$idProperty = new ezcPersistentObjectIdProperty(
"test column",
"test property",
null,
$generator
);
$def = new ezcPersistentObjectDefinition(
"test table",
"test class",
array( 'test' => $property ),
array(),
$idProperty
);
$res = ezcPersistentObjectDefinition::__set_state(array(
'table' => 'test table',
'class' => 'test class',
'idProperty' =>
ezcPersistentObjectIdProperty::__set_state(array(
'columnName' => 'test column',
'propertyName' => 'test property',
'visibility' => NULL,
'generator' =>
ezcPersistentGeneratorDefinition::__set_state(array(
'class' => 'test class',
'params' =>
array (
'param' => 123,
),
)),
)),
'properties' =>
array (
'test' =>
ezcPersistentObjectProperty::__set_state(array(
'columnName' => 'test column',
'propertyName' => 'test property',
'propertyType' => 2,
)),
),
'columns' =>
array (
),
'relations' =>
array (
),
));
$this->assertEquals( $res, $def, "ezcPersistentObjectDefinition not deserialized correctly." );
}
/**
* Test case for issue #12108.
*/
public function testMissingReverseColumnLookup()
{
// Load def without def manager
$def = require dirname( __FILE__ ) . '/../data/persistenttestobject.php';
try
{
ezcPersistentStateTransformer::rowToStateArray( array(), $def );
$this->fail( 'Exception not thrown on state transformation without proper reverse-lookup.' );
}
catch ( ezcPersistentObjectException $e ) {}
}
}
?>