166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved.
266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be
366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file.
466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict';
666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.test_utils');
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('about_tracing.tracing_controller');
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('about_tracing.tracing_controller', function() {
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('loadTraceFileCompleteWithJSONfiles', function() {
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var callbackFired = false;
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var traceEventData = '[{"a":1, "b":2}]';
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var tc = new about_tracing.TracingController(undefined);
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    tc.addEventListener('loadTraceFileComplete', function(event) {
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      callbackFired = true;
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    });
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    tc.onLoadTraceFileComplete(traceEventData);
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertTrue(callbackFired);
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(traceEventData, tc.traceEventData);
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('loadTraceFileCompleteWithNonJSONfiles', function() {
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var callbackFired = false;
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var tc = new about_tracing.TracingController(undefined);
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    tc.addEventListener('loadTraceFileComplete', function(event) {
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      callbackFired = true;
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    });
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    tc.onLoadTraceFileComplete('<DOCTYPE>');
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('<DOCTYPE>', tc.traceEventData);
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertTrue(callbackFired);
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  function SendStub() {
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    this.sends = [];
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  SendStub.prototype = {
4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    reset: function() {
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.sends = [];
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    send: function(msg, args) {
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.sends.push({
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        msg: msg,
5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        args: args
5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      });
5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    get numSends() {
5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      return this.sends.length;
5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    getMessage: function(i) {
5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      return this.sends[i].msg;
6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    getArgs: function(i) {
6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      return this.sends[i].args;
6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    }
6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('saveTraceFile', function() {
6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var sendStub = new SendStub();
6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var tc = new about_tracing.TracingController(sendStub.send.bind(sendStub));
7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    tc.traceEventData_ = JSON.stringify([1, 2, 3]);
7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(1, sendStub.numSends);
7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('tracingControllerInitialized', sendStub.getMessage(0));
7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    sendStub.reset();
7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    tc.beginSaveTraceFile();
7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(1, sendStub.numSends);
7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('saveTraceFile', sendStub.getMessage(0));
7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var savedDataString = sendStub.getArgs(0)[0];
8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var savedData = JSON.parse(savedDataString);
8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertArrayEquals([1, 2, 3], savedData.traceEvents);
8266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
8366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
84