| Index: mojo/public/bindings/js/codec_unittests.js
|
| diff --git a/mojo/public/bindings/js/codec_unittests.js b/mojo/public/bindings/js/codec_unittests.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7fd23f6f7306ff1103f85a8e2d76a1c90e7cfa47
|
| --- /dev/null
|
| +++ b/mojo/public/bindings/js/codec_unittests.js
|
| @@ -0,0 +1,164 @@
|
| +// Copyright 2013 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.
|
| +
|
| +define([
|
| + "gtest",
|
| + "mojo/public/bindings/js/codec",
|
| + "mojo/public/bindings/js/test/sample_service"
|
| + ], function(gtest, codec, sample) {
|
| + testBar();
|
| + testFoo();
|
| + this.result = "PASS";
|
| +
|
| + function barMatches(bar, expected) {
|
| + gtest.expectEqual(bar.alpha, expected.alpha,
|
| + "bar.alpha is " + bar.alpha);
|
| + gtest.expectEqual(bar.beta, expected.beta,
|
| + "bar.beta is " + bar.beta);
|
| + gtest.expectEqual(bar.gamma, expected.gamma,
|
| + "bar.gamma is " + bar.gamma);
|
| + }
|
| +
|
| + function equalsArray(actual, expected, tag) {
|
| + for (var i = 0; i < expected.length; ++i) {
|
| + gtest.expectEqual(actual[i], expected[i],
|
| + tag + "[" + i + "] is " + actual[i]);
|
| + }
|
| + }
|
| +
|
| + function testBar() {
|
| + var bar = new sample.Bar();
|
| + bar.alpha = 1;
|
| + bar.beta = 2;
|
| + bar.gamma = 3;
|
| + bar.extraProperty = "banana";
|
| +
|
| + var messageName = 42;
|
| + var payloadSize = sample.Bar.encodedSize;
|
| +
|
| + var builder = new codec.MessageBuilder(messageName, payloadSize);
|
| + builder.encodeStruct(sample.Bar, bar);
|
| +
|
| + var message = builder.finish();
|
| +
|
| + var expectedMemory = [
|
| + 24, 0, 0, 0,
|
| + 42, 0, 0, 0,
|
| +
|
| + 16, 0, 0, 0,
|
| + 3, 0, 0, 0,
|
| +
|
| + 1, 2, 3, 0,
|
| + 0, 0, 0, 0,
|
| + ];
|
| +
|
| + for (var i = 0; i < expectedMemory.length; ++i) {
|
| + gtest.expectEqual(message.memory[i], expectedMemory[i],
|
| + "message.memory[" + i + "] is " + message.memory[i]);
|
| + }
|
| +
|
| + var reader = new codec.MessageReader(message);
|
| +
|
| + gtest.expectEqual(reader.payloadSize, payloadSize,
|
| + "reader.payloadSize is " + reader.payloadSize);
|
| + gtest.expectEqual(reader.messageName, messageName,
|
| + "reader.messageName is " + reader.messageName);
|
| +
|
| + var bar2 = reader.decodeStruct(sample.Bar);
|
| +
|
| + barMatches(bar2, bar);
|
| + gtest.expectFalse("extraProperty" in bar2,
|
| + "extraProperty appeared in bar2")
|
| + }
|
| +
|
| + function testFoo() {
|
| + var foo = new sample.Foo();
|
| + foo.x = 0x212B4D5;
|
| + foo.y = 0x16E93;
|
| + foo.a = 1;
|
| + foo.b = 0;
|
| + foo.c = 3; // This will get truncated to one bit.
|
| + foo.bar = new sample.Bar();
|
| + foo.bar.alpha = 91;
|
| + foo.bar.beta = 82;
|
| + foo.bar.gamma = 73;
|
| + foo.data = [
|
| + 4, 5, 6, 7, 8,
|
| + ];
|
| + foo.extra_bars = [
|
| + new sample.Bar(), new sample.Bar(), new sample.Bar(),
|
| + ];
|
| + for (var i = 0; i < foo.extra_bars.length; ++i) {
|
| + foo.extra_bars[i].alpha = 1 * i;
|
| + foo.extra_bars[i].beta = 2 * i;
|
| + foo.extra_bars[i].gamma = 3 * i;
|
| + }
|
| + foo.name = "I am a banana";
|
| + foo.files = [
|
| + // These are supposed to be handles, but we fake them with integers.
|
| + 23423782, 32549823, 98320423, 38502383, 92834093,
|
| + ];
|
| +
|
| + var messageName = 31;
|
| + var payloadSize = sample.Foo.encodedSize;
|
| +
|
| + var builder = new codec.MessageBuilder(messageName, payloadSize);
|
| + builder.encodeStruct(sample.Foo, foo);
|
| +
|
| + var message = builder.finish();
|
| +
|
| + var expectedMemory = [
|
| + /* 0: */ 80, 0, 0, 0, 31, 0, 0, 0,
|
| + /* 8: */ 72, 0, 0, 0, 10, 0, 0, 0,
|
| + /* 16: */ 0xD5, 0xB4, 0x12, 0x02, 0x93, 0x6E, 0x01, 0,
|
| + /* 24: */ 5, 0, 0, 0, 0, 0, 0, 0,
|
| + /* 32: */ 48, 0, 0, 0, 0, 0, 0, 0,
|
| + // TODO(abarth): Test more of the message's raw memory.
|
| + ];
|
| +
|
| + equalsArray(message.memory, expectedMemory, "message.memory");
|
| +
|
| + var expectedHandles = [
|
| + 23423782, 32549823, 98320423, 38502383, 92834093,
|
| + ];
|
| +
|
| + equalsArray(message.handles, expectedHandles, "message.handles");
|
| +
|
| + var reader = new codec.MessageReader(message);
|
| +
|
| + gtest.expectEqual(reader.payloadSize, payloadSize,
|
| + "reader.payloadSize is " + reader.payloadSize);
|
| + gtest.expectEqual(reader.messageName, messageName,
|
| + "reader.messageName is " + reader.messageName);
|
| +
|
| + var foo2 = reader.decodeStruct(sample.Foo);
|
| +
|
| + gtest.expectEqual
|
| +
|
| + gtest.expectEqual(foo2.x, foo.x,
|
| + "foo2.x is " + foo2.x);
|
| + gtest.expectEqual(foo2.y, foo.y,
|
| + "foo2.y is " + foo2.y);
|
| +
|
| + gtest.expectEqual(foo2.a, foo.a & 1,
|
| + "foo2.a is " + foo2.a);
|
| + gtest.expectEqual(foo2.b, foo.b & 1,
|
| + "foo2.b is " + foo2.b);
|
| + gtest.expectEqual(foo2.c, foo.c & 1,
|
| + "foo2.c is " + foo2.c);
|
| +
|
| + barMatches(foo2.bar, foo.bar);
|
| + equalsArray(foo2.data, foo.data, "foo2.data");
|
| +
|
| + var actualExtraBarsJSON = JSON.stringify(foo2.extra_bars);
|
| + var expectedExtraBarsJSON = JSON.stringify(foo.extra_bars);
|
| + gtest.expectEqual(actualExtraBarsJSON, expectedExtraBarsJSON,
|
| + actualExtraBarsJSON);
|
| +
|
| + gtest.expectEqual(foo2.name, foo.name,
|
| + "foo2.name is " + foo2.name);
|
| +
|
| + equalsArray(foo2.files, foo.files, "foo2.files");
|
| + }
|
| +});
|
|
|