public function testShouldReturnOldContext() { $mock = new MockLayout(); $resource = $this->getMockBuilder(MyResource::class)->enableProxyingToOriginalMethods()->setConstructorArgs([null])->getMock(); $resource->expects($this->once())->method('getErrorFor'); $form = Form::create('id', function ($f) { $f->textfield('foo'); }, ['layout' => $mock]); $this->assertCount(1, $mock->field); $this->assertInstanceOf('NitroXy\\PHPForms\\FormInput', $mock->field['foo']); $this->assertEquals('field error', $mock->field['foo']->getError($resource)); }
public function testGroup() { $mock = new MockLayout(); $form = Form::create('id', function ($f) { $f->textField('c', null); $f->group("group1", function ($f) { $f->textField('a', null); }); $f->group("group2", function ($f) { $f->textField('b', null); }); }, ['layout' => $mock]); $this->assertEquals(1, $mock->opened, "Layout preamble must be opened exactly once"); $this->assertEquals(1, $mock->closed, "Layout postamble must be closed exactly once"); $this->assertArrayHasKey('group1', $mock->group); $this->assertArrayHasKey('group2', $mock->group); $this->assertArrayHasKey('a', $mock->group['group1']); $this->assertArrayHasKey('b', $mock->group['group2']); }
public function testUploadField() { $mock = new MockLayout(); $form = Form::create('id', function ($f) { $f->uploadField('foo', 'Label'); $f->uploadField('bar', 'Label', ['remove' => true]); $f->uploadField('baz', 'Label', ['current' => 'Preview']); }, ['layout' => $mock]); $this->assertArrayHasKey('foo', $mock->field); $this->assertArrayNotHasKey('foo_remove', $mock->field); $this->assertArrayNotHasKey('foo_current', $mock->field); $this->assertArrayHasKey('bar', $mock->field); $this->assertArrayHasKey('bar_remove', $mock->field); $this->assertArrayNotHasKey('bar_current', $mock->field); $this->assertArrayHasKey('baz', $mock->field); $this->assertArrayNotHasKey('baz_remove', $mock->field); $this->assertArrayHasKey('baz_current', $mock->field); $this->assertEquals('file', $mock->field['foo']->attribute('type')); }
<?php /*~*/ use NitroXy\PHPForms\Form; Form::create("example_method", function ($f) { /* ... */ }, ['method' => 'patch']);
public function testSubmitName() { $mock = new MockLayout(); $form = Form::create('id', function ($f) { $f->submit('label', 'foo'); }, ['layout' => $mock]); $this->assertCount(1, $mock->field); $this->assertInstanceOf('NitroXy\\PHPForms\\FormButton', $mock->field['foo']); $this->assertEquals('<button type="submit" name="foo" id="id_foo">label</button>', $mock->field['foo']->getContent()); }
<?php /*~*/ use NitroXy\PHPForms\Form; use NitroXy\PHPForms\FormSelect; class MyClassA { } class MyClassB { } $a = new MyClassA(); $a->name = 'Name A'; $b = new MyClassB(); $b->name = 'Name B'; Form::create('example6', function ($f) use($a, $b) { $f->fieldsFor('A', $a, function ($f) { $f->textField('name', 'Name'); }); $f->fieldsFor('B', $b, function ($f) { $f->textField('name', 'Name'); }); }, ['layout' => 'bootstrap']);
<?php /*~*/ use NitroXy\PHPForms\Form; Form::create("example2-{$layout}", function ($f) { $f->textField('name', 'My field name'); }, ['layout' => $layout]);
use NitroXy\PHPForms\Form; use NitroXy\PHPForms\FormOptions; global $layout; Form::create('smoketest', function ($f) { $f->hiddenField('name', 'Hidden (this wont show at all)', ['value' => '8']); $f->textField('text_field', 'Text', ['hint' => 'Use the "type" option to use custom type such as number.']); $f->passwordField('password_field', 'Password', ['hint' => 'Passwords are not persistent if autocomplete is off', 'autocomplete' => 'off']); $f->customField('custom_field', 'email', 'Email', ['hint' => 'Another way to add custom input fields (same as using textField with type).', 'placeholder' => '*****@*****.**']); $f->textarea('textarea', 'Textarea'); $f->select('select', 'Select', FormOptions::fromArray(['A', 'B', 'C'])); $f->staticValue('static', 'Static text'); $f->link('link', 'https://example.net', 'Static link'); $f->hint('static', 'Lorem ipsum dot sit amet.'); $f->uploadField('upload', 'File upload', ['remove' => true]); $f->checkbox('checkbox', 'Checkbox'); $f->manual('manual', 'Manual', '<em>Custom html</em>', false); $f->submit('Submit button'); $f->button('Generic button', false, ['class' => 'btn-success']); /* groups allows you to put multiple fields inline (label is optional) */ $f->group('Inline group', function ($f) { $f->button('Button 1', false, ['class' => 'btn-default']); $f->button('Button 2', false, ['class' => 'btn-danger']); $f->button('Button 3'); }); /* fieldsets */ $f->fieldset('Fieldset', function ($f) { $f->textField('text1', 'Input 1'); $f->textField('text2', 'Input 2'); $f->textField('text3', 'Input 3'); }); }, ['layout' => $layout]);
<?php /*~*/ use NitroXy\PHPForms\Form; Form::create('example1', function ($f) { $f->textField('name', 'My field name'); });
public function testNoExtraAttr() { $mock = new MockLayout(); $form = Form::create('id', function ($f) { }, ['layout' => $mock]); $expected = ['id', 'class', 'method', 'action']; $this->assertEquals($expected, array_keys($mock->form_attr)); /* id is not passed via attribute but should also be present */ $this->assertEquals('id', $mock->form_id); }
/** * @expectedException PHPUnit_Framework_Error */ public function testInvalidLabel() { $mock = new MockLayout(); $form = Form::create('id', function ($f) { $f->select('foo', 5, FormOptions::fromArray([])); }, ['layout' => $mock]); }