summaryrefslogtreecommitdiff
path: root/tests/shared
diff options
context:
space:
mode:
author mrenouf <mrenouf@google.com> 2023-12-01 13:47:36 -0500
committer Mark Renouf <mrenouf@google.com> 2023-12-07 22:18:37 +0000
commit2722e36e5591398cdf96be94639fe9ccc055a3d6 (patch)
treefa68944754e88edbdab8e40cafb343b598c3b26f /tests/shared
parentc85c6c55ebdeef744cb812b74fed30cd2b8a4d49 (diff)
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<ExampleObject> { val intValue = required(value<Int>("KEY_1")) val stringValue = required(value<String>("KEY_2")) val arrayValue = optional(array<String>("KEY_3")) val doubleValue = optional(value<Double>("KEY_4")) ExampleObject(intValue, stringValue, arrayValue, doubleValue) } ``` Bug: 300157408 Test: atest com.android.intentresolver.validation Change-Id: I517e70df84c28e42023f19c8616804bc46884b49
Diffstat (limited to 'tests/shared')
-rw-r--r--tests/shared/Android.bp1
-rw-r--r--tests/shared/src/com/android/intentresolver/v2/validation/ValidationResultSubject.kt22
2 files changed, 23 insertions, 0 deletions
diff --git a/tests/shared/Android.bp b/tests/shared/Android.bp
index dbd68b12..55188ee3 100644
--- a/tests/shared/Android.bp
+++ b/tests/shared/Android.bp
@@ -32,5 +32,6 @@ java_library {
"hamcrest",
"IntentResolver-core",
"mockito-target-minus-junit4",
+ "truth"
],
}
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)
+ }
+}