Added CROSS_TRAFFIC_MONITORING_WARNING_STATE to CTS

Bug: 313664286
Test: atest CtsCarTestCases:CrossTrafficMonitoringWarningStateTest
AndroidCarApiTest: CrossTrafficMonitoringWarningStateTest
CtsCarTestCases: CarPropertyManagerTest
CtsCarTestCases: VehiclePropertyIdsTest
Change-Id: I9044bd6847278e6da7231c25438c0161aea14b97
diff --git a/tests/tests/car/src/android/car/cts/CarPropertyManagerTest.java b/tests/tests/car/src/android/car/cts/CarPropertyManagerTest.java
index e9b6ba7..a7ea273 100644
--- a/tests/tests/car/src/android/car/cts/CarPropertyManagerTest.java
+++ b/tests/tests/car/src/android/car/cts/CarPropertyManagerTest.java
@@ -52,6 +52,7 @@
 import android.car.hardware.property.BlindSpotWarningState;
 import android.car.hardware.property.CarPropertyManager;
 import android.car.hardware.property.CarPropertyManager.CarPropertyEventCallback;
+import android.car.hardware.property.CrossTrafficMonitoringWarningState;
 import android.car.hardware.property.CruiseControlCommand;
 import android.car.hardware.property.CruiseControlState;
 import android.car.hardware.property.CruiseControlType;
@@ -479,6 +480,18 @@
                             ElectronicStabilityControlState.ENABLED,
                             ElectronicStabilityControlState.ACTIVATED)
                     .build();
+    private static final ImmutableSet<Integer> CROSS_TRAFFIC_MONITORING_WARNING_STATES =
+            ImmutableSet.<Integer>builder()
+                    .add(
+                            CrossTrafficMonitoringWarningState.OTHER,
+                            CrossTrafficMonitoringWarningState.NO_WARNING,
+                            CrossTrafficMonitoringWarningState.WARNING_FRONT_LEFT,
+                            CrossTrafficMonitoringWarningState.WARNING_FRONT_RIGHT,
+                            CrossTrafficMonitoringWarningState.WARNING_FRONT_BOTH,
+                            CrossTrafficMonitoringWarningState.WARNING_REAR_LEFT,
+                            CrossTrafficMonitoringWarningState.WARNING_REAR_RIGHT,
+                            CrossTrafficMonitoringWarningState.WARNING_REAR_BOTH)
+                    .build();
     private static final ImmutableSet<Integer> ALL_POSSIBLE_HVAC_FAN_DIRECTIONS =
             generateAllPossibleHvacFanDirections();
     private static final ImmutableSet<Integer> VEHICLE_SEAT_OCCUPANCY_STATES = ImmutableSet.of(
@@ -927,7 +940,8 @@
                             VehiclePropertyIds.ADAPTIVE_CRUISE_CONTROL_TARGET_TIME_GAP,
                             VehiclePropertyIds
                                     .ADAPTIVE_CRUISE_CONTROL_LEAD_VEHICLE_MEASURED_DISTANCE,
-                            VehiclePropertyIds.LOW_SPEED_COLLISION_WARNING_STATE)
+                            VehiclePropertyIds.LOW_SPEED_COLLISION_WARNING_STATE,
+                            VehiclePropertyIds.CROSS_TRAFFIC_MONITORING_WARNING_STATE)
                     .build();
     private static final ImmutableList<Integer> PERMISSION_CONTROL_ADAS_STATES_PROPERTIES =
             ImmutableList.<Integer>builder()
@@ -1312,6 +1326,7 @@
              getElectronicStabilityControlEnabledVerifier(),
              getElectronicStabilityControlStateVerifier(),
              getCrossTrafficMonitoringEnabledVerifier(),
+             getCrossTrafficMonitoringWarningStateVerifier(),
              // TODO(b/273988725): Put all verifiers here.
         };
     }
@@ -6755,6 +6770,32 @@
         getCrossTrafficMonitoringEnabledVerifier().verify();
     }
 
