chromium/third_party/blink/web_tests/fast/workers/resources/worker-context-multi-port.js

description("This test checks the various use cases around sending multiple ports through WorkerGlobalScope.postMessage");

if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

var worker = new Worker("resources/worker-context-thread-multi-port.js");

worker.onmessage = function(event) {
    // Report results from worker thread.
    if (event.data == "done")
        event.ports[0].onmessage = done;
    else if (event.data == "noport") {
        if (event.ports && !event.ports.length)
            testPassed("event.ports is non-null and zero length when no port sent");
        else
            testFailed("event.ports is null or non-zero length when no port sent");
    } else if (event.data == "zero ports") {
        if (event.ports && !event.ports.length)
            testPassed("event.ports is non-null and zero length when empty array sent");
        else
            testFailed("event.ports is null or non-zero length when empty array sent");
    } else if (event.data == "two ports") {
        if (!event.ports) {
            testFailed("event.ports should be non-null when ports sent");
            return;
        }
        if (event.ports.length == 2)
            testPassed("event.ports contains two ports when two ports sent");
        else
            testFailed("event.ports contained " + event.ports.length + " when two ports sent");
    } else if (event.data == "failed ports") {
        if (event.ports.length == 2)
            testPassed("event.ports contains two ports when two ports re-sent after error");
        else
            testFailed("event.ports contained " + event.ports.length + " when two ports re-sent after error");
    } else if (event.data.indexOf("PASS") == 0)
        testPassed(event.data.substring(4));
    else if (event.data.indexOf("FAIL") == 0)
        testFailed(event.data.substring(4));
    else
        testFailed("Unexpected result: " + event.data);
}