<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="resources/common.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>

<script>
description("Test crypto.subtle argument conversion");

jsTestIsAsync = true;

Promise.resolve(null).then(function() {
    debug("\nPassing algorithm name as a string object...");
    return crypto.subtle.digest(new String('sha-1'), new Uint8Array([]));
}).then(function(result) {
    testPassed("...succeeded");
    debug("\nPassing algorithm name as a string object in a dictionary...");
    return crypto.subtle.digest({name: new String('sha-1')}, new Uint8Array([]));
}).then(function(result) {
    testPassed("...succeeded");
    debug("\nPassing algorithm name as an object with toString");
    return crypto.subtle.digest({name: { toString:function() { return 'sha-1' } } }, new Uint8Array([]));
}).then(function(result) {
    testPassed("...succeeded");

    debug("\nPassing invalid data to digest()");
    shouldThrow("crypto.subtle.digest({name: 'sha-1'})");
    shouldThrow("crypto.subtle.digest({name: 'sha-1'}, null)");
    shouldThrow("crypto.subtle.digest({name: 'sha-1'}, 10)");
    shouldThrow("crypto.subtle.digest({name: 'sha-1'}, [10])");
    shouldThrow("crypto.subtle.digest({name: 'sha-1'}, [new Uint8Array([0])])");

    debug("\nPassing invalid algorithmIdentifiers to digest()");
    data = new Uint8Array([0]);
    shouldThrow("crypto.subtle.digest({ toString:function() { return 'sha-1' } }, data)"); // Algorithm normalization doesn't attempt to call toString.
    shouldThrow("crypto.subtle.digest({name: ''}, data)");
    shouldThrow("crypto.subtle.digest({name: null}, data)");
    shouldThrow("crypto.subtle.digest({name: undefined}, data)");
    shouldThrow("crypto.subtle.digest({name: 'sha'}, data)");
    shouldThrow("crypto.subtle.digest({name: 1}, data)");
    shouldThrow("crypto.subtle.digest('', data)");
    shouldThrow("crypto.subtle.digest(null, data)");
    shouldThrow("crypto.subtle.digest(undefined, data)");
    shouldThrow("crypto.subtle.digest(1, data)");
    shouldThrow("crypto.subtle.digest({}, data)");
}).then(finishJSTest);

</script>

<script src="../../resources/js-test-post.js"></script>
</body>
</html>
