annotate mod_xmllang_check/test_xmpplang.lua @ 6513:5fb466693e85

mod_storage_xmlarchive: Ensure list index files are removed using os.remove() on the list files leaves the new index files behind since util.datamanager does not know they are removed. Thanks Link Mauve
author Kim Alvefur <zash@zash.se>
date Tue, 07 Apr 2026 21:10:54 +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