+    private VehiclePropertyVerifier<Integer> getCrossTrafficMonitoringWarningStateVerifier() {
+        ImmutableSet<Integer> combinedCarPropertyValues = ImmutableSet.<Integer>builder()
+                .addAll(CROSS_TRAFFIC_MONITORING_WARNING_STATES)
+                .addAll(ERROR_STATES)
+                .build();
+
+        return VehiclePropertyVerifier.newBuilder(
+                        VehiclePropertyIds.CROSS_TRAFFIC_MONITORING_WARNING_STATE,
+                        CarPropertyConfig.VEHICLE_PROPERTY_ACCESS_READ,
+                        VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL,
+                        CarPropertyConfig.VEHICLE_PROPERTY_CHANGE_MODE_ONCHANGE,
+                        Integer.class, mCarPropertyManager)
+                .setAllPossibleEnumValues(combinedCarPropertyValues)
+                .setDependentOnProperty(VehiclePropertyIds.CROSS_TRAFFIC_MONITORING_ENABLED,
+                        ImmutableSet.of(Car.PERMISSION_READ_ADAS_SETTINGS,
+                                Car.PERMISSION_CONTROL_ADAS_SETTINGS))
+                .verifyErrorStates()
+                .addReadPermission(Car.PERMISSION_READ_ADAS_STATES)
+                .build();
+    }
+
+    @Test
+    public void testCrossTrafficMonitoringWarningStateIfSupported() {
+        getCrossTrafficMonitoringWarningStateVerifier().verify();
+    }
+
     @SuppressWarnings("unchecked")
     @Test
     @ApiTest(apis = {"android.car.hardware.property.CarPropertyManager#getPropertyList",
diff --git a/tests/tests/car/src/android/car/cts/CrossTrafficMonitoringWarningStateTest.java b/tests/tests/car/src/android/car/cts/CrossTrafficMonitoringWarningStateTest.java
new file mode 100644
index 0000000..29d5350
--- /dev/null
+++ b/tests/tests/car/src/android/car/cts/CrossTrafficMonitoringWarningStateTest.java
@@ -0,0 +1,72 @@
+/*
+ * 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.CrossTrafficMonitoringWarningState;
+
+import org.junit.Test;
+
+import java.util.List;
+
+public class CrossTrafficMonitoringWarningStateTest {
+
+    @Test
+    public void testToString() {
+        assertThat(CrossTrafficMonitoringWarningState.toString(
+                CrossTrafficMonitoringWarningState.OTHER))
+                .isEqualTo("OTHER");
+        assertThat(CrossTrafficMonitoringWarningState.toString(
+                CrossTrafficMonitoringWarningState.NO_WARNING))
+                .isEqualTo("NO_WARNING");
+        assertThat(CrossTrafficMonitoringWarningState.toString(
+                CrossTrafficMonitoringWarningState.WARNING_FRONT_LEFT))
+                .isEqualTo("WARNING_FRONT_LEFT");
+        assertThat(CrossTrafficMonitoringWarningState.toString(
+                CrossTrafficMonitoringWarningState.WARNING_FRONT_RIGHT))
+                .isEqualTo("WARNING_FRONT_RIGHT");
+        assertThat(CrossTrafficMonitoringWarningState.toString(
+                CrossTrafficMonitoringWarningState.WARNING_FRONT_BOTH))
+                .isEqualTo("WARNING_FRONT_BOTH");
+        assertThat(CrossTrafficMonitoringWarningState.toString(
+                CrossTrafficMonitoringWarningState.WARNING_REAR_LEFT))
+                .isEqualTo("WARNING_REAR_LEFT");
+        assertThat(CrossTrafficMonitoringWarningState.toString(
+                CrossTrafficMonitoringWarningState.WARNING_REAR_RIGHT))
+                .isEqualTo("WARNING_REAR_RIGHT");
+        assertThat(CrossTrafficMonitoringWarningState.toString(
+                CrossTrafficMonitoringWarningState.WARNING_REAR_BOTH))
+                .isEqualTo("WARNING_REAR_BOTH");
+        assertThat(CrossTrafficMonitoringWarningState.toString(8)).isEqualTo("0x8");
+        assertThat(CrossTrafficMonitoringWarningState.toString(12)).isEqualTo("0xc");
+    }
+
+    @Test
+    public void testAllCrossTrafficMonitoringWarningStatesAreMappedInToString() {
+        List<Integer> crossTrafficMonitoringWarningStates = VehiclePropertyUtils
+                .getIntegersFromDataEnums(CrossTrafficMonitoringWarningState.class);
+        for (Integer crossTrafficMonitoringWarningState : crossTrafficMonitoringWarningStates) {
+            String crossTrafficMonitoringWarningStateString =
+                    CrossTrafficMonitoringWarningState.toString(crossTrafficMonitoringWarningState);
+            assertWithMessage("%s starts with 0x", crossTrafficMonitoringWarningStateString).that(
+                    crossTrafficMonitoringWarningStateString.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 d05433f..ae61be0 100644
--- a/tests/tests/car/src/android/car/cts/VehiclePropertyIdsTest.java
+++ b/tests/tests/car/src/android/car/cts/VehiclePropertyIdsTest.java
@@ -490,6 +490,9 @@
                 .isEqualTo("ELECTRONIC_STABILITY_CONTROL_STATE");
         assertThat(VehiclePropertyIds.toString(VehiclePropertyIds.CROSS_TRAFFIC_MONITORING_ENABLED))
                 .isEqualTo("CROSS_TRAFFIC_MONITORING_ENABLED");
+        assertThat(VehiclePropertyIds.toString(
+                VehiclePropertyIds.CROSS_TRAFFIC_MONITORING_WARNING_STATE))
+                .isEqualTo("CROSS_TRAFFIC_MONITORING_WARNING_STATE");
         assertThat(VehiclePropertyIds.toString(3)).isEqualTo("0x3");
         assertThat(VehiclePropertyIds.toString(12)).isEqualTo("0xc");
     }