diff --git a/test/unit/ui_utils_spec.js b/test/unit/ui_utils_spec.js
new file mode 100644
index 000000000..757aef253
--- /dev/null
+++ b/test/unit/ui_utils_spec.js
@@ -0,0 +1,37 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* globals expect, it, describe, binarySearchFirstItem */
+
+'use strict';
+
+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);
+ });
+ });
+});
+
diff --git a/test/unit/unit_test.html b/test/unit/unit_test.html
index c8f59fc9e..9b43e01a3 100644
--- a/test/unit/unit_test.html
+++ b/test/unit/unit_test.html
@@ -40,6 +40,7 @@
+
@@ -52,6 +53,7 @@
+