Chromium Code Reviews| Index: LayoutTests/storage/indexeddb/blob-basics-metadata.html |
| diff --git a/LayoutTests/storage/indexeddb/blob-basics-metadata.html b/LayoutTests/storage/indexeddb/blob-basics-metadata.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6071fdd946a62849dce1a596c0327d0880bc303b |
| --- /dev/null |
| +++ b/LayoutTests/storage/indexeddb/blob-basics-metadata.html |
| @@ -0,0 +1,142 @@ |
| +<html> |
| +<head> |
| +<script src="../../resources/js-test.js"></script> |
| +<script src="resources/shared.js"></script> |
| +</head> |
| +<body> |
| +<input type="file" id="fileInput" multiple></input> |
| +<script> |
| + |
| +description("Confirm basic Blob/File/FileList functionality."); |
| + |
| +fileInput = document.getElementById("fileInput"); |
| +if (window.eventSender) { |
| + var fileRect = fileInput.getClientRects()[0]; |
| + var targetX = fileRect.left + fileRect.width / 2; |
| + var targetY = fileRect.top + fileRect.height / 2; |
| + eventSender.beginDragWithFiles(['resources/test-data.html', 'resources/test-data.txt']); |
| + eventSender.mouseMoveTo(targetX, targetY); |
| + eventSender.mouseUp(); |
| +} |
| + |
| +function prepareDatabase() |
| +{ |
| + db = event.target.result; |
| + var trans = event.target.transaction; |
| + evalAndLog("store = db.createObjectStore('storeName')"); |
| + evalAndLog("store.put('value', 'key')"); |
| + trans.onerror = unexpectedErrorCallback; |
| + trans.onabort = unexpectedAbortCallback; |
| +} |
| + |
| +var blobValidation = ".size == test_content.length"; |
| +function testBlob() |
| +{ |
| + debug(""); |
| + debug("testBlob():"); |
| + |
| + shouldBeTrue("FileReader != null"); |
| + evalAndLog("test_content = 'This is a test. This is only a test.'"); |
| + evalAndLog("blob = new Blob([test_content])"); |
| + validateResult("blob", blobValidation, testFile); |
| +} |
| + |
| +var fileValidation = ".name == fileInput.files[0].name"; |
| +function testFile() |
| +{ |
| + debug(""); |
| + debug("testFile():"); |
| + evalAndLog("file = fileInput.files[0]"); |
| + validateResult("file", fileValidation, testFileList); |
| +} |
| + |
| +var fileListValidation = "[1].name == fileInput.files[1].name"; |
| +function testFileList() |
| +{ |
| + debug(""); |
| + debug("testFileList():"); |
| + evalAndLog("filelist = fileInput.files"); |
| + validateResult("filelist", |
| + fileListValidation, testCursor); |
| +} |
| + |
| +function testCursor() |
| +{ |
| + debug(""); |
| + debug("testCursor():"); |
| + evalAndLog("transaction = db.transaction('storeName', 'readonly')"); |
| + transaction.onerror = unexpectedErrorCallback; |
| + evalAndLog("store = transaction.objectStore('storeName')"); |
| + evalAndLog("request = store.openCursor()"); |
| + |
| + var count = 0; |
| + request.onsuccess = continueToTest; |
| + |
| + function continueToTest(event) |
| + { |
| + cursor = event.target.result; |
| + switch (count++) { |
| + case 0: |
| + shouldBeTrue("cursor.value" + blobValidation); |
| + break; |
| + case 1: |
| + shouldBeTrue("cursor.value" + fileValidation); |
| + break; |
| + case 2: |
| + shouldBeTrue("cursor.value" + fileListValidation); |
| + break; |
| + case 3: |
| + shouldBeTrue("cursor.value == 'value'"); |
| + break; |
| + case 4: |
| + shouldBeNull(cursor); |
|
jsbell
2014/05/29 00:40:06
should be: shouldBeNull("cursor")
ericu
2014/06/02 22:18:47
Done.
|
| + finishJSTest(); |
| + return; |
| + default: |
| + testFailed("count was unexpectedly " + count); |
| + } |
| + evalAndLog("cursor.continue();"); |
| + } |
| +} |
| + |
| +function validateResult(variable, validation, onComplete) |
| +{ |
| + var keyName = variable + "key"; |
| + debug(""); |
| + debug("validateResult(" + variable + "):"); |
| + evalAndLog("transaction = db.transaction('storeName', 'readwrite')"); |
| + evalAndLog("store = transaction.objectStore('storeName')"); |
| + evalAndLog("store.put(" + variable + ", '" + keyName + "')"); |
| + var readTransactionOnComplete = getValidator(validation, onComplete); |
| + transaction.oncomplete = function () { |
| + doRead(keyName, readTransactionOnComplete); |
|
jsbell
2014/05/29 00:40:06
Personally, I find the use of getValidator here ma
ericu
2014/06/02 22:18:47
Done; I suspect that was left over from more compl
|
| + } |
| +} |
| + |
| +function getValidator(validation, onComplete) |
| +{ |
| + return function (e) { |
| + shouldBeTrue("event.target.result" + validation); |
| + onComplete(); |
| + } |
| +} |
| + |
| +function doRead(keyName, onComplete) |
| +{ |
| + evalAndLog("transaction = db.transaction('storeName', 'readwrite')"); |
| + evalAndLog("store = transaction.objectStore('storeName')"); |
| + evalAndLog("request = store.get('" + keyName + "')"); |
| + request.onsuccess = onComplete; |
| + transaction.onerror = unexpectedErrorCallback; |
| +} |
| + |
| +if (window.eventSender) { |
| + indexedDBTest(prepareDatabase, testBlob); |
| +} else { |
| + alert("Select at least 2 files using the input control above to initiate the test"); |
| + document.getElementById("fileInput").onchange = function() { indexedDBTest(prepareDatabase, testBlob); }; |
| +} |
| + |
| +</script> |
| +</body> |
| +</html> |