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