/**
  * 30/06/2009 - Enhancement:
  * SaveInto checks if set-methods are available and use them
  * instead of setting the values in the money class directly. saveInto
  * initiates a new Money class object to pass through the values to the setter
  * method.
  *
  * (see @link MoneyFieldTest_CustomSetter_Object for more information)
  *
  * @param DataObjectInterface|Object $dataObject
  */
 public function saveInto(DataObjectInterface $dataObject)
 {
     $fieldName = $this->getName();
     if ($dataObject->hasMethod("set{$fieldName}")) {
         $dataObject->{$fieldName} = DBField::create_field('Money', array("Currency" => $this->fieldCurrency->dataValue(), "Amount" => $this->fieldAmount->dataValue()));
     } else {
         $currencyField = "{$fieldName}Currency";
         $amountField = "{$fieldName}Amount";
         $dataObject->{$currencyField} = $this->fieldCurrency->dataValue();
         $dataObject->{$amountField} = $this->fieldAmount->dataValue();
     }
 }
 /**
  * Test that data loaded in via Form::loadDataFrom(DataObject) will populate the field correctly,
  * and can format the database value appropriately for the frontend
  *
  * @param string $locale
  * @param array $tests
  */
 public function checkDataFormatting($locale, $tests)
 {
     i18n::set_locale($locale);
     $field = new NumericField('Number');
     $form = new Form(new Controller(), 'Form', new FieldList($field), new FieldList());
     $dataObject = new NumericFieldTest_Object();
     foreach ($tests as $input => $output) {
         // Given a dataobject as a context, the field should assume the field value is not localised
         $dataObject->Number = (string) $input;
         $form->loadDataFrom($dataObject, Form::MERGE_CLEAR_MISSING);
         // Test value
         $this->assertEquals($input, $field->dataValue(), "Expected {$input} loaded via dataobject to be left intact in locale {$locale}");
         // Test expected formatted value (Substitute nbsp for spaces)
         $this->assertEquals($this->clean($output), $field->Value(), "Expected {$input} to be formatted as {$output} in locale {$locale}");
     }
 }
 /**
  * Test empty values
  */
 public function testEmptyValidator()
 {
     i18n::set_locale('en_US');
     $field = new NumericField('Number');
     $validator = new RequiredFields('Number');
     // Treats '0' as given for the sake of required fields
     $field->setValue('0');
     $this->assertTrue($field->validate($validator));
     $this->assertEquals(0, $field->dataValue());
     // Treat literal 0
     $field->setValue(0);
     $this->assertTrue($field->validate($validator));
     $this->assertEquals(0, $field->dataValue());
     // Should fail the 'required but not given' test
     $field->setValue('');
     $this->assertFalse($field->validate($validator));
     $field->setValue(false);
     $this->assertFalse($field->validate($validator));
 }