Chromium Code Reviews| 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 27fba624154d02fa191076a7826d097c2fbdeebd..f3a607853362c8772560874a6db7557b500fb5a5 100644 |
| --- a/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java |
| +++ b/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTest.java |
| @@ -8,57 +8,261 @@ import android.test.suitebuilder.annotation.SmallTest; |
| import junit.framework.TestCase; |
| +import org.chromium.mojo.HandleMock; |
| import org.chromium.mojo.bindings.test.imported.Color; |
| +import org.chromium.mojo.bindings.test.imported.Point; |
| import org.chromium.mojo.bindings.test.imported.Shape; |
| +import org.chromium.mojo.bindings.test.imported.Thing; |
| +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.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; |
| +import java.util.Arrays; |
| /** |
| * Testing generated classes and associated features. |
| */ |
| 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); |
| + TestCase.assertTrue(Arrays.deepEquals(foo1.arrayOfArrayOfBools, foo2.arrayOfArrayOfBools)); |
| + assertBarEquals(foo1.bar, foo2.bar); |
| + assertTrue(Arrays.equals(foo1.data, foo2.data)); |
| + TestCase.assertTrue(Arrays.deepEquals(foo1.multiArrayOfStrings, foo2.multiArrayOfStrings)); |
| + assertEquals(foo1.source, foo2.source); |
| + TestCase.assertTrue(Arrays.deepEquals(foo1.inputStreams, foo2.inputStreams)); |
| + TestCase.assertTrue(Arrays.deepEquals(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 <T> void checkConstantField( |
| + Field field, Class<T> expectedClass, T value) throws IllegalAccessException { |
| assertEquals(expectedClass, field.getType()); |
| assertEquals(Modifier.FINAL, field.getModifiers() & Modifier.FINAL); |
| assertEquals(Modifier.STATIC, field.getModifiers() & Modifier.STATIC); |
| + assertEquals(value, field.get(null)); |
| + } |
| + |
| + 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. |
| */ |
| @SmallTest |
| - public void testConstants() throws NoSuchFieldException, SecurityException { |
| - assertEquals(12, SampleServiceConstants.TWELVE); |
| - checkConstantField(SampleServiceConstants.class.getField("TWELVE"), byte.class); |
| - |
| - assertEquals(4405, InterfaceConstants.LONG); |
| - checkConstantField(InterfaceConstants.class.getField("LONG"), long.class); |
| + public void testConstants() throws NoSuchFieldException, SecurityException, |
| + IllegalAccessException { |
| + checkConstantField(SampleServiceConstants.class.getField("TWELVE"), byte.class, (byte) 12); |
| + checkConstantField(InterfaceConstants.class.getField("LONG"), long.class, 4405L); |
| } |
| /** |
| * 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); |
| + public void testEnums() throws NoSuchFieldException, SecurityException, |
| + IllegalAccessException { |
| + checkConstantField(Color.class.getField("COLOR_RED"), int.class, 0); |
| + checkConstantField(Color.class.getField("COLOR_BLACK"), int.class, 1); |
| + |
| + checkConstantField(Enum.class.getField("ENUM_VALUE"), int.class, 0); |
| + |
| + checkConstantField(Shape.class.getField("SHAPE_RECTANGLE"), int.class, 1); |
| + checkConstantField(Shape.class.getField("SHAPE_CIRCLE"), int.class, 2); |
| + checkConstantField(Shape.class.getField("SHAPE_TRIANGLE"), int.class, 3); |
| + } |
| + |
| + /** |
| + * Testing default values on structs. |
| + */ |
| + @SmallTest |
| + public void testStructDefaultValue() throws NoSuchFieldException, SecurityException { |
|
rmcilroy
2014/06/23 18:09:36
nit - testStructDefaults()
qsr
2014/06/24 13:23:59
Done.
|
| + // Check default values. |
| + DefaultsTest test = new DefaultsTest(); |
| + |
| + assertEquals((byte) -12, test.a0); |
| + checkField(DefaultsTest.class.getField("a0"), byte.class); |
|
rmcilroy
2014/06/23 18:09:36
Do the same as checkConstantField for checkField a
qsr
2014/06/24 13:23:59
Done.
|
| + |
| + assertEquals((byte) 12, test.a1); |
| + checkField(DefaultsTest.class.getField("a1"), byte.class); |
| + |
|
rmcilroy
2014/06/23 18:09:36
nit - remove newlines between checks when you've u
qsr
2014/06/24 13:23:59
Done.
|
| + 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"), byte[].class); |
| + |
| + assertNull(test.a19); |
| + checkField(DefaultsTest.class.getField("a19"), String.class); |
| + |
| + assertEquals(Bar.Type.TYPE_BOTH, test.a20); |
| + checkField(DefaultsTest.class.getField("a20"), int.class); |
| + |
| + assertNull(test.a21); |
| + checkField(DefaultsTest.class.getField("a21"), Point.class); |
| + |
| + assertNotNull(test.a22); |
| + checkField(DefaultsTest.class.getField("a22"), Thing.class); |
| } |
| + /** |
| + * Testing generation of the Foo class. |
| + * |
| + * @throws IllegalAccessException |
| + */ |
| + @SmallTest |
| + public void testFooGeneration() throws NoSuchFieldException, SecurityException, |
| + IllegalAccessException { |
| + // Checking creation of a Foo object. |
| + Foo typicalFoo = createFoo(); |
| + assertFooEquals(typicalFoo, typicalFoo); |
|
rmcilroy
2014/06/23 18:09:36
Please see comment on Patch-Set 2
qsr
2014/06/24 13:23:59
I don't really agree, but won't fight on this.
|
| + |
| + // Checking Foo constants. |
| + checkConstantField(Foo.class.getField("FOOBY"), String.class, "Fooby"); |
| + |
| + // 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); |
| + } |
| } |