| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>Checking the chain of events when starting a new presentation</title> |
| <link rel="author" title="Marius Wessel" href="http://www.fokus.fraunhofer.de"> |
| <link rel="author" title="Tomoyuki Shimizu" href="https://github.com/tomoyukilabs"> |
| <link rel="help" href="http://w3c.github.io/presentation-api/#dfn-controlling-user-agent"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="common.js"></script> |
| |
| <p>Click the button below and select the available presentation display, to start the manual test.</p> |
| <button id="presentBtn">Start Presentation Test</button> |
| |
| |
| <script> |
| // description of event order |
| var description = [ |
| "Phase #1: Promise is resolved", |
| "Phase #2: 'connectionavailable' event fired", |
| "Phase #3: 'connect' event fired" |
| ]; |
| var step = 0; |
| |
| // presentation connection |
| var connection; |
| |
| // disable the timeout function for the tests |
| setup({explicit_timeout: true}); |
| |
| // ---------- |
| // DOM Object |
| // ---------- |
| var presentBtn = document.getElementById("presentBtn"); |
| |
| // --------------------------------------------- |
| // Start New Presentation Test (success) - begin |
| // --------------------------------------------- |
| presentBtn.onclick = function () { |
| presentBtn.disabled = true; |
| promise_test(function (t) { |
| var phase = -1, actual = -1; |
| |
| // increment the count in the actual event order |
| var count = function(evt) { actual++; return evt; }; |
| // increment the count in the expected event order and compare it with the actual event order |
| var checkPhase = function(evt) { phase++; assert_equals(description[actual], description[phase], 'Event order is incorrect.'); return evt; }; |
| |
| var request = new PresentationRequest(presentationUrls); |
| var eventWatcher = new EventWatcher(t, request, 'connectionavailable'); |
| var waitConnectionavailable = eventWatcher.wait_for('connectionavailable').then(count).then(function(evt) { connection = connection || evt.connection; return evt; }); |
| var waitConnect; |
| |
| t.add_cleanup(function() { |
| if(connection) |
| connection.terminate(); |
| }); |
| |
| return request.start().then(count) |
| .then(checkPhase).then(function (c) { |
| // Phase #1: Promise is resolved |
| connection = c; |
| |
| // No more user input needed, re-enable timeout |
| t.step_timeout(function() { |
| t.force_timeout(); |
| t.done(); |
| }, 5000); |
| |
| // Check the initial state of the presentation connection |
| assert_equals(connection.state, 'connecting', 'Check the initial state of the presentation connection.'); |
| assert_true(!!connection.id, 'The connection ID is set.'); |
| assert_equals(typeof connection.id, 'string', 'The connection ID is a string.'); |
| assert_true(connection instanceof PresentationConnection, 'The connection is an instance of PresentationConnection.'); |
| |
| var eventWatcher = new EventWatcher(t, connection, 'connect'); |
| waitConnect = eventWatcher.wait_for('connect').then(count); |
| |
| return waitConnectionavailable; |
| }) |
| .then(checkPhase).then(function (evt) { |
| // Phase #2: "connectionavailable" event fired |
| assert_equals(connection, evt.connection, 'Both Promise from PresentationRequest() and a "connectionavailable" event handler receive the same presentation connection.'); |
| |
| return waitConnect; |
| }) |
| .then(checkPhase).then(function () { |
| // Phase #3: "connect" event fired |
| assert_equals(connection.state, 'connected', 'The state of the presentation connection is "connected" when a "connect" event fires.'); |
| }); |
| }); |
| } |
| // ------------------------------------------- |
| // Start New Presentation Test (success) - end |
| // ------------------------------------------- |
| </script> |