<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>FileReader Errors Test</title>
    <link rel=help href="http://dev.w3.org/2006/webapi/FileAPI/#convenienceAPI">
    <link rel=author title="Breezewish" href="mailto:me@breeswish.org">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
</head>
<body>
    <form name="upload">
        <input type="file" id="fileChooser"><br><input type="button" id="start" value="start">
    </form>

    <div>
        <p>Test steps:</p>
        <ol>
            <li>Download the <a href="support/file_test1.txt">file</a>.</li>
            <li>Select the file in the file inputbox.</li>
            <li>Delete the file.</li>
            <li>Click the 'start' button.</li>
        </ol>
    </div>

    <div id="log"></div>

    <script>

        var fileChooser = document.querySelector('#fileChooser');

        setup({explicit_done: true});
        setup({explicit_timeout: true});

        on_event(fileChooser, 'change', function() {

            async_test(function(t) {

                var reader = new FileReader();
                reader.readAsArrayBuffer(fileChooser.files[0]);

                reader.onloadend = t.step_func_done(function(event) {
                    assert_equals(event.target.readyState, FileReader.DONE);
                    assert_equals(reader.error, null);
                });

            }, 'FileReader.error should be null if there are no errors when reading');

        });

        on_event(document.querySelector('#start'), 'click', function() {

            async_test(function(t) {

                var reader = new FileReader();
                reader.readAsArrayBuffer(fileChooser.files[0]);

                reader.onloadend = t.step_func_done(function(event) {
                    assert_equals(event.target.readyState, FileReader.DONE);
                    assert_equals(reader.error.code, 8);
                });

            }, 'FileReader.error should be NOT_FOUND_ERR if the file is not found when reading');

            done();

        });

    </script>
</body>
</html>