Source: debug/asserts.js

/**
 * @license
 * Copyright 2015 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

goog.provide('shaka.asserts');


/**
 * @namespace shaka.asserts
 * @summary An assertion framework which is compiled out for deployment.
 */


/**
 * @define {boolean} true to enable asserts, false otherwise.
 */
goog.define('shaka.asserts.ENABLE_ASSERTS', goog.DEBUG);


/** @type {function(*, string=)} */
shaka.asserts.assert = function() {};


/** @type {function()} */
shaka.asserts.notImplemented = function() {};


/** @type {function()} */
shaka.asserts.unreachable = function() {};


/** @private */
shaka.asserts.patchAssert_ = function() {
  var assert = console.assert;

  if (!assert) {
    console.assert = function() {};
  }
};


// Install assert functions.
if (shaka.asserts.ENABLE_ASSERTS) {
  shaka.asserts.patchAssert_();

  shaka.asserts.assert = function(test, opt_message) {
    var message = opt_message;
    if (!test && !message) {
      // IE11 does not display any stack information on assertions.  So if
      // there is no message, create one from the stack.
      try {
        throw new Error();
      } catch (error) {
        // Line 0 is "Error", line 1 is this location, line 2 is the immediate
        // caller of shaka.asserts.assert().
        message = error.stack.split('\n')[2];
      }
    }
    console.assert(test, message);
  };

  shaka.asserts.notImplemented =
      console.assert.bind(console, 0 == 1, 'Not implemented.');

  shaka.asserts.unreachable =
      console.assert.bind(console, 0 == 1, 'Unreachable reached.');
}