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