Index: Tools/GardeningServer/lib/test/util-tests.html |
diff --git a/Tools/GardeningServer/lib/test/util-tests.html b/Tools/GardeningServer/lib/test/util-tests.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b2f2e4bf45f9d2a872268163819c1a6b4d7ea44f |
--- /dev/null |
+++ b/Tools/GardeningServer/lib/test/util-tests.html |
@@ -0,0 +1,135 @@ |
+<!-- |
+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. |
+--> |
+ |
+<link rel="import" href="../util.html"> |
+ |
+<script> |
+ |
+(function () { |
+'use strict'; |
+ |
+var assert = chai.assert; |
+ |
+describe('util', function() { |
+ describe('.updateLeft', function() { |
+ it('updates an array', function() { |
+ var x = {fingerprint: 'x', val: 0}; |
+ var y1 = {fingerprint: 'y', val: 1}; |
+ var y2 = {fingerprint: 'y', val: 2}; |
+ var z = {fingerprint: 'z', val: 3}; |
+ var target = [x, y1]; |
+ var source = [y2, z]; |
+ util.updateLeft(target, source); |
+ assert.strictEqual(target[0], y1); |
+ assert.strictEqual(target[1], z); |
+ assert.equal(target[0].val, 2); |
+ }); |
+ |
+ it('updates and reorders an array', function() { |
+ var x = {fingerprint: 'x', val: 0}; |
+ var y1 = {fingerprint: 'y', val: 1}; |
+ var y2 = {fingerprint: 'y', val: 2}; |
+ var z = {fingerprint: 'z', val: 3}; |
+ var target = [x, y1]; |
+ var source = [z, y2]; |
+ util.updateLeft(target, source); |
+ assert.strictEqual(target[0], z); |
+ assert.strictEqual(target[1], y1); |
+ assert.equal(target[1].val, 2); |
+ }); |
+ |
+ it('calls custom updateLeft members', function() { |
+ var y1 = {fingerprint: 'y', val: 1, |
+ updateLeft: function(right) { |
+ this.val += right.val; |
+ }}; |
+ var y2 = {fingerprint: 'y', val: 2}; |
+ var target = [y1]; |
+ var source = [y2]; |
+ util.updateLeft(target, source); |
+ assert.strictEqual(target[0], y1); |
+ assert.propertyVal(target[0], 'val', 3); |
+ assert.property(target[0], 'updateLeft'); |
+ }); |
+ |
+ it('calls custom updateLeft members in custom types', function() { |
+ function Updatable(val) { |
+ this.fingerprint = 'x'; |
+ this.val = val; |
+ }; |
+ Updatable.prototype.updateLeft = function(right) { |
+ this.val += right.val; |
+ }; |
+ |
+ var y1 = new Updatable(1); |
+ var y2 = new Updatable(2); |
+ var target = [y1]; |
+ var source = [y2]; |
+ util.updateLeft(target, source); |
+ assert.strictEqual(target[0], y1); |
+ assert.propertyVal(target[0], 'val', 3); |
+ assert.property(target[0], 'updateLeft'); |
+ }); |
+ |
+ it('skips UI properties', function() { |
+ function Updatable(val, visible) { |
+ this.val = val; |
+ if (visible !== undefined) |
+ this.visible = visible |
+ }; |
+ Updatable.uiStateProperties = ['visible']; |
+ |
+ var target = new Updatable(1, true); |
+ var source = new Updatable(2, false); |
+ util.updateLeft(target, source); |
+ assert.propertyVal(target, 'val', 2); |
+ assert.propertyVal(target, 'visible', true); |
+ |
+ var target = new Updatable(1, undefined); |
+ var source = new Updatable(2, true); |
+ util.updateLeft(target, source); |
+ assert.notProperty(target, 'visible'); |
+ |
+ var target = new Updatable(1, true); |
+ var source = new Updatable(2, undefined); |
+ util.updateLeft(target, source); |
+ assert.propertyVal(target, 'visible', true); |
+ }); |
+ |
+ it('updates array containing null', function() { |
+ var target = [{fingerprint: 'x', a: {b:1}}]; |
+ var source = [{fingerprint: 'x', a: null}]; |
+ util.updateLeft(target, source); |
+ assert.propertyVal(target[0], 'a', null); |
+ |
+ var target = [{fingerprint: 'x', a: null}]; |
+ var source = [{fingerprint: 'x', a: {b:1}}]; |
+ util.updateLeft(target, source); |
+ assert.deepEqual(target[0].a, {b:1}); |
+ }); |
+ |
+ it('updates object containing null', function() { |
+ var target = {x: {a: 1}}; |
+ var source = {x: null}; |
+ util.updateLeft(target, source); |
+ assert.propertyVal(target, 'x', null); |
+ |
+ var target = {x: null}; |
+ var source = {x: {a: 1}}; |
+ util.updateLeft(target, source); |
+ assert.deepEqual(target.x, {a: 1}); |
+ }); |
+ |
+ it('throws on badly typed arguments', function() { |
+ assert.throws(function() {util.updateLeft(1, 2)}, TypeError, '1, 2'); |
+ assert.throws(function() {util.updateLeft([1], [2])}, TypeError, '[1], [2]'); |
+ }); |
+ }); |
+}); |
+ |
+})(); |
+ |
+</script> |