[
{ "name": "the textbook VIN whose check digit is X (remainder ten)", "args": ["1M8GDM9AXKP042788"], "expect": { "valid": true, "normalised": "1M8GDM9AXKP042788", "wmi": "1M8", "checkDigitMatches": true, "reason": null } },
{ "name": "a US-built Honda", "args": ["1HGCM82633A004352"], "expect": { "valid": true, "normalised": "1HGCM82633A004352", "wmi": "1HG", "checkDigitMatches": true, "reason": null } },
{ "name": "seventeen ones: the weights sum to 89, which leaves 1", "args": ["11111111111111111"], "expect": { "valid": true, "normalised": "11111111111111111", "wmi": "111", "checkDigitMatches": true, "reason": null } },
{ "name": "a Mexican-built VIN, where the check digit is 0", "args": ["3VWFE21C04M000001"], "expect": { "valid": true, "normalised": "3VWFE21C04M000001", "wmi": "3VW", "checkDigitMatches": true, "reason": null } },
{ "name": "lower case and spaces are normalised", "args": [" 1hgcm8263 3a004352 "], "expect": { "valid": true, "normalised": "1HGCM82633A004352", "wmi": "1HG", "checkDigitMatches": true, "reason": null } },
{ "name": "a North American VIN with the wrong check digit is invalid", "args": ["1HGCM82643A004352"], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "bad-check-digit" } },
{ "name": "a Mexican VIN with the wrong check digit is invalid too", "args": ["3VWFE21C54M000001"], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "bad-check-digit" } },
{ "name": "a single mistyped character elsewhere is caught by the check digit", "args": ["1HGCM82633A004353"], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "bad-check-digit" } },
{ "name": "a European VIN with Z in position 9 is valid but reports the mismatch", "args": ["WVWZZZ1JZXW000001"], "expect": { "valid": true, "normalised": "WVWZZZ1JZXW000001", "wmi": "WVW", "checkDigitMatches": false, "reason": null } },
{ "name": "an O where a 0 belongs is a forbidden letter", "args": ["1HGCM82633A0O4352"], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "forbidden-letter" } },
{ "name": "a lower-case i is folded and still forbidden", "args": ["1hgcm82633a0043i2"], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "forbidden-letter" } },
{ "name": "sixteen characters is too short", "args": ["1HGCM82633A00435"], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "bad-length" } },
{ "name": "eighteen characters is too long", "args": ["1HGCM82633A0043520"], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "bad-length" } },
{ "name": "a hyphen is a bad character, reported before the length", "args": ["1HGCM826-33A004352"], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "bad-character" } },
{ "name": "the empty string", "args": [""], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "empty" } },
{ "name": "spaces only is empty", "args": [" "], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "empty" } },
{ "name": "a non-string is empty, not an exception", "args": [null], "expect": { "valid": false, "normalised": null, "wmi": null, "checkDigitMatches": null, "reason": "empty" } }
]