Author: ts
Date: Tue Jan 15 09:01:41 2008
New Revision: 7147
Log:
- Fixed issue #10205: binding variables with an undeclared var doesn't throw
an exception. If getState() on a persistent object does not return an array
an exception is thrown now.
Added:
trunk/PersistentObject/src/exceptions/invalid_object_state.php (with
props)
trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php
(with props)
trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php
(with props)
Modified:
trunk/PersistentObject/ChangeLog
trunk/PersistentObject/design/class_diagram.png
trunk/PersistentObject/src/persistent_autoload.php
trunk/PersistentObject/src/persistent_session.php
trunk/PersistentObject/tests/persistent_session_misc_test.php
trunk/PersistentObject/tests/persistent_session_test.php
Modified: trunk/PersistentObject/ChangeLog
==============================================================================
--- trunk/PersistentObject/ChangeLog [iso-8859-1] (original)
+++ trunk/PersistentObject/ChangeLog [iso-8859-1] Tue Jan 15 09:01:41 2008
@@ -2,6 +2,9 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Refactored ezcPersistentSession.
+- Fixed issue #10205: binding variables with an undeclared var doesn't throw
+ an exception. If getState() on a persistent object does not return an array
+ an exception is thrown now.
1.3.4 - Monday 14 January 2008
Modified: trunk/PersistentObject/design/class_diagram.png
==============================================================================
Binary files - no diff available.
Added: trunk/PersistentObject/src/exceptions/invalid_object_state.php
==============================================================================
--- trunk/PersistentObject/src/exceptions/invalid_object_state.php (added)
+++ trunk/PersistentObject/src/exceptions/invalid_object_state.php [iso-8859-1]
Tue Jan 15 09:01:41 2008
@@ -1,0 +1,37 @@
+<?php
+/**
+ * File containing the ezcPersistentObjectAlreadyPersistentException class
+ *
+ * @package PersistentObject
+ * @version //autogen//
+ * @copyright Copyright (C) 2005-2008 eZ systems as. All rights reserved.
+ * @license http://ez.no/licenses/new_bsd New BSD License
+ */
+
+/**
+ * Exception thrown if the result of $object->getState() is invalid.
+ *
+ * @package PersistentObject
+ * @version //autogen//
+ */
+class ezcPersistentInvalidObjectStateException extends
ezcPersistentObjectException
+{
+ /**
+ * Creates a new exception.
+ *
+ * Creates a new ezcPersistentInvalidObjectStateException for the given
+ * $object with the given $reason.
+ *
+ * @param object $object
+ * @param string $reason
+ */
+ public function __construct( $object, $reason = null )
+ {
+ parent::__construct(
+ 'The state returned by an object of class ' . get_class( $object )
. ' was invalid.'
+ . ( $reason !== null ? " (Reason: $reason)" : '' )
+ );
+ }
+}
+
+?>
Propchange: trunk/PersistentObject/src/exceptions/invalid_object_state.php
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/PersistentObject/src/persistent_autoload.php
==============================================================================
--- trunk/PersistentObject/src/persistent_autoload.php [iso-8859-1] (original)
+++ trunk/PersistentObject/src/persistent_autoload.php [iso-8859-1] Tue Jan 15
09:01:41 2008
@@ -16,6 +16,7 @@
'ezcPersistentIdentifierGenerationException' =>
'PersistentObject/exceptions/identifier_generation.php',
'ezcPersistentObjectAlreadyPersistentException' =>
'PersistentObject/exceptions/already_persistent.php',
'ezcPersistentObjectNotPersistentException' =>
'PersistentObject/exceptions/not_persistent.php',
+ 'ezcPersistentInvalidObjectStateException' =>
'PersistentObject/exceptions/invalid_object_state.php',
'ezcPersistentQueryException' =>
'PersistentObject/exceptions/query_exception.php',
'ezcPersistentRelatedObjectNotFoundException' =>
'PersistentObject/exceptions/related_object_not_found.php',
'ezcPersistentRelationInvalidException' =>
'PersistentObject/exceptions/relation_invalid.php',
Modified: trunk/PersistentObject/src/persistent_session.php
==============================================================================
--- trunk/PersistentObject/src/persistent_session.php [iso-8859-1] (original)
+++ trunk/PersistentObject/src/persistent_session.php [iso-8859-1] Tue Jan 15
09:01:41 2008
@@ -601,8 +601,16 @@
*/
public function getObjectState( $object )
{
- // @todo Chekcs about object state should be added here, configurable.
- return $object->getState();
+ // Common sanity check.
+ if ( !is_array( $state = $object->getState() ) )
+ {
+ throw new ezcPersistentInvalidObjectStateException(
+ $object,
+ 'Is type ' . gettype( $state ) . ' instead of array.'
+ );
+ }
+ // @todo: Add more optional sanity checks.
+ return $state;
}
/**
Added:
trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php
==============================================================================
--- trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php
(added)
+++ trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php
[iso-8859-1] Tue Jan 15 09:01:41 2008
@@ -1,0 +1,15 @@
+<?php
+
+require_once 'persistent_test_object.php';
+
+class PersistentTestObjectInvalidState extends PersistentTestObject
+{
+ public $state = null;
+
+ public function getState()
+ {
+ return $this->state;
+ }
+}
+
+?>
Propchange:
trunk/PersistentObject/tests/data/persistent_test_object_invalid_state.php
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php
==============================================================================
--- trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php
(added)
+++ trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php
[iso-8859-1] Tue Jan 15 09:01:41 2008
@@ -1,0 +1,41 @@
+<?php
+/*
+ * Holds the definition for PersistentTestObject
+ * This definition is used by the code manager for
+ * various tests in the system.
+ */
+// build definition
+$def = new ezcPersistentObjectDefinition();
+$def->table = "PO_test";
+$def->class = "PersistentTestObjectInvalidState";
+
+$def->idProperty = new ezcPersistentObjectIdProperty;
+$def->idProperty->columnName = 'id';
+$def->idProperty->propertyName = 'id';
+$def->idProperty->generator = new ezcPersistentGeneratorDefinition(
+ 'ezcPersistentSequenceGenerator',
+ array( 'sequence' => 'PO_test_id_seq' )
+);
+
+$def->properties['varchar'] = new ezcPersistentObjectProperty;
+$def->properties['varchar']->columnName = 'type_varchar';
+$def->properties['varchar']->propertyName = 'varchar';
+$def->properties['varchar']->propertyType =
ezcPersistentObjectProperty::PHP_TYPE_STRING;
+
+$def->properties['integer'] = new ezcPersistentObjectProperty;
+$def->properties['integer']->columnName = 'type_integer';
+$def->properties['integer']->propertyName = 'integer';
+$def->properties['integer']->propertyType =
ezcPersistentObjectProperty::PHP_TYPE_INT;
+
+$def->properties['decimal'] = new ezcPersistentObjectProperty;
+$def->properties['decimal']->columnName = 'type_decimal';
+$def->properties['decimal']->propertyName = 'decimal';
+$def->properties['decimal']->propertyType =
ezcPersistentObjectProperty::PHP_TYPE_FLOAT;;
+
+$def->properties['text'] = new ezcPersistentObjectProperty;
+$def->properties['text']->columnName = 'type_text';
+$def->properties['text']->propertyName = 'text';
+$def->properties['text']->propertyType =
ezcPersistentObjectProperty::PHP_TYPE_STRING;;
+return $def;
+
+?>
Propchange:
trunk/PersistentObject/tests/data/persistenttestobjectinvalidstate.php
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/PersistentObject/tests/persistent_session_misc_test.php
==============================================================================
--- trunk/PersistentObject/tests/persistent_session_misc_test.php [iso-8859-1]
(original)
+++ trunk/PersistentObject/tests/persistent_session_misc_test.php [iso-8859-1]
Tue Jan 15 09:01:41 2008
@@ -144,6 +144,51 @@
$this->removeTempDir();
}
+
+ public function testInvalidStateException()
+ {
+ $obj = new PersistentTestObjectInvalidState();
+
+ $obj->state = null;
+ try
+ {
+ $this->session->save( $obj );
+ $this->fail( 'Exception not thrown with state null.' );
+ }
+ catch( ezcPersistentInvalidObjectStateException $e ) {}
+
+ $obj->state = 23;
+ try
+ {
+ $this->session->save( $obj );
+ $this->fail( 'Exception not thrown with state integer.' );
+ }
+ catch( ezcPersistentInvalidObjectStateException $e ) {}
+
+ $obj->state = new stdClass();
+ try
+ {
+ $this->session->save( $obj );
+ $this->fail( 'Exception not thrown with state object.' );
+ }
+ catch( ezcPersistentInvalidObjectStateException $e ) {}
+
+ $obj->state = 'foo';
+ try
+ {
+ $this->session->save( $obj );
+ $this->fail( 'Exception not thrown with state string.' );
+ }
+ catch( ezcPersistentInvalidObjectStateException $e ) {}
+
+ $obj->state = true;
+ try
+ {
+ $this->session->save( $obj );
+ $this->fail( 'Exception not thrown with state bool.' );
+ }
+ catch( ezcPersistentInvalidObjectStateException $e ) {}
+ }
}
?>
Modified: trunk/PersistentObject/tests/persistent_session_test.php
==============================================================================
--- trunk/PersistentObject/tests/persistent_session_test.php [iso-8859-1]
(original)
+++ trunk/PersistentObject/tests/persistent_session_test.php [iso-8859-1] Tue
Jan 15 09:01:41 2008
@@ -11,6 +11,7 @@
require_once 'data/persistent_test_object.php';
require_once 'data/persistent_test_object_no_id.php';
require_once 'data/persistent_test_object_converter.php';
+require_once 'data/persistent_test_object_invalid_state.php';
require_once 'data/relation_test_address.php';
require_once 'data/relation_test_person.php';
--
svn-components mailing list
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components