text: /* Copyright 2017 Mozilla Foundation
   *
   * 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.
   */
  'use strict';
  
  var webUiUtils = require('../../web/ui_utils.js');
  var binarySearchFirstItem = webUiUtils.binarySearchFirstItem;
  var EventBus = webUiUtils.EventBus;
  describe('ui_utils', function () {
    describe('binary search', function () {
      function isTrue(boolean) {
        return boolean;
      }
      function isGreater3(number) {
        return number > 3;
      }
      it('empty array', function () {
        expect(binarySearchFirstItem([], isTrue)).toEqual(0);
      });
      it('single boolean entry', function () {
        expect(binarySearchFirstItem([false], isTrue)).toEqual(1);
        expect(binarySearchFirstItem([true], isTrue)).toEqual(0);
      });
      it('three boolean entries', function () {
        expect(binarySearchFirstItem([true, true, true], isTrue)).toEqual(0);
        expect(binarySearchFirstItem([false, true, true], isTrue)).toEqual(1);
        expect(binarySearchFirstItem([false, false, true], isTrue)).toEqual(2);
        expect(binarySearchFirstItem([false, false, false], isTrue)).toEqual(3);
      });
      it('three numeric entries', function () {
        expect(binarySearchFirstItem([0, 1, 2], isGreater3)).toEqual(3);
        expect(binarySearchFirstItem([2, 3, 4], isGreater3)).toEqual(2);
        expect(binarySearchFirstItem([4, 5, 6], isGreater3)).toEqual(0);
      });
    });
    describe('EventBus', function () {
      it('dispatch event', function () {
        var eventBus = new EventBus();
        var count = 0;
        eventBus.on('test', function () {
          count++;
        });
        eventBus.dispatch('test');
        expect(count).toEqual(1);
      });
      it('dispatch different event', function () {
        var eventBus = new EventBus();
        var count = 0;
        eventBus.on('test', function () {
          count++;
        });
        eventBus.dispatch('nottest');
        expect(count).toEqual(0);
      });
      it('dispatch event multiple times', function () {
        var eventBus = new EventBus();
        var count = 0;
        eventBus.dispatch('test');
        eventBus.on('test', function () {
          count++;
        });
        eventBus.dispatch('test');
        eventBus.dispatch('test');
        expect(count).toEqual(2);
      });
      it('dispatch event to multiple handlers', function () {
        var eventBus = new EventBus();
        var count = 0;
        eventBus.on('test', function () {
          count++;
        });
        eventBus.on('test', function () {
          count++;
        });
        eventBus.dispatch('test');
        expect(count).toEqual(2);
      });
      it('dispatch to detached', function () {
        var eventBus = new EventBus();
        var count = 0;
        var listener = function listener() {
          count++;
        };
        eventBus.on('test', listener);
        eventBus.dispatch('test');
        eventBus.off('test', listener);
        eventBus.dispatch('test');
        expect(count).toEqual(1);
      });
      it('dispatch to wrong detached', function () {
        var eventBus = new EventBus();
        var count = 0;
        eventBus.on('test', function () {
          count++;
        });
        eventBus.dispatch('test');
        eventBus.off('test', function () {
          count++;
        });
        eventBus.dispatch('test');
        expect(count).toEqual(2);
      });
      it('dispatch to detached during handling', function () {
        var eventBus = new EventBus();
        var count = 0;
        var listener1 = function listener1() {
          eventBus.off('test', listener2);
          count++;
        };
        var listener2 = function listener2() {
          eventBus.off('test', listener1);
          count++;
        };
        eventBus.on('test', listener1);
        eventBus.on('test', listener2);
        eventBus.dispatch('test');
        eventBus.dispatch('test');
        expect(count).toEqual(2);
      });
    });
  });