public function testHasChanged() { $field = new \Ongoo\Component\Form\Field('mandatoryField_defaultFoo_1'); $field->setMandatory(true)->setDefaultValue('foo')->setValue("defined value"); $this->if($validated = $field->validate(null))->then->boolean($validated)->isTrue()->boolean($field->hasSuccess())->isTrue()->boolean($field->hasError())->isFalse()->boolean($field->hasWarning())->isFalse()->boolean($field->isValueSet())->isTrue()->boolean($field->hasChanged())->isTrue()->variable($field->getValue())->isNull()->if($validated = $field->validate(new \Ongoo\Component\Form\Values\NotSetValue()))->then->boolean($validated)->isTrue()->boolean($field->hasSuccess())->isTrue()->boolean($field->hasError())->isFalse()->boolean($field->hasWarning())->isFalse()->boolean($field->isValueSet())->isTrue()->boolean($field->hasChanged())->isTrue()->string($field->getValue())->isEqualTo('foo'); $field = new \Ongoo\Component\Form\Field('mandatoryField_defaultFoo_2'); $field->setMandatory(true)->setDefaultAsNotSetValue()->setValue("defined value"); $field->setSanitizers([function ($value) { // always return NotSetValue() return new \Ongoo\Component\Form\Values\NotSetValue($value); }]); $this->if($validated = $field->validate(null))->then->boolean($validated)->isFalse()->boolean($field->hasChanged())->isTrue()->and($errors = $field->getErrors())->array($errors)->hasSize(1)->object($msg = $errors[0])->isInstanceOf('\\Ongoo\\Component\\Form\\Exceptions\\ErrorException')->string($msg->getMessage())->isEqualTo('{name} is mandatory')->string($msg->getField()->getName())->isEqualTo('mandatoryField_defaultFoo_2')->array($msg->getContext())->hasKey('{value}')->array($msg->getContext())->hasKey('{name}')->array($msg->getContext())->contains('mandatoryField_defaultFoo_2')->object($msg->getValue())->isInstanceOf('\\Ongoo\\Component\\Form\\Values\\NotSetValue')->if($validated = $field->validate(new \Ongoo\Component\Form\Values\NotSetValue()))->then->boolean($validated)->isFalse()->boolean($field->hasChanged())->isTrue()->and($errors = $field->getErrors())->array($errors)->hasSize(1)->object($msg = $errors[0])->isInstanceOf('\\Ongoo\\Component\\Form\\Exceptions\\ErrorException')->string($msg->getMessage())->isEqualTo('{name} is mandatory')->string($msg->getField()->getName())->isEqualTo('mandatoryField_defaultFoo_2')->array($msg->getContext())->hasKey('{value}')->array($msg->getContext())->hasKey('{name}')->array($msg->getContext())->contains('mandatoryField_defaultFoo_2')->object($msg->getValue())->isInstanceOf('\\Ongoo\\Component\\Form\\Values\\NotSetValue'); }