/** * Tests the Joomla\Form\Field::setup method * * @covers Joomla\Form\Field::setup * @covers Joomla\Form\Field::__get * * @return void */ public function testSetup() { $form = new JFormInspector('form1'); $this->assertThat($form->load(JFormDataHelper::$loadFieldDocument), $this->isTrue(), 'Line:' . __LINE__ . ' XML string should load successfully.'); $field = new JFormFieldInspector($form); // Standard usage. $xml = $form->getXML(); $title = array_pop($xml->xpath('fields/field[@name="title"]')); $this->assertThat($field->setup($title, 'The title'), $this->isTrue(), 'Line:' . __LINE__ . ' The setup method should return true if successful.'); $this->assertThat($field->name, $this->equalTo('title'), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertThat($field->value, $this->equalTo('The title'), 'Line:' . __LINE__ . ' The value should be set from the setup method argument.'); $this->assertThat($field->id, $this->equalTo('title_id'), 'Line:' . __LINE__ . ' The property should be set from the XML (non-alpha transposed to underscore).'); $this->assertThat((string) $title['class'], $this->equalTo('inputbox required'), 'Line:' . __LINE__ . ' The property should be set from the XML.'); $this->assertThat($field->validate, $this->equalTo('none'), 'Line:' . __LINE__ . ' The property should be set from the XML.'); $this->assertThat($field->multiple, $this->isFalse(), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertThat($field->required, $this->isTrue(), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertThat($field->input, $this->equalTo(''), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $equals = '<label id="title_id-lbl" for="title_id" class="hasTip required" title="Title::The title.">' . 'Title<span class="star"> *</span></label>'; $this->assertThat($field->label, $this->equalTo($equals), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertThat($field->title, $this->equalTo('Title'), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertThat($field->unexisting, $this->equalTo(null), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); // Test multiple attribute and form group name. $colours = array_pop($xml->xpath('fields/fields[@name="params"]/field[@name="colours"]')); $this->assertThat($field->setup($colours, 'green', 'params'), $this->isTrue(), 'Line:' . __LINE__ . ' The setup method should return true if successful.'); $this->assertThat($field->id, $this->equalTo('params_colours'), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertThat($field->name, $this->equalTo('params[colours][]'), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertThat($field->multiple, $this->isTrue(), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertEquals($field->group, 'params', 'Line:' . __LINE__ . ' The property should be set to the the group name.'); // Test hidden field type. $id = array_pop($xml->xpath('fields/field[@name="id"]')); $this->assertThat($field->setup($id, 42), $this->isTrue(), 'Line:' . __LINE__ . ' The setup method should return true if successful.'); $this->assertThat($field->hidden, $this->isTrue(), 'Line:' . __LINE__ . ' The hidden property should be set from the field type.'); // Test hidden attribute. $createdDate = array_pop($xml->xpath('fields/field[@name="created_date"]')); $this->assertThat($field->setup($createdDate, '0000-00-00 00:00:00'), $this->isTrue(), 'Line:' . __LINE__ . ' The setup method should return true if successful.'); $this->assertThat($field->hidden, $this->isTrue(), 'Line:' . __LINE__ . ' The hidden property should be set from the hidden attribute.'); // Test automatic generated name. $spacer = array_pop($xml->xpath('fields/field[@type="spacer"]')); $this->assertThat($field->setup($spacer, ''), $this->isTrue(), 'Line:' . __LINE__ . ' The setup method should return true if successful.'); $this->assertThat($field->name, $this->equalTo('__field1'), 'Line:' . __LINE__ . ' The spacer name should be set using an automatic generated name.'); // Test nested groups and forced multiple. $comment = array_pop($xml->xpath('fields/fields[@name="params"]/fields[@name="subparams"]/field[@name="comment"]')); $field->forceMultiple = true; $this->assertThat($field->setup($comment, 'My comment', 'params.subparams'), $this->isTrue(), 'Line:' . __LINE__ . ' The setup method should return true if successful.'); $this->assertThat($field->id, $this->equalTo('params_subparams_comment'), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertThat($field->name, $this->equalTo('params[subparams][comment][]'), 'Line:' . __LINE__ . ' The property should be computed from the XML.'); $this->assertEquals($field->group, 'params.subparams', 'Line:' . __LINE__ . ' The property should be set to the the group name.'); $this->assertEquals($field->element['class'], 'required', 'Line:' . __LINE__ . ' The property should be computed from the XML.'); }
/** * Test for Form::validateField method for missing rule exception. * * return void * * @covers Joomla\Form\Form::validateField * @since 1.0 * * @expectedException \UnexpectedValueException * * @return void */ public function testValidateField_missingRule() { $form = new JFormInspector('form1'); $form->load(JFormDataHelper::$validateFieldDocument); $xml = $form->getXML(); $field = array_pop($xml->xpath('fields/field[@name="missingrule"]')); $result = $form->validateField($field, null, 'value'); }