$a->setValidatorSchema(new sfValidatorSchema(array('first_name' => new sfValidatorString(array('min_length' => 2))))); $a->bind(array('first_name' => 'F')); $a1 = clone $a; $t->ok($a1->getValidatorSchema() !== $a->getValidatorSchema(), '__clone() clones the validator schema'); $t->ok($a1->getValidatorSchema() == $a->getValidatorSchema(), '__clone() clones the validator schema'); $t->ok($a1->getWidgetSchema() !== $a->getWidgetSchema(), '__clone() clones the widget schema'); $t->ok($a1->getWidgetSchema() == $a->getWidgetSchema(), '__clone() clones the widget schema'); $t->ok($a1->getErrorSchema() !== $a->getErrorSchema(), '__clone() clones the error schema'); $t->ok($a1->getErrorSchema()->getMessage() == $a->getErrorSchema()->getMessage(), '__clone() clones the error schema'); // mergeForm() $t->diag('mergeForm()'); $f1 = new TestForm1(); $f2 = new TestForm2(); $f1->mergeForm($f2); $widgetSchema = $f1->getWidgetSchema(); $validatorSchema = $f1->getValidatorSchema(); $t->is(count($widgetSchema->getFields()), 4, 'mergeForm() merges a widget form schema'); $t->is(count($validatorSchema->getFields()), 4, 'mergeForm() merges a validator schema'); $t->is(array_keys($widgetSchema->getFields()), array('a', 'b', 'c', 'd'), 'mergeForms() merges the correct widgets'); $t->is(array_keys($validatorSchema->getFields()), array('a', 'b', 'c', 'd'), 'mergeForms() merges the correct validators'); $t->is($widgetSchema->getLabels(), array('a' => '1_a', 'b' => '1_b', 'c' => '2_c', 'd' => '2_d'), 'mergeForm() merges labels correctly'); $t->is($widgetSchema->getHelps(), array('a' => '1_a', 'b' => '1_b', 'c' => '2_c', 'd' => '2_d'), 'mergeForm() merges helps correctly'); $t->isa_ok($widgetSchema['c'], 'sfWidgetFormTextarea', 'mergeForm() overrides original form widget'); $t->isa_ok($validatorSchema['c'], 'sfValidatorPass', 'mergeForm() overrides original form validator'); $t->isa_ok($validatorSchema->getPreValidator(), 'sfValidatorPass', 'mergeForm() merges pre validator'); $t->isa_ok($validatorSchema->getPostValidator(), 'sfValidatorPass', 'mergeForm() merges post validator'); try { $f1->bind(array('a' => 'foo', 'b' => 'bar', 'd' => 'far_too_long_value')); $f1->mergeForm($f2); $t->fail('mergeForm() disallows merging already bound forms'); } catch (LogicException $e) {