diff options
author | Chih-Hsuan Yen <[email protected]> | 2022-07-02 22:01:51 +0800 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2022-07-12 22:23:48 +0300 |
commit | 4b6161892000cb2b8392dce92a9cf2cabdf2d20e (patch) | |
tree | 5cad602010e4d13e1a48d6b922d4768c0893ac8b /vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php | |
parent | d9861038bcc3cb2f38c7153bdca7d5ab89597afa (diff) |
Update php-qrcode and php-settings-container for PHP 8.1
By running the following command after updating composer.json
```
composer update chillerlan/php-qrcode chillerlan/php-settings-container
```
This change fixes a deprecation warning from Preferences ->
Personal data / Authentication -> Authenticator (OTP).
```
Return type of chillerlan\Settings\SettingsContainerAbstract::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
1. vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php(19): ttrss_error_handler(Return type of chillerlan\Settings\SettingsContainerAbstract::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice, vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php)
2. vendor/composer/ClassLoader.php(571): include(/usr/share/webapps/tt-rss/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php)
3. vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile(/usr/share/webapps/tt-rss/vendor/composer/../chillerlan/php-settings-container/src/SettingsContainerAbstract.php)
4. vendor/chillerlan/php-qrcode/src/QROptions.php(59): loadClass(chillerlan\Settings\SettingsContainerAbstract)
5. vendor/composer/ClassLoader.php(571): include(/usr/share/webapps/tt-rss/vendor/chillerlan/php-qrcode/src/QROptions.php)
6. vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile(/usr/share/webapps/tt-rss/vendor/composer/../chillerlan/php-qrcode/src/QROptions.php)
7. vendor/chillerlan/php-qrcode/src/QRCode.php(113): loadClass(chillerlan\QRCode\QROptions)
8. classes/pref/prefs.php(958): __construct()
9. classes/pref/prefs.php(469): _get_otp_qrcode_img()
10. classes/pref/prefs.php(541): index_auth_2fa()
11. backend.php(136): index_auth()
```
The issue is fixed in php-settings-container 2.1.1 [1] Here I use the
latest php-qrcode version for another PHP 8.1 fix [2].
[1] https://github.com/chillerlan/php-settings-container/commit/68bc5019c8b38956c83906431ef879668366b036#diff-359c7f7a6d32d9935951e1b0742eb116fb654f4a932c8d40328bb5dcab2fa111L162
[2] https://github.com/chillerlan/php-qrcode/issues/97
Diffstat (limited to 'vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php')
-rw-r--r-- | vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php | 110 |
1 files changed, 86 insertions, 24 deletions
diff --git a/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php b/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php index 19d74617a..d533c3f17 100644 --- a/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php +++ b/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php @@ -12,54 +12,116 @@ namespace chillerlan\QRCodeTest\Data; +use chillerlan\QRCode\QRCode; use chillerlan\QRCode\QROptions; +use PHPUnit\Framework\TestCase; use chillerlan\QRCode\Data\{QRCodeDataException, QRDataInterface, QRMatrix}; -use chillerlan\QRCodeTest\QRTestAbstract; +use ReflectionClass; -abstract class DatainterfaceTestAbstract extends QRTestAbstract{ +use function str_repeat; - /** - * @var \chillerlan\QRCode\Data\QRDataAbstract - */ - protected $dataInterface; +/** + * The data interface test abstract + */ +abstract class DatainterfaceTestAbstract extends TestCase{ - protected $testdata; - protected $expected; + /** @internal */ + protected ReflectionClass $reflection; + /** @internal */ + protected QRDataInterface $dataInterface; + /** @internal */ + protected string $testdata; + /** @internal */ + protected array $expected; + /** + * @internal + */ protected function setUp():void{ - parent::setUp(); - - $this->dataInterface = $this->reflection->newInstanceArgs([new QROptions(['version' => 4])]); + $this->dataInterface = $this->getDataInterfaceInstance(new QROptions(['version' => 4])); + $this->reflection = new ReflectionClass($this->dataInterface); } - public function testInstance(){ - $this->dataInterface = $this->reflection->newInstanceArgs([new QROptions, $this->testdata]); + /** + * Returns a data interface instance + * + * @internal + */ + abstract protected function getDataInterfaceInstance(QROptions $options):QRDataInterface; - $this->assertInstanceOf(QRDataInterface::class, $this->dataInterface); + /** + * Verifies the data interface instance + */ + public function testInstance():void{ + $this::assertInstanceOf(QRDataInterface::class, $this->dataInterface); } - public function testSetData(){ + /** + * Tests ecc masking and verifies against a sample + */ + public function testMaskEcc():void{ $this->dataInterface->setData($this->testdata); - $this->assertSame($this->expected, $this->getProperty('matrixdata')->getValue($this->dataInterface)); + $maskECC = $this->reflection->getMethod('maskECC'); + $maskECC->setAccessible(true); + + $this::assertSame($this->expected, $maskECC->invoke($this->dataInterface)); } - public function testInitMatrix(){ - $m = $this->dataInterface->setData($this->testdata)->initMatrix(0); + /** + * @see testInitMatrix() + * @internal + * @return int[][] + */ + public function MaskPatternProvider():array{ + return [[0], [1], [2], [3], [4], [5], [6], [7]]; + } - $this->assertInstanceOf(QRMatrix::class, $m); + /** + * Tests initializing the data matrix + * + * @dataProvider MaskPatternProvider + */ + public function testInitMatrix(int $maskPattern):void{ + $this->dataInterface->setData($this->testdata); + + $matrix = $this->dataInterface->initMatrix($maskPattern); + + $this::assertInstanceOf(QRMatrix::class, $matrix); + $this::assertSame($maskPattern, $matrix->maskPattern()); } - public function testGetMinimumVersion(){ - $this->assertSame(1, $this->getMethod('getMinimumVersion')->invoke($this->dataInterface)); + /** + * Tests getting the minimum QR version for the given data + */ + public function testGetMinimumVersion():void{ + $this->dataInterface->setData($this->testdata); + + $getMinimumVersion = $this->reflection->getMethod('getMinimumVersion'); + $getMinimumVersion->setAccessible(true); + + $this::assertSame(1, $getMinimumVersion->invoke($this->dataInterface)); } - public function testGetMinimumVersionException(){ + /** + * Tests if an exception is thrown when the data exceeds the maximum version while auto detecting + */ + public function testGetMinimumVersionException():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('data exceeds'); - $this->getProperty('strlen')->setValue($this->dataInterface, 13370); - $this->getMethod('getMinimumVersion')->invoke($this->dataInterface); + $this->dataInterface = $this->getDataInterfaceInstance(new QROptions(['version' => QRCode::VERSION_AUTO])); + $this->dataInterface->setData(str_repeat($this->testdata, 1337)); + } + + /** + * Tests if an exception is thrown on data overflow + */ + public function testCodeLengthOverflowException():void{ + $this->expectException(QRCodeDataException::class); + $this->expectExceptionMessage('code length overflow'); + + $this->dataInterface->setData(str_repeat($this->testdata, 1337)); } } |