mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
Merge pull request #2137 from jthomerson/pulls/fix_viewable_data_wrapped_value
FIX: ViewableData wasn't setting values when using default cast
This commit is contained in:
commit
429bbc5223
@ -81,6 +81,19 @@ class ViewableDataTest extends SapphireTest {
|
||||
$this->assertEquals('casted', $newViewableData->forTemplate());
|
||||
}
|
||||
|
||||
public function testDefaultValueWrapping() {
|
||||
$data = new ArrayData(array('Title' => 'SomeTitleValue'));
|
||||
// this results in a cached raw string in ViewableData:
|
||||
$this->assertTrue($data->hasValue('Title'));
|
||||
$this->assertFalse($data->hasValue('SomethingElse'));
|
||||
// this should cast the raw string to a StringField since we are
|
||||
// passing true as the third argument:
|
||||
$obj = $data->obj('Title', null, true);
|
||||
$this->assertTrue(is_object($obj));
|
||||
// and the string field should have the value of the raw string:
|
||||
$this->assertEquals('SomeTitleValue', $obj->forTemplate());
|
||||
}
|
||||
|
||||
public function testRAWVal() {
|
||||
$data = new ViewableDataTest_Castable();
|
||||
$data->test = 'This & This';
|
||||
@ -121,6 +134,28 @@ class ViewableDataTest extends SapphireTest {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public function testObjWithCachedStringValueReturnsValidObject() {
|
||||
$obj = new ViewableDataTest_NoCastingInformation();
|
||||
|
||||
// Save a literal string into cache
|
||||
$cache = true;
|
||||
$uncastedData = $obj->obj('noCastingInformation', null, false, $cache);
|
||||
|
||||
// Fetch the cached string as an object
|
||||
$forceReturnedObject = true;
|
||||
$castedData = $obj->obj('noCastingInformation', null, $forceReturnedObject);
|
||||
|
||||
// Uncasted data should always be the nonempty string
|
||||
$this->assertNotEmpty($uncastedData, 'Uncasted data was empty.');
|
||||
$this->assertTrue(is_string($uncastedData), 'Uncasted data should be a string.');
|
||||
|
||||
// Casted data should be the string wrapped in a DBField-object.
|
||||
$this->assertNotEmpty($castedData, 'Casted data was empty.');
|
||||
$this->assertInstanceOf('DBField', $castedData, 'Casted data should be instance of DBField.');
|
||||
|
||||
$this->assertEquals($uncastedData, $castedData->getValue(), 'Casted and uncasted strings are not equal.');
|
||||
}
|
||||
}
|
||||
|
||||
/**#@+
|
||||
@ -212,4 +247,10 @@ class ViewableDataTest_CastingClass extends ViewableData {
|
||||
);
|
||||
}
|
||||
|
||||
class ViewableDataTest_NoCastingInformation extends ViewableData {
|
||||
public function noCastingInformation() {
|
||||
return "No casting information";
|
||||
}
|
||||
}
|
||||
|
||||
/**#@-*/
|
||||
|
@ -383,7 +383,9 @@ class ViewableData extends Object implements IteratorAggregate {
|
||||
|
||||
if(!is_object($value) && $forceReturnedObject) {
|
||||
$default = Config::inst()->get('ViewableData', 'default_cast', Config::FIRST_SET);
|
||||
$value = new $default($fieldName);
|
||||
$castedValue = new $default($fieldName);
|
||||
$castedValue->setValue($value);
|
||||
$value = $castedValue;
|
||||
}
|
||||
|
||||
return $value;
|
||||
|
Loading…
x
Reference in New Issue
Block a user