Adjust testMutate to not rely on undefined behavior
It's not required that getDrawable return a shared state drawable,
so don't CTS test that state is shared across all instances
Also split the test into 2 smaller pieces.
Test: this
Bug: 158839504
Bug: 185178568
Change-Id: Ifa2887a0c6735a538913e88319bd8c492cc21926
diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/VectorDrawableTest.java b/tests/tests/graphics/src/android/graphics/drawable/cts/VectorDrawableTest.java
index bd5b206..d7fd1bc 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/VectorDrawableTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/VectorDrawableTest.java
@@ -17,6 +17,7 @@
package android.graphics.drawable.cts;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import android.content.Context;
@@ -350,31 +351,33 @@
VectorDrawable d1 = (VectorDrawable) mResources.getDrawable(R.drawable.vector_icon_create);
VectorDrawable d2 = (VectorDrawable) mResources.getDrawable(R.drawable.vector_icon_create);
VectorDrawable d3 = (VectorDrawable) mResources.getDrawable(R.drawable.vector_icon_create);
- int restoreAlpha = d1.getAlpha();
+ final int initialAlpha = d1.getAlpha();
+ d1.mutate();
+ d1.setAlpha(0x40);
+ assertEquals(0x40, d1.getAlpha());
+ assertEquals(initialAlpha, d2.getAlpha());
+ assertEquals(initialAlpha, d3.getAlpha());
+
+ d2.mutate();
+ d2.setAlpha(0x20);
+ assertEquals(0x40, d1.getAlpha());
+ assertEquals(0x20, d2.getAlpha());
+ assertEquals(initialAlpha, d3.getAlpha());
+ }
+
+ @Test
+ public void testMutatePreservesState() {
+ VectorDrawable d = (VectorDrawable) mResources.getDrawable(R.drawable.vector_icon_create);
+ final int restoreAlpha = d.getAlpha();
try {
- // verify bad behavior - modify before mutate pollutes other drawables
- d1.setAlpha(0x80);
- assertEquals(0x80, d1.getAlpha());
- assertEquals(0x80, d2.getAlpha());
- assertEquals(0x80, d3.getAlpha());
-
- d1.mutate();
- d1.setAlpha(0x40);
- assertEquals(0x40, d1.getAlpha());
- assertEquals(0x80, d2.getAlpha());
- assertEquals(0x80, d3.getAlpha());
-
- d2.setAlpha(0x00);
- d2.mutate();
+ assertNotEquals(0x00, d.getAlpha());
+ d.setAlpha(0x00);
+ d.mutate();
// Test that after mutating, the alpha value is copied over.
- assertEquals(0x00, d2.getAlpha());
-
- d2.setAlpha(0x20);
- assertEquals(0x40, d1.getAlpha());
- assertEquals(0x20, d2.getAlpha());
- assertEquals(0x00, d3.getAlpha());
+ assertEquals(0x00, d.getAlpha());
} finally {
+ // Restore the original drawable's alpha
mResources.getDrawable(R.drawable.vector_icon_create).setAlpha(restoreAlpha);
}
}