Added VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL to CTS

Bug: 309014379
Test: atest AndroidCarApiTest:VehicleAutonomousStateTest
CtsCarTestCases: VehicleAutonomousStateTest
CtsCarTestCases: CarPropertyManagerTest
CtsCarTestCases: VehiclePropertyIdsTest
Change-Id: Ia0d729f5beb490fbf1e197d64957e0a2ab3f9e76
diff --git a/tests/tests/car/src/android/car/cts/CarPropertyManagerTest.java b/tests/tests/car/src/android/car/cts/CarPropertyManagerTest.java
index cdc8b7c..2525dbc 100644
--- a/tests/tests/car/src/android/car/cts/CarPropertyManagerTest.java
+++ b/tests/tests/car/src/android/car/cts/CarPropertyManagerTest.java
@@ -75,6 +75,7 @@
 import android.car.hardware.property.PropertyNotAvailableException;
 import android.car.hardware.property.Subscription;
 import android.car.hardware.property.TrailerState;
+import android.car.hardware.property.VehicleAutonomousState;
 import android.car.hardware.property.VehicleElectronicTollCollectionCardStatus;
 import android.car.hardware.property.VehicleElectronicTollCollectionCardType;
 import android.car.hardware.property.VehicleLightState;
@@ -264,6 +265,16 @@
     private static final ImmutableSet<Integer> HVAC_TEMPERATURE_DISPLAY_UNITS =
             ImmutableSet.<Integer>builder().add(VehicleUnit.CELSIUS,
                     VehicleUnit.FAHRENHEIT).build();
+    private static final ImmutableSet<Integer> VEHICLE_AUTONOMOUS_STATES =
+            ImmutableSet.<Integer>builder()
+                    .add(
+                            VehicleAutonomousState.LEVEL_0,
+                            VehicleAutonomousState.LEVEL_1,
+                            VehicleAutonomousState.LEVEL_2,
+                            VehicleAutonomousState.LEVEL_3,
+                            VehicleAutonomousState.LEVEL_4,
+                            VehicleAutonomousState.LEVEL_5)
+                    .build();
     private static final ImmutableSet<Integer> EMERGENCY_LANE_KEEP_ASSIST_STATES =
             ImmutableSet.<Integer>builder()
                     .add(
@@ -864,6 +875,12 @@
                     .add(
                             VehiclePropertyIds.LOCATION_CHARACTERIZATION)
                     .build();
+    private static final ImmutableList<Integer>
+            PERMISSION_CAR_DRIVING_STATE_PROPERTIES =
+            ImmutableList.<Integer>builder()
+                    .add(
+                            VehiclePropertyIds.VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL)
+                    .build();
     private static final ImmutableList<String> VENDOR_PROPERTY_PERMISSIONS =
             ImmutableList.<String>builder()
                     .add(
@@ -1209,6 +1226,7 @@
              getDoorMoveVerifier(),
              getDoorLockVerifier(),
              getDoorChildLockEnabledVerifier(),
+             getVehicleDrivingAutomationCurrentLevelVerifier(),
              // TODO(b/273988725): Put all verifiers here.
         };
     }
@@ -2763,6 +2781,23 @@
         getDoorChildLockEnabledVerifier().verify();
     }
 
