Confirm that IndexedDB can store an empty Blob/File/FileList

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".

dbname = "empty-blob-file.html"
indexedDB.deleteDatabase(dbname)
indexedDB.open(dbname)
store = db.createObjectStore('storeName')
store.put('value', 'key')


testEmptyBlob():
blob = new Blob([])


validateResult(blob):
PASS blob.size == 0 is true
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(blob, 'blobkey')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
request = store.get('blobkey')
PASS event.target.result.size == 0 is true


testEmptyDataBlob():
blob = new Blob(['', '', ''])


validateResult(blob):
PASS blob.size == 0 is true
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(blob, 'blobkey')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
request = store.get('blobkey')
PASS event.target.result.size == 0 is true


testEmptyNestedBlob():
blob = new Blob(['', new Blob([]), ''])


validateResult(blob):
PASS blob.size == 0 is true
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(blob, 'blobkey')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
request = store.get('blobkey')
PASS event.target.result.size == 0 is true


testEmptyNestedDataBlob():
blob = new Blob(['', new Blob(['']), ''])


validateResult(blob):
PASS blob.size == 0 is true
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(blob, 'blobkey')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
request = store.get('blobkey')
PASS event.target.result.size == 0 is true


testEmptyFileInsideBlob():
file = emptyFileInput.files[0]
blob = new Blob(['', file, ''])


validateResult(blob):
PASS blob.size == 0 is true
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(blob, 'blobkey')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
request = store.get('blobkey')
PASS event.target.result.size == 0 is true


testEmptyFileInsideNestedBlob():
file = emptyFileInput.files[0]
blob = new Blob(['', new Blob([file]), ''])


validateResult(blob):
PASS blob.size == 0 is true
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(blob, 'blobkey')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
request = store.get('blobkey')
PASS event.target.result.size == 0 is true


testEmptyFile():
file = emptyFileInput.files[0]


validateResult(file):
PASS file.size == 0 is true
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(file, 'filekey')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
request = store.get('filekey')
PASS event.target.result.size == 0 is true


testEmptyFileList():
fileList = emptyFileListInput.files


validateResult(fileList):
PASS fileList.length == 0 is true
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
store.put(fileList, 'fileListkey')
transaction = db.transaction('storeName', 'readwrite')
store = transaction.objectStore('storeName')
request = store.get('fileListkey')
PASS event.target.result.length == 0 is true
PASS successfullyParsed is true

TEST COMPLETE

 
