Include UNKNOWN MealType and OTHER MeasurementMethod.
Those enums have their counterparts in the APK and so have to be mapped properly. Otherwise, the value is missing when reading from the APK, which causes inconsistency in some tests with what was actually written.
Test: ./gradlew :health:connect:connect-client:test
Change-Id: Ie63ad1e94aba4009fe45a519c1f6c7de7ce545ce
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt
index 3a6a40f..6849832 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MealType.kt
@@ -49,6 +49,7 @@
@JvmField
val MEAL_TYPE_STRING_TO_INT_MAP: Map<String, Int> =
mapOf(
+ UNKNOWN to MEAL_TYPE_UNKNOWN,
BREAKFAST to MEAL_TYPE_BREAKFAST,
LUNCH to MEAL_TYPE_LUNCH,
DINNER to MEAL_TYPE_DINNER,
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
index 0a6f4df..87a60cf 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Vo2MaxRecord.kt
@@ -81,6 +81,7 @@
@JvmField
val MEASUREMENT_METHOD_STRING_TO_INT_MAP: Map<String, Int> =
mapOf(
+ MeasurementMethod.OTHER to MEASUREMENT_METHOD_OTHER,
MeasurementMethod.METABOLIC_CART to MEASUREMENT_METHOD_METABOLIC_CART,
MeasurementMethod.HEART_RATE_RATIO to MEASUREMENT_METHOD_HEART_RATE_RATIO,
MeasurementMethod.COOPER_TEST to MEASUREMENT_METHOD_COOPER_TEST,
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
index 48a531a..991beb3e 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
@@ -28,6 +28,7 @@
import androidx.health.connect.client.permission.HealthPermission.Companion.getWritePermission
import androidx.health.connect.client.records.ActiveCaloriesBurnedRecord
import androidx.health.connect.client.records.HeartRateRecord
+import androidx.health.connect.client.records.MealType
import androidx.health.connect.client.records.NutritionRecord
import androidx.health.connect.client.records.StepsRecord
import androidx.health.connect.client.records.StepsRecord.Companion.COUNT_TOTAL
@@ -296,6 +297,10 @@
.setEndTimeMillis(5678L)
.putValues("vitaminC", DataProto.Value.newBuilder().setDoubleVal(20.0).build())
.putValues("vitaminE", DataProto.Value.newBuilder().setDoubleVal(10.0).build())
+ .putValues(
+ "mealType",
+ DataProto.Value.newBuilder().setEnumVal(MealType.UNKNOWN).build()
+ )
.setDataType(DataProto.DataType.newBuilder().setName("Nutrition"))
.build()
)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodGlucoseRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodGlucoseRecordTest.kt
index 590b879..3e9cb7e 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodGlucoseRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodGlucoseRecordTest.kt
@@ -27,7 +27,7 @@
@Test
fun relationToMealEnums_existInMapping() {
val allEnums =
- BloodGlucoseRecord.Companion::class.allIntDefEnumsWithPrefix("RELATION_TO_MEAL")
+ getAllIntDefEnums<BloodGlucoseRecord>("""RELATION_TO_MEAL.*(?<!UNKNOWN)$""")
assertThat(BloodGlucoseRecord.RELATION_TO_MEAL_STRING_TO_INT_MAP.values)
.containsExactlyElementsIn(allEnums)
@@ -37,8 +37,7 @@
@Test
fun specimenSourceEnums_existInMapping() {
- val allEnums =
- BloodGlucoseRecord.Companion::class.allIntDefEnumsWithPrefix("SPECIMEN_SOURCE")
+ val allEnums = getAllIntDefEnums<BloodGlucoseRecord>("""SPECIMEN_SOURCE.*(?<!UNKNOWN)$""")
assertThat(BloodGlucoseRecord.SPECIMEN_SOURCE_STRING_TO_INT_MAP.values)
.containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodPressureRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodPressureRecordTest.kt
index 63539bd1..c4a846f 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodPressureRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BloodPressureRecordTest.kt
@@ -25,8 +25,7 @@
class BloodPressureRecordTest {
@Test
fun bodyPositionEnums_existInMapping() {
- val allEnums =
- BloodPressureRecord.Companion::class.allIntDefEnumsWithPrefix("BODY_POSITION")
+ val allEnums = getAllIntDefEnums<BloodPressureRecord>("""BODY_POSITION.*(?<!UNKNOWN)$""")
assertThat(BloodPressureRecord.BODY_POSITION_STRING_TO_INT_MAP.values)
.containsExactlyElementsIn(allEnums)
@@ -37,7 +36,9 @@
@Test
fun measurementLocationEnums_existInMapping() {
val allEnums =
- BloodPressureRecord.Companion::class.allIntDefEnumsWithPrefix("MEASUREMENT_LOCATION")
+ getAllIntDefEnums<BloodPressureRecord>(
+ """MEASUREMENT_LOCATION.*(?<!UNKNOWN)$"""
+ )
assertThat(BloodPressureRecord.MEASUREMENT_LOCATION_STRING_TO_INT_MAP.values)
.containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocationTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocationTest.kt
index 0a805f4..b70bd0e 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocationTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/BodyTemperatureMeasurementLocationTest.kt
@@ -27,8 +27,8 @@
@Test
fun enums_existInMapping() {
val allEnums =
- BodyTemperatureMeasurementLocation::class.allObjectIntDefEnumsWithPrefix(
- "MEASUREMENT_LOCATION"
+ getAllIntDefEnums<BodyTemperatureMeasurementLocation>(
+ """MEASUREMENT_LOCATION.*(?<!UNKNOWN)$"""
)
assertThat(BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_STRING_TO_INT_MAP.values)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CervicalMucusRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CervicalMucusRecordTest.kt
index ad92237..a9620fbd 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CervicalMucusRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/CervicalMucusRecordTest.kt
@@ -26,7 +26,7 @@
@Test
fun appearanceEnums_existInMapping() {
- val allEnums = CervicalMucusRecord.Companion::class.allIntDefEnumsWithPrefix("APPEARANCE")
+ val allEnums = getAllIntDefEnums<CervicalMucusRecord>("""APPEARANCE.*(?<!UNKNOWN)$""")
assertThat(CervicalMucusRecord.APPEARANCE_STRING_TO_INT_MAP.values)
.containsExactlyElementsIn(allEnums)
@@ -36,7 +36,7 @@
@Test
fun sensationEnums_existInMapping() {
- val allEnums = CervicalMucusRecord.Companion::class.allIntDefEnumsWithPrefix("SENSATION")
+ val allEnums = getAllIntDefEnums<CervicalMucusRecord>("""SENSATION.*(?<!UNKNOWN)$""")
assertThat(CervicalMucusRecord.SENSATION_STRING_TO_INT_MAP.values)
.containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/EnumTestUtils.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/EnumTestUtils.kt
index ddaf765..ab5218e 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/EnumTestUtils.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/EnumTestUtils.kt
@@ -16,25 +16,14 @@
package androidx.health.connect.client.records
-import kotlin.reflect.KClass
-import kotlin.reflect.typeOf
+internal inline fun <reified T> getAllIntDefEnums(pattern: String): Collection<Int> {
+ val regex = pattern.toRegex()
-internal fun KClass<*>.allIntDefEnumsWithPrefix(prefix: String): Collection<Int> {
- return members
+ return T::class.java.fields
.asSequence()
- .filter { it.name.startsWith(prefix) && !it.name.endsWith("UNKNOWN") }
- .filter { it.returnType == typeOf<Int>() }
- .map { it.call(null) }
- .filterIsInstance<Int>()
- .toHashSet()
-}
-
-internal fun KClass<*>.allObjectIntDefEnumsWithPrefix(prefix: String): Collection<Int> {
- return members
- .asSequence()
- .filter { it.name.startsWith(prefix) && !it.name.endsWith("UNKNOWN") }
- .filter { it.returnType == typeOf<Int>() }
- .map { it.call() }
+ .filter { it.name.matches(regex) }
+ .filter { it.type == Int::class.javaPrimitiveType }
+ .map { it.get(null) }
.filterIsInstance<Int>()
.toHashSet()
}
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/MealTypeTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/MealTypeTest.kt
index de588ab..3a9554c 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/MealTypeTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/MealTypeTest.kt
@@ -26,7 +26,7 @@
@Test
fun enums_existInMapping() {
- val allEnums = MealType::class.allObjectIntDefEnumsWithPrefix("MEAL_TYPE")
+ val allEnums = getAllIntDefEnums<MealType>("""MEAL_TYPE.*""")
assertThat(MealType.MEAL_TYPE_STRING_TO_INT_MAP.values).containsExactlyElementsIn(allEnums)
assertThat(MealType.MEAL_TYPE_INT_TO_STRING_MAP.keys).containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/OvulationTestRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/OvulationTestRecordTest.kt
index d3f74d9..7e64ee6 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/OvulationTestRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/OvulationTestRecordTest.kt
@@ -26,7 +26,7 @@
@Test
fun resultEnums_existInMapping() {
- val allEnums = OvulationTestRecord.Companion::class.allIntDefEnumsWithPrefix("RESULT")
+ val allEnums = getAllIntDefEnums<OvulationTestRecord>("""RESULT.*(?<!UNKNOWN)$""")
assertThat(OvulationTestRecord.RESULT_STRING_TO_INT_MAP.values)
.containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SexualActivityRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SexualActivityRecordTest.kt
index e829d17..78f9bd6 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SexualActivityRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/SexualActivityRecordTest.kt
@@ -26,8 +26,7 @@
@Test
fun protectionEnums_existInMapping() {
- val allEnums =
- SexualActivityRecord.Companion::class.allIntDefEnumsWithPrefix("PROTECTION_USED")
+ val allEnums = getAllIntDefEnums<SexualActivityRecord>("""PROTECTION_USED.*(?<!UNKNOWN)$""")
Truth.assertThat(SexualActivityRecord.PROTECTION_USED_STRING_TO_INT_MAP.values)
.containsExactlyElementsIn(allEnums)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/Vo2MaxRecordTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/Vo2MaxRecordTest.kt
index a414d8c..3f531bd 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/Vo2MaxRecordTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/records/Vo2MaxRecordTest.kt
@@ -25,10 +25,7 @@
class Vo2MaxRecordTest {
@Test
fun measurementMethodEnums_existMapping() {
- val allEnums =
- Vo2MaxRecord.Companion::class.allIntDefEnumsWithPrefix("MEASUREMENT_METHOD").filter {
- it != Vo2MaxRecord.MEASUREMENT_METHOD_OTHER
- }
+ val allEnums = getAllIntDefEnums<Vo2MaxRecord>("""MEASUREMENT_METHOD.*""")
Truth.assertThat(Vo2MaxRecord.MEASUREMENT_METHOD_STRING_TO_INT_MAP.values)
.containsExactlyElementsIn(allEnums)