From 2722e36e5591398cdf96be94639fe9ccc055a3d6 Mon Sep 17 00:00:00 2001 From: mrenouf Date: Fri, 1 Dec 2023 13:47:36 -0500 Subject: Validation framework This pattern grew out of existing Intent data extraction code. Goals * abstract away the details of processing * provide informative errors and warnings * self documenting usage * able to report multiple findings (warnings) * fail assertions in acontrolled manner, not by throwing Sample usage: ``` fun readArgs( val bundle: Bundle ) = validateFrom(bundle::get): ValidationResult { val intValue = required(value("KEY_1")) val stringValue = required(value("KEY_2")) val arrayValue = optional(array("KEY_3")) val doubleValue = optional(value("KEY_4")) ExampleObject(intValue, stringValue, arrayValue, doubleValue) } ``` Bug: 300157408 Test: atest com.android.intentresolver.validation Change-Id: I517e70df84c28e42023f19c8616804bc46884b49 --- .../v2/validation/ValidationResultSubject.kt | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 tests/shared/src/com/android/intentresolver/v2/validation/ValidationResultSubject.kt (limited to 'tests/shared/src') diff --git a/tests/shared/src/com/android/intentresolver/v2/validation/ValidationResultSubject.kt b/tests/shared/src/com/android/intentresolver/v2/validation/ValidationResultSubject.kt new file mode 100644 index 00000000..1ff0ce8e --- /dev/null +++ b/tests/shared/src/com/android/intentresolver/v2/validation/ValidationResultSubject.kt @@ -0,0 +1,22 @@ +package com.android.intentresolver.v2.validation + +import com.google.common.truth.FailureMetadata +import com.google.common.truth.IterableSubject +import com.google.common.truth.Subject +import com.google.common.truth.Truth.assertAbout + +class ValidationResultSubject(metadata: FailureMetadata, private val actual: ValidationResult<*>?) : + Subject(metadata, actual) { + + fun isSuccess() = check("isSuccess()").that(actual?.isSuccess()).isTrue() + fun isFailure() = check("isSuccess()").that(actual?.isSuccess()).isFalse() + + fun value(): Subject = check("value").that(actual?.value) + + fun findings(): IterableSubject = check("findings").that(actual?.findings) + + companion object { + fun assertThat(input: ValidationResult<*>): ValidationResultSubject = + assertAbout(::ValidationResultSubject).that(input) + } +} -- cgit v1.2.3-59-g8ed1b