ladybird/Tests/LibWeb/Text/input/Encoding/TextDecoder-decode.html
Andreas Kling c92079893a LibTextCodec: Match UTF-8 replacement handling
Consume truncated UTF-8 tails as one malformed sequence while preserving
existing behavior for encoded surrogate code points. This keeps lazy
SourceCode decoding and bytecode cache source hashing aligned with eager
source text decoding for invalid cached script source bytes.

Continue stripping an initial UTF-8 byte order mark in
UTF8Decoder::to_utf8() so HTML parsing keeps matching the previous
String-based implementation. Cover the shared decoder behavior and the
TextDecoder API surface.
2026-05-18 09:18:35 +02:00

19 lines
734 B
HTML

<!DOCTYPE html>
<script src="../include.js"></script>
<script>
test(() => {
try {
let decoder = new TextDecoder("utf-8");
println(`[${decoder.decode(new Uint8Array([0x41, 0x42, 0x43]))}]`); // "ABC"
println(`[${decoder.decode()}]`);
const surrogate = decoder.decode(new Uint8Array([0xed, 0xa0, 0x80])); // U+D800
println(`[${surrogate.codePointAt(0).toString(16)}]`);
const truncatedTail = decoder.decode(new Uint8Array([0xf0, 0x9f, 0x98]));
println(`[${truncatedTail.length}, ${truncatedTail.codePointAt(0).toString(16)}]`);
} catch (e) {
println("ERROR: " + e.name + ": " + e.message);
}
});
</script>