+    private VehiclePropertyVerifier<Integer> getVehicleDrivingAutomationCurrentLevelVerifier() {
+        return VehiclePropertyVerifier.newBuilder(
+                        VehiclePropertyIds.VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL,
+                        CarPropertyConfig.VEHICLE_PROPERTY_ACCESS_READ,
+                        VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL,
+                        CarPropertyConfig.VEHICLE_PROPERTY_CHANGE_MODE_ONCHANGE,
+                        Integer.class, mCarPropertyManager)
+                .setAllPossibleEnumValues(VEHICLE_AUTONOMOUS_STATES)
+                .addReadPermission(Car.PERMISSION_CAR_DRIVING_STATE)
+                .build();
+    }
+
+    @Test
+    public void testVehicleDrivingAutomationCurrentLevelIfSupported() {
+        getVehicleDrivingAutomationCurrentLevelVerifier().verify();
+    }
+
     @Test
     @ApiTest(
             apis = {
@@ -7886,6 +7921,13 @@
     }
 
     @Test
+    public void testPermissionCarDrivingStateGranted() {
+        verifyExpectedPropertiesWhenPermissionsGranted(
+                PERMISSION_CAR_DRIVING_STATE_PROPERTIES,
+                Car.PERMISSION_CAR_DRIVING_STATE);
+    }
+
+    @Test
     public void testPermissionControlDisplayUnitsAndVendorExtensionGranted() {
         runWithShellPermissionIdentity(
                 () -> {
diff --git a/tests/tests/car/src/android/car/cts/VehicleAutonomousStateTest.java b/tests/tests/car/src/android/car/cts/VehicleAutonomousStateTest.java
new file mode 100644
index 0000000..9fd95d6
--- /dev/null
+++ b/tests/tests/car/src/android/car/cts/VehicleAutonomousStateTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2023 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.car.cts;
+
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import android.car.cts.utils.VehiclePropertyUtils;
+import android.car.hardware.property.VehicleAutonomousState;
+
+import org.junit.Test;
+
+import java.util.List;
+
+public class VehicleAutonomousStateTest {
+
+    @Test
+    public void testToString() {
+        assertThat(VehicleAutonomousState.toString(
+                VehicleAutonomousState.LEVEL_0))
+                .isEqualTo("LEVEL_0");
+        assertThat(VehicleAutonomousState.toString(
+                VehicleAutonomousState.LEVEL_1))
+                .isEqualTo("LEVEL_1");
+        assertThat(VehicleAutonomousState.toString(
+                VehicleAutonomousState.LEVEL_2))
+                .isEqualTo("LEVEL_2");
+        assertThat(VehicleAutonomousState.toString(
+                VehicleAutonomousState.LEVEL_3))
+                .isEqualTo("LEVEL_3");
+        assertThat(VehicleAutonomousState.toString(
+                VehicleAutonomousState.LEVEL_4))
+                .isEqualTo("LEVEL_4");
+        assertThat(VehicleAutonomousState.toString(
+                VehicleAutonomousState.LEVEL_5))
+                .isEqualTo("LEVEL_5");
+        assertThat(VehicleAutonomousState.toString(10)).isEqualTo("0xa");
+        assertThat(VehicleAutonomousState.toString(12)).isEqualTo("0xc");
+    }
+
+    @Test
+    public void testAllVehicleAutonomousStatesAreMappedInToString() {
+        List<Integer> vehicleAutonomousStates =
+                VehiclePropertyUtils.getIntegersFromDataEnums(VehicleAutonomousState.class);
+        for (Integer vehicleAutonomousState : vehicleAutonomousStates) {
+            String vehicleAutonomousStateString = VehicleAutonomousState.toString(
+                    vehicleAutonomousState);
+            assertWithMessage("%s starts with 0x", vehicleAutonomousStateString).that(
+                    vehicleAutonomousStateString.startsWith("0x")).isFalse();
+        }
+    }
+}
diff --git a/tests/tests/car/src/android/car/cts/VehiclePropertyIdsTest.java b/tests/tests/car/src/android/car/cts/VehiclePropertyIdsTest.java
index e98d31d..5be3391 100644
--- a/tests/tests/car/src/android/car/cts/VehiclePropertyIdsTest.java
+++ b/tests/tests/car/src/android/car/cts/VehiclePropertyIdsTest.java
@@ -434,6 +434,10 @@
         assertThat(VehiclePropertyIds.toString(VehiclePropertyIds.STEERING_WHEEL_LIGHTS_SWITCH))
                 .isEqualTo("STEERING_WHEEL_LIGHTS_SWITCH");
         assertThat(
+                VehiclePropertyIds.toString(
+                        VehiclePropertyIds.VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL))
+                .isEqualTo("VEHICLE_DRIVING_AUTOMATION_CURRENT_LEVEL");
+        assertThat(
                 VehiclePropertyIds.toString(VehiclePropertyIds.AUTOMATIC_EMERGENCY_BRAKING_ENABLED))
                 .isEqualTo("AUTOMATIC_EMERGENCY_BRAKING_ENABLED");
         assertThat(