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
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to