Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: tools/testing/dart/browser_controller.dart

Issue 702543006: Improve browser testing scripts to better handle tests that reload themselves. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove debugging code. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/co19/co19-dartium.status ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 library browser; 4 library browser;
5 5
6 import "dart:async"; 6 import "dart:async";
7 import "dart:convert" show LineSplitter, UTF8, JSON; 7 import "dart:convert" show LineSplitter, UTF8, JSON;
8 import "dart:core"; 8 import "dart:core";
9 import "dart:io"; 9 import "dart:io";
10 10
(...skipping 1448 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 } 1459 }
1460 </style> 1460 </style>
1461 <title>Driving page</title> 1461 <title>Driving page</title>
1462 <script type='text/javascript'> 1462 <script type='text/javascript'>
1463 var STATUS_UPDATE_INTERVAL = 10000; 1463 var STATUS_UPDATE_INTERVAL = 10000;
1464 1464
1465 function startTesting() { 1465 function startTesting() {
1466 var number_of_tests = 0; 1466 var number_of_tests = 0;
1467 var current_id; 1467 var current_id;
1468 var next_id; 1468 var next_id;
1469 // Describes a state where we are currently fetching the next test 1469
1470 // from the server. We use this to never double request tasks. 1470 // Has the test in the current iframe reported that it is done?
1471 var test_completed = true; 1471 var test_completed = true;
1472 // Has the test in the current iframe reported that it is started?
1473 var test_started = false;
1472 var testing_window; 1474 var testing_window;
1473 1475
1476 var embedded_iframe_div = document.getElementById('embedded_iframe_div');
1474 var embedded_iframe = document.getElementById('embedded_iframe'); 1477 var embedded_iframe = document.getElementById('embedded_iframe');
1475 var number_div = document.getElementById('number'); 1478 var number_div = document.getElementById('number');
1476 var executing_div = document.getElementById('currently_executing'); 1479 var executing_div = document.getElementById('currently_executing');
1477 var error_div = document.getElementById('unhandled_error'); 1480 var error_div = document.getElementById('unhandled_error');
1478 var use_iframe = ${useIframe}; 1481 var use_iframe = ${useIframe};
1479 var start = new Date(); 1482 var start = new Date();
1480 1483
1481 // Object that holds the state of an HTML test 1484 // Object that holds the state of an HTML test
1482 var html_test; 1485 var html_test;
1483 1486
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 number_of_tests++; 1578 number_of_tests++;
1576 number_div.innerHTML = number_of_tests; 1579 number_div.innerHTML = number_of_tests;
1577 executing_div.innerHTML = url; 1580 executing_div.innerHTML = url;
1578 if (use_iframe) { 1581 if (use_iframe) {
1579 if (html_test) { 1582 if (html_test) {
1580 window.addEventListener('detect_errors', setChildHandlers, false); 1583 window.addEventListener('detect_errors', setChildHandlers, false);
1581 embedded_iframe.onload = checkChildHandlersInstalled; 1584 embedded_iframe.onload = checkChildHandlersInstalled;
1582 } else { 1585 } else {
1583 embedded_iframe.onload = null; 1586 embedded_iframe.onload = null;
1584 } 1587 }
1588 embedded_iframe_div.removeChild(embedded_iframe);
1589 embedded_iframe = document.createElement('iframe');
1590 embedded_iframe.id = "embedded_iframe";
1591 embedded_iframe.style="width:100%;height:100%";
1592 embedded_iframe_div.appendChild(embedded_iframe);
1585 embedded_iframe.src = url; 1593 embedded_iframe.src = url;
1586 } else { 1594 } else {
1587 if (typeof testing_window != 'undefined') { 1595 if (typeof testing_window != 'undefined') {
1588 testing_window.close(); 1596 testing_window.close();
1589 } 1597 }
1590 testing_window = window.open(url); 1598 testing_window = window.open(url);
1591 } 1599 }
1600 test_started = false;
1601 test_completed = false;
1592 } 1602 }
1593 1603
1594 window.onerror = function (message, url, lineNumber) { 1604 window.onerror = function (message, url, lineNumber) {
1595 if (url) { 1605 if (url) {
1596 reportError(url + ':' + lineNumber + ':' + message); 1606 reportError(url + ':' + lineNumber + ':' + message);
1597 } else { 1607 } else {
1598 reportError(message); 1608 reportError(message);
1599 } 1609 }
1600 } 1610 }
1601 1611
1602 function reportError(msg) { 1612 function reportError(msg) {
1603 function handleReady() { 1613 function handleReady() {
1604 if (this.readyState == this.DONE && this.status != 200) { 1614 if (this.readyState == this.DONE && this.status != 200) {
1605 var error = 'Sending back error did not succeeed: ' + this.status; 1615 var error = 'Sending back error did not succeeed: ' + this.status;
1606 error = error + '. Failed to send msg: ' + msg; 1616 error = error + '. Failed to send msg: ' + msg;
1607 error_div.innerHTML = error; 1617 error_div.innerHTML = error;
1608 } 1618 }
1609 } 1619 }
1610 contactBrowserController( 1620 contactBrowserController(
1611 'POST', '$errorReportingUrl?test=1', handleReady, msg, true); 1621 'POST', '$errorReportingUrl?test=1', handleReady, msg, true);
1612 } 1622 }
1613 1623
1614 function reportMessage(msg, isFirstMessage, isStatusUpdate) { 1624 function reportMessage(msg, isFirstMessage, isStatusUpdate) {
1615 if (isFirstMessage) { 1625 if (isFirstMessage) {
1616 test_completed = false; 1626 if (test_started) {
1627 reportMessage(
1628 "FAIL: test started more than once (test reloads itself) " +
1629 msg, false, false);
1630 return;
1631 }
1617 current_id = next_id; 1632 current_id = next_id;
1633 test_started = true;
1618 contactBrowserController( 1634 contactBrowserController(
1619 'POST', '$startedPath/${browserId}?id=' + current_id, 1635 'POST', '$startedPath/${browserId}?id=' + current_id,
1620 function () {}, msg, true); 1636 function () {}, msg, true);
1621 } else if (isStatusUpdate) { 1637 } else if (isStatusUpdate) {
1622 contactBrowserController( 1638 contactBrowserController(
1623 'POST', '$statusUpdatePath/${browserId}?id=' + current_id, 1639 'POST', '$statusUpdatePath/${browserId}?id=' + current_id,
1624 function() {}, msg, true); 1640 function() {}, msg, true);
1625 } else { 1641 } else {
1626 var is_double_report = test_completed; 1642 var is_double_report = test_completed;
1627 var retry = 0; 1643 var retry = 0;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1659 try { 1675 try {
1660 parsedData = JSON.parse(result); 1676 parsedData = JSON.parse(result);
1661 } catch(error) { } 1677 } catch(error) { }
1662 return parsedData; 1678 return parsedData;
1663 } 1679 }
1664 1680
1665 // Browser tests send JSON messages to the driver window, handled here. 1681 // Browser tests send JSON messages to the driver window, handled here.
1666 function messageHandler(e) { 1682 function messageHandler(e) {
1667 var msg = e.data; 1683 var msg = e.data;
1668 if (typeof msg != 'string') return; 1684 if (typeof msg != 'string') return;
1669 1685 var expectedSource =
1686 use_iframe ? embedded_iframe.contentWindow : testing_window;
1687 if (e.source != expectedSource) {
1688 reportError("Message received from old test window: " + msg);
1689 return;
1690 }
1670 var parsedData = parseResult(msg); 1691 var parsedData = parseResult(msg);
1671 if (parsedData) { 1692 if (parsedData) {
1672 // Only if the JSON message contains all required parameters, 1693 // Only if the JSON message contains all required parameters,
1673 // will we handle it and post it back to the test controller. 1694 // will we handle it and post it back to the test controller.
1674 if ('message' in parsedData && 1695 if ('message' in parsedData &&
1675 'is_first_message' in parsedData && 1696 'is_first_message' in parsedData &&
1676 'is_status_update' in parsedData && 1697 'is_status_update' in parsedData &&
1677 'is_done' in parsedData) { 1698 'is_done' in parsedData) {
1678 var message = parsedData['message']; 1699 var message = parsedData['message'];
1679 var isFirstMessage = parsedData['is_first_message']; 1700 var isFirstMessage = parsedData['is_first_message'];
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1737 getNextTask(); 1758 getNextTask();
1738 } 1759 }
1739 </script> 1760 </script>
1740 </head> 1761 </head>
1741 <body onload="startTesting()"> 1762 <body onload="startTesting()">
1742 <div class="controller box"> 1763 <div class="controller box">
1743 Dart test driver, number of tests: <span id="number"></span><br> 1764 Dart test driver, number of tests: <span id="number"></span><br>
1744 Currently executing: <span id="currently_executing"></span><br> 1765 Currently executing: <span id="currently_executing"></span><br>
1745 Unhandled error: <span id="unhandled_error"></span> 1766 Unhandled error: <span id="unhandled_error"></span>
1746 </div> 1767 </div>
1747 <div class="test box"> 1768 <div id="embedded_iframe_div" class="test box">
1748 <iframe style="width:100%;height:100%;" id="embedded_iframe"></iframe> 1769 <iframe style="width:100%;height:100%;" id="embedded_iframe"></iframe>
1749 </div> 1770 </div>
1750 </body> 1771 </body>
1751 </html> 1772 </html>
1752 """; 1773 """;
1753 return driverContent; 1774 return driverContent;
1754 } 1775 }
1755 } 1776 }
OLDNEW
« no previous file with comments | « tests/co19/co19-dartium.status ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698