1 /* 2 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 (function () { 27 28 module("ui"); 29 30 var kExampleResultsByTest = { 31 "scrollbars/custom-scrollbar-with-incomplete-style.html": { 32 "Mock Builder": { 33 "expected": "IMAGE", 34 "actual": "CRASH" 35 }, 36 "Mock Linux": { 37 "expected": "TEXT", 38 "actual": "CRASH" 39 } 40 }, 41 "userscripts/another-test.html": { 42 "Mock Builder": { 43 "expected": "PASS", 44 "actual": "TEXT" 45 } 46 } 47 } 48 49 test("ui.onebar", 3, function() { 50 if (window.location.hash) { 51 window.location.hash = ''; 52 } 53 54 onebar = new ui.onebar(); 55 onebar.attach(); 56 equal(onebar.innerHTML, 57 '<ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">' + 58 '<li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a href="#unexpected">Unexpected Failures</a></li>' + 59 '<li class="ui-state-default ui-corner-top"><a href="#expected">Expected Failures</a></li>' + 60 '<li class="ui-state-default ui-corner-top ui-state-disabled"><a href="#results">Results</a></li>' + 61 '<li class="ui-state-default ui-corner-top"><a href="#perf">perf</a></li>' + 62 '</ul>' + 63 '<div id="unexpected" class="ui-tabs-panel ui-widget-content ui-corner-bottom"></div>' + 64 '<div id="expected" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"></div>' + 65 '<div id="results" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"></div>' + 66 '<div id="perf" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide"></div>'); 67 68 onebar.select('expected'); 69 equal(window.location.hash, '#expected'); 70 onebar.select('unexpected'); 71 equal(window.location.hash, '#unexpected'); 72 73 $(onebar).detach(); 74 }); 75 76 test("results.ResultsGrid", 1, function() { 77 var grid = new ui.results.ResultsGrid() 78 grid.addResults([ 79 'http://example.com/layout-test-results/foo-bar-diff.txt', 80 'http://example.com/layout-test-results/foo-bar-expected.png', 81 'http://example.com/layout-test-results/foo-bar-actual.png', 82 'http://example.com/layout-test-results/foo-bar-diff.png', 83 ]); 84 equal(grid.innerHTML, 85 '<table class="comparison">' + 86 '<thead>' + 87 '<tr>' + 88 '<th>Expected</th>' + 89 '<th>Actual</th>' + 90 '<th>Diff</th>' + 91 '</tr>' + 92 '</thead>' + 93 '<tbody>' + 94 '<tr>' + 95 '<td class="expected result-container"><img class="image-result" src="http://example.com/layout-test-results/foo-bar-expected.png"></td>' + 96 '<td class="actual result-container"><img class="image-result" src="http://example.com/layout-test-results/foo-bar-actual.png"></td>' + 97 '<td class="diff result-container"><img class="image-result" src="http://example.com/layout-test-results/foo-bar-diff.png"></td>' + 98 '</tr>' + 99 '</tbody>' + 100 '</table>' + 101 '<table class="comparison">' + 102 '<thead>' + 103 '<tr>' + 104 '<th>Expected</th>' + 105 '<th>Actual</th>' + 106 '<th>Diff</th>' + 107 '</tr>' + 108 '</thead>' + 109 '<tbody>' + 110 '<tr>' + 111 '<td class="expected result-container"></td>' + 112 '<td class="actual result-container"></td>' + 113 '<td class="diff result-container"><iframe class="text-result" src="http://example.com/layout-test-results/foo-bar-diff.txt"></iframe></td>' + 114 '</tr>' + 115 '</tbody>' + 116 '</table>'); 117 }); 118 119 test("results.ResultsGrid (crashlog)", 1, function() { 120 var grid = new ui.results.ResultsGrid() 121 grid.addResults(['http://example.com/layout-test-results/foo-bar-crash-log.txt']); 122 equal(grid.innerHTML, '<iframe class="text-result" src="http://example.com/layout-test-results/foo-bar-crash-log.txt"></iframe>'); 123 }); 124 125 test("results.ResultsGrid (empty)", 1, function() { 126 var grid = new ui.results.ResultsGrid() 127 grid.addResults([]); 128 equal(grid.innerHTML, 'No results to display.'); 129 }); 130 131 test("time", 6, function() { 132 var time = new ui.RelativeTime(); 133 equal(time.tagName, 'TIME'); 134 equal(time.className, 'relative'); 135 deepEqual(Object.getOwnPropertyNames(time.__proto__).sort(), [ 136 'date', 137 'init', 138 'setDate', 139 'update', 140 ]); 141 equal(time.outerHTML, '<time class="relative"></time>'); 142 var tenMinutesAgo = new Date(); 143 tenMinutesAgo.setMinutes(tenMinutesAgo.getMinutes() - 10); 144 time.setDate(tenMinutesAgo); 145 equal(time.outerHTML, '<time class="relative">10 minutes ago</time>'); 146 equal(time.date().getTime(), tenMinutesAgo.getTime()); 147 }); 148 149 test("StatusArea", 3, function() { 150 var statusArea = new ui.StatusArea(); 151 var id = statusArea.newId(); 152 statusArea.addMessage(id, 'First Message'); 153 statusArea.addMessage(id, 'Second Message'); 154 equal(statusArea.outerHTML, 155 '<div class="status processing" style="visibility: visible;">' + 156 '<ul class="actions"><li><button class="action">Close</button></li></ul>' + 157 '<progress class="process-text">Processing...</progress>' + 158 '<div id="status-content-1" class="status-content">' + 159 '<div class="message">First Message</div>' + 160 '<div class="message">Second Message</div>' + 161 '</div>' + 162 '</div>'); 163 164 var secondStatusArea = new ui.StatusArea(); 165 var secondId = secondStatusArea.newId(); 166 secondStatusArea.addMessage(secondId, 'First Message second id'); 167 168 equal(statusArea.outerHTML, 169 '<div class="status processing" style="visibility: visible;">' + 170 '<ul class="actions"><li><button class="action">Close</button></li></ul>' + 171 '<progress class="process-text">Processing...</progress>' + 172 '<div id="status-content-1" class="status-content">' + 173 '<div class="message">First Message</div>' + 174 '<div class="message">Second Message</div>' + 175 '</div>' + 176 '<div id="status-content-2" class="status-content">' + 177 '<div class="message">First Message second id</div>' + 178 '</div>' + 179 '</div>'); 180 181 statusArea.addFinalMessage(id, 'Final Message 1'); 182 statusArea.addFinalMessage(secondId, 'Final Message 2'); 183 184 equal(statusArea.outerHTML, 185 '<div class="status" style="visibility: visible;">' + 186 '<ul class="actions"><li><button class="action">Close</button></li></ul>' + 187 '<progress class="process-text">Processing...</progress>' + 188 '<div id="status-content-1" class="status-content">' + 189 '<div class="message">First Message</div>' + 190 '<div class="message">Second Message</div>' + 191 '<div class="message">Final Message 1</div>' + 192 '</div>' + 193 '<div id="status-content-2" class="status-content">' + 194 '<div class="message">First Message second id</div>' + 195 '<div class="message">Final Message 2</div>' + 196 '</div>' + 197 '</div>'); 198 199 statusArea.close(); 200 }); 201 202 })(); 203