<!DOCTYPE html>
<html>
<head>
<title>Fetching import</title>
<link rel="help" href="http://w3c.github.io/webcomponents/spec/imports/#fetching-import">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="stylesheet" href="/resources/testharness.css">

<script>
var onloadWasCalledOnSuccess = false;
var onerrorWasCalledOnSuccess = false;
function helloLoadHandler() { onloadWasCalledOnSuccess = true; }
function helloErrorHandler() { onerrorWasCalledOnSuccess = true; }

var onloadWasCalledOnFail = false;
var onerrorWasCalledOnFail = false;
function nosuchLoadHandler() { onloadWasCalledOnFail = true; }
function nosuchErrorHandler() { onerrorWasCalledOnFail = true; }
</script>

<link rel="import" href="resources/hello.html" onload="helloLoadHandler()" onerror="helloLoadHandler()">
<link rel="import" href="resources/no-such.html" onload="nosuchLoadHandler()" onerror="nosuchErrorHandler()">

<script>
test(function() {
    assert_true(onloadWasCalledOnSuccess);
    assert_false(onerrorWasCalledOnSuccess);
}, 'The loading attempt must be considered successful if IMPORT is not null on the algorithm completion, and failed otherwise. (1)');

test(function() {
    assert_false(onloadWasCalledOnFail);
    assert_true(onerrorWasCalledOnFail);
}, 'The loading attempt must be considered successful if IMPORT is not null on the algorithm completion, and failed otherwise. (2)');

t1 = async_test('The loading attempt must be considered successful if IMPORT is not null on the algorithm completion, and failed otherwise. (3)')
t1.step(function() {
   var importElement = document.createElement('link');
   importElement.setAttribute('rel', 'import');
   importElement.setAttribute('href', 'resources/dynamic.html');
   importElement.addEventListener("error", assert_unreached);
   importElement.addEventListener("load", function() {
       t1.done();
   });

   document.head.appendChild(importElement);
});

var onloadWasCalledOnAsync = false;
var onerrorWasCalledOnAsync = false;
var asyncAttemptDone = function() { assert_unreached(); };

function asyncLoadHandler() {
    onloadWasCalledOnAsync = true;
    asyncAttemptDone();
}
function asyncErrorHandler() {
    onerrorWasCalledOnAsync = true;
    asyncAttemptDone();
}

t2 = async_test('Every import that is not marked as async delays the load event in the Document.');
asyncAttemptDone = function() {
    t2.step(function() {
        assert_true(onloadWasCalledOnAsync);
        assert_false(onerrorWasCalledOnAsync);
        t2.done();
    });
};

</script>
<link rel="import" href="resources/async.html" onload="asyncLoadHandler()" onerror="asyncErrorHandler()" async>
</head>
<body>
<div id="log"></div>
</body>
</html>
