diff options
author | 2023-12-01 13:47:36 -0500 | |
---|---|---|
committer | 2023-12-07 22:18:37 +0000 | |
commit | 2722e36e5591398cdf96be94639fe9ccc055a3d6 (patch) | |
tree | fa68944754e88edbdab8e40cafb343b598c3b26f /tests/shared | |
parent | c85c6c55ebdeef744cb812b74fed30cd2b8a4d49 (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.bp | 1 | ||||
-rw-r--r-- | tests/shared/src/com/android/intentresolver/v2/validation/ValidationResultSubject.kt | 22 |
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) + } +} |