From cd213ab4884958d45cccaaf75cde15c0c525584b Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Tue, 4 Feb 2014 10:18:26 +1300 Subject: [PATCH] BUG Fixed handing of false values in GridState_Data API Added ability to unset values --- forms/gridfield/GridState.php | 6 +++++- tests/forms/GridFieldTest.php | 18 +++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/forms/gridfield/GridState.php b/forms/gridfield/GridState.php index b9edec273..b74f13d8a 100644 --- a/forms/gridfield/GridState.php +++ b/forms/gridfield/GridState.php @@ -153,7 +153,7 @@ class GridState_Data { * @return mixed The value associated with this key, or the value specified by $default if not set */ public function getData($name, $default = null) { - if(empty($this->data[$name])) { + if(!isset($this->data[$name])) { $this->data[$name] = $default; } else if(is_array($this->data[$name])) { $this->data[$name] = new GridState_Data($this->data[$name]); @@ -169,6 +169,10 @@ class GridState_Data { public function __isset($name) { return isset($this->data[$name]); } + + public function __unset($name) { + unset($this->data[$name]); + } public function __toString() { if(!$this->data) { diff --git a/tests/forms/GridFieldTest.php b/tests/forms/GridFieldTest.php index 6444ec2a8..1864a8176 100644 --- a/tests/forms/GridFieldTest.php +++ b/tests/forms/GridFieldTest.php @@ -123,22 +123,22 @@ class GridFieldTest extends SapphireTest { $obj->State->NoValue = 10; $this->assertEquals(10, $obj->State->NoValue); $this->assertEquals(10, $obj->State->NoValue(20)); + + // Test that values can be set, unset, and inspected + $this->assertFalse(isset($obj->State->NotSet)); + $obj->State->NotSet = false; + $this->assertTrue(isset($obj->State->NotSet)); + unset($obj->State->NotSet); + $this->assertFalse(isset($obj->State->NotSet)); - //Show that values returned by the assignment function don't - // actually return the value stored + // Test that false evaluating values are storable $this->assertEquals(0, $obj->State->Falsey0(0)); // expect 0 back $this->assertEquals(0, $obj->State->Falsey0(10)); // expect 0 back $this->assertEquals(0, $obj->State->Falsey0); //expect 0 back $obj->State->Falsey0 = 0; //manually assign 0 $this->assertEquals(0, $obj->State->Falsey0); //expect 0 back - //repeat for other falsey values - $this->assertEquals(array(), $obj->State->Falsey1(array())); - $this->assertEquals(array(), $obj->State->Falsey1(array('test'))); - $this->assertEquals(array(), $obj->State->Falsey1); - $obj->State->Falsey1 = array(); //manually assign 0 - $this->assertEquals(array(), $obj->State->Falsey1); //expect 0 back - + // Test that false is storable $this->assertFalse($obj->State->Falsey2(false)); $this->assertFalse($obj->State->Falsey2(true)); $this->assertFalse($obj->State->Falsey2);