Index: remoting/webapp/unittests/base_unittest.js |
diff --git a/remoting/webapp/unittests/base_unittest.js b/remoting/webapp/unittests/base_unittest.js |
deleted file mode 100644 |
index a5a6a6f6049ac6022f3d6a137a3a06db5c8ad1e0..0000000000000000000000000000000000000000 |
--- a/remoting/webapp/unittests/base_unittest.js |
+++ /dev/null |
@@ -1,327 +0,0 @@ |
-// 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. |
- |
-(function() { |
- |
-'use strict'; |
- |
-module('base'); |
- |
-test('mix(dest, src) should copy properties from |src| to |dest|', |
- function() { |
- var src = { a: 'a', b: 'b'}; |
- var dest = { c: 'c'}; |
- |
- base.mix(dest, src); |
- deepEqual(dest, {a: 'a', b: 'b', c: 'c'}); |
-}); |
- |
-test('mix(dest, src) should assert if properties are overwritten', |
- function() { |
- var src = { a: 'a', b: 'b'}; |
- var dest = { a: 'a'}; |
- |
- sinon.stub(base.debug, 'assert'); |
- |
- try { |
- base.mix(dest, src); |
- } catch (e) { |
- } finally { |
- sinon.assert.called(base.debug.assert); |
- $testStub(base.debug.assert).restore(); |
- } |
-}); |
- |
-test('values(obj) should return an array containing the values of |obj|', |
- function() { |
- var output = base.values({ a: 'a', b: 'b'}); |
- |
- notEqual(output.indexOf('a'), -1, '"a" should be in the output'); |
- notEqual(output.indexOf('b'), -1, '"b" should be in the output'); |
-}); |
- |
-test('deepCopy(obj) should return null on NaN and undefined', |
- function() { |
- QUnit.equal(base.deepCopy(NaN), null); |
- QUnit.equal(base.deepCopy(undefined), null); |
-}); |
- |
-test('deepCopy(obj) should copy primitive types recursively', |
- function() { |
- QUnit.equal(base.deepCopy(1), 1); |
- QUnit.equal(base.deepCopy('hello'), 'hello'); |
- QUnit.equal(base.deepCopy(false), false); |
- QUnit.equal(base.deepCopy(null), null); |
- QUnit.deepEqual(base.deepCopy([1, 2]), [1, 2]); |
- QUnit.deepEqual(base.deepCopy({'key': 'value'}), {'key': 'value'}); |
- QUnit.deepEqual(base.deepCopy( |
- {'key': {'key_nested': 'value_nested'}}), |
- {'key': {'key_nested': 'value_nested'}} |
- ); |
- QUnit.deepEqual(base.deepCopy([1, [2, [3]]]), [1, [2, [3]]]); |
-}); |
- |
-test('modify the original after deepCopy(obj) should not affect the copy', |
- function() { |
- var original = [1, 2, 3, 4]; |
- var copy = base.deepCopy(original); |
- original[2] = 1000; |
- QUnit.deepEqual(copy, [1, 2, 3, 4]); |
-}); |
- |
-test('dispose(obj) should invoke the dispose method on |obj|', |
- function() { |
- /** |
- * @constructor |
- * @implements {base.Disposable} |
- */ |
- base.MockDisposable = function() {}; |
- base.MockDisposable.prototype.dispose = sinon.spy(); |
- |
- var obj = new base.MockDisposable(); |
- base.dispose(obj); |
- sinon.assert.called(obj.dispose); |
-}); |
- |
-test('dispose(obj) should not crash if |obj| is null', |
- function() { |
- expect(0); |
- base.dispose(null); |
-}); |
- |
-test('urljoin(url, opt_param) should return url if |opt_param| is missing', |
- function() { |
- QUnit.equal( |
- base.urlJoin('http://www.chromium.org'), 'http://www.chromium.org'); |
-}); |
- |
-test('urljoin(url, opt_param) should urlencode |opt_param|', |
- function() { |
- var result = base.urlJoin('http://www.chromium.org', { |
- a: 'a', |
- foo: 'foo', |
- escapist: ':/?#[]@$&+,;=' |
- }); |
- QUnit.equal( |
- result, |
- 'http://www.chromium.org?a=a&foo=foo' + |
- '&escapist=%3A%2F%3F%23%5B%5D%40%24%26%2B%2C%3B%3D'); |
-}); |
- |
-test('escapeHTML(str) should escape special characters', function() { |
- QUnit.equal( |
- base.escapeHTML('<script>alert("hello")</script>'), |
- '<script>alert("hello")</script>'); |
-}); |
- |
-QUnit.asyncTest('Promise.sleep(delay) should fulfill the promise after |delay|', |
- /** |
- * 'this' is not defined for jscompile, so it can't figure out the type of |
- * this.clock. |
- * @suppress {reportUnknownTypes|checkVars|checkTypes} |
- */ |
- function() { |
- var isCalled = false; |
- var clock = /** @type {QUnit.Clock} */ (this.clock); |
- |
- base.Promise.sleep(100).then(function(){ |
- isCalled = true; |
- ok(true, 'Promise.sleep() is fulfilled after delay.'); |
- QUnit.start(); |
- }); |
- |
- // Tick the clock for 2 seconds and check if the promise is fulfilled. |
- clock.tick(2); |
- |
- // Promise fulfillment always occur on a new stack. Therefore, we will run |
- // the verification in a requestAnimationFrame. |
- window.requestAnimationFrame(function(){ |
- ok(!isCalled, 'Promise.sleep() should not be fulfilled prematurely.'); |
- clock.tick(101); |
- }); |
-}); |
- |
-QUnit.asyncTest('Promise.negate should fulfill iff the promise does not.', |
- function() { |
- |
- base.Promise.negate(Promise.reject()).then( |
- QUnit.ok.bind(null, true), |
- /** @type {Function} */ (QUnit.ok.bind(null, false))); |
- base.Promise.negate(Promise.resolve()).then( |
- QUnit.ok.bind(null, false), |
- /** @type {Function} */ (QUnit.ok.bind(null, true))); |
- window.requestAnimationFrame(function(){ |
- QUnit.start(); |
- }); |
-}); |
- |
-module('base.Deferred'); |
- |
-QUnit.asyncTest('resolve() should fulfill the underlying promise.', function() { |
- /** @returns {Promise} */ |
- function async() { |
- var deferred = new base.Deferred(); |
- deferred.resolve('bar'); |
- return deferred.promise(); |
- } |
- |
- async().then( |
- /** @param {string} value */ |
- function(value){ |
- QUnit.equal(value, 'bar'); |
- QUnit.start(); |
- }, function() { |
- QUnit.ok(false, 'The reject handler should not be invoked.'); |
- }); |
-}); |
- |
-QUnit.asyncTest('reject() should fail the underlying promise.', function() { |
- /** @returns {Promise} */ |
- function async() { |
- var deferred = new base.Deferred(); |
- deferred.reject('bar'); |
- return deferred.promise(); |
- } |
- |
- async().then(function(){ |
- QUnit.ok(false, 'The then handler should not be invoked.'); |
- }, function(value) { |
- QUnit.equal(value, 'bar'); |
- QUnit.start(); |
- }); |
-}); |
- |
- |
-/** @type {base.EventSourceImpl} */ |
-var source = null; |
-var listener = null; |
- |
-module('base.EventSource', { |
- setup: function() { |
- source = new base.EventSourceImpl(); |
- source.defineEvents(['foo', 'bar']); |
- listener = sinon.spy(); |
- source.addEventListener('foo', listener); |
- }, |
- teardown: function() { |
- source = null; |
- listener = null; |
- } |
-}); |
- |
-test('raiseEvent() should invoke the listener', function() { |
- source.raiseEvent('foo'); |
- sinon.assert.called(listener); |
-}); |
- |
-test('raiseEvent() should invoke the listener with the correct event data', |
- function() { |
- var data = { |
- field: 'foo' |
- }; |
- source.raiseEvent('foo', data); |
- sinon.assert.calledWith(listener, data); |
-}); |
- |
-test( |
- 'raiseEvent() should not invoke listeners that are added during raiseEvent', |
- function() { |
- source.addEventListener('foo', function() { |
- source.addEventListener('foo', function() { |
- ok(false); |
- }); |
- ok(true); |
- }); |
- source.raiseEvent('foo'); |
-}); |
- |
-test('raiseEvent() should not invoke listeners of a different event', |
- function() { |
- source.raiseEvent('bar'); |
- sinon.assert.notCalled(listener); |
-}); |
- |
-test('raiseEvent() should assert when undeclared events are raised', |
- function() { |
- sinon.stub(base.debug, 'assert'); |
- try { |
- source.raiseEvent('undefined'); |
- } catch (e) { |
- } finally { |
- sinon.assert.called(base.debug.assert); |
- $testStub(base.debug.assert).restore(); |
- } |
-}); |
- |
-test( |
- 'removeEventListener() should not invoke the listener in subsequent ' + |
- 'calls to |raiseEvent|', |
- function() { |
- source.raiseEvent('foo'); |
- sinon.assert.calledOnce(listener); |
- |
- source.removeEventListener('foo', listener); |
- source.raiseEvent('foo'); |
- sinon.assert.calledOnce(listener); |
-}); |
- |
-test('removeEventListener() should work even if the listener ' + |
- 'is removed during |raiseEvent|', |
- function() { |
- var sink = {}; |
- sink.listener = sinon.spy(function() { |
- source.removeEventListener('foo', sink.listener); |
- }); |
- |
- source.addEventListener('foo', sink.listener); |
- source.raiseEvent('foo'); |
- sinon.assert.calledOnce(sink.listener); |
- |
- source.raiseEvent('foo'); |
- sinon.assert.calledOnce(sink.listener); |
-}); |
- |
-test('encodeUtf8() can encode UTF8 strings', function() { |
- /** @type {function(ArrayBuffer):Array} */ |
- function toJsArray(arrayBuffer) { |
- var result = []; |
- var array = new Uint8Array(arrayBuffer); |
- for (var i = 0; i < array.length; ++i) { |
- result.push(array[i]); |
- } |
- return result; |
- } |
- |
- // ASCII. |
- QUnit.deepEqual(toJsArray(base.encodeUtf8("ABC")), [0x41, 0x42, 0x43]); |
- |
- // Some arbitrary characters from the basic Unicode plane. |
- QUnit.deepEqual( |
- toJsArray(base.encodeUtf8("挂Ѓф")), |
- [/* 挂 */ 0xE6, 0x8C, 0x82, /* Ѓ */ 0xD0, 0x83, /* ф */ 0xD1, 0x84]); |
- |
- // Unicode surrogate pair for U+1F603. |
- QUnit.deepEqual(toJsArray(base.encodeUtf8("😃")), |
- [0xF0, 0x9F, 0x98, 0x83]); |
-}); |
- |
-test('decodeUtf8() can decode UTF8 strings', function() { |
- // ASCII. |
- QUnit.equal(base.decodeUtf8(new Uint8Array([0x41, 0x42, 0x43]).buffer), |
- "ABC"); |
- |
- // Some arbitrary characters from the basic Unicode plane. |
- QUnit.equal( |
- base.decodeUtf8( |
- new Uint8Array([/* 挂 */ 0xE6, 0x8C, 0x82, |
- /* Ѓ */ 0xD0, 0x83, |
- /* ф */ 0xD1, 0x84]).buffer), |
- "挂Ѓф"); |
- |
- // Unicode surrogate pair for U+1F603. |
- QUnit.equal(base.decodeUtf8(new Uint8Array([0xF0, 0x9F, 0x98, 0x83]).buffer), |
- "😃"); |
-}); |
- |
-})(); |