1 package android.uirendering.cts.testclasses; 2 3 import android.graphics.Color; 4 import android.graphics.Paint; 5 import android.graphics.Path; 6 import android.graphics.Typeface; 7 import android.support.test.filters.MediumTest; 8 import android.support.test.runner.AndroidJUnit4; 9 import android.uirendering.cts.R; 10 import android.uirendering.cts.bitmapcomparers.MSSIMComparer; 11 import android.uirendering.cts.bitmapverifiers.GoldenImageVerifier; 12 import android.uirendering.cts.testinfrastructure.ActivityTestBase; 13 14 import org.junit.Test; 15 import org.junit.runner.RunWith; 16 17 @MediumTest 18 @RunWith(AndroidJUnit4.class) 19 public class PathTests extends ActivityTestBase { 20 21 @Test testTextPathWithOffset()22 public void testTextPathWithOffset() { 23 createTest() 24 .addCanvasClient((canvas, width, height) -> { 25 Paint paint = new Paint(); 26 paint.setColor(Color.BLACK); 27 paint.setAntiAlias(true); 28 paint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL)); 29 paint.setTextSize(26); 30 Path path = new Path(); 31 String text = "Abc"; 32 paint.getTextPath(text, 0, text.length(), 0, 0, path); 33 path.offset(0, 50); 34 canvas.drawPath(path, paint); 35 }) 36 .runWithVerifier(new GoldenImageVerifier(getActivity(), 37 R.drawable.text_path_with_offset, new MSSIMComparer(0.92))); 38 } 39 40 @Test testPathApproximate_circle()41 public void testPathApproximate_circle() { 42 final Path path = new Path(); 43 path.addCircle(45, 45, 40, Path.Direction.CW); 44 verifyPathApproximation(path, R.drawable.pathtest_path_approximate_circle); 45 } 46 47 @Test testPathApproximate_rect()48 public void testPathApproximate_rect() { 49 final Path path = new Path(); 50 path.addRect(5, 5, 85, 85, Path.Direction.CW); 51 verifyPathApproximation(path, R.drawable.pathtest_path_approximate_rect); 52 } 53 54 @Test testPathApproximate_quads()55 public void testPathApproximate_quads() { 56 final Path path = new Path(); 57 path.moveTo(5, 5); 58 path.quadTo(45, 45, 85, 5); 59 path.quadTo(45, 45, 85, 85); 60 path.quadTo(45, 45, 5, 85); 61 path.quadTo(45, 45, 5, 5); 62 verifyPathApproximation(path, R.drawable.pathtest_path_approximate_quads); 63 } 64 65 @Test testPathApproximate_cubics()66 public void testPathApproximate_cubics() { 67 final Path path = new Path(); 68 path.moveTo(5, 5); 69 path.cubicTo(45, 45, 45, 45, 85, 5); 70 path.cubicTo(45, 45, 45, 45, 85, 85); 71 path.cubicTo(45, 45, 45, 45, 5, 85); 72 path.cubicTo(45, 45, 45, 45, 5, 5); 73 verifyPathApproximation(path, R.drawable.pathtest_path_approximate_cubics); 74 } 75 verifyPathApproximation(Path path, int goldenResourceId)76 private void verifyPathApproximation(Path path, int goldenResourceId) { 77 float[] approx = path.approximate(0.5f); 78 final Paint paint = new Paint(); 79 paint.setAntiAlias(true); 80 paint.setStrokeWidth(2); 81 createTest() 82 .addCanvasClient((canvas, width, height) -> { 83 float lastX = approx[1]; 84 float lastY = approx[2]; 85 for (int i = 3; i < approx.length; i += 3) { 86 float x = approx[i + 1]; 87 float y = approx[i + 2]; 88 canvas.drawLine(lastX, lastY, x, y, paint); 89 lastX = x; 90 lastY = y; 91 } 92 }) 93 .runWithVerifier(new GoldenImageVerifier(getActivity(), 94 goldenResourceId, new MSSIMComparer(0.98))); 95 } 96 } 97