summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/IndexedDB/file_support.sub.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/file_support.sub.html')
-rw-r--r--testing/web-platform/tests/IndexedDB/file_support.sub.html61
1 files changed, 61 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/file_support.sub.html b/testing/web-platform/tests/IndexedDB/file_support.sub.html
new file mode 100644
index 0000000000..fe4bdf13ed
--- /dev/null
+++ b/testing/web-platform/tests/IndexedDB/file_support.sub.html
@@ -0,0 +1,61 @@
+<!doctype html>
+<meta charset=utf8>
+<title>File support in IndexedDB</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script src="resources/support-promises.js"></script>
+<form id="form">
+ <input id="file_input" name="file_input" type="file">
+</form>
+<script>
+
+function assert_file_metadata_equal(file1, file2) {
+ assert_true(file1 instanceof File);
+ assert_true(file2 instanceof File)
+ assert_equals(file1.lastModified, file2.lastModified);
+ assert_equals(file1.name, file2.name);
+ assert_equals(file1.size, file2.size);
+ assert_equals(file1.type, file2.type);
+}
+
+async function assert_file_contents_equals(file1, file2) {
+ const file1_text = await file1.text();
+ const file2_text = await file2.text();
+ assert_equals(file1_text, file2_text);
+}
+
+promise_test(async (testCase) => {
+ const input = document.getElementById("file_input");
+ await test_driver.send_keys(input, String.raw`{{fs_path(resources/file_to_save.txt)}}`);
+ assert_equals(input.files.length, 1);
+
+ const file = input.files[0];
+
+ const db = await createDatabase(testCase, db => {
+ db.createObjectStore('objectStore');
+ });
+
+ const txn = db.transaction(['objectStore'], 'readwrite');
+ txn.objectStore('objectStore').add(file, 'key1');
+ txn.objectStore('objectStore').add({file: file, other: 'data'}, 'key2');
+ await promiseForTransaction(testCase, txn);
+
+ const readTxn = db.transaction(['objectStore'], 'readonly');
+ const fileByItself = await promiseForRequest(
+ testCase, readTxn.objectStore('objectStore').get('key1'));
+ const fileInDict = await promiseForRequest(
+ testCase, readTxn.objectStore('objectStore').get('key2'));
+
+ assert_file_metadata_equal(fileByItself, file);
+ assert_file_metadata_equal(fileInDict.file, file);
+ assert_file_metadata_equal(fileInDict.file, fileByItself);
+
+ await assert_file_contents_equals(fileByItself, file);
+ await assert_file_contents_equals(fileInDict.file, file);
+
+ db.close();
+}, "Saves and loads back File objects from IndexedDB");
+
+</script>