Skip to content

Commit

Permalink
Add Search::class widget. (#249)
Browse files Browse the repository at this point in the history
  • Loading branch information
terabytesoftw committed Jan 16, 2024
1 parent 6dfb64c commit 82f1c63
Show file tree
Hide file tree
Showing 4 changed files with 567 additions and 0 deletions.
36 changes: 36 additions & 0 deletions src/Input/Search.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

declare(strict_types=1);

namespace PHPForge\Html\Input;

use PHPForge\Html\Attribute;

/**
* The input element with a type attribute whose value is "search" represents a one-line plain-text edit control for
* entering one or more search terms.
*
* @link https://www.w3.org/TR/2012/WD-html-markup-20120329/input.search.html#input.search
*/
final class Search extends Base\AbstractInput implements
Contract\LengthInterface,
Contract\PatternInterface,
Contract\PlaceholderInterface,
Contract\RequiredInterface
{
use Attribute\Custom\HasWidgetValidation;
use Attribute\Input\CanBeRequired;
use Attribute\Input\HasDirname;
use Attribute\Input\HasMaxLength;
use Attribute\Input\HasMinLength;
use Attribute\Input\HasPattern;
use Attribute\Input\HasPlaceholder;
use Attribute\Input\HasSize;

protected function run(): string
{
$this->validateString($this->getValue());

return $this->buildInputTag($this->attributes, 'search');
}
}
325 changes: 325 additions & 0 deletions tests/Input/Text copy/AttributeTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,325 @@
<?php

declare(strict_types=1);

namespace PHPForge\Html\Tests\Input\Search;

use PHPForge\Html\Input\Search;
use PHPForge\Support\Assert;
use PHPUnit\Framework\TestCase;

/**
* @psalm-suppress PropertyNotSetInConstructor
*/
final class AttributeTest extends TestCase
{
public function testAriaDescribedBy(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" aria-describedby="value">
HTML,
Search::widget()->ariaDescribedBy('value')->id('search-6582f2d099e8b')->render()
);
}

public function testAriaLabel(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" aria-label="value">
HTML,
Search::widget()->ariaLabel('value')->id('search-6582f2d099e8b')->render()
);
}

public function testAttributes(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input class="value" id="search-6582f2d099e8b" type="search">
HTML,
Search::widget()->attributes(['class' => 'value'])->id('search-6582f2d099e8b')->render()
);
}

public function testAutofocus(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" autofocus>
HTML,
Search::widget()->autofocus()->id('search-6582f2d099e8b')->render()
);
}

public function testClass(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input class="value" id="search-6582f2d099e8b" type="search">
HTML,
Search::widget()->class('value')->id('search-6582f2d099e8b')->render()
);
}

public function testDataAttributes(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" data-value="value">
HTML,
Search::widget()->dataAttributes(['value' => 'value'])->id('search-6582f2d099e8b')->render()
);
}

public function testDirname(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" dirname="value">
HTML,
Search::widget()->id('search-6582f2d099e8b')->dirname('value')->render()
);
}

public function testDisabled(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" disabled>
HTML,
Search::widget()->disabled()->id('search-6582f2d099e8b')->render()
);
}

public function testForm(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" form="value">
HTML,
Search::widget()->form('value')->id('search-6582f2d099e8b')->render()
);
}

public function testGenerateAriaDescribeBy(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" aria-describedby="search-6582f2d099e8b-help">
HTML,
Search::widget()->ariaDescribedBy()->id('search-6582f2d099e8b')->render()
);
}

public function testGenerateAriaDescribeByWithFalse(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search">
HTML,
Search::widget()->ariaDescribedBy(false)->id('search-6582f2d099e8b')->render()
);
}

public function testGenerateId(): void
{
$this->assertStringContainsString('id="search-', Search::widget()->render());
}

public function testGetValue(): void
{
$this->assertSame('value', Search::widget()->value('value')->getValue());
}

public function testHidden(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" hidden>
HTML,
Search::widget()->hidden()->id('search-6582f2d099e8b')->render()
);
}

public function testId(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="value" type="search">
HTML,
Search::widget()->id('value')->render()
);
}

public function testLang(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" lang="value">
HTML,
Search::widget()->id('search-6582f2d099e8b')->lang('value')->render()
);
}

public function testMaxLength(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" maxlength="1">
HTML,
Search::widget()->id('search-6582f2d099e8b')->maxlength(1)->render()
);
}

public function testMinLength(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" minlength="1">
HTML,
Search::widget()->id('search-6582f2d099e8b')->minlength(1)->render()
);
}

public function testName(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" name="value" type="search">
HTML,
Search::widget()->id('search-6582f2d099e8b')->name('value')->render()
);
}

public function testPattern(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" pattern="value">
HTML,
Search::widget()->id('search-6582f2d099e8b')->pattern('value')->render()
);
}

public function testPlaceholder(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" placeholder="value">
HTML,
Search::widget()->id('search-6582f2d099e8b')->placeholder('value')->render()
);
}

public function testReadonly(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" readonly>
HTML,
Search::widget()->id('search-6582f2d099e8b')->readonly()->render()
);
}

public function testRender(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search">
HTML,
Search::widget()->id('search-6582f2d099e8b')->render()
);
}

public function testRequired(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" required>
HTML,
Search::widget()->id('search-6582f2d099e8b')->required()->render()
);
}

public function testSize(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" size="1">
HTML,
Search::widget()->id('search-6582f2d099e8b')->size(1)->render()
);
}

public function testStyle(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" style="value">
HTML,
Search::widget()->id('search-6582f2d099e8b')->style('value')->render()
);
}

public function testTabIndex(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" tabindex="1">
HTML,
Search::widget()->id('search-6582f2d099e8b')->tabIndex(1)->render()
);
}

public function testTitle(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" title="value">
HTML,
Search::widget()->id('search-6582f2d099e8b')->title('value')->render()
);
}

public function testValue(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search" value="value">
HTML,
Search::widget()->id('search-6582f2d099e8b')->value('value')->render()
);
}

public function testValueWithEmpty(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search">
HTML,
Search::widget()->id('search-6582f2d099e8b')->value(null)->render()
);
}

public function testWithoutId(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input type="search">
HTML,
Search::widget()->id(null)->render()
);
}

public function testWithoutName(): void
{
Assert::equalsWithoutLE(
<<<HTML
<input id="search-6582f2d099e8b" type="search">
HTML,
Search::widget()->id('search-6582f2d099e8b')->name(null)->render()
);
}
}

0 comments on commit 82f1c63

Please sign in to comment.