From 1d6d333fbe0893e265d1331f82a30fb7c40a3c70 Mon Sep 17 00:00:00 2001 From: Arthur LORENT Date: Sat, 14 Nov 2020 15:22:59 +0100 Subject: [PATCH] Adding PHP 8 support (#4) * Added PHP 8 support * Removed Scrutinizer analysis * Updated PHPCS checker and fixer norm to PSR-12 * Helpers naming breaking changes :point_right: [See the upgrade guide](/docs/upgrade-guides/from-v1-to-v2.md) --- .github/workflows/main.yml | 14 +-- .scrutinizer.yml | 28 ------ CHANGELOG.md | 33 ++++--- README.md | 105 +++++++++++++---------- composer.json | 6 +- docs/laravel-html-helper.png | Bin 0 -> 121304 bytes docs/upgrade-guides/from-v1-to-v2.md | 18 ++++ phpcs.xml | 7 +- phpunit.xml.dist | 23 ++--- src/HtmlAttributes.php | 93 +++++++------------- src/HtmlClassTag.php | 53 ------------ src/HtmlClasses.php | 44 ++++++++++ src/HtmlHelper.php | 28 ------ src/HtmlHelperServiceProvider.php | 16 ---- src/helpers.php | 20 ++--- tests/HtmlHelperTestCase.php | 13 +-- tests/Unit/ClassTagTest.php | 67 --------------- tests/Unit/HtmlAttributesTest.php | 52 ++++++----- tests/Unit/HtmlClassesTest.php | 77 +++++++++++++++++ tests/views/classTag.blade.php | 1 - tests/views/html-attributes.blade.php | 1 + tests/views/html-classes.blade.php | 1 + tests/views/htmlAttributes.blade.php | 1 - tests/views/no-html-attributes.blade.php | 1 + tests/views/noHtmlAttributes.blade.php | 1 - 25 files changed, 322 insertions(+), 381 deletions(-) delete mode 100644 .scrutinizer.yml create mode 100644 docs/laravel-html-helper.png create mode 100644 docs/upgrade-guides/from-v1-to-v2.md delete mode 100644 src/HtmlClassTag.php create mode 100644 src/HtmlClasses.php delete mode 100644 src/HtmlHelper.php delete mode 100644 src/HtmlHelperServiceProvider.php delete mode 100644 tests/Unit/ClassTagTest.php create mode 100644 tests/Unit/HtmlClassesTest.php delete mode 100644 tests/views/classTag.blade.php create mode 100644 tests/views/html-attributes.blade.php create mode 100644 tests/views/html-classes.blade.php delete mode 100644 tests/views/htmlAttributes.blade.php create mode 100644 tests/views/no-html-attributes.blade.php delete mode 100644 tests/views/noHtmlAttributes.blade.php diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ce79f9e..01330a0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: true matrix: - php: ['7.4'] + php: ['7.4', '8.0'] laravel: ['7.*', '8.*'] include: - laravel: '8.*' @@ -29,7 +29,7 @@ jobs: uses: actions/checkout@v2 - name: Cache dependencies - uses: actions/cache@v1 + uses: actions/cache@v2 with: path: ~/.composer/cache/files key: dependencies-laravel-${{ matrix.laravel }}-php-${{ matrix.php }}-composer-${{ hashFiles('composer.json') }} @@ -38,21 +38,21 @@ jobs: uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} - extensions: common, curl, json, mbstring, zip, sqlite, pdo_sqlite - coverage: xdebug + extensions: curl, json, mbstring, zip, sqlite, pdo_sqlite + coverage: pcov - name: Install dependencies run: | composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update - composer update --prefer-dist --no-interaction --no-suggest + composer update --prefer-dist --no-interaction - # lower php and laravel versions + # Lower php and laravel versions. - name: PHPUnit if: matrix.php != '7.4' || matrix.laravel != '8.*' run: vendor/bin/phpunit - # last php and laravel versions + # Last php and laravel versions. - name: Code analysis if: matrix.php == '7.4' && matrix.laravel == '8.*' diff --git a/.scrutinizer.yml b/.scrutinizer.yml deleted file mode 100644 index 8a97050..0000000 --- a/.scrutinizer.yml +++ /dev/null @@ -1,28 +0,0 @@ -filter: - excluded_paths: [tests/*] -checks: - php: true -tools: - php_mess_detector: true - php_pdepend: true - php_code_coverage: false - external_code_coverage: false - php_analyzer: true - php_code_sniffer: - config: - standard: PSR4 - filter: - paths: ['src'] - sensiolabs_security_checker: true - php_loc: - enabled: true - excluded_dirs: [vendor, tests] - php_cpd: - enabled: true - excluded_dirs: [vendor, tests] -build: - nodes: - analysis: - tests: - override: - - php-scrutinizer-run diff --git a/CHANGELOG.md b/CHANGELOG.md index 03386e4..f143966 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,21 @@ # Changelog -## [1.4.0](https://github.com/Okipa/laravel-html-helper/compare/1.4.0...1.3.2) +## [2.0.0](https://github.com/Okipa/laravel-html-helper/compare/1.4.0...2.0.0) + +2020-11-14 + +* Added PHP 8 support +* Removed Scrutinizer analysis +* Updated PHPCS checker and fixer norm to PSR-12 +* Helpers naming breaking changes + +:point_right: [See the upgrade guide](/docs/upgrade-guides/from-v1-to-v2.md) + +## [1.4.0](https://github.com/Okipa/laravel-html-helper/compare/1.3.1...1.4.0) 2020-08-11 -* Added support for Laravel 8. +* Added support for Laravel 8 * Dropped support for Laravel 5.8 and 6 * Dropped support for PHP 7.2 and 7.3 @@ -12,40 +23,40 @@ 2020-03-03 -* Added testing files to .gitattributes export-ignore. +* Added testing files to .gitattributes export-ignore ## [1.3.0](https://github.com/Okipa/laravel-html-helper/compare/1.2.0...1.3.0) 2020-02-18 -* Dropped support for Laravel 5.5, 5.6 and 5.7. -* Added support for Laravel 7. +* Dropped support for Laravel 5.5, 5.6 and 5.7 +* Added support for Laravel 7 ## [1.2.0](https://github.com/Okipa/laravel-html-helper/compare/1.1.1...1.2.0) 2019-09-04 -* Added support for Laravel 6. -* Dropped support for php 7.1. +* Added support for Laravel 6 +* Dropped support for php 7.1 ## [1.1.1](https://github.com/Okipa/laravel-html-helper/compare/1.1.0...1.1.1) 2019-08-02 -* Fixed `htmlAttributes()` feature which was adding a space before the returned value, even if it was supposed to be an empty space. +* Fixed `html_attributes()` feature which was adding a space before the returned value, even if it was supposed to be an empty space ## [1.1.0](https://github.com/Okipa/laravel-html-helper/compare/1.0.5...1.1.0) 2019-08-02 -* `classTag()` and `htmlAttributes()` helpers are now callable directly after a html tag : they do add a space if the helper returns something and no space if nothing is returned. +* `html_classes()` and `html_attributes()` helpers are now callable directly after a html tag : they do add a space if the helper returns something and no space if nothing is returned ```html -) }}> +) }}> ``` ## [1.0.5](https://github.com/Okipa/laravel-html-helper/compare/1.1.4...1.0.5) 2019-02-07 -* Updated treatment to return an empty string when the classes list to return is empty. +* Updated treatment to return an empty string when the classes list to return is empty diff --git a/README.md b/README.md index ef737a2..07ac1fe 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,43 @@ -# Laravel Html Helper - -[![Source Code](https://img.shields.io/badge/source-okipa/laravel--html--helper-blue.svg)](https://github.com/Okipa/laravel-html-helper) -[![Latest Version](https://img.shields.io/github/release/okipa/laravel-html-helper.svg?style=flat-square)](https://github.com/Okipa/laravel-html-helper/releases) -[![Total Downloads](https://img.shields.io/packagist/dt/okipa/laravel-html-helper.svg?style=flat-square)](https://packagist.org/packages/okipa/laravel-html-helper) -[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) -[![Build status](https://github.com/Okipa/laravel-html-helper/workflows/CI/badge.svg)](https://github.com/Okipa/laravel-html-helper/actions) -[![Coverage Status](https://coveralls.io/repos/github/Okipa/laravel-html-helper/badge.svg?branch=master)](https://coveralls.io/github/Okipa/laravel-html-helper?branch=master) -[![Quality Score](https://img.shields.io/scrutinizer/g/Okipa/laravel-html-helper.svg?style=flat-square)](https://scrutinizer-ci.com/g/Okipa/laravel-html-helper/?branch=master) - -Useful helpers to dynamically generate clean HTML with Laravel. +![Laravel HTML Helper](/docs/laravel-html-helper.png) +

+ + Latest Stable Version + + + Total Downloads + + + Build Status + + + Coverage Status + + + License: MIT + +

+ +Easily handle conditional HTML generation with the following helpers. ## Compatibility | Laravel | PHP | Package | |---|---|---| -| ^7.* | ^7.4 | ^1.4 | +| ^7.* | ^7.4 | ^2.0 | | ^5.8 | ^7.2 | ^1.3 | | ^5.5 | ^7.2 | ^1.2 | | ^5.5 | ^7.1 | ^1.0 | +## Upgrade guide + +* [From v1 to V2](/docs/upgrade-guides/from-v1-to-v2.md) + ## Table of Contents - [Installation](#installation) - [API](#api) - - [classTag](#classtag) - - [htmlAttributes](#htmlattributes) + - [html_classes](#html_classes) + - [html_attributes](#html_attributes) - [Testing](#testing) - [Changelog](#changelog) - [Contributing](#contributing) @@ -33,63 +46,63 @@ Useful helpers to dynamically generate clean HTML with Laravel. ## Installation -- Install the package with composer : +- Install the package with composer: ```bash -composer require "okipa/laravel-html-helper:^1.3" +composer require okipa/laravel-html-helper ``` ## API -### `classTag(...$classList) : HtmlString` +### html_classes -In you view : +Calling this helper generates an HTML `class` tag encapsulating the given dynamic classes. + +It accepts combination of strings, integers, arrays or null arguments. ```blade - 'class6']], - 7 +@php + $id = 17; + $fullScreen = false; + $darkMode = true; +@endphp + ``` -Will produce : - ```html -
+
``` -In your code, you can do exactly the same using the `(new Okipa\LaravelHtmlHelper\HtmlClassTag)->render()` method. +You can call `app(Okipa\LaravelHtmlHelper\HtmlClasses)->toHtml($classes)` if you want to avoid helper use. -### `htmlAttributes(...$attributesList) : HtmlString` +### html_attributes -In you view : +Calling this helper generates dynamic HTML attributes, taking care about the given key-only, value-only or key-value combinations. + +It accepts combination of strings, arrays or null arguments. ```blade - 'attribute2Value'], - ['attribute3Key' => null], - ['attribute4Value', 'attribute5Value'], - '', - null, - ['' => 'attribute6Value'], - ['attributes7Value', ['attribute8Value', 'attribute9Key' => 'attribute9Value']], - ['attribute10Key' => ['attribute11Value']], - ['attribute12Key' => ''] +@php + $dragAndDrop = true; + $disabled = false; +@endphp + __('Are you sure you want to delete this line?')], + $dragAndDrop ? 'data-drag-drop' : null, + $disabled ? ['disabled', 'data-forbid-click'] : null, + 'required' ) }}> ``` -Will produce : - ```html -
+
``` -In your code, you can do exactly the same using the `(new Okipa\LaravelHtmlHelper\HtmlAttributes)->render()` method. +You can call `app(Okipa\LaravelHtmlHelper\HtmlAttributes)->toHtml($attributes)` if you want to avoid helper use. ## Testing diff --git a/composer.json b/composer.json index 464e805..0716dca 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ } ], "require": { - "php": "^7.4", + "php": "^7.4||^8.0", "illuminate/support": "^7.0||^8.0" }, "require-dev": { @@ -50,8 +50,8 @@ "vendor/bin/phpcbf", "vendor/bin/phpcs", "vendor/bin/phpmd src text phpmd.xml", - "vendor/bin/phpstan analyse", - "vendor/bin/phpunit" + "vendor/bin/phpstan analyse --memory-limit=-1 --error-format=table", + "vendor/bin/phpunit -d memory_limit=-1 --testdox --coverage-text" ] }, "config": { diff --git a/docs/laravel-html-helper.png b/docs/laravel-html-helper.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac66c281613ad4cd630836ad4febf1ec72e20d6 GIT binary patch literal 121304 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 literal 0 HcmV?d00001 diff --git a/docs/upgrade-guides/from-v1-to-v2.md b/docs/upgrade-guides/from-v1-to-v2.md new file mode 100644 index 0000000..4986b67 --- /dev/null +++ b/docs/upgrade-guides/from-v1-to-v2.md @@ -0,0 +1,18 @@ +# Upgrade from v1 to V2 + +Follow the steps below to upgrade the package. + +## Naming changes + +Helpers have been renamed. Make sure you replaced all following occurrences when upgrading: +* Search and replace all occurrences of `classTag(` by `html_classes(` +* Search and replace all occurrences of `HtmlClassTag(` by `HtmlClasses(` +* Search and replace all occurrences of `htmlAttributes(` by `html_attributes(` + +## See all changes + +See all change with the [comparison tool](https://github.com/Okipa/laravel-html-helper/compare/1.4.0...2.0.0). + +## Undocumented changes + +If you see any forgotten and undocumented change, please submit a PR to add them to this upgrade guide. diff --git a/phpcs.xml b/phpcs.xml index 6cbe9a9..44df66c 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -1,10 +1,9 @@ - - PSR-2 validation + + PSR-12 validation ./src - ./tests/* - + diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 7b4ca04..af1d6b0 100755 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,5 +1,6 @@ - + stopOnFailure="false" + xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"> + + + src/ + + + + + tests - - - src/ - - - - - + diff --git a/src/HtmlAttributes.php b/src/HtmlAttributes.php index 9755938..cb372f5 100644 --- a/src/HtmlAttributes.php +++ b/src/HtmlAttributes.php @@ -2,110 +2,83 @@ namespace Okipa\LaravelHtmlHelper; -use Exception; use Illuminate\Support\HtmlString; +use RuntimeException; -class HtmlAttributes extends HtmlHelper +class HtmlAttributes { /** - * Render the generated html. - * - * @param mixed ...$attributesList + * @param string|array|null ...$attributes * * @return \Illuminate\Support\HtmlString - * @throws \Exception */ - public function render(...$attributesList): HtmlString + public function toHtml(...$attributes): HtmlString { - return $this->generateHtmlString(...$attributesList); + return $this->generateHtmlString(...$attributes); } /** - * Render html attributes from the given attributes list. - * - * @param mixed ...$attributesList + * @param string|array|null ...$attributes * * @return \Illuminate\Support\HtmlString - * @throws \Exception */ - protected function generateHtmlString(...$attributesList): HtmlString + protected function generateHtmlString(...$attributes): HtmlString { - $attributesArray = $this->buildAttributesArray(...$attributesList); - $html = $this->buildHtmlString($attributesArray); + $builtAttributes = $this->buildAttributes(...$attributes); + $html = $this->buildHtmlString($builtAttributes); return new HtmlString($html); } - /** - * Build the attributes array - * - * @return array - * @throws \Exception - */ - protected function buildAttributesArray(): array + protected function buildAttributes(): array { - $attributesArray = []; + $attributes = []; foreach (func_get_args() as $arg) { switch (gettype($arg)) { case 'string': - $attributesArray[] = $arg; + $attributes[] = $arg; break; case 'array': - $this->analyseArrayAttributes($arg, $attributesArray); + $this->buildAttributeFromArray($arg, $attributes); break; case 'NULL': break; default: - throw new Exception('The given attributes arguments should be strings or arrays : ' + throw new RuntimeException('The given attributes arguments should be strings or arrays: ' . gettype($arg) . ' type given.'); } } - return array_map('trim', array_filter($attributesArray)); + return array_map('trim', array_filter($attributes)); } - /** - * @param array $array - * @param array $attributes - */ - private function analyseArrayAttributes(array $array, array &$attributes): void + protected function buildAttributeFromArray(array $attribute, array &$attributes): void { - foreach ($array as $key => $value) { + foreach ($attribute as $key => $value) { if (is_array($value)) { - if (! empty($key) && is_string($key)) { + if (is_string($key)) { $attributes[] = $key; } - $this->analyseArrayAttributes($value, $attributes); - } else { - if (! empty($key) && is_string($key)) { - if ($value) { - $attributes[$key] = $value; - } else { - $attributes[] = $key; - } - } else { - if ($value) { - $attributes[] = $value; - } else { - $attributes[] = $key; - } - } + $this->buildAttributeFromArray($value, $attributes); + continue; + } + if (is_string($key) && $value) { + $attributes[$key] = $value; + continue; } + if ($value) { + $attributes[] = $value; + continue; + } + $attributes[] = $key; } } - /** - * Build the html string from the attributes array. - * - * @param array $attributesArray - * - * @return string - */ - protected function buildHtmlString(array $attributesArray): string + protected function buildHtmlString(array $attributes): string { $html = ''; - foreach ($attributesArray as $key => $attribute) { - $spacer = strlen($html) ? ' ' : ''; + foreach ($attributes as $key => $attribute) { + $spacer = $html ? ' ' : ''; if ($key && is_string($key)) { $html .= $spacer . $key . ($attribute ? '="' . $attribute . '"' : ''); } else { @@ -113,6 +86,6 @@ protected function buildHtmlString(array $attributesArray): string } } - return strlen($html) ? ' ' . $html : ''; + return ($html ? ' ' : '') . $html; } } diff --git a/src/HtmlClassTag.php b/src/HtmlClassTag.php deleted file mode 100644 index e045390..0000000 --- a/src/HtmlClassTag.php +++ /dev/null @@ -1,53 +0,0 @@ -generateHtmlClassTag(...$classList); - } - - /** - * Render a html class tag filled with the given class list. - * - * @return \Illuminate\Support\HtmlString - * @throws \Exception - */ - protected function generateHtmlClassTag(): HtmlString - { - $classArray = []; - foreach (func_get_args() as $arg) { - switch (gettype($arg)) { - case 'string': - case 'integer': - $classArray[] = $arg; - break; - case 'array': - $classArray = ! empty($arg) ? array_merge($classArray, $arg) : $classArray; - break; - case 'NULL': - break; - default: - throw new Exception('The given class arguments should be strings, integers or arrays : ' - . gettype($arg) . ' type given.'); - } - } - $classArray = array_map('trim', array_filter(Arr::flatten($classArray))); - - return new HtmlString(! empty($classArray) ? ' class="' . implode(' ', $classArray) . '"' : ''); - } -} diff --git a/src/HtmlClasses.php b/src/HtmlClasses.php new file mode 100644 index 0000000..6dbe6ed --- /dev/null +++ b/src/HtmlClasses.php @@ -0,0 +1,44 @@ +generateHtmlClasses(...$classes); + } + + protected function generateHtmlClasses(): HtmlString + { + $classes = []; + foreach (func_get_args() as $arg) { + switch (gettype($arg)) { + case 'string': + case 'integer': + $classes[] = $arg; + break; + case 'array': + $classes = $arg ? array_merge($classes, $arg) : $classes; + break; + case 'NULL': + break; + default: + throw new RuntimeException('Classes should be strings, integers, arrays or null: ' + . gettype($arg) . ' given.'); + } + } + $classes = array_map('trim', array_filter(Arr::flatten($classes))); + + return new HtmlString($classes ? ' class="' . implode(' ', $classes) . '"' : ''); + } +} diff --git a/src/HtmlHelper.php b/src/HtmlHelper.php deleted file mode 100644 index 023f3d2..0000000 --- a/src/HtmlHelper.php +++ /dev/null @@ -1,28 +0,0 @@ -render(); - } - - /** - * Render the generated html. - * - * @param mixed ...$args - * - * @return \Illuminate\Support\HtmlString - */ - abstract public function render(...$args): HtmlString; -} diff --git a/src/HtmlHelperServiceProvider.php b/src/HtmlHelperServiceProvider.php deleted file mode 100644 index 6aba20d..0000000 --- a/src/HtmlHelperServiceProvider.php +++ /dev/null @@ -1,16 +0,0 @@ -app->singleton('Okipa\LaravelHtmlHelper', function (Application $app) { - return $app->make(HtmlHelper::class); - }); - } -} diff --git a/src/helpers.php b/src/helpers.php index 350768d..56303ed 100644 --- a/src/helpers.php +++ b/src/helpers.php @@ -2,30 +2,28 @@ use Illuminate\Support\HtmlString; use Okipa\LaravelHtmlHelper\HtmlAttributes; -use Okipa\LaravelHtmlHelper\HtmlClassTag; +use Okipa\LaravelHtmlHelper\HtmlClasses; -if (! function_exists('classTag')) { +if (! function_exists('html_classes')) { /** - * @param mixed ...$classList + * @param string|int|array|null ...$classList * * @return \Illuminate\Support\HtmlString - * @throws \Exception */ - function classTag(...$classList): HtmlString + function html_classes(...$classList): HtmlString { - return (new HtmlClassTag)->render(...$classList); + return app(HtmlClasses::class)->toHtml(...$classList); } } -if (! function_exists('htmlAttributes')) { +if (! function_exists('html_attributes')) { /** - * @param mixed ...$attributesList + * @param string|array|null ...$attributesList * * @return \Illuminate\Support\HtmlString - * @throws \Exception */ - function htmlAttributes(...$attributesList): HtmlString + function html_attributes(...$attributesList): HtmlString { - return (new HtmlAttributes)->render(...$attributesList); + return app(HtmlAttributes::class)->toHtml(...$attributesList); } } diff --git a/tests/HtmlHelperTestCase.php b/tests/HtmlHelperTestCase.php index 7d4deda..a9974f8 100644 --- a/tests/HtmlHelperTestCase.php +++ b/tests/HtmlHelperTestCase.php @@ -2,20 +2,9 @@ namespace Okipa\LaravelHtmlHelper\Test; -use Okipa\LaravelHtmlHelper\HtmlHelperServiceProvider; use Orchestra\Testbench\TestCase; abstract class HtmlHelperTestCase extends TestCase { - /** - * Get package providers. - * - * @param \Illuminate\Foundation\Application $app - * - * @return array - */ - protected function getPackageProviders($app) - { - return [HtmlHelperServiceProvider::class]; - } + // } diff --git a/tests/Unit/ClassTagTest.php b/tests/Unit/ClassTagTest.php deleted file mode 100644 index 989d125..0000000 --- a/tests/Unit/ClassTagTest.php +++ /dev/null @@ -1,67 +0,0 @@ - 'class6']], - [], - 7 - ); - $this->assertEquals(' class="class1 class2 class3 class4 class5 class6 7"', $html); - } - - public function testEmptyClassTagHtml() - { - $this->assertEquals('', classTag([])); - } - - public function testSuccessRenderClassTagHtmlFromClass() - { - $html = app(\Okipa\LaravelHtmlHelper\HtmlClassTag::class)->render( - 'class1', - ['class2', 'class3', null], - null, - [], - ['class4', ['class5 ', 'class6Key' => 'class6']], - 7 - ); - $this->assertEquals(' class="class1 class2 class3 class4 class5 class6 7"', $html); - } - - public function testFailRenderClassTagHtmlWithObjectGiven() - { - $this->expectException(Exception::class); - classTag(new stdClass()); - } - - public function testFailRenderClassTagHtmlWithDoubleGiven() - { - $this->expectException(Exception::class); - classTag(12.7); - } - - public function testFailRenderClassTagHtmlWithBooleanGiven() - { - $this->expectException(Exception::class); - classTag(true); - } - - public function testRenderedHtml() - { - view()->addNamespace('htmlHelper', 'tests/views'); - $html = view('htmlHelper::classTag')->render(); - $this->assertStringContainsString('

', $html); - } -} diff --git a/tests/Unit/HtmlAttributesTest.php b/tests/Unit/HtmlAttributesTest.php index 1cb8644..807be27 100644 --- a/tests/Unit/HtmlAttributesTest.php +++ b/tests/Unit/HtmlAttributesTest.php @@ -9,9 +9,10 @@ class HtmlAttributesTest extends HtmlHelperTestCase { - public function testSuccessRenderAttributesHtmlFromHelper() + /** @test */ + public function it_generates_html_attributes_from_helper_call(): void { - $html = htmlAttributes( + $html = html_attributes( 'attribute1Value', ['attribute2Key' => 'attribute2Value'], ['attribute3Key' => null], @@ -23,7 +24,7 @@ public function testSuccessRenderAttributesHtmlFromHelper() ['attribute10Key' => ['attribute11Value']], ['attribute12Key' => ''] ); - $this->assertEquals( + self::assertEquals( ' attribute1Value attribute2Key="attribute2Value" attribute3Key attribute4Value ' . 'attribute5Value attribute6Value attributes7Value attribute8Value attribute9Key="attribute9Value" ' . 'attribute10Key attribute11Value attribute12Key', @@ -31,9 +32,10 @@ public function testSuccessRenderAttributesHtmlFromHelper() ); } - public function testSuccessRenderAttributesHtmlFromClass() + /** @test */ + public function it_generates_html_attributes_from_class_call(): void { - $html = app(HtmlAttributes::class)->render( + $html = app(HtmlAttributes::class)->toHtml( 'attribute1Value', ['attribute2Key' => 'attribute2Value'], ['attribute3Key' => null], @@ -45,7 +47,7 @@ public function testSuccessRenderAttributesHtmlFromClass() ['attribute10Key' => ['attribute11Value']], ['attribute12Key' => ''] ); - $this->assertEquals( + self::assertEquals( ' attribute1Value attribute2Key="attribute2Value" attribute3Key attribute4Value attribute5Value ' . 'attribute6Value attributes7Value attribute8Value attribute9Key="attribute9Value" attribute10Key ' . 'attribute11Value attribute12Key', @@ -53,35 +55,40 @@ public function testSuccessRenderAttributesHtmlFromClass() ); } - public function testFailRenderAttributesHtmlWithIntGiven() + /** @test */ + public function it_triggers_exception_with_object(): void { $this->expectException(Exception::class); - classTag(htmlAttributes(10)); + html_attributes(new stdClass()); } - public function testFailRenderAttributesHtmlWithObjectGiven() + /** @test */ + public function it_triggers_exception_with_double(): void { $this->expectException(Exception::class); - htmlAttributes(new stdClass()); + html_attributes(12.7); } - public function testFailRenderAttributesHtmlWithDoubleGiven() + /** @test */ + public function it_triggers_exception_with_bool(): void { $this->expectException(Exception::class); - htmlAttributes(12.7); + html_attributes(true); } - public function testFailRenderAttributesHtmlWithBooleanGiven() + /** @test */ + public function it_triggers_exception_with_int(): void { $this->expectException(Exception::class); - htmlAttributes(true); + html_classes(html_attributes(10)); } - public function testRenderedHtml() + /** @test */ + public function it_renders_html_attributes_in_view(): void { - view()->addNamespace('htmlHelper', 'tests/views'); - $html = view('htmlHelper::htmlAttributes')->render(); - $this->assertStringContainsString( + view()->addNamespace('html_helper', 'tests/views'); + $html = view('html_helper::html-attributes')->toHtml(); + self::assertStringContainsString( '
', @@ -89,10 +96,11 @@ public function testRenderedHtml() ); } - public function testHtmlNoAttributesRenderedHtml() + /** @test */ + public function it_renders_no_html_attributes_in_view(): void { - view()->addNamespace('htmlHelper', 'tests/views'); - $html = view('htmlHelper::noHtmlAttributes')->render(); - $this->assertStringContainsString('
', $html); + view()->addNamespace('html_helper', 'tests/views'); + $html = view('html_helper::no-html-attributes')->toHtml(); + self::assertStringContainsString('
', $html); } } diff --git a/tests/Unit/HtmlClassesTest.php b/tests/Unit/HtmlClassesTest.php new file mode 100644 index 0000000..3de6dab --- /dev/null +++ b/tests/Unit/HtmlClassesTest.php @@ -0,0 +1,77 @@ + 'class6']], + [], + 7 + ); + self::assertEquals(' class="class1 class2 class3 class4 class5 class6 7"', $html); + } + + /** @test */ + public function it_generates_html_classes_from_class_call(): void + { + $html = app(HtmlClasses::class)->toHtml( + 'class1', + ['class2', 'class3', null], + null, + [], + ['class4', ['class5 ', 'class6Key' => 'class6']], + 7 + ); + self::assertEquals(' class="class1 class2 class3 class4 class5 class6 7"', $html); + } + + /** @test */ + public function it_returns_empty_string_with_empty_inputs(): void + { + self::assertEquals('', html_classes([])); + self::assertEquals('', html_classes(null)); + self::assertEquals('', html_classes('')); + } + + /** @test */ + public function it_triggers_exception_with_object(): void + { + $this->expectException(Exception::class); + html_classes(new stdClass()); + } + + /** @test */ + public function it_triggers_exception_with_double(): void + { + $this->expectException(Exception::class); + html_classes(12.7); + } + + /** @test */ + public function it_triggers_exception_with_bool(): void + { + $this->expectException(Exception::class); + html_classes(true); + } + + /** @test */ + public function it_renders_html_classes_in_view(): void + { + view()->addNamespace('html_helper', 'tests/views'); + $html = view('html_helper::html-classes')->toHtml(); + self::assertStringContainsString('
', $html); + } +} diff --git a/tests/views/classTag.blade.php b/tests/views/classTag.blade.php deleted file mode 100644 index d53e87f..0000000 --- a/tests/views/classTag.blade.php +++ /dev/null @@ -1 +0,0 @@ - 'class6']], 7) }}> diff --git a/tests/views/html-attributes.blade.php b/tests/views/html-attributes.blade.php new file mode 100644 index 0000000..8097fe1 --- /dev/null +++ b/tests/views/html-attributes.blade.php @@ -0,0 +1 @@ + 'attribute2Value'], ['attribute3Key' => null], ['attribute4Value', 'attribute5Value'], '', null, ['' => 'attribute6Value'], ['attributes7Value', ['attribute8Value', 'attribute9Key' => 'attribute9Value']], ['attribute10Key' => ['attribute11Value']], ['attribute12Key' => '']) }}> diff --git a/tests/views/html-classes.blade.php b/tests/views/html-classes.blade.php new file mode 100644 index 0000000..2ca452a --- /dev/null +++ b/tests/views/html-classes.blade.php @@ -0,0 +1 @@ + 'class6']], 7) }}> diff --git a/tests/views/htmlAttributes.blade.php b/tests/views/htmlAttributes.blade.php deleted file mode 100644 index bdf6be4..0000000 --- a/tests/views/htmlAttributes.blade.php +++ /dev/null @@ -1 +0,0 @@ - 'attribute2Value'], ['attribute3Key' => null], ['attribute4Value', 'attribute5Value'], '', null, ['' => 'attribute6Value'], ['attributes7Value', ['attribute8Value', 'attribute9Key' => 'attribute9Value']], ['attribute10Key' => ['attribute11Value']], ['attribute12Key' => '']) }}> diff --git a/tests/views/no-html-attributes.blade.php b/tests/views/no-html-attributes.blade.php new file mode 100644 index 0000000..a0a5e55 --- /dev/null +++ b/tests/views/no-html-attributes.blade.php @@ -0,0 +1 @@ + diff --git a/tests/views/noHtmlAttributes.blade.php b/tests/views/noHtmlAttributes.blade.php deleted file mode 100644 index 8680e3f..0000000 --- a/tests/views/noHtmlAttributes.blade.php +++ /dev/null @@ -1 +0,0 @@ -