| Index: mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java
|
| diff --git a/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java b/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java
|
| index 5e7bf590432c81a040835f78affdecffb044d85b..3a7142b3f07cce75edc3eb89cf9c73be27b60b6b 100644
|
| --- a/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java
|
| +++ b/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java
|
| @@ -8,8 +8,21 @@ import android.test.suitebuilder.annotation.SmallTest;
|
|
|
| import junit.framework.TestCase;
|
|
|
| +import org.chromium.mojo.HandleMock;
|
| +import org.chromium.mojo.TestUtils;
|
| +import org.chromium.mojo.bindings.test.imported.Color;
|
| +import org.chromium.mojo.bindings.test.imported.Shape;
|
| +import org.chromium.mojo.bindings.test.sample.Bar;
|
| +import org.chromium.mojo.bindings.test.sample.Bar.Type;
|
| +import org.chromium.mojo.bindings.test.sample.DefaultsTest;
|
| +import org.chromium.mojo.bindings.test.sample.DefaultsTestInner;
|
| +import org.chromium.mojo.bindings.test.sample.Enum;
|
| +import org.chromium.mojo.bindings.test.sample.Foo;
|
| import org.chromium.mojo.bindings.test.sample.InterfaceConstants;
|
| import org.chromium.mojo.bindings.test.sample.SampleServiceConstants;
|
| +import org.chromium.mojo.system.DataPipe.ConsumerHandle;
|
| +import org.chromium.mojo.system.DataPipe.ProducerHandle;
|
| +import org.chromium.mojo.system.MessagePipeHandle;
|
|
|
| import java.lang.reflect.Field;
|
| import java.lang.reflect.Modifier;
|
| @@ -19,13 +32,113 @@ import java.lang.reflect.Modifier;
|
| */
|
| public class BindingsTest extends TestCase {
|
|
|
| - private static void checkConstantField(Field field, Class<?> expectedClass)
|
| - {
|
| + /**
|
| + * Create a new typical Bar instance.
|
| + */
|
| + private static Bar newBar() {
|
| + Bar bar = new Bar();
|
| + bar.alpha = (byte) 0x01;
|
| + bar.beta = (byte) 0x02;
|
| + bar.gamma = (byte) 0x03;
|
| + bar.type = Type.TYPE_BOTH;
|
| + return bar;
|
| + }
|
| +
|
| + /**
|
| + * Check that 2 Bar instances are equals.
|
| + */
|
| + private static void assertBarEquals(Bar bar, Bar bar2) {
|
| + if (bar == bar2) {
|
| + return;
|
| + }
|
| + assertTrue(bar != null && bar2 != null);
|
| + assertEquals(bar.alpha, bar2.alpha);
|
| + assertEquals(bar.beta, bar2.beta);
|
| + assertEquals(bar.gamma, bar2.gamma);
|
| + assertEquals(bar.type, bar2.type);
|
| + }
|
| +
|
| + /**
|
| + * Create a new typical Foo instance.
|
| + */
|
| + private static Foo createFoo() {
|
| + Foo foo = new Foo();
|
| + foo.name = "HELLO WORLD";
|
| + boolean[][] b = new boolean[5][];
|
| + b[0] = new boolean[3];
|
| + b[0][0] = true;
|
| + b[0][2] = true;
|
| + foo.arrayOfArrayOfBools = b;
|
| + foo.bar = newBar();
|
| + foo.a = true;
|
| + foo.c = true;
|
| + foo.data = new byte[] {
|
| + 0x01, 0x02, 0x03 };
|
| + Bar[] bars = new Bar[2];
|
| + for (int i = 0; i < bars.length; ++i) {
|
| + bars[i] = newBar();
|
| + }
|
| + foo.extraBars = bars;
|
| + String[][][] strings = new String[3][2][1];
|
| + for (int i0 = 0; i0 < strings.length; ++i0) {
|
| + for (int i1 = 0; i1 < strings[i0].length; ++i1) {
|
| + for (int i2 = 0; i2 < strings[i0][i1].length; ++i2) {
|
| + strings[i0][i1][i2] = "Hello(" + i0 + ", " + i1 + ", " + i2 + ")";
|
| + }
|
| + }
|
| + }
|
| + foo.multiArrayOfStrings = strings;
|
| + ConsumerHandle[] inputStreams = new ConsumerHandle[5];
|
| + for (int i = 0; i < inputStreams.length; ++i) {
|
| + inputStreams[i] = new HandleMock();
|
| + }
|
| + foo.inputStreams = inputStreams;
|
| + ProducerHandle[] outputStreams = new ProducerHandle[3];
|
| + for (int i = 0; i < outputStreams.length; ++i) {
|
| + outputStreams[i] = new HandleMock();
|
| + }
|
| + foo.outputStreams = outputStreams;
|
| + foo.source = new HandleMock();
|
| + return foo;
|
| + }
|
| +
|
| + /**
|
| + * Check that 2 Foo instances are equals.
|
| + */
|
| + private static void assertFooEquals(Foo foo1, Foo foo2) {
|
| + assertEquals(foo1.a, foo2.a);
|
| + assertEquals(foo1.b, foo2.b);
|
| + assertEquals(foo1.c, foo2.c);
|
| + assertEquals(foo1.name, foo2.name);
|
| + assertEquals(foo1.x, foo2.x);
|
| + assertEquals(foo1.y, foo2.y);
|
| + TestUtils.assertArrayEquals(foo1.arrayOfArrayOfBools, foo2.arrayOfArrayOfBools);
|
| + assertBarEquals(foo1.bar, foo2.bar);
|
| + TestUtils.assertArrayEquals(foo1.data, foo2.data);
|
| + TestUtils.assertArrayEquals(foo1.multiArrayOfStrings, foo2.multiArrayOfStrings);
|
| + assertEquals(foo1.source, foo2.source);
|
| + TestUtils.assertArrayEquals(foo1.inputStreams, foo2.inputStreams);
|
| + TestUtils.assertArrayEquals(foo1.outputStreams, foo2.outputStreams);
|
| + if (foo1.extraBars != foo2.extraBars) {
|
| + assertEquals(foo1.extraBars.length, foo2.extraBars.length);
|
| + for (int i = 0; i < foo1.extraBars.length; ++i) {
|
| + assertBarEquals(foo1.extraBars[i], foo2.extraBars[i]);
|
| + }
|
| + }
|
| + }
|
| +
|
| + private static void checkConstantField(Field field, Class<?> expectedClass) {
|
| assertEquals(expectedClass, field.getType());
|
| assertEquals(Modifier.FINAL, field.getModifiers() & Modifier.FINAL);
|
| assertEquals(Modifier.STATIC, field.getModifiers() & Modifier.STATIC);
|
| }
|
|
|
| + private static void checkField(Field field, Class<?> expectedClass) {
|
| + assertEquals(expectedClass, field.getType());
|
| + assertEquals(0, field.getModifiers() & Modifier.FINAL);
|
| + assertEquals(0, field.getModifiers() & Modifier.STATIC);
|
| + }
|
| +
|
| /**
|
| * Testing constants are correctly generated.
|
| */
|
| @@ -38,4 +151,114 @@ public class BindingsTest extends TestCase {
|
| checkConstantField(InterfaceConstants.class.getField("LONG"), long.class);
|
| }
|
|
|
| + /**
|
| + * Testing enums are correctly generated.
|
| + */
|
| + @SmallTest
|
| + public void testEnums() throws NoSuchFieldException, SecurityException {
|
| + assertEquals(0, Color.COLOR_RED);
|
| + assertEquals(1, Color.COLOR_BLACK);
|
| + checkConstantField(Color.class.getField("COLOR_BLACK"), int.class);
|
| + checkConstantField(Color.class.getField("COLOR_RED"), int.class);
|
| +
|
| + assertEquals(0, Enum.ENUM_VALUE);
|
| + checkConstantField(Enum.class.getField("ENUM_VALUE"), int.class);
|
| +
|
| + assertEquals(1, Shape.SHAPE_RECTANGLE);
|
| + assertEquals(2, Shape.SHAPE_CIRCLE);
|
| + assertEquals(3, Shape.SHAPE_TRIANGLE);
|
| + checkConstantField(Shape.class.getField("SHAPE_RECTANGLE"), int.class);
|
| + checkConstantField(Shape.class.getField("SHAPE_CIRCLE"), int.class);
|
| + checkConstantField(Shape.class.getField("SHAPE_TRIANGLE"), int.class);
|
| + }
|
| +
|
| + /**
|
| + * Testing default values on structs.
|
| + */
|
| + @SmallTest
|
| + public void testStructDefaultValue() throws NoSuchFieldException, SecurityException {
|
| + // Check default values.
|
| + DefaultsTest test = new DefaultsTest();
|
| +
|
| + assertEquals((byte) -12, test.a0);
|
| + checkField(DefaultsTest.class.getField("a0"), byte.class);
|
| +
|
| + assertEquals((byte) 12, test.a1);
|
| + checkField(DefaultsTest.class.getField("a1"), byte.class);
|
| +
|
| + assertEquals(1234, test.a2);
|
| + checkField(DefaultsTest.class.getField("a2"), short.class);
|
| +
|
| + assertEquals((short) 34567, test.a3);
|
| + checkField(DefaultsTest.class.getField("a3"), short.class);
|
| +
|
| + assertEquals(123456, test.a4);
|
| + checkField(DefaultsTest.class.getField("a4"), int.class);
|
| +
|
| + assertEquals(111111111111L, test.a6);
|
| + checkField(DefaultsTest.class.getField("a6"), long.class);
|
| +
|
| + assertEquals(0x12345, test.a8);
|
| + checkField(DefaultsTest.class.getField("a8"), int.class);
|
| +
|
| + assertEquals(-0x12345, test.a9);
|
| + checkField(DefaultsTest.class.getField("a9"), int.class);
|
| +
|
| + assertEquals(1234, test.a10);
|
| + checkField(DefaultsTest.class.getField("a10"), int.class);
|
| +
|
| + assertEquals(true, test.a11);
|
| + checkField(DefaultsTest.class.getField("a11"), boolean.class);
|
| +
|
| + assertEquals(false, test.a12);
|
| + checkField(DefaultsTest.class.getField("a12"), boolean.class);
|
| +
|
| + assertEquals(123.25, test.a13, 1e-6);
|
| + checkField(DefaultsTest.class.getField("a13"), float.class);
|
| +
|
| + assertEquals(1234567890.123, test.a14, 1e-6);
|
| + checkField(DefaultsTest.class.getField("a14"), double.class);
|
| +
|
| + assertEquals(1E10, test.a15, 1);
|
| + checkField(DefaultsTest.class.getField("a15"), double.class);
|
| +
|
| + assertEquals(-1.2E+20, test.a16, 1);
|
| + checkField(DefaultsTest.class.getField("a16"), double.class);
|
| +
|
| + assertEquals(+1.23E-20, test.a17, 1);
|
| + checkField(DefaultsTest.class.getField("a17"), double.class);
|
| +
|
| + assertNull(test.a18);
|
| + checkField(DefaultsTest.class.getField("a18"), DefaultsTestInner.class);
|
| +
|
| + assertNull(test.a19);
|
| + checkField(DefaultsTest.class.getField("a19"), byte[].class);
|
| +
|
| + assertNull(test.a20);
|
| + checkField(DefaultsTest.class.getField("a20"), String.class);
|
| + }
|
| +
|
| + /**
|
| + * Testing generation of the Foo class.
|
| + */
|
| + @SmallTest
|
| + public void testFooGeneration() throws NoSuchFieldException, SecurityException {
|
| + // Checking creation of a Foo object.
|
| + Foo typicalFoo = createFoo();
|
| + assertFooEquals(typicalFoo, typicalFoo);
|
| +
|
| + // Checking Foo constants.
|
| + assertEquals("Fooby", Foo.FOOBY);
|
| + checkConstantField(Foo.class.getField("FOOBY"), String.class);
|
| +
|
| + // Checking Foo default values.
|
| + Foo foo = new Foo();
|
| +
|
| + assertEquals(Foo.FOOBY, foo.name);
|
| + checkField(Foo.class.getField("name"), String.class);
|
| +
|
| + assertNotNull(foo.source);
|
| + assertFalse(foo.source.isValid());
|
| + checkField(Foo.class.getField("source"), MessagePipeHandle.class);
|
| + }
|
| }
|
|
|