diff --git a/src/Data/QRData.php b/src/Data/QRData.php index 7056b63e7..366b0671f 100644 --- a/src/Data/QRData.php +++ b/src/Data/QRData.php @@ -195,7 +195,7 @@ final class QRData{ // guess the version number within the given range for($version = $this->options->versionMin; $version <= $this->options->versionMax; $version++){ - if($total <= $this->maxBitsForEcc[$version]){ + if($total <= $this->maxBitsForEcc[$version] - 4){ return new Version($version); } } diff --git a/tests/Data/DataInterfaceTestAbstract.php b/tests/Data/DataInterfaceTestAbstract.php index 4d4e1d20c..be970cf78 100644 --- a/tests/Data/DataInterfaceTestAbstract.php +++ b/tests/Data/DataInterfaceTestAbstract.php @@ -14,8 +14,8 @@ use chillerlan\QRCode\Common\{EccLevel, MaskPattern, Mode, Version}; use chillerlan\QRCode\Data\{QRCodeDataException, QRData, QRDataModeInterface, QRMatrix}; use chillerlan\QRCode\QROptions; use chillerlan\QRCodeTest\QRMaxLengthTrait; +use PHPUnit\Framework\{ExpectationFailedException, TestCase}; use Exception, Generator; -use PHPUnit\Framework\TestCase; use function array_map, hex2bin, mb_strlen, mb_substr, sprintf, str_repeat, strlen, substr; /** @@ -187,7 +187,13 @@ abstract class DataInterfaceTestAbstract extends TestCase{ $minimumVersionNumber = $this->QRData->getMinimumVersion()->getVersionNumber(); - $this::assertSame($version->getVersionNumber(), $minimumVersionNumber); + try{ + $this::assertSame($version->getVersionNumber(), $minimumVersionNumber); + } + catch(ExpectationFailedException $e){ + $this::assertSame(($version->getVersionNumber() + 1), $minimumVersionNumber, 'safety margin'); + } + // verify the encoded data $this::assertSame($this->dataMode::DATAMODE, $bitBuffer->read(4)); $this::assertSame($str, $this->dataMode::decodeSegment($bitBuffer, $minimumVersionNumber));