summaryrefslogtreecommitdiff
path: root/vendor/chillerlan/php-qrcode/tests/QROptionsTest.php
blob: 3a0260623f8783a3ec145f97d9cb9df9a7a7c112 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?php
/**
 * Class QROptionsTest
 *
 * @filesource   QROptionsTest.php
 * @created      08.11.2018
 * @package      chillerlan\QRCodeTest
 * @author       smiley <[email protected]>
 * @copyright    2018 smiley
 * @license      MIT
 *
 * @noinspection PhpUnusedLocalVariableInspection
 */

namespace chillerlan\QRCodeTest;

use chillerlan\QRCode\{QRCode, QRCodeException, QROptions};
use PHPUnit\Framework\TestCase;

/**
 * QROptions test
 */
class QROptionsTest extends TestCase{

	/**
	 * @see testVersionClamp()
	 * @return int[][]
	 * @internal
	 */
	public function VersionProvider():array{
		return [
			'values > 40 should be clamped to 40'        => [42, 40],
			'values < 1 should be clamped to 1'          => [-42, 1],
			'values in between shold not be touched'     => [21, 21],
			'value -1 should be treated as is (default)' => [QRCode::VERSION_AUTO, -1],
		];
	}

	/**
	 * Tests the $version clamping
	 *
	 * @dataProvider VersionProvider
	 */
	public function testVersionClamp(int $version, int $expected):void{
		$o = new QROptions(['version' => $version]);

		$this::assertSame($expected, $o->version);
	}

	/**
	 * @see testVersionMinMaxClamp()
	 * @return int[][]
	 * @internal
	 */
	public function VersionMinMaxProvider():array{
		return [
			'normal clamp'         => [5, 10, 5, 10],
			'exceeding values'     => [-42, 42, 1, 40],
			'min > max'            => [10, 5, 5, 10],
			'min > max, exceeding' => [42, -42, 1, 40],
		];
	}

	/**
	 * Tests the $versionMin/$versionMax clamping
	 *
	 * @dataProvider VersionMinMaxProvider
	 */
	public function testVersionMinMaxClamp(int $versionMin, int $versionMax, int $expectedMin, int $expectedMax):void{
		$o = new QROptions(['versionMin' => $versionMin, 'versionMax' => $versionMax]);

		$this::assertSame($expectedMin, $o->versionMin);
		$this::assertSame($expectedMax, $o->versionMax);
	}

	/**
	 * @see testMaskPatternClamp()
	 * @return int[][]
	 * @internal
	 */
	public function MaskPatternProvider():array{
		return [
			'exceed max'   => [42, 7,],
			'exceed min'   => [-42, 0],
			'default (-1)' => [QRCode::MASK_PATTERN_AUTO, -1],
		];
	}

	/**
	 * Tests the $maskPattern clamping
	 *
	 * @dataProvider MaskPatternProvider
	 */
	public function testMaskPatternClamp(int $maskPattern, int $expected):void{
		$o = new QROptions(['maskPattern' => $maskPattern]);

		$this::assertSame($expected, $o->maskPattern);
	}

	/**
	 * Tests if an exception is thrown on an incorrect ECC level
	 */
	public function testInvalidEccLevelException():void{
		$this->expectException(QRCodeException::class);
		$this->expectExceptionMessage('Invalid error correct level: 42');

		$o = new QROptions(['eccLevel' => 42]);
	}

	/**
	 * @see testClampRGBValues()
	 * @return int[][][]
	 * @internal
	 */
	public function RGBProvider():array{
		return [
			'exceeding values' => [[-1, 0, 999], [0, 0 ,255]],
			'too few values'   => [[1, 2], [255, 255, 255]],
			'too many values'  => [[1, 2, 3, 4, 5], [1, 2, 3]],
		];
	}

	/**
	 * Tests clamping of the RGB values for $imageTransparencyBG
	 *
	 * @dataProvider RGBProvider
	 */
	public function testClampRGBValues(array $rgb, array $expected):void{
		$o = new QROptions(['imageTransparencyBG' => $rgb]);

		$this::assertSame($expected, $o->imageTransparencyBG);
	}

	/**
	 * Tests if an exception is thrown when a non-numeric RGB value was encoutered
	 */
	public function testInvalidRGBValueException():void{
		$this->expectException(QRCodeException::class);
		$this->expectExceptionMessage('Invalid RGB value.');

		$o = new QROptions(['imageTransparencyBG' => ['r', 'g', 'b']]);
	}

}