summaryrefslogtreecommitdiff
path: root/tests/RegistrationNumberTest.php
diff options
context:
space:
mode:
authorLi Zhineng <[email protected]>2025-05-12 19:01:57 +0800
committerLi Zhineng <[email protected]>2025-05-12 19:01:57 +0800
commit12ebfe678ed2554fb5902c60d99a53414bec0ad1 (patch)
tree1fdd790e309ed347f8fd92413cd1d9e0dfe197ea /tests/RegistrationNumberTest.php
downloadvehicle-license-china-12ebfe678ed2554fb5902c60d99a53414bec0ad1.tar.gz
vehicle-license-china-12ebfe678ed2554fb5902c60d99a53414bec0ad1.zip
first commit
Diffstat (limited to 'tests/RegistrationNumberTest.php')
-rw-r--r--tests/RegistrationNumberTest.php141
1 files changed, 141 insertions, 0 deletions
diff --git a/tests/RegistrationNumberTest.php b/tests/RegistrationNumberTest.php
new file mode 100644
index 0000000..dfb3dd3
--- /dev/null
+++ b/tests/RegistrationNumberTest.php
@@ -0,0 +1,141 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Zhineng\VehicleLicenseChina\Tests;
+
+use PHPUnit\Framework\Attributes\CoversClass;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\TestCase;
+use Zhineng\VehicleLicenseChina\RegistrationNumber;
+use Zhineng\VehicleLicenseChina\RegistrationNumberException;
+
+#[CoversClass(RegistrationNumber::class)]
+final class RegistrationNumberTest extends TestCase
+{
+ #[DataProvider('provide_valid_registration_numbers')]
+ #[DataProvider('provide_valid_clean_energy_registration_numbers')]
+ public function test_valid_registration_number(string $registrationNumber): void
+ {
+ $instance = RegistrationNumber::make($registrationNumber);
+ $this->assertSame($registrationNumber, $instance->registrationNumber);
+ }
+
+ #[DataProvider('provide_invalid_registration_numbers')]
+ #[DataProvider('provide_invalid_clean_energy_registration_numbers')]
+ public function test_invalid_registration_number(string $registrationNumber): void
+ {
+ $this->expectException(RegistrationNumberException::class);
+ $this->expectExceptionMessage(sprintf('The registration number "%s" is invalid.', $registrationNumber));
+ RegistrationNumber::make($registrationNumber);
+ }
+
+ /**
+ * @return string[]
+ */
+ public static function provide_valid_registration_numbers(): array
+ {
+ return [
+ ['粤E1234'],
+ ['粤EA123'],
+ ['粤E1A23'],
+ ['粤E12A3'],
+ ['粤E123A'],
+ ['粤EAB12'],
+ ['粤E12AB'],
+ ['粤E1AB2'],
+ ['粤E1A2B'],
+ ['粤EA12B'],
+ ['粤EA1B2'],
+ ['粤E12345'],
+ ['粤EA1234'],
+ ['粤E1A234'],
+ ['粤E12A34'],
+ ['粤E123A4'],
+ ['粤E1234A'],
+
+ // Authority code "O" (the 2nd character) is for internal
+ ['粤O12345'],
+
+ // Authority code "Z" (the 2nd character) is for internal in Guangdong province
+ ['粤Z12345'],
+
+ // Authority code "W" (the 2nd character) is for internal in Shandong province
+ ['鲁W12345'],
+ ];
+ }
+
+ /**
+ * @return string[]
+ */
+ public static function provide_valid_clean_energy_registration_numbers(): array
+ {
+ return [
+ ['粤ED12345'],
+ ['粤EDA1234'],
+
+ // Authority code "O" (the 2nd character) is for internal
+ ['粤OD12345'],
+
+ // Authority code "Z" (the 2nd character) is for internal in Guangdong province
+ ['粤ZD12345'],
+
+ // Authority code "W" (the 2nd character) is for internal in Shandong province
+ ['鲁WD12345'],
+ ];
+ }
+
+ /**
+ * @return string[]
+ */
+ public static function provide_invalid_registration_numbers(): array
+ {
+ return [
+ ['假E12345'],
+ ['粤I12345'],
+ ['粤EABC1'],
+ ['粤E123+'],
+ ['粤E1234+'],
+ ['粤EABC12'],
+
+ // Sequence could not contain "O" or "I"
+ ['粤EO123'],
+ ['粤E1O23'],
+ ['粤E12O3'],
+ ['粤E123O'],
+ ['粤EI123'],
+ ['粤E1I23'],
+ ['粤E12I3'],
+ ['粤E123I'],
+ ['粤EO1234'],
+ ['粤E1O234'],
+ ['粤E12O34'],
+ ['粤E123O4'],
+ ['粤E1234O'],
+ ['粤EI1234'],
+ ['粤E1I234'],
+ ['粤E12I34'],
+ ['粤E123I4'],
+ ['粤E1234I'],
+ ];
+ }
+
+ /**
+ * @return string[]
+ */
+ public static function provide_invalid_clean_energy_registration_numbers(): array
+ {
+ return [
+ ['粤ED1A234'],
+ ['粤ED12A34'],
+ ['粤ED123A4'],
+ ['粤ED1234A'],
+ ['粤EZ12345'],
+ ['粤ED1234+'],
+
+ // Sequence could not contain "O" or "I"
+ ['粤EDO1234'],
+ ['粤EDI1234'],
+ ];
+ }
+}