add a comparator for LogMaker
Tests need to be able to compare partial log structures. Bug: 34705522 Test: runtest --path frameworks/base/core/tests/coretests/src/android/metrics Change-Id: I4e26e43f5f5ea3fbba5a2a2a9563982c7260671b
This commit is contained in:
@@ -26158,6 +26158,7 @@ package android.metrics {
|
||||
method public long getTimestamp();
|
||||
method public int getType();
|
||||
method public boolean isLongCounterBucket();
|
||||
method public boolean isSubsetOf(android.metrics.LogMaker);
|
||||
method public boolean isValidValue(java.lang.Object);
|
||||
method public java.lang.Object[] serialize();
|
||||
method public android.metrics.LogMaker setCategory(int);
|
||||
|
||||
@@ -240,6 +240,9 @@ public class LogMaker {
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reconstitute an object from the output of {@link #serialize()}.
|
||||
*/
|
||||
public void deserialize(Object[] items) {
|
||||
int i = 0;
|
||||
while (i < items.length) {
|
||||
@@ -252,4 +255,22 @@ public class LogMaker {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param that the object to compare to.
|
||||
* @return true if values in that equal values in this, for tags that exist in this.
|
||||
*/
|
||||
public boolean isSubsetOf(LogMaker that) {
|
||||
if (that == null) {
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < entries.size(); i++) {
|
||||
int key = this.entries.keyAt(i);
|
||||
Object thisValue = this.entries.valueAt(i);
|
||||
Object thatValue = that.entries.get(key);
|
||||
if ((thisValue == null && thatValue != null) || !thisValue.equals(thatValue))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,4 +132,78 @@ public class LogMakerTest extends TestCase {
|
||||
assertTrue(badBuilder.serialize().length < LogMaker.MAX_SERIALIZED_SIZE);
|
||||
}
|
||||
|
||||
public void testIdentityEquality() {
|
||||
LogMaker a = new LogMaker(0);
|
||||
a.addTaggedData(1, "onetwothree");
|
||||
a.addTaggedData(2, 123);
|
||||
a.addTaggedData(3, 123L);
|
||||
|
||||
assertTrue("objects should be equal to themselves", a.isSubsetOf(a));
|
||||
}
|
||||
|
||||
public void testExactEquality() {
|
||||
LogMaker a = new LogMaker(0);
|
||||
a.addTaggedData(1, "onetwothree");
|
||||
a.addTaggedData(2, 123);
|
||||
a.addTaggedData(3, 123L);
|
||||
LogMaker b = new LogMaker(0);
|
||||
b.addTaggedData(1, "onetwothree");
|
||||
b.addTaggedData(2, 123);
|
||||
b.addTaggedData(3, 123L);
|
||||
|
||||
assertTrue("deep equality should be true", a.isSubsetOf(b));
|
||||
assertTrue("deep equality shoudl be true", b.isSubsetOf(a));
|
||||
}
|
||||
|
||||
public void testSubsetEquality() {
|
||||
LogMaker a = new LogMaker(0);
|
||||
a.addTaggedData(1, "onetwothree");
|
||||
a.addTaggedData(2, 123);
|
||||
LogMaker b = new LogMaker(0);
|
||||
b.addTaggedData(1, "onetwothree");
|
||||
b.addTaggedData(2, 123);
|
||||
b.addTaggedData(3, 123L);
|
||||
|
||||
assertTrue("a is a strict subset of b", a.isSubsetOf(b));
|
||||
assertTrue("b is not a strict subset of a", !b.isSubsetOf(a));
|
||||
}
|
||||
|
||||
public void testInequality() {
|
||||
LogMaker a = new LogMaker(0);
|
||||
a.addTaggedData(1, "onetwofour");
|
||||
a.addTaggedData(2, 1234);
|
||||
LogMaker b = new LogMaker(0);
|
||||
b.addTaggedData(1, "onetwothree");
|
||||
b.addTaggedData(2, 123);
|
||||
b.addTaggedData(3, 123L);
|
||||
|
||||
assertTrue("a is not a subset of b", !a.isSubsetOf(b));
|
||||
assertTrue("b is not a subset of a", !b.isSubsetOf(a));
|
||||
}
|
||||
|
||||
public void testWildcardEquality() {
|
||||
LogMaker empty = new LogMaker(0);
|
||||
empty.clearTaggedData(MetricsEvent.RESERVED_FOR_LOGBUILDER_CATEGORY); //dirty trick
|
||||
LogMaker b = new LogMaker(0);
|
||||
b.addTaggedData(1, "onetwothree");
|
||||
b.addTaggedData(2, 123);
|
||||
b.addTaggedData(3, 123L);
|
||||
|
||||
assertTrue("empty builder is a subset of anything", empty.isSubsetOf(b));
|
||||
}
|
||||
|
||||
public void testNullEquality() {
|
||||
LogMaker a = new LogMaker(0);
|
||||
a.addTaggedData(1, "onetwofour");
|
||||
a.addTaggedData(2, 1234);
|
||||
|
||||
assertTrue("a is not a subset of null", !a.isSubsetOf(null));
|
||||
}
|
||||
|
||||
public void testMajorCategory() {
|
||||
LogMaker a = new LogMaker(1);
|
||||
LogMaker b = new LogMaker(2);
|
||||
assertFalse(a.isSubsetOf(b));
|
||||
assertFalse(b.isSubsetOf(a));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user