LibTextCodec: Update GB18030 for GB18030-2022 and import WPT tests
Update the GB18030 encoder to spec-compliantly handle old PUA code points via a direct byte lookup table (spec step 5). Bake the 18 GB18030-2022 code point updates into indexes.json and remove the now-unnecessary patching logic from the code generator. Drop the redundant hardcoded switch in the decoder's range function, as the range formula already produces correct values. Import WPT tests for gb18030 decoder, gb18030 encoder, and gbk encoder, and register the worker variant in TestConfig.ini.
This commit is contained in:
parent
6afe179e5a
commit
c382e5d254
16 changed files with 1478 additions and 82 deletions
|
|
@ -850,49 +850,6 @@ static Optional<u32> index_gb18030_ranges_code_point(u32 pointer)
|
|||
if (pointer == 7457)
|
||||
return 0xE7C7;
|
||||
|
||||
// FIXME: Encoding specification is not updated to GB-18030-2022 yet (https://github.com/whatwg/encoding/issues/312)
|
||||
// NOTE: This matches https://commits.webkit.org/266173@main
|
||||
switch (pointer) {
|
||||
case 19057:
|
||||
return 0xE81E; // 82 35 90 37
|
||||
case 19058:
|
||||
return 0xE826; // 82 35 90 38
|
||||
case 19059:
|
||||
return 0xE82B; // 82 35 90 39
|
||||
case 19060:
|
||||
return 0xE82C; // 82 35 91 30
|
||||
case 19061:
|
||||
return 0xE832; // 82 35 91 31
|
||||
case 19062:
|
||||
return 0xE843; // 82 35 91 32
|
||||
case 19063:
|
||||
return 0xE854; // 82 35 91 33
|
||||
case 19064:
|
||||
return 0xE864; // 82 35 91 34
|
||||
case 39076:
|
||||
return 0xE78D; // 84 31 82 36
|
||||
case 39077:
|
||||
return 0xE78F; // 84 31 82 37
|
||||
case 39078:
|
||||
return 0xE78E; // 84 31 82 38
|
||||
case 39079:
|
||||
return 0xE790; // 84 31 82 39
|
||||
case 39080:
|
||||
return 0xE791; // 84 31 83 30
|
||||
case 39081:
|
||||
return 0xE792; // 84 31 83 31
|
||||
case 39082:
|
||||
return 0xE793; // 84 31 83 32
|
||||
case 39083:
|
||||
return 0xE794; // 84 31 83 33
|
||||
case 39084:
|
||||
return 0xE795; // 84 31 83 34
|
||||
case 39085:
|
||||
return 0xE796; // 84 31 83 35
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// 3. Let offset be the last pointer in index gb18030 ranges that is less than or equal to pointer and let code point offset be its corresponding code point.
|
||||
size_t last_index;
|
||||
binary_search(s_gb18030_ranges, pointer, &last_index, [](auto const pointer, auto const& entry) {
|
||||
|
|
|
|||
|
|
@ -578,10 +578,106 @@ ErrorOr<void> GB18030Encoder::process(Utf8View input, Function<ErrorOr<void>(u8)
|
|||
continue;
|
||||
}
|
||||
|
||||
// 5. Let pointer be the index pointer for code point in index gb18030.
|
||||
// 5. If there is a row in the table below whose first column is codePoint, then return the two bytes on the same row listed in the second column:
|
||||
// Code point Bytes
|
||||
// U+E78D 0xA6 0xD9
|
||||
// U+E78E 0xA6 0xDA
|
||||
// U+E78F 0xA6 0xDB
|
||||
// U+E790 0xA6 0xDC
|
||||
// U+E791 0xA6 0xDD
|
||||
// U+E792 0xA6 0xDE
|
||||
// U+E793 0xA6 0xDF
|
||||
// U+E794 0xA6 0xEC
|
||||
// U+E795 0xA6 0xED
|
||||
// U+E796 0xA6 0xF3
|
||||
// U+E81E 0xFE 0x59
|
||||
// U+E826 0xFE 0x61
|
||||
// U+E82B 0xFE 0x66
|
||||
// U+E82C 0xFE 0x67
|
||||
// U+E832 0xFE 0x6D
|
||||
// U+E843 0xFE 0x7E
|
||||
// U+E854 0xFE 0x90
|
||||
// U+E864 0xFE 0xA0
|
||||
|
||||
switch (item) {
|
||||
case 0xE78D:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xD9));
|
||||
continue;
|
||||
case 0xE78E:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xDA));
|
||||
continue;
|
||||
case 0xE78F:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xDB));
|
||||
continue;
|
||||
case 0xE790:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xDC));
|
||||
continue;
|
||||
case 0xE791:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xDD));
|
||||
continue;
|
||||
case 0xE792:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xDE));
|
||||
continue;
|
||||
case 0xE793:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xDF));
|
||||
continue;
|
||||
case 0xE794:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xEC));
|
||||
continue;
|
||||
case 0xE795:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xED));
|
||||
continue;
|
||||
case 0xE796:
|
||||
TRY(on_byte(0xA6));
|
||||
TRY(on_byte(0xF3));
|
||||
continue;
|
||||
case 0xE81E:
|
||||
TRY(on_byte(0xFE));
|
||||
TRY(on_byte(0x59));
|
||||
continue;
|
||||
case 0xE826:
|
||||
TRY(on_byte(0xFE));
|
||||
TRY(on_byte(0x61));
|
||||
continue;
|
||||
case 0xE82B:
|
||||
TRY(on_byte(0xFE));
|
||||
TRY(on_byte(0x66));
|
||||
continue;
|
||||
case 0xE82C:
|
||||
TRY(on_byte(0xFE));
|
||||
TRY(on_byte(0x67));
|
||||
continue;
|
||||
case 0xE832:
|
||||
TRY(on_byte(0xFE));
|
||||
TRY(on_byte(0x6D));
|
||||
continue;
|
||||
case 0xE843:
|
||||
TRY(on_byte(0xFE));
|
||||
TRY(on_byte(0x7E));
|
||||
continue;
|
||||
case 0xE854:
|
||||
TRY(on_byte(0xFE));
|
||||
TRY(on_byte(0x90));
|
||||
continue;
|
||||
case 0xE864:
|
||||
TRY(on_byte(0xFE));
|
||||
TRY(on_byte(0xA0));
|
||||
continue;
|
||||
}
|
||||
|
||||
// 6. Let pointer be the index pointer for code point in index gb18030.
|
||||
auto pointer = code_point_gb18030_index(item);
|
||||
|
||||
// 6. If pointer is non-null, then:
|
||||
// 7. If pointer is non-null, then:
|
||||
if (pointer.has_value()) {
|
||||
// 1. Let lead be pointer / 190 + 0x81.
|
||||
auto lead = *pointer / 190 + 0x81;
|
||||
|
|
@ -600,34 +696,34 @@ ErrorOr<void> GB18030Encoder::process(Utf8View input, Function<ErrorOr<void>(u8)
|
|||
continue;
|
||||
}
|
||||
|
||||
// 7. If is GBK is true, return error with code point.
|
||||
// 8. If is GBK is true, return error with code point.
|
||||
if (gbk) {
|
||||
TRY(on_error(item));
|
||||
continue;
|
||||
}
|
||||
|
||||
// 8. Set pointer to the index gb18030 ranges pointer for code point.
|
||||
// 9. Set pointer to the index gb18030 ranges pointer for code point.
|
||||
pointer = index_gb18030_ranges_pointer(item);
|
||||
|
||||
// 9. Let byte1 be pointer / (10 × 126 × 10).
|
||||
// 10. Let byte1 be pointer / (10 × 126 × 10).
|
||||
auto byte1 = *pointer / (10 * 126 * 10);
|
||||
|
||||
// 10. Set pointer to pointer % (10 × 126 × 10).
|
||||
// 11. Set pointer to pointer % (10 × 126 × 10).
|
||||
pointer = *pointer % (10 * 126 * 10);
|
||||
|
||||
// 11. Let byte2 be pointer / (10 × 126).
|
||||
// 12. Let byte2 be pointer / (10 × 126).
|
||||
auto byte2 = *pointer / (10 * 126);
|
||||
|
||||
// 12. Set pointer to pointer % (10 × 126).
|
||||
// 13. Set pointer to pointer % (10 × 126).
|
||||
pointer = *pointer % (10 * 126);
|
||||
|
||||
// 13. Let byte3 be pointer / 10.
|
||||
// 14. Let byte3 be pointer / 10.
|
||||
auto byte3 = *pointer / 10;
|
||||
|
||||
// 14. Let byte4 be pointer % 10.
|
||||
// 15. Let byte4 be pointer % 10.
|
||||
auto byte4 = *pointer % 10;
|
||||
|
||||
// 15. Return four bytes whose values are byte1 + 0x81, byte2 + 0x30, byte3 + 0x81, byte4 + 0x30.
|
||||
// 16. Return four bytes whose values are byte1 + 0x81, byte2 + 0x30, byte3 + 0x81, byte4 + 0x30.
|
||||
TRY(on_byte(static_cast<u8>(byte1 + 0x81)));
|
||||
TRY(on_byte(static_cast<u8>(byte2 + 0x30)));
|
||||
TRY(on_byte(static_cast<u8>(byte3 + 0x81)));
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -234,33 +234,6 @@ def main():
|
|||
|
||||
gb18030_table = prepare_table(data["gb18030"], GenerateAccessor.YES)
|
||||
|
||||
# FIXME: Update JSON to match GB-18030-2022 Encoding specification (https://github.com/whatwg/encoding/issues/312)
|
||||
# NOTE: See https://commits.webkit.org/264918@main
|
||||
gb18030_updates = {
|
||||
7182: 0xFE10,
|
||||
7183: 0xFE12,
|
||||
7184: 0xFE11,
|
||||
7185: 0xFE13,
|
||||
7186: 0xFE14,
|
||||
7187: 0xFE15,
|
||||
7188: 0xFE16,
|
||||
7201: 0xFE17,
|
||||
7202: 0xFE18,
|
||||
7208: 0xFE19,
|
||||
23775: 0x9FB4,
|
||||
23783: 0x9FB5,
|
||||
23788: 0x9FB6,
|
||||
23789: 0x9FB7,
|
||||
23795: 0x9FB8,
|
||||
23812: 0x9FB9,
|
||||
23829: 0x9FBA,
|
||||
23845: 0x9FBB,
|
||||
}
|
||||
|
||||
for index, value in gb18030_updates.items():
|
||||
if index < len(gb18030_table.code_points):
|
||||
gb18030_table.code_points[index] = value
|
||||
|
||||
tables = LookupTables(
|
||||
gb18030_ranges=data["gb18030-ranges"],
|
||||
indexes={
|
||||
|
|
|
|||
|
|
@ -143,6 +143,7 @@ Text/input/wpt-import/workers/nested_worker_close_self.worker.html
|
|||
Text/input/wpt-import/workers/nested_worker_importScripts.worker.html
|
||||
Text/input/wpt-import/workers/nested_worker_sync_xhr.worker.html
|
||||
Text/input/wpt-import/workers/nested_worker_terminate_from_document.html
|
||||
Text/input/wpt-import/encoding/legacy-mb-schinese/gb18030/gb18030-decoder.any.worker.html
|
||||
Text/input/wpt-import/WebCryptoAPI/historical.any.worker.html
|
||||
|
||||
; CORS fetch failures.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,280 @@
|
|||
Harness status: OK
|
||||
|
||||
Found 275 tests
|
||||
|
||||
275 Pass
|
||||
Pass gb18030 decoder: ASCII
|
||||
Pass gb18030 decoder: euro
|
||||
Pass gb18030 decoder: initial byte out of accepted ranges
|
||||
Pass gb18030 decoder: end of queue, gb18030 first not 0
|
||||
Pass gb18030 decoder: two bytes 0x81 0x28
|
||||
Pass gb18030 decoder: two bytes 0x81 0x40
|
||||
Pass gb18030 decoder: two bytes 0x81 0x7e
|
||||
Pass gb18030 decoder: two bytes 0x81 0x7f
|
||||
Pass gb18030 decoder: two bytes 0x81 0x80
|
||||
Pass gb18030 decoder: two bytes 0x81 0xFE
|
||||
Pass gb18030 decoder: two bytes 0x81 0xFF
|
||||
Pass gb18030 decoder: two bytes 0xFE 0x40
|
||||
Pass gb18030 decoder: two bytes 0xFE 0xFE
|
||||
Pass gb18030 decoder: two bytes 0xFE 0xFF
|
||||
Pass gb18030 decoder: two bytes 0x81 0x30
|
||||
Pass gb18030 decoder: three bytes 0x81 0x30 0xFE
|
||||
Pass gb18030 decoder: three bytes 0x81 0x30 0xFF
|
||||
Pass gb18030 decoder: four bytes 0x81 0x30 0xFE 0x29
|
||||
Pass gb18030 decoder: four bytes 0xFE 0x39 0xFE 0x39
|
||||
Pass gb18030 decoder: pointer 7458
|
||||
Pass gb18030 decoder: pointer 7457
|
||||
Pass gb18030 decoder: pointer 7459
|
||||
Pass gb18030 decoder: pointer 39419
|
||||
Pass gb18030 decoder: pointer 39420
|
||||
Pass gb18030 decoder: pointer 189999
|
||||
Pass gb18030 decoder: pointer 189000
|
||||
Pass gb18030 decoder: pointer 1237575
|
||||
Pass gb18030 decoder: pointer 1237576
|
||||
Pass gb18030 decoder: legacy ICU special case 1
|
||||
Pass gb18030 decoder: legacy ICU special case 2
|
||||
Pass gb18030 decoder: legacy ICU special case 3
|
||||
Pass gb18030 decoder: undefined
|
||||
Pass gb18030 decoder: GB18030-2022 1
|
||||
Pass gb18030 decoder: GB18030-2022 2
|
||||
Pass gb18030 decoder: GB18030-2022 3
|
||||
Pass gb18030 decoder: GB18030-2022 4
|
||||
Pass gb18030 decoder: GB18030-2022 5
|
||||
Pass gb18030 decoder: GB18030-2022 6
|
||||
Pass gb18030 decoder: GB18030-2022 7
|
||||
Pass gb18030 decoder: GB18030-2022 8
|
||||
Pass gb18030 decoder: GB18030-2022 9
|
||||
Pass gb18030 decoder: GB18030-2022 10
|
||||
Pass gb18030 decoder: GB18030-2022 11
|
||||
Pass gb18030 decoder: GB18030-2022 12
|
||||
Pass gb18030 decoder: GB18030-2022 13
|
||||
Pass gb18030 decoder: GB18030-2022 14
|
||||
Pass gb18030 decoder: GB18030-2022 15
|
||||
Pass gb18030 decoder: GB18030-2022 16
|
||||
Pass gb18030 decoder: GB18030-2022 17
|
||||
Pass gb18030 decoder: GB18030-2022 18
|
||||
Pass gb18030 decoder: GB18030-2022 19
|
||||
Pass gb18030 decoder: GB18030-2022 20
|
||||
Pass gb18030 decoder: GB18030-2022 21
|
||||
Pass gb18030 decoder: GB18030-2022 22
|
||||
Pass gb18030 decoder: GB18030-2022 23
|
||||
Pass gb18030 decoder: GB18030-2022 24
|
||||
Pass gb18030 decoder: GB18030-2022 25
|
||||
Pass gb18030 decoder: GB18030-2022 26
|
||||
Pass gb18030 decoder: GB18030-2022 27
|
||||
Pass gb18030 decoder: GB18030-2022 28
|
||||
Pass gb18030 decoder: GB18030-2022 29
|
||||
Pass gb18030 decoder: GB18030-2022 30
|
||||
Pass gb18030 decoder: GB18030-2022 31
|
||||
Pass gb18030 decoder: GB18030-2022 32
|
||||
Pass gb18030 decoder: GB18030-2022 33
|
||||
Pass gb18030 decoder: GB18030-2022 34
|
||||
Pass gb18030 decoder: GB18030-2022 35
|
||||
Pass gb18030 decoder: GB18030-2022 36
|
||||
Pass gb18030 decoder: range 0
|
||||
Pass gb18030 decoder: range 1
|
||||
Pass gb18030 decoder: range 2
|
||||
Pass gb18030 decoder: range 3
|
||||
Pass gb18030 decoder: range 4
|
||||
Pass gb18030 decoder: range 5
|
||||
Pass gb18030 decoder: range 6
|
||||
Pass gb18030 decoder: range 7
|
||||
Pass gb18030 decoder: range 8
|
||||
Pass gb18030 decoder: range 9
|
||||
Pass gb18030 decoder: range 10
|
||||
Pass gb18030 decoder: range 11
|
||||
Pass gb18030 decoder: range 12
|
||||
Pass gb18030 decoder: range 13
|
||||
Pass gb18030 decoder: range 14
|
||||
Pass gb18030 decoder: range 15
|
||||
Pass gb18030 decoder: range 16
|
||||
Pass gb18030 decoder: range 17
|
||||
Pass gb18030 decoder: range 18
|
||||
Pass gb18030 decoder: range 19
|
||||
Pass gb18030 decoder: range 20
|
||||
Pass gb18030 decoder: range 21
|
||||
Pass gb18030 decoder: range 22
|
||||
Pass gb18030 decoder: range 23
|
||||
Pass gb18030 decoder: range 24
|
||||
Pass gb18030 decoder: range 25
|
||||
Pass gb18030 decoder: range 26
|
||||
Pass gb18030 decoder: range 27
|
||||
Pass gb18030 decoder: range 28
|
||||
Pass gb18030 decoder: range 29
|
||||
Pass gb18030 decoder: range 30
|
||||
Pass gb18030 decoder: range 31
|
||||
Pass gb18030 decoder: range 32
|
||||
Pass gb18030 decoder: range 33
|
||||
Pass gb18030 decoder: range 34
|
||||
Pass gb18030 decoder: range 35
|
||||
Pass gb18030 decoder: range 36
|
||||
Pass gb18030 decoder: range 37
|
||||
Pass gb18030 decoder: range 38
|
||||
Pass gb18030 decoder: range 39
|
||||
Pass gb18030 decoder: range 40
|
||||
Pass gb18030 decoder: range 41
|
||||
Pass gb18030 decoder: range 42
|
||||
Pass gb18030 decoder: range 43
|
||||
Pass gb18030 decoder: range 44
|
||||
Pass gb18030 decoder: range 45
|
||||
Pass gb18030 decoder: range 46
|
||||
Pass gb18030 decoder: range 47
|
||||
Pass gb18030 decoder: range 48
|
||||
Pass gb18030 decoder: range 49
|
||||
Pass gb18030 decoder: range 50
|
||||
Pass gb18030 decoder: range 51
|
||||
Pass gb18030 decoder: range 52
|
||||
Pass gb18030 decoder: range 53
|
||||
Pass gb18030 decoder: range 54
|
||||
Pass gb18030 decoder: range 55
|
||||
Pass gb18030 decoder: range 56
|
||||
Pass gb18030 decoder: range 57
|
||||
Pass gb18030 decoder: range 58
|
||||
Pass gb18030 decoder: range 59
|
||||
Pass gb18030 decoder: range 60
|
||||
Pass gb18030 decoder: range 61
|
||||
Pass gb18030 decoder: range 62
|
||||
Pass gb18030 decoder: range 63
|
||||
Pass gb18030 decoder: range 64
|
||||
Pass gb18030 decoder: range 65
|
||||
Pass gb18030 decoder: range 66
|
||||
Pass gb18030 decoder: range 67
|
||||
Pass gb18030 decoder: range 68
|
||||
Pass gb18030 decoder: range 69
|
||||
Pass gb18030 decoder: range 70
|
||||
Pass gb18030 decoder: range 71
|
||||
Pass gb18030 decoder: range 72
|
||||
Pass gb18030 decoder: range 73
|
||||
Pass gb18030 decoder: range 74
|
||||
Pass gb18030 decoder: range 75
|
||||
Pass gb18030 decoder: range 76
|
||||
Pass gb18030 decoder: range 77
|
||||
Pass gb18030 decoder: range 78
|
||||
Pass gb18030 decoder: range 79
|
||||
Pass gb18030 decoder: range 80
|
||||
Pass gb18030 decoder: range 81
|
||||
Pass gb18030 decoder: range 82
|
||||
Pass gb18030 decoder: range 83
|
||||
Pass gb18030 decoder: range 84
|
||||
Pass gb18030 decoder: range 85
|
||||
Pass gb18030 decoder: range 86
|
||||
Pass gb18030 decoder: range 87
|
||||
Pass gb18030 decoder: range 88
|
||||
Pass gb18030 decoder: range 89
|
||||
Pass gb18030 decoder: range 90
|
||||
Pass gb18030 decoder: range 91
|
||||
Pass gb18030 decoder: range 92
|
||||
Pass gb18030 decoder: range 93
|
||||
Pass gb18030 decoder: range 94
|
||||
Pass gb18030 decoder: range 95
|
||||
Pass gb18030 decoder: range 96
|
||||
Pass gb18030 decoder: range 97
|
||||
Pass gb18030 decoder: range 98
|
||||
Pass gb18030 decoder: range 99
|
||||
Pass gb18030 decoder: range 100
|
||||
Pass gb18030 decoder: range 101
|
||||
Pass gb18030 decoder: range 102
|
||||
Pass gb18030 decoder: range 103
|
||||
Pass gb18030 decoder: range 104
|
||||
Pass gb18030 decoder: range 105
|
||||
Pass gb18030 decoder: range 106
|
||||
Pass gb18030 decoder: range 107
|
||||
Pass gb18030 decoder: range 108
|
||||
Pass gb18030 decoder: range 109
|
||||
Pass gb18030 decoder: range 110
|
||||
Pass gb18030 decoder: range 111
|
||||
Pass gb18030 decoder: range 112
|
||||
Pass gb18030 decoder: range 113
|
||||
Pass gb18030 decoder: range 114
|
||||
Pass gb18030 decoder: range 115
|
||||
Pass gb18030 decoder: range 116
|
||||
Pass gb18030 decoder: range 117
|
||||
Pass gb18030 decoder: range 118
|
||||
Pass gb18030 decoder: range 119
|
||||
Pass gb18030 decoder: range 120
|
||||
Pass gb18030 decoder: range 121
|
||||
Pass gb18030 decoder: range 122
|
||||
Pass gb18030 decoder: range 123
|
||||
Pass gb18030 decoder: range 124
|
||||
Pass gb18030 decoder: range 125
|
||||
Pass gb18030 decoder: range 126
|
||||
Pass gb18030 decoder: range 127
|
||||
Pass gb18030 decoder: range 128
|
||||
Pass gb18030 decoder: range 129
|
||||
Pass gb18030 decoder: range 130
|
||||
Pass gb18030 decoder: range 131
|
||||
Pass gb18030 decoder: range 132
|
||||
Pass gb18030 decoder: range 133
|
||||
Pass gb18030 decoder: range 134
|
||||
Pass gb18030 decoder: range 135
|
||||
Pass gb18030 decoder: range 136
|
||||
Pass gb18030 decoder: range 137
|
||||
Pass gb18030 decoder: range 138
|
||||
Pass gb18030 decoder: range 139
|
||||
Pass gb18030 decoder: range 140
|
||||
Pass gb18030 decoder: range 141
|
||||
Pass gb18030 decoder: range 142
|
||||
Pass gb18030 decoder: range 143
|
||||
Pass gb18030 decoder: range 144
|
||||
Pass gb18030 decoder: range 145
|
||||
Pass gb18030 decoder: range 146
|
||||
Pass gb18030 decoder: range 147
|
||||
Pass gb18030 decoder: range 148
|
||||
Pass gb18030 decoder: range 149
|
||||
Pass gb18030 decoder: range 150
|
||||
Pass gb18030 decoder: range 151
|
||||
Pass gb18030 decoder: range 152
|
||||
Pass gb18030 decoder: range 153
|
||||
Pass gb18030 decoder: range 154
|
||||
Pass gb18030 decoder: range 155
|
||||
Pass gb18030 decoder: range 156
|
||||
Pass gb18030 decoder: range 157
|
||||
Pass gb18030 decoder: range 158
|
||||
Pass gb18030 decoder: range 159
|
||||
Pass gb18030 decoder: range 160
|
||||
Pass gb18030 decoder: range 161
|
||||
Pass gb18030 decoder: range 162
|
||||
Pass gb18030 decoder: range 163
|
||||
Pass gb18030 decoder: range 164
|
||||
Pass gb18030 decoder: range 165
|
||||
Pass gb18030 decoder: range 166
|
||||
Pass gb18030 decoder: range 167
|
||||
Pass gb18030 decoder: range 168
|
||||
Pass gb18030 decoder: range 169
|
||||
Pass gb18030 decoder: range 170
|
||||
Pass gb18030 decoder: range 171
|
||||
Pass gb18030 decoder: range 172
|
||||
Pass gb18030 decoder: range 173
|
||||
Pass gb18030 decoder: range 174
|
||||
Pass gb18030 decoder: range 175
|
||||
Pass gb18030 decoder: range 176
|
||||
Pass gb18030 decoder: range 177
|
||||
Pass gb18030 decoder: range 178
|
||||
Pass gb18030 decoder: range 179
|
||||
Pass gb18030 decoder: range 180
|
||||
Pass gb18030 decoder: range 181
|
||||
Pass gb18030 decoder: range 182
|
||||
Pass gb18030 decoder: range 183
|
||||
Pass gb18030 decoder: range 184
|
||||
Pass gb18030 decoder: range 185
|
||||
Pass gb18030 decoder: range 186
|
||||
Pass gb18030 decoder: range 187
|
||||
Pass gb18030 decoder: range 188
|
||||
Pass gb18030 decoder: range 189
|
||||
Pass gb18030 decoder: range 190
|
||||
Pass gb18030 decoder: range 191
|
||||
Pass gb18030 decoder: range 192
|
||||
Pass gb18030 decoder: range 193
|
||||
Pass gb18030 decoder: range 194
|
||||
Pass gb18030 decoder: range 195
|
||||
Pass gb18030 decoder: range 196
|
||||
Pass gb18030 decoder: range 197
|
||||
Pass gb18030 decoder: range 198
|
||||
Pass gb18030 decoder: range 199
|
||||
Pass gb18030 decoder: range 200
|
||||
Pass gb18030 decoder: range 201
|
||||
Pass gb18030 decoder: range 202
|
||||
Pass gb18030 decoder: range 203
|
||||
Pass gb18030 decoder: range 204
|
||||
Pass gb18030 decoder: range 205
|
||||
Pass gb18030 decoder: range 206
|
||||
|
|
@ -0,0 +1,280 @@
|
|||
Harness status: OK
|
||||
|
||||
Found 275 tests
|
||||
|
||||
275 Pass
|
||||
Pass gb18030 decoder: ASCII
|
||||
Pass gb18030 decoder: euro
|
||||
Pass gb18030 decoder: initial byte out of accepted ranges
|
||||
Pass gb18030 decoder: end of queue, gb18030 first not 0
|
||||
Pass gb18030 decoder: two bytes 0x81 0x28
|
||||
Pass gb18030 decoder: two bytes 0x81 0x40
|
||||
Pass gb18030 decoder: two bytes 0x81 0x7e
|
||||
Pass gb18030 decoder: two bytes 0x81 0x7f
|
||||
Pass gb18030 decoder: two bytes 0x81 0x80
|
||||
Pass gb18030 decoder: two bytes 0x81 0xFE
|
||||
Pass gb18030 decoder: two bytes 0x81 0xFF
|
||||
Pass gb18030 decoder: two bytes 0xFE 0x40
|
||||
Pass gb18030 decoder: two bytes 0xFE 0xFE
|
||||
Pass gb18030 decoder: two bytes 0xFE 0xFF
|
||||
Pass gb18030 decoder: two bytes 0x81 0x30
|
||||
Pass gb18030 decoder: three bytes 0x81 0x30 0xFE
|
||||
Pass gb18030 decoder: three bytes 0x81 0x30 0xFF
|
||||
Pass gb18030 decoder: four bytes 0x81 0x30 0xFE 0x29
|
||||
Pass gb18030 decoder: four bytes 0xFE 0x39 0xFE 0x39
|
||||
Pass gb18030 decoder: pointer 7458
|
||||
Pass gb18030 decoder: pointer 7457
|
||||
Pass gb18030 decoder: pointer 7459
|
||||
Pass gb18030 decoder: pointer 39419
|
||||
Pass gb18030 decoder: pointer 39420
|
||||
Pass gb18030 decoder: pointer 189999
|
||||
Pass gb18030 decoder: pointer 189000
|
||||
Pass gb18030 decoder: pointer 1237575
|
||||
Pass gb18030 decoder: pointer 1237576
|
||||
Pass gb18030 decoder: legacy ICU special case 1
|
||||
Pass gb18030 decoder: legacy ICU special case 2
|
||||
Pass gb18030 decoder: legacy ICU special case 3
|
||||
Pass gb18030 decoder: undefined
|
||||
Pass gb18030 decoder: GB18030-2022 1
|
||||
Pass gb18030 decoder: GB18030-2022 2
|
||||
Pass gb18030 decoder: GB18030-2022 3
|
||||
Pass gb18030 decoder: GB18030-2022 4
|
||||
Pass gb18030 decoder: GB18030-2022 5
|
||||
Pass gb18030 decoder: GB18030-2022 6
|
||||
Pass gb18030 decoder: GB18030-2022 7
|
||||
Pass gb18030 decoder: GB18030-2022 8
|
||||
Pass gb18030 decoder: GB18030-2022 9
|
||||
Pass gb18030 decoder: GB18030-2022 10
|
||||
Pass gb18030 decoder: GB18030-2022 11
|
||||
Pass gb18030 decoder: GB18030-2022 12
|
||||
Pass gb18030 decoder: GB18030-2022 13
|
||||
Pass gb18030 decoder: GB18030-2022 14
|
||||
Pass gb18030 decoder: GB18030-2022 15
|
||||
Pass gb18030 decoder: GB18030-2022 16
|
||||
Pass gb18030 decoder: GB18030-2022 17
|
||||
Pass gb18030 decoder: GB18030-2022 18
|
||||
Pass gb18030 decoder: GB18030-2022 19
|
||||
Pass gb18030 decoder: GB18030-2022 20
|
||||
Pass gb18030 decoder: GB18030-2022 21
|
||||
Pass gb18030 decoder: GB18030-2022 22
|
||||
Pass gb18030 decoder: GB18030-2022 23
|
||||
Pass gb18030 decoder: GB18030-2022 24
|
||||
Pass gb18030 decoder: GB18030-2022 25
|
||||
Pass gb18030 decoder: GB18030-2022 26
|
||||
Pass gb18030 decoder: GB18030-2022 27
|
||||
Pass gb18030 decoder: GB18030-2022 28
|
||||
Pass gb18030 decoder: GB18030-2022 29
|
||||
Pass gb18030 decoder: GB18030-2022 30
|
||||
Pass gb18030 decoder: GB18030-2022 31
|
||||
Pass gb18030 decoder: GB18030-2022 32
|
||||
Pass gb18030 decoder: GB18030-2022 33
|
||||
Pass gb18030 decoder: GB18030-2022 34
|
||||
Pass gb18030 decoder: GB18030-2022 35
|
||||
Pass gb18030 decoder: GB18030-2022 36
|
||||
Pass gb18030 decoder: range 0
|
||||
Pass gb18030 decoder: range 1
|
||||
Pass gb18030 decoder: range 2
|
||||
Pass gb18030 decoder: range 3
|
||||
Pass gb18030 decoder: range 4
|
||||
Pass gb18030 decoder: range 5
|
||||
Pass gb18030 decoder: range 6
|
||||
Pass gb18030 decoder: range 7
|
||||
Pass gb18030 decoder: range 8
|
||||
Pass gb18030 decoder: range 9
|
||||
Pass gb18030 decoder: range 10
|
||||
Pass gb18030 decoder: range 11
|
||||
Pass gb18030 decoder: range 12
|
||||
Pass gb18030 decoder: range 13
|
||||
Pass gb18030 decoder: range 14
|
||||
Pass gb18030 decoder: range 15
|
||||
Pass gb18030 decoder: range 16
|
||||
Pass gb18030 decoder: range 17
|
||||
Pass gb18030 decoder: range 18
|
||||
Pass gb18030 decoder: range 19
|
||||
Pass gb18030 decoder: range 20
|
||||
Pass gb18030 decoder: range 21
|
||||
Pass gb18030 decoder: range 22
|
||||
Pass gb18030 decoder: range 23
|
||||
Pass gb18030 decoder: range 24
|
||||
Pass gb18030 decoder: range 25
|
||||
Pass gb18030 decoder: range 26
|
||||
Pass gb18030 decoder: range 27
|
||||
Pass gb18030 decoder: range 28
|
||||
Pass gb18030 decoder: range 29
|
||||
Pass gb18030 decoder: range 30
|
||||
Pass gb18030 decoder: range 31
|
||||
Pass gb18030 decoder: range 32
|
||||
Pass gb18030 decoder: range 33
|
||||
Pass gb18030 decoder: range 34
|
||||
Pass gb18030 decoder: range 35
|
||||
Pass gb18030 decoder: range 36
|
||||
Pass gb18030 decoder: range 37
|
||||
Pass gb18030 decoder: range 38
|
||||
Pass gb18030 decoder: range 39
|
||||
Pass gb18030 decoder: range 40
|
||||
Pass gb18030 decoder: range 41
|
||||
Pass gb18030 decoder: range 42
|
||||
Pass gb18030 decoder: range 43
|
||||
Pass gb18030 decoder: range 44
|
||||
Pass gb18030 decoder: range 45
|
||||
Pass gb18030 decoder: range 46
|
||||
Pass gb18030 decoder: range 47
|
||||
Pass gb18030 decoder: range 48
|
||||
Pass gb18030 decoder: range 49
|
||||
Pass gb18030 decoder: range 50
|
||||
Pass gb18030 decoder: range 51
|
||||
Pass gb18030 decoder: range 52
|
||||
Pass gb18030 decoder: range 53
|
||||
Pass gb18030 decoder: range 54
|
||||
Pass gb18030 decoder: range 55
|
||||
Pass gb18030 decoder: range 56
|
||||
Pass gb18030 decoder: range 57
|
||||
Pass gb18030 decoder: range 58
|
||||
Pass gb18030 decoder: range 59
|
||||
Pass gb18030 decoder: range 60
|
||||
Pass gb18030 decoder: range 61
|
||||
Pass gb18030 decoder: range 62
|
||||
Pass gb18030 decoder: range 63
|
||||
Pass gb18030 decoder: range 64
|
||||
Pass gb18030 decoder: range 65
|
||||
Pass gb18030 decoder: range 66
|
||||
Pass gb18030 decoder: range 67
|
||||
Pass gb18030 decoder: range 68
|
||||
Pass gb18030 decoder: range 69
|
||||
Pass gb18030 decoder: range 70
|
||||
Pass gb18030 decoder: range 71
|
||||
Pass gb18030 decoder: range 72
|
||||
Pass gb18030 decoder: range 73
|
||||
Pass gb18030 decoder: range 74
|
||||
Pass gb18030 decoder: range 75
|
||||
Pass gb18030 decoder: range 76
|
||||
Pass gb18030 decoder: range 77
|
||||
Pass gb18030 decoder: range 78
|
||||
Pass gb18030 decoder: range 79
|
||||
Pass gb18030 decoder: range 80
|
||||
Pass gb18030 decoder: range 81
|
||||
Pass gb18030 decoder: range 82
|
||||
Pass gb18030 decoder: range 83
|
||||
Pass gb18030 decoder: range 84
|
||||
Pass gb18030 decoder: range 85
|
||||
Pass gb18030 decoder: range 86
|
||||
Pass gb18030 decoder: range 87
|
||||
Pass gb18030 decoder: range 88
|
||||
Pass gb18030 decoder: range 89
|
||||
Pass gb18030 decoder: range 90
|
||||
Pass gb18030 decoder: range 91
|
||||
Pass gb18030 decoder: range 92
|
||||
Pass gb18030 decoder: range 93
|
||||
Pass gb18030 decoder: range 94
|
||||
Pass gb18030 decoder: range 95
|
||||
Pass gb18030 decoder: range 96
|
||||
Pass gb18030 decoder: range 97
|
||||
Pass gb18030 decoder: range 98
|
||||
Pass gb18030 decoder: range 99
|
||||
Pass gb18030 decoder: range 100
|
||||
Pass gb18030 decoder: range 101
|
||||
Pass gb18030 decoder: range 102
|
||||
Pass gb18030 decoder: range 103
|
||||
Pass gb18030 decoder: range 104
|
||||
Pass gb18030 decoder: range 105
|
||||
Pass gb18030 decoder: range 106
|
||||
Pass gb18030 decoder: range 107
|
||||
Pass gb18030 decoder: range 108
|
||||
Pass gb18030 decoder: range 109
|
||||
Pass gb18030 decoder: range 110
|
||||
Pass gb18030 decoder: range 111
|
||||
Pass gb18030 decoder: range 112
|
||||
Pass gb18030 decoder: range 113
|
||||
Pass gb18030 decoder: range 114
|
||||
Pass gb18030 decoder: range 115
|
||||
Pass gb18030 decoder: range 116
|
||||
Pass gb18030 decoder: range 117
|
||||
Pass gb18030 decoder: range 118
|
||||
Pass gb18030 decoder: range 119
|
||||
Pass gb18030 decoder: range 120
|
||||
Pass gb18030 decoder: range 121
|
||||
Pass gb18030 decoder: range 122
|
||||
Pass gb18030 decoder: range 123
|
||||
Pass gb18030 decoder: range 124
|
||||
Pass gb18030 decoder: range 125
|
||||
Pass gb18030 decoder: range 126
|
||||
Pass gb18030 decoder: range 127
|
||||
Pass gb18030 decoder: range 128
|
||||
Pass gb18030 decoder: range 129
|
||||
Pass gb18030 decoder: range 130
|
||||
Pass gb18030 decoder: range 131
|
||||
Pass gb18030 decoder: range 132
|
||||
Pass gb18030 decoder: range 133
|
||||
Pass gb18030 decoder: range 134
|
||||
Pass gb18030 decoder: range 135
|
||||
Pass gb18030 decoder: range 136
|
||||
Pass gb18030 decoder: range 137
|
||||
Pass gb18030 decoder: range 138
|
||||
Pass gb18030 decoder: range 139
|
||||
Pass gb18030 decoder: range 140
|
||||
Pass gb18030 decoder: range 141
|
||||
Pass gb18030 decoder: range 142
|
||||
Pass gb18030 decoder: range 143
|
||||
Pass gb18030 decoder: range 144
|
||||
Pass gb18030 decoder: range 145
|
||||
Pass gb18030 decoder: range 146
|
||||
Pass gb18030 decoder: range 147
|
||||
Pass gb18030 decoder: range 148
|
||||
Pass gb18030 decoder: range 149
|
||||
Pass gb18030 decoder: range 150
|
||||
Pass gb18030 decoder: range 151
|
||||
Pass gb18030 decoder: range 152
|
||||
Pass gb18030 decoder: range 153
|
||||
Pass gb18030 decoder: range 154
|
||||
Pass gb18030 decoder: range 155
|
||||
Pass gb18030 decoder: range 156
|
||||
Pass gb18030 decoder: range 157
|
||||
Pass gb18030 decoder: range 158
|
||||
Pass gb18030 decoder: range 159
|
||||
Pass gb18030 decoder: range 160
|
||||
Pass gb18030 decoder: range 161
|
||||
Pass gb18030 decoder: range 162
|
||||
Pass gb18030 decoder: range 163
|
||||
Pass gb18030 decoder: range 164
|
||||
Pass gb18030 decoder: range 165
|
||||
Pass gb18030 decoder: range 166
|
||||
Pass gb18030 decoder: range 167
|
||||
Pass gb18030 decoder: range 168
|
||||
Pass gb18030 decoder: range 169
|
||||
Pass gb18030 decoder: range 170
|
||||
Pass gb18030 decoder: range 171
|
||||
Pass gb18030 decoder: range 172
|
||||
Pass gb18030 decoder: range 173
|
||||
Pass gb18030 decoder: range 174
|
||||
Pass gb18030 decoder: range 175
|
||||
Pass gb18030 decoder: range 176
|
||||
Pass gb18030 decoder: range 177
|
||||
Pass gb18030 decoder: range 178
|
||||
Pass gb18030 decoder: range 179
|
||||
Pass gb18030 decoder: range 180
|
||||
Pass gb18030 decoder: range 181
|
||||
Pass gb18030 decoder: range 182
|
||||
Pass gb18030 decoder: range 183
|
||||
Pass gb18030 decoder: range 184
|
||||
Pass gb18030 decoder: range 185
|
||||
Pass gb18030 decoder: range 186
|
||||
Pass gb18030 decoder: range 187
|
||||
Pass gb18030 decoder: range 188
|
||||
Pass gb18030 decoder: range 189
|
||||
Pass gb18030 decoder: range 190
|
||||
Pass gb18030 decoder: range 191
|
||||
Pass gb18030 decoder: range 192
|
||||
Pass gb18030 decoder: range 193
|
||||
Pass gb18030 decoder: range 194
|
||||
Pass gb18030 decoder: range 195
|
||||
Pass gb18030 decoder: range 196
|
||||
Pass gb18030 decoder: range 197
|
||||
Pass gb18030 decoder: range 198
|
||||
Pass gb18030 decoder: range 199
|
||||
Pass gb18030 decoder: range 200
|
||||
Pass gb18030 decoder: range 201
|
||||
Pass gb18030 decoder: range 202
|
||||
Pass gb18030 decoder: range 203
|
||||
Pass gb18030 decoder: range 204
|
||||
Pass gb18030 decoder: range 205
|
||||
Pass gb18030 decoder: range 206
|
||||
|
|
@ -0,0 +1,259 @@
|
|||
Harness status: OK
|
||||
|
||||
Found 254 tests
|
||||
|
||||
254 Pass
|
||||
Pass gb18030 encoder: very basic
|
||||
Pass gb18030 encoder: Euro
|
||||
Pass gb18030 encoder: character
|
||||
Pass gb18030 encoder: PUA
|
||||
Pass gb18030 encoder: PUA #2
|
||||
Pass gb18030 encoder: PUA #3
|
||||
Pass gb18030 encoder: poo
|
||||
Pass gb18030 encoder: Ranges pointer special case
|
||||
Pass gb18030 encoder: legacy ICU special case 1
|
||||
Pass gb18030 encoder: legacy ICU special case 2
|
||||
Pass gb18030 encoder: legacy ICU special case 3
|
||||
Pass gb18030 encoder: GB18030-2022 1
|
||||
Pass gb18030 encoder: GB18030-2022 2
|
||||
Pass gb18030 encoder: GB18030-2022 3
|
||||
Pass gb18030 encoder: GB18030-2022 4
|
||||
Pass gb18030 encoder: GB18030-2022 5
|
||||
Pass gb18030 encoder: GB18030-2022 6
|
||||
Pass gb18030 encoder: GB18030-2022 7
|
||||
Pass gb18030 encoder: GB18030-2022 8
|
||||
Pass gb18030 encoder: GB18030-2022 9
|
||||
Pass gb18030 encoder: GB18030-2022 10
|
||||
Pass gb18030 encoder: GB18030-2022 11
|
||||
Pass gb18030 encoder: GB18030-2022 12
|
||||
Pass gb18030 encoder: GB18030-2022 13
|
||||
Pass gb18030 encoder: GB18030-2022 14
|
||||
Pass gb18030 encoder: GB18030-2022 15
|
||||
Pass gb18030 encoder: GB18030-2022 16
|
||||
Pass gb18030 encoder: GB18030-2022 17
|
||||
Pass gb18030 encoder: GB18030-2022 18
|
||||
Pass gb18030 encoder: GB18030-2022 19
|
||||
Pass gb18030 encoder: GB18030-2022 20
|
||||
Pass gb18030 encoder: GB18030-2022 21
|
||||
Pass gb18030 encoder: GB18030-2022 22
|
||||
Pass gb18030 encoder: GB18030-2022 23
|
||||
Pass gb18030 encoder: GB18030-2022 24
|
||||
Pass gb18030 encoder: GB18030-2022 25
|
||||
Pass gb18030 encoder: GB18030-2022 26
|
||||
Pass gb18030 encoder: GB18030-2022 27
|
||||
Pass gb18030 encoder: GB18030-2022 28
|
||||
Pass gb18030 encoder: GB18030-2022 29
|
||||
Pass gb18030 encoder: GB18030-2022 30
|
||||
Pass gb18030 encoder: GB18030-2022 31
|
||||
Pass gb18030 encoder: GB18030-2022 32
|
||||
Pass gb18030 encoder: GB18030-2022 33
|
||||
Pass gb18030 encoder: GB18030-2022 34
|
||||
Pass gb18030 encoder: GB18030-2022 35
|
||||
Pass gb18030 encoder: GB18030-2022 36
|
||||
Pass gb18030 encoder: range 0
|
||||
Pass gb18030 encoder: range 1
|
||||
Pass gb18030 encoder: range 2
|
||||
Pass gb18030 encoder: range 3
|
||||
Pass gb18030 encoder: range 4
|
||||
Pass gb18030 encoder: range 5
|
||||
Pass gb18030 encoder: range 6
|
||||
Pass gb18030 encoder: range 7
|
||||
Pass gb18030 encoder: range 8
|
||||
Pass gb18030 encoder: range 9
|
||||
Pass gb18030 encoder: range 10
|
||||
Pass gb18030 encoder: range 11
|
||||
Pass gb18030 encoder: range 12
|
||||
Pass gb18030 encoder: range 13
|
||||
Pass gb18030 encoder: range 14
|
||||
Pass gb18030 encoder: range 15
|
||||
Pass gb18030 encoder: range 16
|
||||
Pass gb18030 encoder: range 17
|
||||
Pass gb18030 encoder: range 18
|
||||
Pass gb18030 encoder: range 19
|
||||
Pass gb18030 encoder: range 20
|
||||
Pass gb18030 encoder: range 21
|
||||
Pass gb18030 encoder: range 22
|
||||
Pass gb18030 encoder: range 23
|
||||
Pass gb18030 encoder: range 24
|
||||
Pass gb18030 encoder: range 25
|
||||
Pass gb18030 encoder: range 26
|
||||
Pass gb18030 encoder: range 27
|
||||
Pass gb18030 encoder: range 28
|
||||
Pass gb18030 encoder: range 29
|
||||
Pass gb18030 encoder: range 30
|
||||
Pass gb18030 encoder: range 31
|
||||
Pass gb18030 encoder: range 32
|
||||
Pass gb18030 encoder: range 33
|
||||
Pass gb18030 encoder: range 34
|
||||
Pass gb18030 encoder: range 35
|
||||
Pass gb18030 encoder: range 36
|
||||
Pass gb18030 encoder: range 37
|
||||
Pass gb18030 encoder: range 38
|
||||
Pass gb18030 encoder: range 39
|
||||
Pass gb18030 encoder: range 40
|
||||
Pass gb18030 encoder: range 41
|
||||
Pass gb18030 encoder: range 42
|
||||
Pass gb18030 encoder: range 43
|
||||
Pass gb18030 encoder: range 44
|
||||
Pass gb18030 encoder: range 45
|
||||
Pass gb18030 encoder: range 46
|
||||
Pass gb18030 encoder: range 47
|
||||
Pass gb18030 encoder: range 48
|
||||
Pass gb18030 encoder: range 49
|
||||
Pass gb18030 encoder: range 50
|
||||
Pass gb18030 encoder: range 51
|
||||
Pass gb18030 encoder: range 52
|
||||
Pass gb18030 encoder: range 53
|
||||
Pass gb18030 encoder: range 54
|
||||
Pass gb18030 encoder: range 55
|
||||
Pass gb18030 encoder: range 56
|
||||
Pass gb18030 encoder: range 57
|
||||
Pass gb18030 encoder: range 58
|
||||
Pass gb18030 encoder: range 59
|
||||
Pass gb18030 encoder: range 60
|
||||
Pass gb18030 encoder: range 61
|
||||
Pass gb18030 encoder: range 62
|
||||
Pass gb18030 encoder: range 63
|
||||
Pass gb18030 encoder: range 64
|
||||
Pass gb18030 encoder: range 65
|
||||
Pass gb18030 encoder: range 66
|
||||
Pass gb18030 encoder: range 67
|
||||
Pass gb18030 encoder: range 68
|
||||
Pass gb18030 encoder: range 69
|
||||
Pass gb18030 encoder: range 70
|
||||
Pass gb18030 encoder: range 71
|
||||
Pass gb18030 encoder: range 72
|
||||
Pass gb18030 encoder: range 73
|
||||
Pass gb18030 encoder: range 74
|
||||
Pass gb18030 encoder: range 75
|
||||
Pass gb18030 encoder: range 76
|
||||
Pass gb18030 encoder: range 77
|
||||
Pass gb18030 encoder: range 78
|
||||
Pass gb18030 encoder: range 79
|
||||
Pass gb18030 encoder: range 80
|
||||
Pass gb18030 encoder: range 81
|
||||
Pass gb18030 encoder: range 82
|
||||
Pass gb18030 encoder: range 83
|
||||
Pass gb18030 encoder: range 84
|
||||
Pass gb18030 encoder: range 85
|
||||
Pass gb18030 encoder: range 86
|
||||
Pass gb18030 encoder: range 87
|
||||
Pass gb18030 encoder: range 88
|
||||
Pass gb18030 encoder: range 89
|
||||
Pass gb18030 encoder: range 90
|
||||
Pass gb18030 encoder: range 91
|
||||
Pass gb18030 encoder: range 92
|
||||
Pass gb18030 encoder: range 93
|
||||
Pass gb18030 encoder: range 94
|
||||
Pass gb18030 encoder: range 95
|
||||
Pass gb18030 encoder: range 96
|
||||
Pass gb18030 encoder: range 97
|
||||
Pass gb18030 encoder: range 98
|
||||
Pass gb18030 encoder: range 99
|
||||
Pass gb18030 encoder: range 100
|
||||
Pass gb18030 encoder: range 101
|
||||
Pass gb18030 encoder: range 102
|
||||
Pass gb18030 encoder: range 103
|
||||
Pass gb18030 encoder: range 104
|
||||
Pass gb18030 encoder: range 105
|
||||
Pass gb18030 encoder: range 106
|
||||
Pass gb18030 encoder: range 107
|
||||
Pass gb18030 encoder: range 108
|
||||
Pass gb18030 encoder: range 109
|
||||
Pass gb18030 encoder: range 110
|
||||
Pass gb18030 encoder: range 111
|
||||
Pass gb18030 encoder: range 112
|
||||
Pass gb18030 encoder: range 113
|
||||
Pass gb18030 encoder: range 114
|
||||
Pass gb18030 encoder: range 115
|
||||
Pass gb18030 encoder: range 116
|
||||
Pass gb18030 encoder: range 117
|
||||
Pass gb18030 encoder: range 118
|
||||
Pass gb18030 encoder: range 119
|
||||
Pass gb18030 encoder: range 120
|
||||
Pass gb18030 encoder: range 121
|
||||
Pass gb18030 encoder: range 122
|
||||
Pass gb18030 encoder: range 123
|
||||
Pass gb18030 encoder: range 124
|
||||
Pass gb18030 encoder: range 125
|
||||
Pass gb18030 encoder: range 126
|
||||
Pass gb18030 encoder: range 127
|
||||
Pass gb18030 encoder: range 128
|
||||
Pass gb18030 encoder: range 129
|
||||
Pass gb18030 encoder: range 130
|
||||
Pass gb18030 encoder: range 131
|
||||
Pass gb18030 encoder: range 132
|
||||
Pass gb18030 encoder: range 133
|
||||
Pass gb18030 encoder: range 134
|
||||
Pass gb18030 encoder: range 135
|
||||
Pass gb18030 encoder: range 136
|
||||
Pass gb18030 encoder: range 137
|
||||
Pass gb18030 encoder: range 138
|
||||
Pass gb18030 encoder: range 139
|
||||
Pass gb18030 encoder: range 140
|
||||
Pass gb18030 encoder: range 141
|
||||
Pass gb18030 encoder: range 142
|
||||
Pass gb18030 encoder: range 143
|
||||
Pass gb18030 encoder: range 144
|
||||
Pass gb18030 encoder: range 145
|
||||
Pass gb18030 encoder: range 146
|
||||
Pass gb18030 encoder: range 147
|
||||
Pass gb18030 encoder: range 148
|
||||
Pass gb18030 encoder: range 149
|
||||
Pass gb18030 encoder: range 150
|
||||
Pass gb18030 encoder: range 151
|
||||
Pass gb18030 encoder: range 152
|
||||
Pass gb18030 encoder: range 153
|
||||
Pass gb18030 encoder: range 154
|
||||
Pass gb18030 encoder: range 155
|
||||
Pass gb18030 encoder: range 156
|
||||
Pass gb18030 encoder: range 157
|
||||
Pass gb18030 encoder: range 158
|
||||
Pass gb18030 encoder: range 159
|
||||
Pass gb18030 encoder: range 160
|
||||
Pass gb18030 encoder: range 161
|
||||
Pass gb18030 encoder: range 162
|
||||
Pass gb18030 encoder: range 163
|
||||
Pass gb18030 encoder: range 164
|
||||
Pass gb18030 encoder: range 165
|
||||
Pass gb18030 encoder: range 166
|
||||
Pass gb18030 encoder: range 167
|
||||
Pass gb18030 encoder: range 168
|
||||
Pass gb18030 encoder: range 169
|
||||
Pass gb18030 encoder: range 170
|
||||
Pass gb18030 encoder: range 171
|
||||
Pass gb18030 encoder: range 172
|
||||
Pass gb18030 encoder: range 173
|
||||
Pass gb18030 encoder: range 174
|
||||
Pass gb18030 encoder: range 175
|
||||
Pass gb18030 encoder: range 176
|
||||
Pass gb18030 encoder: range 177
|
||||
Pass gb18030 encoder: range 178
|
||||
Pass gb18030 encoder: range 179
|
||||
Pass gb18030 encoder: range 180
|
||||
Pass gb18030 encoder: range 181
|
||||
Pass gb18030 encoder: range 182
|
||||
Pass gb18030 encoder: range 183
|
||||
Pass gb18030 encoder: range 184
|
||||
Pass gb18030 encoder: range 185
|
||||
Pass gb18030 encoder: range 186
|
||||
Pass gb18030 encoder: range 187
|
||||
Pass gb18030 encoder: range 188
|
||||
Pass gb18030 encoder: range 189
|
||||
Pass gb18030 encoder: range 190
|
||||
Pass gb18030 encoder: range 191
|
||||
Pass gb18030 encoder: range 192
|
||||
Pass gb18030 encoder: range 193
|
||||
Pass gb18030 encoder: range 194
|
||||
Pass gb18030 encoder: range 195
|
||||
Pass gb18030 encoder: range 196
|
||||
Pass gb18030 encoder: range 197
|
||||
Pass gb18030 encoder: range 198
|
||||
Pass gb18030 encoder: range 199
|
||||
Pass gb18030 encoder: range 200
|
||||
Pass gb18030 encoder: range 201
|
||||
Pass gb18030 encoder: range 202
|
||||
Pass gb18030 encoder: range 203
|
||||
Pass gb18030 encoder: range 204
|
||||
Pass gb18030 encoder: range 205
|
||||
Pass gb18030 encoder: range 206
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
Harness status: OK
|
||||
|
||||
Found 49 tests
|
||||
|
||||
49 Pass
|
||||
Pass gbk encoder: very basic
|
||||
Pass gbk encoder: Euro
|
||||
Pass gbk encoder: character
|
||||
Pass gbk encoder: PUA
|
||||
Pass gbk encoder: PUA #2
|
||||
Pass gbk encoder: poo
|
||||
Pass gbk encoder: legacy ICU special case 1
|
||||
Pass gbk encoder: legacy ICU special case 2
|
||||
Pass gbk encoder: legacy ICU special case 3
|
||||
Pass gbk encoder: legacy WebKit case 1
|
||||
Pass gbk encoder: legacy WebKit case 2
|
||||
Pass gbk encoder: legacy WebKit case 3
|
||||
Pass gbk encoder: U+10FFFF
|
||||
Pass gbk encoder: GB18030-2022 1
|
||||
Pass gbk encoder: GB18030-2022 2
|
||||
Pass gbk encoder: GB18030-2022 3
|
||||
Pass gbk encoder: GB18030-2022 4
|
||||
Pass gbk encoder: GB18030-2022 5
|
||||
Pass gbk encoder: GB18030-2022 6
|
||||
Pass gbk encoder: GB18030-2022 7
|
||||
Pass gbk encoder: GB18030-2022 8
|
||||
Pass gbk encoder: GB18030-2022 9
|
||||
Pass gbk encoder: GB18030-2022 10
|
||||
Pass gbk encoder: GB18030-2022 11
|
||||
Pass gbk encoder: GB18030-2022 12
|
||||
Pass gbk encoder: GB18030-2022 13
|
||||
Pass gbk encoder: GB18030-2022 14
|
||||
Pass gbk encoder: GB18030-2022 15
|
||||
Pass gbk encoder: GB18030-2022 16
|
||||
Pass gbk encoder: GB18030-2022 17
|
||||
Pass gbk encoder: GB18030-2022 18
|
||||
Pass gbk encoder: GB18030-2022 19
|
||||
Pass gbk encoder: GB18030-2022 20
|
||||
Pass gbk encoder: GB18030-2022 21
|
||||
Pass gbk encoder: GB18030-2022 22
|
||||
Pass gbk encoder: GB18030-2022 23
|
||||
Pass gbk encoder: GB18030-2022 24
|
||||
Pass gbk encoder: GB18030-2022 25
|
||||
Pass gbk encoder: GB18030-2022 26
|
||||
Pass gbk encoder: GB18030-2022 27
|
||||
Pass gbk encoder: GB18030-2022 28
|
||||
Pass gbk encoder: GB18030-2022 29
|
||||
Pass gbk encoder: GB18030-2022 30
|
||||
Pass gbk encoder: GB18030-2022 31
|
||||
Pass gbk encoder: GB18030-2022 32
|
||||
Pass gbk encoder: GB18030-2022 33
|
||||
Pass gbk encoder: GB18030-2022 34
|
||||
Pass gbk encoder: GB18030-2022 35
|
||||
Pass gbk encoder: GB18030-2022 36
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<script>
|
||||
self.GLOBAL = {
|
||||
isWindow: function() { return true; },
|
||||
isWorker: function() { return false; },
|
||||
isShadowRealm: function() { return false; },
|
||||
};
|
||||
</script>
|
||||
<script src="../../../resources/testharness.js"></script>
|
||||
<script src="../../../resources/testharnessreport.js"></script>
|
||||
<script src="resources/ranges.js"></script>
|
||||
<div id=log></div>
|
||||
<script src="gb18030-decoder.any.js"></script>
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
// META: script=./resources/ranges.js
|
||||
|
||||
const decode = (input, output, desc) => {
|
||||
test(function () {
|
||||
for (const encoding of ["gb18030", "gbk"]) {
|
||||
assert_equals(
|
||||
new TextDecoder(encoding).decode(new Uint8Array(input)),
|
||||
output,
|
||||
);
|
||||
}
|
||||
}, "gb18030 decoder: " + desc);
|
||||
};
|
||||
|
||||
decode([115], "s", "ASCII");
|
||||
decode([0x80], "\u20AC", "euro");
|
||||
decode([0xFF], "\uFFFD", "initial byte out of accepted ranges");
|
||||
decode([0x81], "\uFFFD", "end of queue, gb18030 first not 0");
|
||||
decode([0x81, 0x28], "\ufffd(", "two bytes 0x81 0x28");
|
||||
decode([0x81, 0x40], "\u4E02", "two bytes 0x81 0x40");
|
||||
decode([0x81, 0x7E], "\u4E8A", "two bytes 0x81 0x7e");
|
||||
decode([0x81, 0x7F], "\ufffd\u007f", "two bytes 0x81 0x7f");
|
||||
decode([0x81, 0x80], "\u4E90", "two bytes 0x81 0x80");
|
||||
decode([0x81, 0xFE], "\u4FA2", "two bytes 0x81 0xFE");
|
||||
decode([0x81, 0xFF], "\ufffd", "two bytes 0x81 0xFF");
|
||||
decode([0xFE, 0x40], "\uFA0C", "two bytes 0xFE 0x40");
|
||||
decode([0xFE, 0xFE], "\uE4C5", "two bytes 0xFE 0xFE");
|
||||
decode([0xFE, 0xFF], "\ufffd", "two bytes 0xFE 0xFF");
|
||||
decode([0x81, 0x30], "\ufffd", "two bytes 0x81 0x30");
|
||||
decode([0x81, 0x30, 0xFE], "\ufffd", "three bytes 0x81 0x30 0xFE");
|
||||
decode([0x81, 0x30, 0xFF], "\ufffd0\ufffd", "three bytes 0x81 0x30 0xFF");
|
||||
decode(
|
||||
[0x81, 0x30, 0xFE, 0x29],
|
||||
"\ufffd0\ufffd)",
|
||||
"four bytes 0x81 0x30 0xFE 0x29",
|
||||
);
|
||||
decode([0xFE, 0x39, 0xFE, 0x39], "\ufffd", "four bytes 0xFE 0x39 0xFE 0x39");
|
||||
decode([0x81, 0x35, 0xF4, 0x36], "\u1E3E", "pointer 7458");
|
||||
decode([0x81, 0x35, 0xF4, 0x37], "\ue7c7", "pointer 7457");
|
||||
decode([0x81, 0x35, 0xF4, 0x38], "\u1E40", "pointer 7459");
|
||||
decode([0x84, 0x31, 0xA4, 0x39], "\uffff", "pointer 39419");
|
||||
decode([0x84, 0x31, 0xA5, 0x30], "\ufffd", "pointer 39420");
|
||||
decode([0x8F, 0x39, 0xFE, 0x39], "\ufffd", "pointer 189999");
|
||||
decode([0x90, 0x30, 0x81, 0x30], "\u{10000}", "pointer 189000");
|
||||
decode([0xE3, 0x32, 0x9A, 0x35], "\u{10FFFF}", "pointer 1237575");
|
||||
decode([0xE3, 0x32, 0x9A, 0x36], "\ufffd", "pointer 1237576");
|
||||
decode([0x83, 0x36, 0xC8, 0x30], "\uE7C8", "legacy ICU special case 1");
|
||||
decode([0xA1, 0xAD], "\u2026", "legacy ICU special case 2");
|
||||
decode([0xA1, 0xAB], "\uFF5E", "legacy ICU special case 3");
|
||||
decode([0xA3, 0xA0], "\u3000");
|
||||
|
||||
// GB18030-2022
|
||||
decode([0xA6, 0xD9], "\uFE10", "GB18030-2022 1");
|
||||
decode([0xA6, 0xDA], "\uFE12", "GB18030-2022 2");
|
||||
decode([0xA6, 0xDB], "\uFE11", "GB18030-2022 3");
|
||||
decode([0xA6, 0xDC], "\uFE13", "GB18030-2022 4");
|
||||
decode([0xA6, 0xDD], "\uFE14", "GB18030-2022 5");
|
||||
decode([0xA6, 0xDE], "\uFE15", "GB18030-2022 6");
|
||||
decode([0xA6, 0xDF], "\uFE16", "GB18030-2022 7");
|
||||
decode([0xA6, 0xEC], "\uFE17", "GB18030-2022 8");
|
||||
decode([0xA6, 0xED], "\uFE18", "GB18030-2022 9");
|
||||
decode([0xA6, 0xF3], "\uFE19", "GB18030-2022 10");
|
||||
decode([0xFE, 0x59], "\u9FB4", "GB18030-2022 11");
|
||||
decode([0xFE, 0x61], "\u9FB5", "GB18030-2022 12");
|
||||
decode([0xFE, 0x66], "\u9FB6", "GB18030-2022 13");
|
||||
decode([0xFE, 0x67], "\u9FB7", "GB18030-2022 14");
|
||||
decode([0xFE, 0x6D], "\u9FB8", "GB18030-2022 15");
|
||||
decode([0xFE, 0x7E], "\u9FB9", "GB18030-2022 16");
|
||||
decode([0xFE, 0x90], "\u9FBA", "GB18030-2022 17");
|
||||
decode([0xFE, 0xA0], "\u9FBB", "GB18030-2022 18");
|
||||
decode([0x82, 0x35, 0x90, 0x37], "\u9FB4", "GB18030-2022 19");
|
||||
decode([0x82, 0x35, 0x90, 0x38], "\u9FB5", "GB18030-2022 20");
|
||||
decode([0x82, 0x35, 0x90, 0x39], "\u9FB6", "GB18030-2022 21");
|
||||
decode([0x82, 0x35, 0x91, 0x30], "\u9FB7", "GB18030-2022 22");
|
||||
decode([0x82, 0x35, 0x91, 0x31], "\u9FB8", "GB18030-2022 23");
|
||||
decode([0x82, 0x35, 0x91, 0x32], "\u9FB9", "GB18030-2022 24");
|
||||
decode([0x82, 0x35, 0x91, 0x33], "\u9FBA", "GB18030-2022 25");
|
||||
decode([0x82, 0x35, 0x91, 0x34], "\u9FBB", "GB18030-2022 26");
|
||||
decode([0x84, 0x31, 0x82, 0x36], "\uFE10", "GB18030-2022 27");
|
||||
decode([0x84, 0x31, 0x82, 0x37], "\uFE11", "GB18030-2022 28");
|
||||
decode([0x84, 0x31, 0x82, 0x38], "\uFE12", "GB18030-2022 29");
|
||||
decode([0x84, 0x31, 0x82, 0x39], "\uFE13", "GB18030-2022 30");
|
||||
decode([0x84, 0x31, 0x83, 0x30], "\uFE14", "GB18030-2022 31");
|
||||
decode([0x84, 0x31, 0x83, 0x31], "\uFE15", "GB18030-2022 32");
|
||||
decode([0x84, 0x31, 0x83, 0x32], "\uFE16", "GB18030-2022 33");
|
||||
decode([0x84, 0x31, 0x83, 0x33], "\uFE17", "GB18030-2022 34");
|
||||
decode([0x84, 0x31, 0x83, 0x34], "\uFE18", "GB18030-2022 35");
|
||||
decode([0x84, 0x31, 0x83, 0x35], "\uFE19", "GB18030-2022 36");
|
||||
|
||||
let i = 0;
|
||||
for (const range of ranges) {
|
||||
const pointer = range[0];
|
||||
decode(
|
||||
[
|
||||
Math.floor(pointer / 12600) + 0x81,
|
||||
Math.floor((pointer % 12600) / 1260) + 0x30,
|
||||
Math.floor((pointer % 1260) / 10) + 0x81,
|
||||
pointer % 10 + 0x30,
|
||||
],
|
||||
range[1],
|
||||
"range " + i++,
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
|
||||
<script src="../../../resources/testharness.js"></script>
|
||||
<script src="../../../resources/testharnessreport.js"></script>
|
||||
<div id=log></div>
|
||||
<script>
|
||||
fetch_tests_from_worker(new Worker("../../../encoding/legacy-mb-schinese/gb18030/gb18030-decoder.any.worker.js"));
|
||||
</script>
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
|
||||
self.GLOBAL = {
|
||||
isWindow: function() { return false; },
|
||||
isWorker: function() { return true; },
|
||||
isShadowRealm: function() { return false; },
|
||||
};
|
||||
importScripts("/resources/testharness.js");
|
||||
importScripts("./resources/ranges.js")
|
||||
importScripts("/encoding/legacy-mb-schinese/gb18030/gb18030-decoder.any.js");
|
||||
done();
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
<!doctype html>
|
||||
<meta charset=gb18030>
|
||||
<script src=../../../resources/testharness.js></script>
|
||||
<script src=../../../resources/testharnessreport.js></script>
|
||||
<script src=resources/ranges.js></script>
|
||||
<script>
|
||||
const encode = (input, output, desc) => {
|
||||
test(function() {
|
||||
const a = document.createElement("a"); // <a> uses document encoding for URL's query
|
||||
a.href = "https://example.com/?" + input;
|
||||
assert_equals(a.search.substr(1), output); // remove leading "?"
|
||||
}, "gb18030 encoder: " + desc);
|
||||
}
|
||||
|
||||
encode("s", "s", "very basic");
|
||||
encode("\u20AC", "%A2%E3", "Euro");
|
||||
encode("\u4E02", "%81@", "character");
|
||||
encode("\uE4C6", "%A1@", "PUA");
|
||||
encode("\uE4C5", "%FE%FE", "PUA #2");
|
||||
encode("\uE5E5", "%26%2358853%3B", "PUA #3");
|
||||
encode("\ud83d\udca9", "%949%DA3", "poo");
|
||||
encode("\uE7C7", "%815%F47", "Ranges pointer special case");
|
||||
encode("\uE7C8", "%836%C80", "legacy ICU special case 1");
|
||||
encode("\u2026", "%A1%AD", "legacy ICU special case 2");
|
||||
encode("\uFF5E", "%A1%AB", "legacy ICU special case 3");
|
||||
|
||||
// GB18030-2022
|
||||
encode("\uFE10", "%A6%D9", "GB18030-2022 1");
|
||||
encode("\uFE12", "%A6%DA", "GB18030-2022 2");
|
||||
encode("\uFE11", "%A6%DB", "GB18030-2022 3");
|
||||
encode("\uFE13", "%A6%DC", "GB18030-2022 4");
|
||||
encode("\uFE14", "%A6%DD", "GB18030-2022 5");
|
||||
encode("\uFE15", "%A6%DE", "GB18030-2022 6");
|
||||
encode("\uFE16", "%A6%DF", "GB18030-2022 7");
|
||||
encode("\uFE17", "%A6%EC", "GB18030-2022 8");
|
||||
encode("\uFE18", "%A6%ED", "GB18030-2022 9");
|
||||
encode("\uFE19", "%A6%F3", "GB18030-2022 10");
|
||||
encode("\u9FB4", "%FEY", "GB18030-2022 11");
|
||||
encode("\u9FB5", "%FEa", "GB18030-2022 12");
|
||||
encode("\u9FB6", "%FEf", "GB18030-2022 13");
|
||||
encode("\u9FB7", "%FEg", "GB18030-2022 14");
|
||||
encode("\u9FB8", "%FEm", "GB18030-2022 15");
|
||||
encode("\u9FB9", "%FE~", "GB18030-2022 16");
|
||||
encode("\u9FBA", "%FE%90", "GB18030-2022 17");
|
||||
encode("\u9FBB", "%FE%A0", "GB18030-2022 18");
|
||||
encode("\uE78D", "%A6%D9", "GB18030-2022 19");
|
||||
encode("\uE78E", "%A6%DA", "GB18030-2022 20");
|
||||
encode("\uE78F", "%A6%DB", "GB18030-2022 21");
|
||||
encode("\uE790", "%A6%DC", "GB18030-2022 22");
|
||||
encode("\uE791", "%A6%DD", "GB18030-2022 23");
|
||||
encode("\uE792", "%A6%DE", "GB18030-2022 24");
|
||||
encode("\uE793", "%A6%DF", "GB18030-2022 25");
|
||||
encode("\uE794", "%A6%EC", "GB18030-2022 26");
|
||||
encode("\uE795", "%A6%ED", "GB18030-2022 27");
|
||||
encode("\uE796", "%A6%F3", "GB18030-2022 28");
|
||||
encode("\uE81E", "%FEY", "GB18030-2022 29");
|
||||
encode("\uE826", "%FEa", "GB18030-2022 30");
|
||||
encode("\uE82B", "%FEf", "GB18030-2022 31");
|
||||
encode("\uE82C", "%FEg", "GB18030-2022 32");
|
||||
encode("\uE832", "%FEm", "GB18030-2022 33");
|
||||
encode("\uE843", "%FE~", "GB18030-2022 34");
|
||||
encode("\uE854", "%FE%90", "GB18030-2022 35");
|
||||
encode("\uE864", "%FE%A0", "GB18030-2022 36");
|
||||
|
||||
const upperCaseNibble = x => {
|
||||
return Math.floor(x).toString(16).toUpperCase();
|
||||
}
|
||||
|
||||
const encodePointer = pointer => {
|
||||
const firstByte = Math.floor(pointer / 12600) + 0x81;
|
||||
const thirdByte = Math.floor((pointer % 1260) / 10) + 0x81;
|
||||
return "%"
|
||||
+ upperCaseNibble(firstByte / 16)
|
||||
+ upperCaseNibble(firstByte % 16)
|
||||
+ String.fromCharCode(Math.floor((pointer % 12600) / 1260) + 0x30)
|
||||
+ "%"
|
||||
+ upperCaseNibble(thirdByte / 16)
|
||||
+ upperCaseNibble(thirdByte % 16)
|
||||
+ String.fromCharCode(pointer % 10 + 0x30);
|
||||
}
|
||||
|
||||
let i = 0;
|
||||
for (const range of ranges) {
|
||||
encode(range[1], encodePointer(range[0]), "range " + i++);
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,210 @@
|
|||
// Based on https://encoding.spec.whatwg.org/index-gb18030-ranges.txt
|
||||
const ranges = [
|
||||
[0, "\u0080"],
|
||||
[36, "\u00A5"],
|
||||
[38, "\u00A9"],
|
||||
[45, "\u00B2"],
|
||||
[50, "\u00B8"],
|
||||
[81, "\u00D8"],
|
||||
[89, "\u00E2"],
|
||||
[95, "\u00EB"],
|
||||
[96, "\u00EE"],
|
||||
[100, "\u00F4"],
|
||||
[103, "\u00F8"],
|
||||
[104, "\u00FB"],
|
||||
[105, "\u00FD"],
|
||||
[109, "\u0102"],
|
||||
[126, "\u0114"],
|
||||
[133, "\u011C"],
|
||||
[148, "\u012C"],
|
||||
[172, "\u0145"],
|
||||
[175, "\u0149"],
|
||||
[179, "\u014E"],
|
||||
[208, "\u016C"],
|
||||
[306, "\u01CF"],
|
||||
[307, "\u01D1"],
|
||||
[308, "\u01D3"],
|
||||
[309, "\u01D5"],
|
||||
[310, "\u01D7"],
|
||||
[311, "\u01D9"],
|
||||
[312, "\u01DB"],
|
||||
[313, "\u01DD"],
|
||||
[341, "\u01FA"],
|
||||
[428, "\u0252"],
|
||||
[443, "\u0262"],
|
||||
[544, "\u02C8"],
|
||||
[545, "\u02CC"],
|
||||
[558, "\u02DA"],
|
||||
[741, "\u03A2"],
|
||||
[742, "\u03AA"],
|
||||
[749, "\u03C2"],
|
||||
[750, "\u03CA"],
|
||||
[805, "\u0402"],
|
||||
[819, "\u0450"],
|
||||
[820, "\u0452"],
|
||||
[7922, "\u2011"],
|
||||
[7924, "\u2017"],
|
||||
[7925, "\u201A"],
|
||||
[7927, "\u201E"],
|
||||
[7934, "\u2027"],
|
||||
[7943, "\u2031"],
|
||||
[7944, "\u2034"],
|
||||
[7945, "\u2036"],
|
||||
[7950, "\u203C"],
|
||||
[8062, "\u20AD"],
|
||||
[8148, "\u2104"],
|
||||
[8149, "\u2106"],
|
||||
[8152, "\u210A"],
|
||||
[8164, "\u2117"],
|
||||
[8174, "\u2122"],
|
||||
[8236, "\u216C"],
|
||||
[8240, "\u217A"],
|
||||
[8262, "\u2194"],
|
||||
[8264, "\u219A"],
|
||||
[8374, "\u2209"],
|
||||
[8380, "\u2210"],
|
||||
[8381, "\u2212"],
|
||||
[8384, "\u2216"],
|
||||
[8388, "\u221B"],
|
||||
[8390, "\u2221"],
|
||||
[8392, "\u2224"],
|
||||
[8393, "\u2226"],
|
||||
[8394, "\u222C"],
|
||||
[8396, "\u222F"],
|
||||
[8401, "\u2238"],
|
||||
[8406, "\u223E"],
|
||||
[8416, "\u2249"],
|
||||
[8419, "\u224D"],
|
||||
[8424, "\u2253"],
|
||||
[8437, "\u2262"],
|
||||
[8439, "\u2268"],
|
||||
[8445, "\u2270"],
|
||||
[8482, "\u2296"],
|
||||
[8485, "\u229A"],
|
||||
[8496, "\u22A6"],
|
||||
[8521, "\u22C0"],
|
||||
[8603, "\u2313"],
|
||||
[8936, "\u246A"],
|
||||
[8946, "\u249C"],
|
||||
[9046, "\u254C"],
|
||||
[9050, "\u2574"],
|
||||
[9063, "\u2590"],
|
||||
[9066, "\u2596"],
|
||||
[9076, "\u25A2"],
|
||||
[9092, "\u25B4"],
|
||||
[9100, "\u25BE"],
|
||||
[9108, "\u25C8"],
|
||||
[9111, "\u25CC"],
|
||||
[9113, "\u25D0"],
|
||||
[9131, "\u25E6"],
|
||||
[9162, "\u2607"],
|
||||
[9164, "\u260A"],
|
||||
[9218, "\u2641"],
|
||||
[9219, "\u2643"],
|
||||
[11329, "\u2E82"],
|
||||
[11331, "\u2E85"],
|
||||
[11334, "\u2E89"],
|
||||
[11336, "\u2E8D"],
|
||||
[11346, "\u2E98"],
|
||||
[11361, "\u2EA8"],
|
||||
[11363, "\u2EAB"],
|
||||
[11366, "\u2EAF"],
|
||||
[11370, "\u2EB4"],
|
||||
[11372, "\u2EB8"],
|
||||
[11375, "\u2EBC"],
|
||||
[11389, "\u2ECB"],
|
||||
[11682, "\u2FFC"],
|
||||
[11686, "\u3004"],
|
||||
[11687, "\u3018"],
|
||||
[11692, "\u301F"],
|
||||
[11694, "\u302A"],
|
||||
[11714, "\u303F"],
|
||||
[11716, "\u3094"],
|
||||
[11723, "\u309F"],
|
||||
[11725, "\u30F7"],
|
||||
[11730, "\u30FF"],
|
||||
[11736, "\u312A"],
|
||||
[11982, "\u322A"],
|
||||
[11989, "\u3232"],
|
||||
[12102, "\u32A4"],
|
||||
[12336, "\u3390"],
|
||||
[12348, "\u339F"],
|
||||
[12350, "\u33A2"],
|
||||
[12384, "\u33C5"],
|
||||
[12393, "\u33CF"],
|
||||
[12395, "\u33D3"],
|
||||
[12397, "\u33D6"],
|
||||
[12510, "\u3448"],
|
||||
[12553, "\u3474"],
|
||||
[12851, "\u359F"],
|
||||
[12962, "\u360F"],
|
||||
[12973, "\u361B"],
|
||||
[13738, "\u3919"],
|
||||
[13823, "\u396F"],
|
||||
[13919, "\u39D1"],
|
||||
[13933, "\u39E0"],
|
||||
[14080, "\u3A74"],
|
||||
[14298, "\u3B4F"],
|
||||
[14585, "\u3C6F"],
|
||||
[14698, "\u3CE1"],
|
||||
[15583, "\u4057"],
|
||||
[15847, "\u4160"],
|
||||
[16318, "\u4338"],
|
||||
[16434, "\u43AD"],
|
||||
[16438, "\u43B2"],
|
||||
[16481, "\u43DE"],
|
||||
[16729, "\u44D7"],
|
||||
[17102, "\u464D"],
|
||||
[17122, "\u4662"],
|
||||
[17315, "\u4724"],
|
||||
[17320, "\u472A"],
|
||||
[17402, "\u477D"],
|
||||
[17418, "\u478E"],
|
||||
[17859, "\u4948"],
|
||||
[17909, "\u497B"],
|
||||
[17911, "\u497E"],
|
||||
[17915, "\u4984"],
|
||||
[17916, "\u4987"],
|
||||
[17936, "\u499C"],
|
||||
[17939, "\u49A0"],
|
||||
[17961, "\u49B8"],
|
||||
[18664, "\u4C78"],
|
||||
[18703, "\u4CA4"],
|
||||
[18814, "\u4D1A"],
|
||||
[18962, "\u4DAF"],
|
||||
[19043, "\u9FA6"],
|
||||
[33469, "\uE76C"],
|
||||
[33470, "\uE7C8"],
|
||||
[33471, "\uE7E7"],
|
||||
[33484, "\uE815"],
|
||||
[33485, "\uE819"],
|
||||
[33490, "\uE81F"],
|
||||
[33497, "\uE827"],
|
||||
[33501, "\uE82D"],
|
||||
[33505, "\uE833"],
|
||||
[33513, "\uE83C"],
|
||||
[33520, "\uE844"],
|
||||
[33536, "\uE856"],
|
||||
[33550, "\uE865"],
|
||||
[37845, "\uF92D"],
|
||||
[37921, "\uF97A"],
|
||||
[37948, "\uF996"],
|
||||
[38029, "\uF9E8"],
|
||||
[38038, "\uF9F2"],
|
||||
[38064, "\uFA10"],
|
||||
[38065, "\uFA12"],
|
||||
[38066, "\uFA15"],
|
||||
[38069, "\uFA19"],
|
||||
[38075, "\uFA22"],
|
||||
[38076, "\uFA25"],
|
||||
[38078, "\uFA2A"],
|
||||
[39108, "\uFE32"],
|
||||
[39109, "\uFE45"],
|
||||
[39113, "\uFE53"],
|
||||
[39114, "\uFE58"],
|
||||
[39115, "\uFE67"],
|
||||
[39116, "\uFE6C"],
|
||||
[39265, "\uFF5F"],
|
||||
[39394, "\uFFE6"],
|
||||
[189000, "\u{10000}"]
|
||||
];
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
<!doctype html>
|
||||
<meta charset=gbk> <!-- if the server overrides this, it is stupid, as this is a testsuite -->
|
||||
<script src=../../../resources/testharness.js></script>
|
||||
<script src=../../../resources/testharnessreport.js></script>
|
||||
<script>
|
||||
function encode(input, output, desc) {
|
||||
test(function() {
|
||||
const a = document.createElement("a") // <a> uses document encoding for URL's query
|
||||
a.href = "https://example.com/?" + input;
|
||||
assert_equals(a.search.substr(1), output); // remove leading "?"
|
||||
}, "gbk encoder: " + desc);
|
||||
}
|
||||
|
||||
encode("s", "s", "very basic");
|
||||
encode("\u20AC", "%80", "Euro");
|
||||
encode("\u4E02", "%81@", "character");
|
||||
encode("\uE4C6", "%A1@", "PUA");
|
||||
encode("\uE4C5", "%FE%FE", "PUA #2");
|
||||
encode("\ud83d\udca9", "%26%23128169%3B", "poo");
|
||||
encode("\uE7C8", "%26%2359336%3B", "legacy ICU special case 1");
|
||||
encode("\u2026", "%A1%AD", "legacy ICU special case 2");
|
||||
encode("\uFF5E", "%A1%AB", "legacy ICU special case 3");
|
||||
encode("\u00A5", "%26%23165%3B", "legacy WebKit case 1");
|
||||
encode("\u22EF", "%26%238943%3B", "legacy WebKit case 2");
|
||||
encode("\u301C", "%26%2312316%3B", "legacy WebKit case 3");
|
||||
encode("\u{10FFFF}", "%26%231114111%3B", "U+10FFFF");
|
||||
|
||||
// GB18030-2022
|
||||
encode("\uFE10", "%A6%D9", "GB18030-2022 1");
|
||||
encode("\uFE12", "%A6%DA", "GB18030-2022 2");
|
||||
encode("\uFE11", "%A6%DB", "GB18030-2022 3");
|
||||
encode("\uFE13", "%A6%DC", "GB18030-2022 4");
|
||||
encode("\uFE14", "%A6%DD", "GB18030-2022 5");
|
||||
encode("\uFE15", "%A6%DE", "GB18030-2022 6");
|
||||
encode("\uFE16", "%A6%DF", "GB18030-2022 7");
|
||||
encode("\uFE17", "%A6%EC", "GB18030-2022 8");
|
||||
encode("\uFE18", "%A6%ED", "GB18030-2022 9");
|
||||
encode("\uFE19", "%A6%F3", "GB18030-2022 10");
|
||||
encode("\u9FB4", "%FEY", "GB18030-2022 11");
|
||||
encode("\u9FB5", "%FEa", "GB18030-2022 12");
|
||||
encode("\u9FB6", "%FEf", "GB18030-2022 13");
|
||||
encode("\u9FB7", "%FEg", "GB18030-2022 14");
|
||||
encode("\u9FB8", "%FEm", "GB18030-2022 15");
|
||||
encode("\u9FB9", "%FE~", "GB18030-2022 16");
|
||||
encode("\u9FBA", "%FE%90", "GB18030-2022 17");
|
||||
encode("\u9FBB", "%FE%A0", "GB18030-2022 18");
|
||||
encode("\uE78D", "%A6%D9", "GB18030-2022 19");
|
||||
encode("\uE78E", "%A6%DA", "GB18030-2022 20");
|
||||
encode("\uE78F", "%A6%DB", "GB18030-2022 21");
|
||||
encode("\uE790", "%A6%DC", "GB18030-2022 22");
|
||||
encode("\uE791", "%A6%DD", "GB18030-2022 23");
|
||||
encode("\uE792", "%A6%DE", "GB18030-2022 24");
|
||||
encode("\uE793", "%A6%DF", "GB18030-2022 25");
|
||||
encode("\uE794", "%A6%EC", "GB18030-2022 26");
|
||||
encode("\uE795", "%A6%ED", "GB18030-2022 27");
|
||||
encode("\uE796", "%A6%F3", "GB18030-2022 28");
|
||||
encode("\uE81E", "%FEY", "GB18030-2022 29");
|
||||
encode("\uE826", "%FEa", "GB18030-2022 30");
|
||||
encode("\uE82B", "%FEf", "GB18030-2022 31");
|
||||
encode("\uE82C", "%FEg", "GB18030-2022 32");
|
||||
encode("\uE832", "%FEm", "GB18030-2022 33");
|
||||
encode("\uE843", "%FE~", "GB18030-2022 34");
|
||||
encode("\uE854", "%FE%90", "GB18030-2022 35");
|
||||
encode("\uE864", "%FE%A0", "GB18030-2022 36");
|
||||
</script>
|
||||
Loading…
Reference in a new issue