blob: eea92ab7b881bd6545517bdf9577c0f622231511 [file] [log] [blame]
// Copyright 2015 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.
package org.chromium.mojo.bindings;
import android.support.test.filters.SmallTest;
import org.chromium.mojo.MojoTestCase;
import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStruct;
import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV0;
import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV1;
import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV3;
import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV5;
import org.chromium.mojo.bindings.test.mojom.test_structs.MultiVersionStructV7;
import org.chromium.mojo.bindings.test.mojom.test_structs.Rect;
import org.chromium.mojo.system.impl.CoreImpl;
/**
* Testing generated classes with the [MinVersion] annotation. Struct in this test are from:
* mojo/public/interfaces/bindings/tests/rect.mojom and
* mojo/public/interfaces/bindings/tests/test_structs.mojom
*/
public class BindingsVersioningTest extends MojoTestCase {
private static Rect newRect(int factor) {
Rect rect = new Rect();
rect.x = factor;
rect.y = 2 * factor;
rect.width = 10 * factor;
rect.height = 20 * factor;
return rect;
}
private static MultiVersionStruct newStruct() {
MultiVersionStruct struct = new MultiVersionStruct();
struct.fInt32 = 123;
struct.fRect = newRect(5);
struct.fString = "hello";
struct.fArray = new byte[] {10, 9, 8};
struct.fBool = true;
struct.fInt16 = 256;
return struct;
}
/**
* Testing serializing old struct version to newer one.
*/
@SmallTest
public void testOldToNew() {
{
MultiVersionStructV0 v0 = new MultiVersionStructV0();
v0.fInt32 = 123;
MultiVersionStruct expected = new MultiVersionStruct();
expected.fInt32 = 123;
MultiVersionStruct output = MultiVersionStruct.deserialize(v0.serialize(null));
assertEquals(expected, output);
assertEquals(0, v0.getVersion());
assertEquals(0, output.getVersion());
}
{
MultiVersionStructV1 v1 = new MultiVersionStructV1();
v1.fInt32 = 123;
v1.fRect = newRect(5);
MultiVersionStruct expected = new MultiVersionStruct();
expected.fInt32 = 123;
expected.fRect = newRect(5);
MultiVersionStruct output = MultiVersionStruct.deserialize(v1.serialize(null));
assertEquals(expected, output);
assertEquals(1, v1.getVersion());
assertEquals(1, output.getVersion());
}
{
MultiVersionStructV3 v3 = new MultiVersionStructV3();
v3.fInt32 = 123;
v3.fRect = newRect(5);
v3.fString = "hello";
MultiVersionStruct expected = new MultiVersionStruct();
expected.fInt32 = 123;
expected.fRect = newRect(5);
expected.fString = "hello";
MultiVersionStruct output = MultiVersionStruct.deserialize(v3.serialize(null));
assertEquals(expected, output);
assertEquals(3, v3.getVersion());
assertEquals(3, output.getVersion());
}
{
MultiVersionStructV5 v5 = new MultiVersionStructV5();
v5.fInt32 = 123;
v5.fRect = newRect(5);
v5.fString = "hello";
v5.fArray = new byte[] {10, 9, 8};
MultiVersionStruct expected = new MultiVersionStruct();
expected.fInt32 = 123;
expected.fRect = newRect(5);
expected.fString = "hello";
expected.fArray = new byte[] {10, 9, 8};
MultiVersionStruct output = MultiVersionStruct.deserialize(v5.serialize(null));
assertEquals(expected, output);
assertEquals(5, v5.getVersion());
assertEquals(5, output.getVersion());
}
{
int expectedHandle = 42;
MultiVersionStructV7 v7 = new MultiVersionStructV7();
v7.fInt32 = 123;
v7.fRect = newRect(5);
v7.fString = "hello";
v7.fArray = new byte[] {10, 9, 8};
v7.fMessagePipe = CoreImpl.getInstance()
.acquireNativeHandle(expectedHandle)
.toMessagePipeHandle();
v7.fBool = true;
MultiVersionStruct expected = new MultiVersionStruct();
expected.fInt32 = 123;
expected.fRect = newRect(5);
expected.fString = "hello";
expected.fArray = new byte[] {10, 9, 8};
expected.fBool = true;
MultiVersionStruct output = MultiVersionStruct.deserialize(v7.serialize(null));
// Handles must be tested separately.
assertEquals(expectedHandle, output.fMessagePipe.releaseNativeHandle());
output.fMessagePipe = expected.fMessagePipe;
assertEquals(expected, output);
assertEquals(7, v7.getVersion());
assertEquals(7, output.getVersion());
}
}
/**
* Testing serializing new struct version to older one.
*/
@SmallTest
public void testNewToOld() {
MultiVersionStruct struct = newStruct();
{
MultiVersionStructV0 expected = new MultiVersionStructV0();
expected.fInt32 = 123;
MultiVersionStructV0 output = MultiVersionStructV0.deserialize(struct.serialize(null));
assertEquals(expected, output);
assertEquals(9, output.getVersion());
}
{
MultiVersionStructV1 expected = new MultiVersionStructV1();
expected.fInt32 = 123;
expected.fRect = newRect(5);
MultiVersionStructV1 output = MultiVersionStructV1.deserialize(struct.serialize(null));
assertEquals(expected, output);
assertEquals(9, output.getVersion());
}
{
MultiVersionStructV3 expected = new MultiVersionStructV3();
expected.fInt32 = 123;
expected.fRect = newRect(5);
expected.fString = "hello";
MultiVersionStructV3 output = MultiVersionStructV3.deserialize(struct.serialize(null));
assertEquals(expected, output);
assertEquals(9, output.getVersion());
}
{
MultiVersionStructV5 expected = new MultiVersionStructV5();
expected.fInt32 = 123;
expected.fRect = newRect(5);
expected.fString = "hello";
expected.fArray = new byte[] {10, 9, 8};
MultiVersionStructV5 output = MultiVersionStructV5.deserialize(struct.serialize(null));
assertEquals(expected, output);
assertEquals(9, output.getVersion());
}
{
int expectedHandle = 42;
MultiVersionStructV7 expected = new MultiVersionStructV7();
expected.fInt32 = 123;
expected.fRect = newRect(5);
expected.fString = "hello";
expected.fArray = new byte[] {10, 9, 8};
expected.fBool = true;
MultiVersionStruct input = struct;
input.fMessagePipe = CoreImpl.getInstance()
.acquireNativeHandle(expectedHandle)
.toMessagePipeHandle();
MultiVersionStructV7 output = MultiVersionStructV7.deserialize(input.serialize(null));
assertEquals(expectedHandle, output.fMessagePipe.releaseNativeHandle());
output.fMessagePipe = expected.fMessagePipe;
assertEquals(expected, output);
assertEquals(9, output.getVersion());
}
}
}