95 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			95 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								declare(strict_types = 1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace BaconQrCodeTest\Common;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use BaconQrCode\Common\ErrorCorrectionLevel;
							 | 
						||
| 
								 | 
							
								use BaconQrCode\Common\FormatInformation;
							 | 
						||
| 
								 | 
							
								use PHPUnit\Framework\TestCase;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FormatInformationTest extends TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    private const MASKED_TEST_FORMAT_INFO = 0x2bed;
							 | 
						||
| 
								 | 
							
								    private const UNMAKSED_TEST_FORMAT_INFO = self::MASKED_TEST_FORMAT_INFO ^ 0x5412;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testBitsDiffering() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->assertSame(0, FormatInformation::numBitsDiffering(1, 1));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(1, FormatInformation::numBitsDiffering(0, 2));
							 | 
						||
| 
								 | 
							
								        $this->assertSame(2, FormatInformation::numBitsDiffering(1, 2));
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(32, FormatInformation::numBitsDiffering(-1, 0));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testDecode() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $expected = FormatInformation::decodeFormatInformation(
							 | 
						||
| 
								 | 
							
								            self::MASKED_TEST_FORMAT_INFO,
							 | 
						||
| 
								 | 
							
								            self::MASKED_TEST_FORMAT_INFO
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertNotNull($expected);
							 | 
						||
| 
								 | 
							
								        $this->assertSame(7, $expected->getDataMask());
							 | 
						||
| 
								 | 
							
								        $this->assertSame(ErrorCorrectionLevel::Q(), $expected->getErrorCorrectionLevel());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(
							 | 
						||
| 
								 | 
							
								            $expected,
							 | 
						||
| 
								 | 
							
								            FormatInformation::decodeFormatInformation(
							 | 
						||
| 
								 | 
							
								                self::UNMAKSED_TEST_FORMAT_INFO,
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testDecodeWithBitDifference() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $expected = FormatInformation::decodeFormatInformation(
							 | 
						||
| 
								 | 
							
								            self::MASKED_TEST_FORMAT_INFO,
							 | 
						||
| 
								 | 
							
								            self::MASKED_TEST_FORMAT_INFO
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(
							 | 
						||
| 
								 | 
							
								            $expected,
							 | 
						||
| 
								 | 
							
								            FormatInformation::decodeFormatInformation(
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0x1,
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0x1
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(
							 | 
						||
| 
								 | 
							
								            $expected,
							 | 
						||
| 
								 | 
							
								            FormatInformation::decodeFormatInformation(
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0x3,
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0x3
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(
							 | 
						||
| 
								 | 
							
								            $expected,
							 | 
						||
| 
								 | 
							
								            FormatInformation::decodeFormatInformation(
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0x7,
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0x7
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        $this->assertNull(
							 | 
						||
| 
								 | 
							
								            FormatInformation::decodeFormatInformation(
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0xf,
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0xf
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function testDecodeWithMisRead() : void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $expected = FormatInformation::decodeFormatInformation(
							 | 
						||
| 
								 | 
							
								            self::MASKED_TEST_FORMAT_INFO,
							 | 
						||
| 
								 | 
							
								            self::MASKED_TEST_FORMAT_INFO
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->assertEquals(
							 | 
						||
| 
								 | 
							
								            $expected,
							 | 
						||
| 
								 | 
							
								            FormatInformation::decodeFormatInformation(
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0x3,
							 | 
						||
| 
								 | 
							
								                self::MASKED_TEST_FORMAT_INFO ^ 0xf
							 | 
						||
| 
								 | 
							
								            )
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |