constructor() {
    /** @type {number} */
    this.chooseIndex = 0;

    /** @type {!Array<shaka.extern.Variant>} */
    this.variants = [];

    /** @type {shaka.extern.AbrManager.SwitchCallback} */
    this.switchCallback = null;

    /** @type {!jasmine.Spy} */
    this.init = jasmine.createSpy('init').and.callFake((switchCallback) => {
      this.switchCallback = switchCallback;
    });

    /** @type {!jasmine.Spy} */
    this.stop = jasmine.createSpy('stop');

    /** @type {!jasmine.Spy} */
    this.release = jasmine.createSpy('release');

    /** @type {!jasmine.Spy} */
    this.enable = jasmine.createSpy('enable');

    /** @type {!jasmine.Spy} */
    this.disable = jasmine.createSpy('disable');

    /** @type {!jasmine.Spy} */
    this.segmentDownloaded = jasmine.createSpy('segmentDownloaded');

    /** @type {!jasmine.Spy} */
    this.getBandwidthEstimate = jasmine.createSpy('getBandwidthEstimate');

    /** @type {!jasmine.Spy} */
    this.chooseVariant = jasmine.createSpy('chooseVariant').and.callFake(() => {
      return this.variants[this.chooseIndex];
    });

    /** @type {!jasmine.Spy} */
    this.setVariants = jasmine.createSpy('setVariants').and.callFake((arg) => {
      this.variants = arg;
    });

    /** @type {!jasmine.Spy} */
    this.playbackRateChanged = jasmine.createSpy('playbackRateChanged');

    /** @type {!jasmine.Spy} */
    this.configure = jasmine.createSpy('configure');
  }
@summary A fake AbrManager.
@extends {shaka.abr.SimpleAbrManager}