annotate mod_xmllang_check/test_xmpplang.lua @ 6515:ff55e93be449

mod_http_oauth2: Normalize username in password grant Otherwise authentication may fail if provided a non-normalized username Introduced in c1b94dd6e53b
author Kim Alvefur <zash@zash.se>
date Wed, 08 Apr 2026 23:08:39 +0200
parents de3dc4297035
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6401
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env lua
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
2 -- Test suite for xmpplang.lib.lua parser
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
3
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
4 local script_dir = arg and arg[0] and arg[0]:match("^(.*)/[^/]+$") or ".";
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5 package.path = script_dir .. "/?.lib.lua;" .. package.path;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7 local match_xmpplang = require("xmpplang")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
9 local passed = 0
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10 local failed = 0
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
11
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
12 local function test(input, expected, description)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13 local result = match_xmpplang(input)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
14 if result == expected then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
15 passed = passed + 1
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
16 print(string.format("PASS: %s (%s) -> %s", description, input, tostring(result)))
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
17 else
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18 failed = failed + 1
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
19 print(string.format("FAIL: %s (%s) -> expected %s, got %s", description, input, tostring(expected), tostring(result)))
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
20 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
21 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
22
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
23 print("=== Basic language tags ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
24 test("en", true, "2-letter language")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
25 test("eng", true, "3-letter language")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
26 test("abcd", true, "4-letter language")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
27 test("abcde", true, "5-letter language")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
28 test("abcdefgh", true, "8-letter language")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
29 test("abcdefghi", false, "9-letter language (invalid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
30 test("e", false, "1-letter language (invalid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
31
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
32 print("\n=== Language with script ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
33 test("en-Latn", true, "language-script")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
34 test("zh-Hans", true, "zh-Hans")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
35 test("zh-Hant", true, "zh-Hant")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
36 test("en-Latn-US", true, "language-script-region")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
37
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
38 print("\n=== Language with region ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
39 test("en-US", true, "language-region (2 alpha)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
40 test("en-GB", true, "en-GB")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
41 test("en-123", true, "language-region (3 digit)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
42 -- Note: en-1234 is valid because 1234 matches variant (digit + 3 alphanum)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
43 test("en-1234", true, "en-1234 (parsed as language + variant)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
44 -- Note: en-ABC is valid because ABC matches extlang (3 alpha)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
45 test("en-ABC", true, "en-ABC (parsed as language + extlang)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
46 -- Actually invalid subtags
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
47 test("en-AB", true, "en-AB (language + region)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
48 test("en-A", false, "en-A (single alpha - invalid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
49 test("en-12", false, "en-12 (2 digits - invalid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
50 test("en-ABCDE", true, "en-ABCDE (language + 5 alpha variant)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
51
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
52 print("\n=== Language with extlang ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
53 test("zh-cmn", true, "language-extlang")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
54 test("zh-cmn-Hans", true, "language-extlang-script")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
55 test("zh-cmn-Hant-HK", true, "language-extlang-script-region")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
56 test("zh-yue", true, "zh-yue")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
57 test("zh-cmn-yue", true, "language-extlang-extlang")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
58 test("zh-cmn-yue-gan", true, "language-extlang-extlang-extlang (max)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
59 test("zh-cmn-yue-gan-hak", false, "4 extlangs (too many)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
60
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
61 print("\n=== Variants ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
62 test("en-US-12345", true, "5-char variant")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
63 test("en-US-12345678", true, "8-char variant")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
64 test("en-US-1abc", true, "digit+3alphanum variant")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
65 test("en-US-rozaj", true, "rozaj variant")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
66 test("sl-IT-nedis", true, "sl-IT-nedis")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
67 test("en-US-abcd", false, "4-char alpha variant (invalid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
68 test("en-US-123456789", false, "9-char variant (invalid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
69
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
70 print("\n=== Extensions ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
71 test("en-a-bbb", true, "extension a")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
72 test("en-a-bbb-ccc", true, "extension with multiple subtags")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
73 test("en-US-a-bbb", true, "language-region-extension")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
74 test("en-US-a-bbb-b-ccc", true, "multiple extensions")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
75 test("en-u-co-phonebk", true, "unicode extension")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
76 test("en-a-b", false, "extension subtag too short")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
77 test("en-a-bbbbbbbbb", false, "extension subtag too long (9)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
78
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
79 print("\n=== Privateuse ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
80 test("x-private", true, "privateuse standalone")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
81 test("x-a", true, "privateuse single char subtag")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
82 test("x-abcdefgh", true, "privateuse 8-char subtag")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
83 test("x-abc-def", true, "privateuse multiple subtags")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
84 test("en-x-private", true, "language-privateuse")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
85 test("en-US-x-private", true, "language-region-privateuse")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
86 test("X-private", true, "uppercase X privateuse")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
87 test("x-abcdefghi", false, "privateuse subtag too long (9)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
88
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
89 print("\n=== Grandfathered irregular ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
90 test("en-GB-oed", true, "en-GB-oed")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
91 test("i-ami", true, "i-ami")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
92 test("i-bnn", true, "i-bnn")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
93 test("i-default", true, "i-default")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
94 test("i-enochian", true, "i-enochian")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
95 test("i-hak", true, "i-hak")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
96 test("i-klingon", true, "i-klingon")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
97 test("i-lux", true, "i-lux")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
98 test("i-mingo", true, "i-mingo")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
99 test("i-navajo", true, "i-navajo")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
100 test("i-pwn", true, "i-pwn")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
101 test("i-tao", true, "i-tao")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
102 test("i-tay", true, "i-tay")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
103 test("i-tsu", true, "i-tsu")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
104 test("sgn-BE-FR", true, "sgn-BE-FR")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
105 test("sgn-BE-NL", true, "sgn-BE-NL")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
106 test("sgn-CH-DE", true, "sgn-CH-DE")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
107 -- Case insensitive
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
108 test("I-AMI", true, "I-AMI (uppercase)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
109 test("En-Gb-Oed", true, "En-Gb-Oed (mixed case)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
110
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
111 print("\n=== Grandfathered regular ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
112 test("art-lojban", true, "art-lojban")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
113 test("cel-gaulish", true, "cel-gaulish")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
114 test("no-bok", true, "no-bok")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
115 test("no-nyn", true, "no-nyn")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
116 test("zh-guoyu", true, "zh-guoyu")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
117 test("zh-hakka", true, "zh-hakka")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
118 test("zh-min", true, "zh-min")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
119 test("zh-min-nan", true, "zh-min-nan")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
120 test("zh-xiang", true, "zh-xiang")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
121 -- Case insensitive
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
122 test("ZH-MIN", true, "ZH-MIN (uppercase)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
123 test("Art-Lojban", true, "Art-Lojban (mixed case)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
124
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
125 print("\n=== Encoding ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
126 test("en.UTF-8", true, "language with encoding")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
127 test("en-US.UTF-8", true, "language-region with encoding")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
128 test("en-Latn-US.UTF-8", true, "language-script-region with encoding")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
129 test("en.utf-8", true, "encoding lowercase")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
130 test("en.Utf-8", true, "encoding mixed case")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
131 test("en.UTF-16", false, "invalid encoding")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
132
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
133 print("\n=== Complex valid tags ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
134 test("zh-cmn-Hans-CN", true, "zh-cmn-Hans-CN")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
135 test("sr-Latn-RS", true, "sr-Latn-RS")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
136 test("sl-rozaj-biske", true, "sl-rozaj-biske (multiple variants)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
137 test("de-CH-1901", true, "de-CH-1901")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
138 test("en-US-u-islamcal", true, "en-US-u-islamcal")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
139 test("zh-Hans-CN-u-nu-hanidec", true, "complex with extension")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
140
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
141 print("\n=== Invalid cases ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
142 test("", false, "empty string")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
143 test("-en", false, "leading hyphen")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
144 test("en-", false, "trailing hyphen")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
145 test("en--US", false, "double hyphen")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
146 test("123", false, "numeric only")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
147 test("en_US", false, "underscore separator")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
148 test("en US", false, "space separator")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
149 test("toolonglanguage", false, "language too long")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
150
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
151 print("\n=== Edge cases ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
152 test("qaa", true, "qaa (reserved)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
153 test("qaa-Qaaa-QM-x-southern", true, "all private use subtags")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
154 test("en-Latn-GB-boont-r-extended-sequence-x-private", true, "complex tag")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
155
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
156 print("\n=== Additional edge cases ===")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
157 -- Encoding edge cases
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
158 test("en.UTF-8extra", false, "encoding with extra chars")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
159 test("en.UTF", false, "partial encoding")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
160 test("en.", false, "dot with nothing after")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
161 test("en-US.UTF-8.extra", false, "double dot")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
162
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
163 -- Extension boundary cases
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
164 test("en-0-abc", true, "extension with digit singleton")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
165 test("en-9-abc", true, "extension with digit 9 singleton")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
166 test("en-a-12", true, "extension with 2 char subtag")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
167 test("en-a-12345678", true, "extension with 8 char subtag")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
168 test("en-a-ab-cd-ef", true, "extension with multiple short subtags")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
169
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
170 -- Privateuse boundary cases
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
171 test("x-1", true, "privateuse with single digit")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
172 test("x-12345678", true, "privateuse with 8 chars")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
173 test("x-a-b-c-d-e", true, "privateuse with many 1-char subtags")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
174
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
175 -- Language boundary cases (no extlang possible after 4+ alpha language)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
176 -- These are invalid because 3-alpha "ext" doesn't match script/region/variant/etc.
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
177 test("abcd-ext", false, "4-letter language with 3-char subtag (invalid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
178 test("abcde-ext", false, "5-letter language with 3-char subtag (invalid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
179
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
180 -- Grandfathered should not be prefix-matched
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
181 test("i-ami-extra", false, "grandfathered with extra (invalid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
182 -- Note: zh-min-foo is valid as langtag (foo is second extlang in zh-min-foo)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
183 test("zh-min-foo", true, "zh-min-foo (valid: language + extlang + extlang)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
184
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
185 -- Variants cannot repeat in a way that produces invalid structure
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
186 test("en-rozaj-rozaj", true, "repeated variant (syntactically valid)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
187
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
188 -- Script + region + variant combinations
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
189 test("en-Latn-US-rozaj", true, "all optional components")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
190 test("en-US-Latn", false, "region before script (invalid order)")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
191
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
192 print(string.format("\n=== Results: %d passed, %d failed ===", passed, failed))
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
193 if failed > 0 then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
194 os.exit(1)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
195 end