Add test that emoji HDR bug is fixed

Fixes: 300640288
Test: this
Change-Id: I3ddfa93988b7ec278051b8536f76fb2f65337c6a
diff --git a/tests/tests/uirendering/src/android/uirendering/cts/testclasses/ColorSpaceTests.java b/tests/tests/uirendering/src/android/uirendering/cts/testclasses/ColorSpaceTests.java
index bf28fca..9e2a684 100644
--- a/tests/tests/uirendering/src/android/uirendering/cts/testclasses/ColorSpaceTests.java
+++ b/tests/tests/uirendering/src/android/uirendering/cts/testclasses/ColorSpaceTests.java
@@ -27,11 +27,16 @@
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.ColorSpace;
+import android.graphics.HardwareBufferRenderer;
 import android.graphics.Paint;
 import android.graphics.Point;
+import android.graphics.RecordingCanvas;
+import android.graphics.RenderNode;
 import android.graphics.Shader;
+import android.hardware.HardwareBuffer;
 import android.uirendering.cts.bitmapverifiers.SamplePointVerifier;
 import android.uirendering.cts.testinfrastructure.ActivityTestBase;
+import android.uirendering.cts.util.BitmapDumper;
 
 import androidx.annotation.ColorLong;
 import androidx.annotation.NonNull;
@@ -46,6 +51,8 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 @MediumTest
 @RunWith(AndroidJUnit4.class)
@@ -174,6 +181,43 @@
         Assert.assertEquals(.58f, bitmapResult.blue(), 0.001f);
     }
 
+    @Test
+    public void testEmojiRespectsColorSpace() {
+        HardwareBuffer buffer = HardwareBuffer.create(32, 32, HardwareBuffer.RGBA_8888,
+                1, HardwareBuffer.USAGE_GPU_COLOR_OUTPUT | HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE);
+        final ColorSpace dest = ColorSpace.get(ColorSpace.Named.BT2020_PQ);
+        HardwareBufferRenderer renderer = new HardwareBufferRenderer(buffer);
+        RenderNode content = new RenderNode("emoji");
+        content.setPosition(0, 0, 32, 32);
+        RecordingCanvas canvas = content.beginRecording();
+        Paint p = new Paint();
+        p.setTextSize(32);
+        canvas.drawColor(Color.pack(1.0f, 1.0f, 1.0f, 1.0f, dest));
+        canvas.drawText(Character.toString('\u2B1C'), 0.0f, 32.0f, p);
+        content.endRecording();
+        renderer.setContentRoot(content);
+        CountDownLatch latch = new CountDownLatch(1);
+        renderer.obtainRenderRequest().setColorSpace(dest).draw(Runnable::run, result -> {
+            result.getFence().awaitForever();
+            latch.countDown();
+        });
+        try {
+            Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
+        } catch (InterruptedException ex) {
+            Assert.fail(ex.getMessage());
+        }
+        Bitmap result = Bitmap.wrapHardwareBuffer(buffer, dest)
+                .copy(Bitmap.Config.ARGB_8888, false);
+        Color color = result.getColor(16, 16).convert(
+                ColorSpace.get(ColorSpace.Named.EXTENDED_SRGB));
+        if (color.red() > 1 || color.blue() > 1 || color.green() > 1) {
+            BitmapDumper.dumpBitmap(result, "testEmojiRespectsColorSpace",
+                    this.getClass().getName());
+            Assert.fail("Emoji failed colorspace conversion; got " + color.red() + ", "
+                    + color.blue() + ", " + color.green());
+        }
+    }
+
     private void drawAsset(@NonNull Canvas canvas, Bitmap bitmap) {
         // Render bitmap directly
         canvas.save();