// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// CDM unit test player is used to run a specific test within the CDM. The test
// result is reported via a special key message with UNIT_TEST_RESULT_HEADER
// followed by 1 for success, and 0 for failure.
function UnitTestPlayer(video, testConfig) {
  this.video = video;
  this.testConfig = testConfig;
}

UnitTestPlayer.prototype.init = function() {
  // Returns a promise.
  return PlayerUtils.initEMEPlayer(this);
};

UnitTestPlayer.prototype.registerEventListeners = function() {
  // Returns a promise.
  return PlayerUtils.registerEMEEventListeners(this);
};

handleMessage = function(message) {
  // The test result is either '0' or '1' appended to the header.
  var msg = Utils.convertToUint8Array(message.message);
  if (Utils.hasPrefix(msg, UNIT_TEST_RESULT_HEADER)) {
    if (msg.length != UNIT_TEST_RESULT_HEADER.length + 1) {
      Utils.failTest('Unexpected CDM Unit Test message' + msg);
      return;
    }
    var result_index = UNIT_TEST_RESULT_HEADER.length;
    var success = String.fromCharCode(msg[result_index]) == 1;
    Utils.timeLog('CDM unit test: ' + (success ? 'Success' : 'Fail'));
    if (success)
      Utils.setResultInTitle(UNIT_TEST_SUCCESS);
    else
      Utils.failTest('CDM unit test failed.');
  }
};

UnitTestPlayer.prototype.onMessage = handleMessage;
