Updated tests for constant expressions.
Test: `make android.hardware.tests.expression@1.0` compiles
and generates enum class Color with autofilled values.
Test: `make hidl_test_java` succeeded.
Test: `make hidl_test` succeeded.
Bug: 31628863 Add test for autofilling enum values.
Bug: 31592132 allow constant expressions be array sizes.
Change-Id: I79f35365f1d37843922725ad5a405848f3e8ec08
diff --git a/tests/expression/1.0/Android.mk b/tests/expression/1.0/Android.mk
index bc6b50e..21bc08e 100644
--- a/tests/expression/1.0/Android.mk
+++ b/tests/expression/1.0/Android.mk
@@ -25,6 +25,25 @@
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
+#
+# Build IExpressionExt.hal
+#
+GEN := $(intermediates)/android/hardware/tests/expression/1.0/ExpressionExtAll.cpp
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IExpressionExt.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IExpression.hal
+$(GEN): $(LOCAL_PATH)/IExpression.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Lc++ -randroid.hardware:hardware/interfaces \
+ android.hardware.tests.expression@1.0::IExpressionExt
+
+$(GEN): $(LOCAL_PATH)/IExpressionExt.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
+
LOCAL_EXPORT_C_INCLUDE_DIRS := $(intermediates)
LOCAL_SHARED_LIBRARIES := \
libhidl \
@@ -61,6 +80,25 @@
$(GEN): $(LOCAL_PATH)/IExpression.hal
$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)
+
+#
+# Build IExpressionExt.hal
+#
+GEN := $(intermediates)/android/hardware/tests/expression/1.0/IExpressionExt.java
+$(GEN): $(HIDL)
+$(GEN): PRIVATE_HIDL := $(HIDL)
+$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/IExpressionExt.hal
+$(GEN): PRIVATE_DEPS += $(LOCAL_PATH)/IExpression.hal
+$(GEN): $(LOCAL_PATH)/IExpression.hal
+$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
+$(GEN): PRIVATE_CUSTOM_TOOL = \
+ $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
+ -Ljava -randroid.hardware:hardware/interfaces \
+ android.hardware.tests.expression@1.0::IExpressionExt
+
+$(GEN): $(LOCAL_PATH)/IExpressionExt.hal
+ $(transform-generated-source)
+LOCAL_GENERATED_SOURCES += $(GEN)
include $(BUILD_JAVA_LIBRARY)
diff --git a/tests/expression/1.0/IExpression.hal b/tests/expression/1.0/IExpression.hal
index ead131f..4c38e5a 100644
--- a/tests/expression/1.0/IExpression.hal
+++ b/tests/expression/1.0/IExpression.hal
@@ -144,4 +144,54 @@
logand4 = (0 && 1) == 0,
};
+ enum Grayscale : int8_t {
+ WHITE = 126,
+ GRAY, // 127
+ DARK_GRAY, // -128
+ BLACK // -127
+ };
+
+ enum Color : Grayscale {
+ RED, // -126
+ RUBY = 0,
+ GREEN, // 1
+ BLUE = 5,
+ CYAN, // 6
+ ORANGE, // 7
+ ROSE = WHITE,
+ };
+
+ enum Foo1 : int8_t {};
+ enum Foo2 : Foo1 {};
+ enum Foo3 : Foo2 {
+ BAR1, // 0
+ BAR2 = 10,
+ };
+ enum Foo4 : Foo3 {
+ BAR3, // 11
+ BAR4 = BAR2 + BAR3 // 21
+ };
+
+ enum Number : uint8_t {
+ MAX = 255,
+ MAX_PLUS_1, // 0
+ MAX_PLUS_2 // 1
+ };
+
+ enum Constants {
+ CONST_FOO,
+ CONST_BAR = 70,
+ MAX_ARRAY_SIZE = 20,
+ MAX_ARRAY_SIZE2,
+ MAX_ARRAY_SIZE3 = MAX_ARRAY_SIZE + MAX_ARRAY_SIZE,
+ MY_INT32_MAX_MINUS_1 = 0x7FFFFFFE,
+ MY_INT32_MAX, // 0x7FFFFFFF
+ MY_INT32_MIN, // 0x80000000
+ MY_INT32_MIN_PLUS_1, // 0x80000001
+ };
+
+ @callflow(key=Constants:CONST_FOO + 1)
+ foo1(int32_t[Constants:CONST_FOO + 1] array);
+ foo2(int32_t[5 + 8] array);
+ foo3(int32_t[Constants:MAX_ARRAY_SIZE] array);
};
diff --git a/tests/expression/1.0/IExpressionExt.hal b/tests/expression/1.0/IExpressionExt.hal
new file mode 100644
index 0000000..e3edf29
--- /dev/null
+++ b/tests/expression/1.0/IExpressionExt.hal
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.hardware.tests.expression@1.0;
+
+import IExpression;
+
+interface IExpressionExt {
+
+ enum NewEnum : int32_t {
+ ENUM_GOOD = Constants:CONST_BAR,
+ ENUM_BETTER = IExpression.Constants:CONST_BAR,
+ ENUM_BEST = android.hardware.tests.expression@1.0::IExpression.Constants:CONST_BAR,
+ };
+
+ typedef Color[((Constants:MAX_ARRAY_SIZE << 1) - (Constants:CONST_FOO + 1)*8) >> 1] SixteenColors;
+ struct ArrayOfColors {
+ Color[(Constants:MAX_ARRAY_SIZE << 1) - (Constants:CONST_FOO + 1)*8] my32Colors; // 32
+ };
+ struct AnotherArrayOfColors {
+ SixteenColors my16Colors;
+ };
+
+ foo3(int32_t[IExpression.Constants:MAX_ARRAY_SIZE] array);
+ foo2(SixteenColors array);
+ foo1(int32_t[Constants:CONST_FOO + 5] array);
+};