LibWeb/FileAPI: Implement FileReader readAsBinaryString

This commit is contained in:
Shannon Booth 2025-01-24 00:32:30 +13:00 committed by Sam Atkins
commit eca68aad88
Notes: github-actions[bot] 2025-01-28 11:40:38 +00:00
4 changed files with 50 additions and 2 deletions

View file

@ -105,8 +105,12 @@ WebIDL::ExceptionOr<FileReader::Result> FileReader::blob_package_data(JS::Realm&
// Return a new ArrayBuffer whose contents are bytes.
return JS::ArrayBuffer::create(realm, move(bytes));
case Type::BinaryString:
// FIXME: Return bytes as a binary string, in which every byte is represented by a code unit of equal value [0..255].
return WebIDL::NotSupportedError::create(realm, "BinaryString not supported yet"_string);
// Return bytes as a binary string, in which every byte is represented by a code unit of equal value [0..255].
Vector<u16> builder;
builder.ensure_capacity(bytes.size());
for (auto byte : bytes.bytes())
builder.unchecked_append(byte);
return MUST(Utf16View { builder }.to_utf8(Utf16View::AllowInvalidCodeUnits::Yes));
}
VERIFY_NOT_REACHED();
}

View file

@ -0,0 +1,6 @@
Harness status: OK
Found 1 tests
1 Pass
Pass FileAPI Test: filereader_readAsBinaryString

View file

@ -0,0 +1,15 @@
<!doctype html>
<meta charset=utf-8>
<title>FileAPI Test: filereader_readAsBinaryString</title>
<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>
<div id=log></div>
<script src="../../FileAPI/reading-data-section/filereader_readAsBinaryString.any.js"></script>

View file

@ -0,0 +1,23 @@
// META: title=FileAPI Test: filereader_readAsBinaryString
async_test(t => {
const blob = new Blob(["σ"]);
const reader = new FileReader();
reader.onload = t.step_func_done(() => {
assert_equals(typeof reader.result, "string", "The result is string");
assert_equals(reader.result.length, 2, "The result length is 2");
assert_equals(reader.result, "\xcf\x83", "The result is \xcf\x83");
assert_equals(reader.readyState, reader.DONE);
});
reader.onloadstart = t.step_func(() => {
assert_equals(reader.readyState, reader.LOADING);
});
reader.onprogress = t.step_func(() => {
assert_equals(reader.readyState, reader.LOADING);
});
reader.readAsBinaryString(blob);
});