<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script>
var test_cases = [
    {
        name: 'cancel',
        cancel: true,
    }, {
        name: 'accept',
        cancel: false,
        platform: 'foo',
        outcome: 'accepted'
    }, {
        name: 'dismiss',
        cancel: false,
        platform: '',
        outcome: 'dismissed'
    }
];

function banner_test(index) {
    if (index >= test_cases.length)
        return;

    var test_case = test_cases[index];
    async_test(function(t) {
        var event_handler = t.step_func(function(e) {
            // Remove the event handler to prevent it being used in subsequent
            // invocations of banner_test();
            window.removeEventListener('beforeinstallprompt', event_handler);

            assert_equals(e.platforms.length, 2, 'Number of platforms');
            assert_equals(e.platforms[0], 'foo', 'First platform');
            assert_equals(e.platforms[1], 'bar', 'Second platform');
            if (test_case.cancel) {
                e.preventDefault();
                return;
            }

            e.userChoice.then(t.step_func(function(result) {
                assert_equals(result.platform, test_case.platform, 'Resolved platform');
                assert_equals(result.outcome, test_case.outcome, 'Outcome');
                banner_test(index + 1);
                t.done();
            }));
        });
        window.addEventListener('beforeinstallprompt', event_handler);

        testRunner.dispatchBeforeInstallPromptEvent(index, ['foo', 'bar'], t.step_func(function(result) {
            assert_equals(result, test_case.cancel, 'Event canceled');
            if (test_case.cancel) {
                banner_test(index + 1);
                t.done();
                return;
            }
            testRunner.resolveBeforeInstallPromptPromise(index, test_case.platform);
        }));
    }, test_case.name);
}

banner_test(0);
</script>
