| <!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(['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(test_case.platform); |
| })); |
| }, test_case.name); |
| } |
| |
| banner_test(0); |
| </script> |