From 467bb282d230301e07b61486806886bfc686f274 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Tue, 20 Sep 2016 13:41:30 -0700 Subject: [PATCH] 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 --- tests/expression/1.0/Android.mk | 38 +++++++++++++++++++ tests/expression/1.0/IExpression.hal | 50 +++++++++++++++++++++++++ tests/expression/1.0/IExpressionExt.hal | 40 ++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 tests/expression/1.0/IExpressionExt.hal diff --git a/tests/expression/1.0/Android.mk b/tests/expression/1.0/Android.mk index bc6b50e3e2..21bc08e438 100644 --- a/tests/expression/1.0/Android.mk +++ b/tests/expression/1.0/Android.mk @@ -25,6 +25,25 @@ $(GEN): $(LOCAL_PATH)/IExpression.hal $(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): PRIVATE_CUSTOM_TOOL = \ $(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 ead131fd1a..4c38e5a7f1 100644 --- a/tests/expression/1.0/IExpression.hal +++ b/tests/expression/1.0/IExpression.hal @@ -144,4 +144,54 @@ interface IExpression { 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 0000000000..e3edf298d0 --- /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); +};