From e7f7c9f8337a8d799de12bb7fca4df547213f0f1 Mon Sep 17 00:00:00 2001 From: Vitaliy Ryaboy Date: Fri, 4 Oct 2013 10:01:32 +0200 Subject: [PATCH 1/2] fixed type-hinting in addDefaultMutator and added tests for it --- .../lib/builder/om/PHP5ObjectBuilder.php | 2 +- .../builder/om/GeneratedObjectTest.php | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/generator/lib/builder/om/PHP5ObjectBuilder.php b/generator/lib/builder/om/PHP5ObjectBuilder.php index 74dbce8f9..32197ce68 100644 --- a/generator/lib/builder/om/PHP5ObjectBuilder.php +++ b/generator/lib/builder/om/PHP5ObjectBuilder.php @@ -1987,7 +1987,7 @@ protected function addDefaultMutator(&$script, Column $col) // checking in mutators. if ($col->isPhpPrimitiveType()) { $script .= " - if (\$v !== null && is_numeric(\$v)) { + if (\$v !== null) { \$v = (" . $col->getPhpType() . ") \$v; } "; diff --git a/test/testsuite/generator/builder/om/GeneratedObjectTest.php b/test/testsuite/generator/builder/om/GeneratedObjectTest.php index 5639562bd..2ddbf62e4 100644 --- a/test/testsuite/generator/builder/om/GeneratedObjectTest.php +++ b/test/testsuite/generator/builder/om/GeneratedObjectTest.php @@ -100,6 +100,54 @@ public function testDefaultValues() $acct->setPassword("testpass"); $this->assertTrue($acct->isModified()); } + + + public function testTypeHintingValues() + { + $test_name = 'test name'; + $a = new Author(); + $a2 = new Author(); + $a2->setFirstName($test_name); + + + $a->setAge(2); + $this->assertEquals(2, $a->getAge()); + $this->assertTrue(is_int($a->getAge())); + + + $a->clear(); + $a->setAge('wrong integer'); + $this->assertTrue(is_int($a->getAge())); + + + $a->clear(); + $a->setAge(true); + $this->assertTrue(is_int($a->getAge())); + + + $a->clear(); + $a->setFirstName($test_name); + $this->assertEquals($test_name, $a->getFirstName()); + $this->assertTrue(is_string($a->getFirstName())); + + + $a->clear(); + $a->setFirstName($a2); + $this->assertTrue(is_string($a->getFirstName())); + $this->assertEquals($a->getFirstName(), (string)$a2); + + + $a->clear(); + $a->setFirstName(true); + $this->assertTrue(is_string($a->getFirstName())); + + + /* php 5.4+ fail generate Notice: Array to string conversion + $a->clear(); + $a->setFirstName(array()); + $this->assertTrue(is_string($a->getFirstName())); + */ + } /** * Tests the use of default expressions and the reloadOnInsert and reloadOnUpdate attributes. From 7b073a275960452765295a3ef71342c47a53573a Mon Sep 17 00:00:00 2001 From: Vitaliy Ryaboy Date: Tue, 29 Oct 2013 15:05:45 +0100 Subject: [PATCH 2/2] adapted this fix to new specifications --- generator/lib/builder/om/PHP5ObjectBuilder.php | 10 +++++++++- .../generator/builder/om/GeneratedObjectTest.php | 14 ++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/generator/lib/builder/om/PHP5ObjectBuilder.php b/generator/lib/builder/om/PHP5ObjectBuilder.php index 32197ce68..f5436af65 100644 --- a/generator/lib/builder/om/PHP5ObjectBuilder.php +++ b/generator/lib/builder/om/PHP5ObjectBuilder.php @@ -1986,8 +1986,16 @@ protected function addDefaultMutator(&$script, Column $col) // Perform type-casting to ensure that we can use type-sensitive // checking in mutators. if ($col->isPhpPrimitiveType()) { + if($col->isTextType()) { + $script .= " + if (\$v !== null) {"; + } else { + $script .= " + if (\$v !== null && is_numeric(\$v)) {"; + } + + $script .= " - if (\$v !== null) { \$v = (" . $col->getPhpType() . ") \$v; } "; diff --git a/test/testsuite/generator/builder/om/GeneratedObjectTest.php b/test/testsuite/generator/builder/om/GeneratedObjectTest.php index 2ddbf62e4..b12569df9 100644 --- a/test/testsuite/generator/builder/om/GeneratedObjectTest.php +++ b/test/testsuite/generator/builder/om/GeneratedObjectTest.php @@ -116,13 +116,14 @@ public function testTypeHintingValues() $a->clear(); - $a->setAge('wrong integer'); + $a->setAge('2'); + $this->assertEquals(2, $a->getAge()); $this->assertTrue(is_int($a->getAge())); $a->clear(); - $a->setAge(true); - $this->assertTrue(is_int($a->getAge())); + $a->setAge('wrong integer'); + $this->assertTrue(!is_int($a->getAge())); $a->clear(); @@ -140,13 +141,6 @@ public function testTypeHintingValues() $a->clear(); $a->setFirstName(true); $this->assertTrue(is_string($a->getFirstName())); - - - /* php 5.4+ fail generate Notice: Array to string conversion - $a->clear(); - $a->setFirstName(array()); - $this->assertTrue(is_string($a->getFirstName())); - */ } /**