public function __construct(Prototyped $subject)
 {
     $this->subject = $subject;
     $form = $this->subject->proto()->makeForm()->add(Primitive::choice('action')->setList($this->commandMap)->setDefault($this->defaultAction));
     if ($this->idFieldName) {
         $form->add(Primitive::alias($this->idFieldName, $form->get('id')));
     }
     $this->map = MappedForm::create($form)->addSource('id', RequestType::get())->addSource('action', RequestType::get())->setDefaultType(RequestType::post());
     if ($this->idFieldName) {
         $this->map->addSource($this->idFieldName, RequestType::get());
     }
 }
 public function testCustomError()
 {
     $realPrimitive = new PrimitiveCustomError('customError');
     $realPrimitive->setMax(1);
     $form = Form::create()->add($realPrimitive)->add(Primitive::alias('alias', $realPrimitive))->import(array('alias' => 'Toooo long'));
     $errors = $form->getErrors();
     $this->assertTrue(isset($errors['alias']));
     $this->assertEquals(PrimitiveCustomError::CUSTOM_MARK, $errors['alias']);
     $form->clean()->dropAllErrors()->import(array('customError' => 'Toooo long'));
     $errors = $form->getErrors();
     $this->assertTrue(isset($errors['customError']));
     $this->assertEquals(PrimitiveCustomError::CUSTOM_MARK, $errors['customError']);
 }