15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Called by the common.js module. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function moduleDidLoad() { 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The module is not hidden by default so we can easily see if the plugin 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // failed to load. 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) common.hideModule(); 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvar currentTestEl = null; 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)var failedTests = 0; 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)var testsFinished = false; 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochfunction startCommand(testName) { 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var testListEl = document.getElementById('tests'); 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var testEl = document.createElement('li'); 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var testRowEl = document.createElement('div'); 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var testNameEl = document.createElement('span'); 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var testResultEl = document.createElement('span'); 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testRowEl.classList.add('row'); 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testNameEl.classList.add('name'); 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testNameEl.textContent = testName; 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testResultEl.classList.add('result'); 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testRowEl.appendChild(testNameEl); 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testRowEl.appendChild(testResultEl); 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testEl.appendChild(testRowEl); 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testListEl.appendChild(testEl); 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch currentTestEl = testEl; 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochfunction failCommand(fileName, lineNumber, summary) { 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var testMessageEl = document.createElement('pre'); 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testMessageEl.textContent += fileName + ':' + lineNumber + ': ' + summary; 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch currentTestEl.appendChild(testMessageEl); 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) failedTests++; 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochfunction endCommand(testName, testResult) { 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var testRowEl = currentTestEl.querySelector('.row'); 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var testResultEl = currentTestEl.querySelector('.result'); 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testRowEl.classList.add(testResult); 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testResultEl.textContent = testResult; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)function testendCommand(exitCode) { 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) testsFinished = true; 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (failedTests) { 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) common.updateStatus('FAILED'); 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) document.getElementById('statusField').classList.add('failed'); 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } else { 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) common.updateStatus('OK'); 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) document.getElementById('statusField').classList.add('ok'); 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function handleMessage(event) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var msg = event.data; 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var firstColon = msg.indexOf(':'); 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) var cmd = firstColon !== -1 ? msg.substr(0, firstColon) : msg; 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (cmd == 'testend') 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch event.srcElement.postMessage({'testend' : ''}); 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var cmdFunctionName = cmd + 'Command'; 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var cmdFunction = window[cmdFunctionName]; 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (typeof(cmdFunction) !== 'function') { 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch console.log('Unknown command: ' + cmd); 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch console.log(' message: ' + msg); 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var argCount = cmdFunction.length; 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Don't use split, because it will split all commas (for example any commas 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // in the test failure summary). 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var argList = msg.substr(firstColon + 1); 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch args = []; 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (var i = 0; i < argCount - 1; ++i) { 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var arg; 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch var comma = argList.indexOf(','); 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (comma === -1) { 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (i !== argCount - 1) { 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch console.log('Bad arg count to command "' + cmd + '", expected ' + 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch argCount); 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch console.log(' message: ' + msg); 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else { 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch arg = argList; 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else { 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch arg = argList.substr(0, comma); 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch argList = argList.substr(comma + 1); 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch args.push(arg); 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Last argument is the rest of the message. 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch args.push(argList); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch cmdFunction.apply(null, args); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 104