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); |
+ } |
} |