<!DOCTYPE html>

<html>
<head>
<script src="../resources/js-test.js"></script>
<script src="resources/audio-testing.js"></script>
<script src="resources/delay-testing.js"></script>
</head>

<body>

<div id="description"></div>
<div id="console"></div>

<script>
description("Tests that AudioContext resume/suspend/close methods reject promises when called on an OfflineAudioContext.");

function runTest() {
    window.jsTestIsAsync = true;
        
    var context = new webkitOfflineAudioContext(1, sampleRate * renderLengthSeconds, sampleRate);

    context.resume().then(function() {
        testFailed('context.resume() promise resolved (should have rejected)');
        finishJSTest();
    }, function(e) {
       if (e.name == 'InvalidStateError') 
           testPassed('context.resume() promise rejected with InvalidStateError value');
       else
           testFailed('context.resume() promise rejected, but without InvalidStateError value');
    });

    context.suspend().then(function() {
        testFailed('context.suspend() promise resolved (should have rejected)');
        finishJSTest();
    }, function(e) {
       if (e.name == 'InvalidStateError') 
           testPassed('context.suspend() promise rejected with InvalidStateError value');
       else
           testFailed('context.suspend() promise rejected, but without InvalidStateError value');
    });

    context.close().then(function() {
        testFailed('context.close() promise resolved (should have rejected)');
        finishJSTest();
    }, function(e) {
       if (e.name == 'InvalidStateError')
           testPassed('context.close() promise rejected with InvalidStateError value');
       else
           testFailed('context.close() promise rejected, but without InvalidStateError value');
       finishJSTest();
    });
}

runTest();

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