Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
subversal
/
video
/
wp-content
/
plugins
/
one-click-demo-import
/
vendor
/
yoast
/
phpunit-polyfills
/
src
/
Polyfills
:
AssertIgnoringLineEndings.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace Yoast\PHPUnitPolyfills\Polyfills; use PHPUnit\SebastianBergmann\Exporter\Exporter as Exporter_In_Phar; use SebastianBergmann\Exporter\Exporter; use TypeError; /** * Polyfill the Assert::assertStringEqualsStringIgnoringLineEndings() and the * Assert::assertStringContainsStringIgnoringLineEndings() methods. * * Introduced in PHPUnit 10.0.0. * * @link https://github.com/sebastianbergmann/phpunit/issues/4641 * @link https://github.com/sebastianbergmann/phpunit/pull/4670 * @link https://github.com/sebastianbergmann/phpunit/issues/4935 * @link https://github.com/sebastianbergmann/phpunit/pull/5279 * * @since 2.0.0 */ trait AssertIgnoringLineEndings { /** * Asserts that two strings are equal except for line endings. * * @param string $expected Expected value. * @param string $actual The value to test. * @param string $message Optional failure message to display. * * @return void * * @throws TypeError When any of the passed arguments do not meet the required type. */ final public static function assertStringEqualsStringIgnoringLineEndings( $expected, $actual, $message = '' ) { /* * Parameter input validation. * In PHPUnit this is done via PHP native type declarations. Emulating this for the polyfill. * Note: using `is_scalar()` instead of `is_string()` as test files may not be using strict_types. */ if ( \is_scalar( $expected ) === false ) { throw new TypeError( \sprintf( 'Argument 1 passed to assertStringEqualsStringIgnoringLineEndings() must be of type string, %s given', \gettype( $expected ) ) ); } if ( \is_scalar( $actual ) === false ) { throw new TypeError( \sprintf( 'Argument 2 passed to assertStringEqualsStringIgnoringLineEndings() must be of type string, %s given', \gettype( $actual ) ) ); } $expected = self::normalizeLineEndingsForIgnoringLineEndingsAssertions( (string) $expected ); $exporter = \class_exists( Exporter::class ) ? new Exporter() : new Exporter_In_Phar(); $msg = \sprintf( 'Failed asserting that %s is equal to "%s" ignoring line endings.', $exporter->export( $actual ), $expected ); if ( $message !== '' ) { $msg = $message . \PHP_EOL . $msg; } $actual = self::normalizeLineEndingsForIgnoringLineEndingsAssertions( (string) $actual ); static::assertSame( $expected, $actual, $msg ); } /** * Asserts that two variables are equal (ignoring case). * * @param string $needle The string to search for. * @param string $haystack The string to treat as the haystack. * @param string $message Optional failure message to display. * * @return void * * @throws TypeError When any of the passed arguments do not meet the required type. */ final public static function assertStringContainsStringIgnoringLineEndings( $needle, $haystack, $message = '' ) { /* * Parameter input validation. * In PHPUnit this is done via PHP native type declarations. Emulating this for the polyfill. * Note: using `is_scalar()` instead of `is_string()` as test files may not be using strict_types. */ if ( \is_scalar( $needle ) === false ) { throw new TypeError( \sprintf( 'Argument 1 passed to assertStringContainsStringIgnoringLineEndings() must be of type string, %s given', \gettype( $needle ) ) ); } if ( \is_scalar( $haystack ) === false ) { throw new TypeError( \sprintf( 'Argument 2 passed to assertStringContainsStringIgnoringLineEndings() must be of type string, %s given', \gettype( $haystack ) ) ); } $needle = self::normalizeLineEndingsForIgnoringLineEndingsAssertions( (string) $needle ); $haystack = self::normalizeLineEndingsForIgnoringLineEndingsAssertions( (string) $haystack ); static::assertStringContainsString( $needle, $haystack, $message ); } /** * Normalize line endings. * * @param string $value The text to normalize. * * @return string */ private static function normalizeLineEndingsForIgnoringLineEndingsAssertions( $value ) { return \strtr( $value, [ "\r\n" => "\n", "\r" => "\n", ] ); } }