diff options
author | Junyu Lai <junyulai@google.com> | 2020-04-06 04:15:39 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-04-06 04:15:39 +0000 |
commit | 520e8de52699c1264732c4b6c23aa89a7da669d5 (patch) | |
tree | 44c255c2253c15d62b8e01c4071b2fffbb0d6f77 | |
parent | d1ec74f58891584fc68587127e28ccf4877b45e8 (diff) | |
parent | 0a2f267f85562d281b50cdb96fd81ac254189a2a (diff) |
Merge "[SP26.1] Add assert function for parceling NetworkStats" into rvc-dev
-rw-r--r-- | tests/lib/src/com/android/testutils/NetworkStatsUtils.kt | 28 | ||||
-rw-r--r-- | tests/lib/src/com/android/testutils/ParcelUtils.kt | 24 |
2 files changed, 39 insertions, 13 deletions
diff --git a/tests/lib/src/com/android/testutils/NetworkStatsUtils.kt b/tests/lib/src/com/android/testutils/NetworkStatsUtils.kt index 51e9e4d..8324b25 100644 --- a/tests/lib/src/com/android/testutils/NetworkStatsUtils.kt +++ b/tests/lib/src/com/android/testutils/NetworkStatsUtils.kt @@ -29,16 +29,24 @@ fun orderInsensitiveEquals( if (compareTime && leftStats.getElapsedRealtime() != rightStats.getElapsedRealtime()) { return false } - if (leftStats.size() != rightStats.size()) return false + + // While operations such as add/subtract will preserve empty entries. This will make + // the result be hard to verify during test. Remove them before comparing since they + // are not really affect correctness. + // TODO (b/152827872): Remove empty entries after addition/subtraction. + val leftTrimmedEmpty = leftStats.removeEmptyEntries() + val rightTrimmedEmpty = rightStats.removeEmptyEntries() + + if (leftTrimmedEmpty.size() != rightTrimmedEmpty.size()) return false val left = NetworkStats.Entry() val right = NetworkStats.Entry() // Order insensitive compare. - for (i in 0 until leftStats.size()) { - leftStats.getValues(i, left) - val j: Int = rightStats.findIndexHinted(left.iface, left.uid, left.set, left.tag, + for (i in 0 until leftTrimmedEmpty.size()) { + leftTrimmedEmpty.getValues(i, left) + val j: Int = rightTrimmedEmpty.findIndexHinted(left.iface, left.uid, left.set, left.tag, left.metered, left.roaming, left.defaultNetwork, i) if (j == -1) return false - rightStats.getValues(j, right) + rightTrimmedEmpty.getValues(j, right) if (left != right) return false } return true @@ -58,5 +66,13 @@ fun assertNetworkStatsEquals( compareTime: Boolean = false ) { assertTrue(orderInsensitiveEquals(expected, actual, compareTime), - "expected: " + expected + "but was: " + actual) + "expected: " + expected + " but was: " + actual) +} + +/** + * Assert that after being parceled then unparceled, {@link NetworkStats} is equal to the original + * object. + */ +fun assertParcelingIsLossless(stats: NetworkStats) { + assertParcelingIsLossless(stats, { a, b -> orderInsensitiveEquals(a, b) }) } diff --git a/tests/lib/src/com/android/testutils/ParcelUtils.kt b/tests/lib/src/com/android/testutils/ParcelUtils.kt index 9cbd053..5784f7c 100644 --- a/tests/lib/src/com/android/testutils/ParcelUtils.kt +++ b/tests/lib/src/com/android/testutils/ParcelUtils.kt @@ -18,13 +18,13 @@ package com.android.testutils import android.os.Parcel import android.os.Parcelable -import kotlin.test.assertEquals +import kotlin.test.assertTrue import kotlin.test.fail /** * Return a new instance of `T` after being parceled then unparceled. */ -fun <T: Parcelable> parcelingRoundTrip(source: T): T { +fun <T : Parcelable> parcelingRoundTrip(source: T): T { val creator: Parcelable.Creator<T> try { creator = source.javaClass.getField("CREATOR").get(null) as Parcelable.Creator<T> @@ -46,13 +46,23 @@ fun <T: Parcelable> parcelingRoundTrip(source: T): T { /** * Assert that after being parceled then unparceled, `source` is equal to the original - * object. + * object. If a customized equals function is provided, uses the provided one. */ -fun <T: Parcelable> assertParcelingIsLossless(source: T) { - assertEquals(source, parcelingRoundTrip(source)) +@JvmOverloads +fun <T : Parcelable> assertParcelingIsLossless( + source: T, + equals: (T, T) -> Boolean = { a, b -> a == b } +) { + val actual = parcelingRoundTrip(source) + assertTrue(equals(source, actual), "Expected $source, but was $actual") } -fun <T: Parcelable> assertParcelSane(obj: T, fieldCount: Int) { +@JvmOverloads +fun <T : Parcelable> assertParcelSane( + obj: T, + fieldCount: Int, + equals: (T, T) -> Boolean = { a, b -> a == b } +) { assertFieldCountEquals(fieldCount, obj::class.java) - assertParcelingIsLossless(obj) + assertParcelingIsLossless(obj, equals) } |