122ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwinpackage com.xtremelabs.robolectric.shadows;
222ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
331690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richardimport android.graphics.*;
422ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.Robolectric;
522ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
622ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwinimport org.junit.Before;
722ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwinimport org.junit.Test;
822ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwinimport org.junit.runner.RunWith;
922ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
1022ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwinimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
11a308660ae43088e6571467e5d34ff41c5045436bMike Graftonimport static org.hamcrest.CoreMatchers.equalTo;
1222ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwinimport static org.junit.Assert.assertEquals;
13a308660ae43088e6571467e5d34ff41c5045436bMike Graftonimport static org.junit.Assert.assertThat;
1422ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
1522ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin@RunWith(WithTestDefaultsRunner.class)
1622ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwinpublic class CanvasTest {
1722ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin    private Bitmap targetBitmap;
1822ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin    private Bitmap imageBitmap;
1922ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
20a308660ae43088e6571467e5d34ff41c5045436bMike Grafton    @Before
21a308660ae43088e6571467e5d34ff41c5045436bMike Grafton    public void setUp() throws Exception {
2222ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        targetBitmap = Robolectric.newInstanceOf(Bitmap.class);
2322ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        imageBitmap = BitmapFactory.decodeFile("/an/image.jpg");
2422ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin    }
2522ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
2622ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin    @Test
2722ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin    public void shouldDescribeBitmapDrawing() throws Exception {
2822ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        Canvas canvas = new Canvas(targetBitmap);
2922ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        canvas.drawBitmap(imageBitmap, 1, 2, new Paint());
3022ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        canvas.drawBitmap(imageBitmap, 100, 200, new Paint());
3122ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
3222ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for file:/an/image.jpg at (1,2)\n" +
3322ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin                "Bitmap for file:/an/image.jpg at (100,200)", shadowOf(canvas).getDescription());
3422ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
3522ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for file:/an/image.jpg at (1,2)\n" +
3622ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin                "Bitmap for file:/an/image.jpg at (100,200)", shadowOf(targetBitmap).getDescription());
3722ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin    }
3822ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
3922ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin    @Test
4022ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin    public void shouldDescribeBitmapDrawing_WithMatrix() throws Exception {
4122ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        Canvas canvas = new Canvas(targetBitmap);
4222ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        canvas.drawBitmap(imageBitmap, new Matrix(), new Paint());
4322ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        canvas.drawBitmap(imageBitmap, new Matrix(), new Paint());
4422ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
4522ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for file:/an/image.jpg transformed by matrix\n" +
4622ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin                "Bitmap for file:/an/image.jpg transformed by matrix", shadowOf(canvas).getDescription());
4722ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin
4822ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin        assertEquals("Bitmap for file:/an/image.jpg transformed by matrix\n" +
4922ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin                "Bitmap for file:/an/image.jpg transformed by matrix", shadowOf(targetBitmap).getDescription());
5022ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin    }
51c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin
52c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin    @Test
53c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin    public void visualize_shouldReturnDescription() throws Exception {
54c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin        Canvas canvas = new Canvas(targetBitmap);
55c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin        canvas.drawBitmap(imageBitmap, new Matrix(), new Paint());
56c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin        canvas.drawBitmap(imageBitmap, new Matrix(), new Paint());
57c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin
58c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin        assertEquals("Bitmap for file:/an/image.jpg transformed by matrix\n" +
59c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin                "Bitmap for file:/an/image.jpg transformed by matrix", Robolectric.visualize(canvas));
60c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin
61c80983d2a778c62de05423980ba943217e2275bcChristian Williams & Phil Goodwin    }
62a308660ae43088e6571467e5d34ff41c5045436bMike Grafton
63b19eb0e5038b72cc7460536f408d22721ec0a4e8Michael Portuesi    @Test
64b19eb0e5038b72cc7460536f408d22721ec0a4e8Michael Portuesi    public void drawColor_shouldReturnDescription() throws Exception {
65b19eb0e5038b72cc7460536f408d22721ec0a4e8Michael Portuesi        Canvas canvas = new Canvas(targetBitmap);
66a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        canvas.drawColor(Color.WHITE);
67a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        canvas.drawColor(Color.GREEN);
68a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        canvas.drawColor(Color.TRANSPARENT);
69a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        assertEquals("draw color -1draw color -16711936draw color 0",
70a308660ae43088e6571467e5d34ff41c5045436bMike Grafton                shadowOf(canvas).getDescription());
71a308660ae43088e6571467e5d34ff41c5045436bMike Grafton    }
72a308660ae43088e6571467e5d34ff41c5045436bMike Grafton
73a308660ae43088e6571467e5d34ff41c5045436bMike Grafton    @Test
74a308660ae43088e6571467e5d34ff41c5045436bMike Grafton    public void drawPath_shouldRecordThePathAndThePaint() throws Exception {
75a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        Canvas canvas = new Canvas(targetBitmap);
76a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        Path path = new Path();
77a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        path.lineTo(10, 10);
78a308660ae43088e6571467e5d34ff41c5045436bMike Grafton
79a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        Paint paint = new Paint();
80a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        paint.setAlpha(7);
81a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        canvas.drawPath(path, paint);
82a308660ae43088e6571467e5d34ff41c5045436bMike Grafton
83a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        ShadowCanvas shadow = shadowOf(canvas);
84a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        assertThat(shadow.getPathPaintHistoryCount(), equalTo(1));
85a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        assertThat(shadow.getDrawnPath(0), equalTo(path));
86a308660ae43088e6571467e5d34ff41c5045436bMike Grafton        assertThat(shadow.getDrawnPathPaint(0), equalTo(paint));
87b19eb0e5038b72cc7460536f408d22721ec0a4e8Michael Portuesi    }
8831690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard
8931690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard    @Test
9031690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard    public void drawPath_shouldAppendDescriptionToBitmap() throws Exception {
9131690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        Canvas canvas = new Canvas(targetBitmap);
9231690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        Path path1 = new Path();
9331690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        path1.lineTo(10, 10);
9431690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        path1.moveTo(20, 15);
9531690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        Path path2 = new Path();
9631690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        path2.moveTo(100, 100);
9731690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        path2.lineTo(150, 140);
9831690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard
9931690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        Paint paint = new Paint();
10031690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        canvas.drawPath(path1, paint);
10131690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        canvas.drawPath(path2, paint);
10231690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard
10331690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        assertEquals("Path " + shadowOf(path1).getPoints().toString() + "\n"
10431690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard                + "Path " + shadowOf(path2).getPoints().toString(), shadowOf(canvas).getDescription());
10531690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard
10631690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard        assertEquals("Path " + shadowOf(path1).getPoints().toString() + "\n"
10731690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard                + "Path " + shadowOf(path2).getPoints().toString(), shadowOf(targetBitmap).getDescription());
10831690e8cb538efe3141638d6657db4c2621d3429Aaron VonderHaar & Ryan Richard    }
10922ae0c422c4f1bb6878f624fbf2531eea4da0187Christian Williams & Phil Goodwin}
110