﻿<!DOCTYPE html>
<title>FileReader: starting new reads while one is in progress</title>
<link rel="author" title="Yinkan Li" href="mailto:liyinkan.biz@gmail.com">
<link rel="help" href="http://dev.w3.org/2006/webapi/FileAPI/#MultipleReads">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="log"></div>
<script>
test(function() {
  var blob_1 = new Blob(['TEST000000001'])
  var blob_2 = new Blob(['TEST000000002'])
  var reader = new FileReader();
  reader.readAsText(blob_1)
  assert_equals(reader.readyState, FileReader.LOADING, "readyState Must be LOADING")
  assert_throws("InvalidStateError", function () {
    reader.readAsText(blob_2)
  })
}, 'test FileReader InvalidStateError exception for readAsText');

test(function() {
  var blob_1 = new Blob(['TEST000000001'])
  var blob_2 = new Blob(['TEST000000002'])
  var reader = new FileReader();
  reader.readAsDataURL(blob_1)
  assert_equals(reader.readyState, FileReader.LOADING, "readyState Must be LOADING")
  assert_throws("InvalidStateError", function () {
    reader.readAsDataURL(blob_2)
  })
}, 'test FileReader InvalidStateError exception for readAsDataURL');

test(function() {
  var blob_1 = new Blob(['TEST000000001'])
  var blob_2 = new Blob(['TEST000000002'])
  var reader = new FileReader();
  reader.readAsArrayBuffer(blob_1)
  assert_equals(reader.readyState, FileReader.LOADING, "readyState Must be LOADING")
  assert_throws("InvalidStateError", function () {
    reader.readAsArrayBuffer(blob_2)
  })
}, 'test FileReader InvalidStateError exception for readAsArrayBuffer');

async_test(function() {
  var blob_1 = new Blob(['TEST000000001'])
  var blob_2 = new Blob(['TEST000000002'])
  var reader = new FileReader();
  var triggered = false;
  reader.onloadstart = this.step_func_done(function() {
    assert_false(triggered, "Only one loadstart event should be dispatched");
    triggered = true;
    assert_equals(reader.readyState, FileReader.LOADING,
                  "readyState must be LOADING")
    assert_throws("InvalidStateError", function () {
      reader.readAsArrayBuffer(blob_2)
    })
  });
  reader.readAsArrayBuffer(blob_1)
  assert_equals(reader.readyState, FileReader.LOADING, "readyState Must be LOADING")
}, 'test FileReader InvalidStateError exception in onloadstart event for readAsArrayBuffer');

async_test(function() {
  var blob_1 = new Blob(['TEST000000001'])
  var blob_2 = new Blob(['TEST000000002'])
  var reader = new FileReader();
  reader.onloadend = this.step_func_done(function() {
    assert_equals(reader.readyState, FileReader.LOADING,
                  "readyState must be LOADING")
    reader.readAsArrayBuffer(blob_2)
    assert_equals(reader.readyState, FileReader.LOADING, "readyState Must be LOADING")
  });
  reader.readAsArrayBuffer(blob_1)
  assert_equals(reader.readyState, FileReader.LOADING, "readyState Must be LOADING")
}, 'test FileReader no InvalidStateError exception in onloadstart event for readAsArrayBuffer');
</script>
