Преглед изворни кода

Fixing issue with Admin::toString ; now checking if __toString indeed returns a string

Hugo Briand пре 12 година
родитељ
комит
f7a5a414a6
2 измењених фајлова са 14 додато и 1 уклоњено
  1. 1 1
      Admin/Admin.php
  2. 13 0
      Tests/Admin/BaseAdminTest.php

+ 1 - 1
Admin/Admin.php

@@ -2543,7 +2543,7 @@ abstract class Admin implements AdminInterface, DomainObjectInterface
             return '';
         }
 
-        if (method_exists($object, '__toString')) {
+        if (method_exists($object, '__toString') && null !== $object->__toString()) {
             return (string) $object;
         }
 

+ 13 - 0
Tests/Admin/BaseAdminTest.php

@@ -22,6 +22,15 @@ class FooTest_Admin
     }
 }
 
+class FooTestNullToString_Admin
+{
+    // In case __toString returns an attribute not yet set
+    public function __toString()
+    {
+        return null;
+    }
+}
+
 class PostAdmin extends Admin
 {
     protected $metadataClass = null;
@@ -218,6 +227,10 @@ class BaseAdminTest extends \PHPUnit_Framework_TestCase
 
         $s = new FooTest_Admin;
         $this->assertEquals('salut', $admin->toString($s));
+        
+        // To string method is implemented, but returns null
+        $s = new FooTestNullToString_Admin;
+        $this->assertNotEmpty($admin->toString($s));
 
         $this->assertEquals("", $admin->toString(false));
     }