package com.newsrob.test.unit; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Bitmap.CompressFormat; import android.graphics.Bitmap.Config; import android.test.InstrumentationTestCase; import com.newsrob.util.PreviewGenerator; public class PreviewGeneratorTests extends InstrumentationTestCase { private final String TEST_DIR_BASE = "/sdcard/test/preview_generator_tests"; private String TEST_DIR; private File biggestFoundImage; private Integer numberOfRelevantImages; private File testDir; @Override protected void setUp() throws Exception { super.setUp(); TEST_DIR = TEST_DIR_BASE + System.currentTimeMillis(); testDir = new File(TEST_DIR); testDir.mkdirs(); // clear when used before for (File f : testDir.listFiles()) f.delete(); // clear? assertEquals(0, testDir.list().length); // 5 valid, 3 invalid files createFile(testDir, "big.jpgnr", 12, 8); // yes - biggest // createFile(testDir, "0.jpegnr", 1); // no - too small createFile(testDir, "1.jpegnr", 3, 3); // yes - jpeg supported createFile(testDir, "2.jPegnr", 4, 4); // yes - mixed case createFile(testDir, "3.jpegxnr", 5, 5); // no - only contains jpeg createFile(testDir, "4.jpgnr", 6, 6); // yes - no 'e' createFile(testDir, "5.gifnr", 7, 7); // no - no gifs createFile(testDir, "6.pngnr", 8, 8); // yes - png supported createFile(testDir, "7.png.extnr", 9, 9); // no - wrong extension } private void createFile(File testDir, String name, int width, int height) throws IOException { int LENGTH = 100; Bitmap outBm = Bitmap.createBitmap(width * LENGTH, height * LENGTH, Config.ARGB_8888); File outputFile = new File(testDir.getAbsolutePath() + File.separator + name); FileOutputStream fos = new FileOutputStream(outputFile); final int color = 0xffff0000; final Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(color); Canvas c = new Canvas(outBm); c.drawARGB(255, 0, 0, 0); for (int i = 0; i < height * 2; i++) { // horizontal c.drawLine(0.0f, i * LENGTH / 2, LENGTH * width, i * LENGTH / 2, paint); } for (int i = 0; i < width * 2; i++) { // vertical c.drawLine(i * LENGTH / 2, 0f, i * LENGTH / 2, LENGTH * height, paint); } outBm.compress(CompressFormat.PNG, 100, fos); fos.close(); outBm.recycle(); // canvas.drawARGB(0, 0, 0, 0); } public void testFindBiggestRelevantImage() throws Exception { new PreviewGenerator(getInstrumentation().getContext(), new File( TEST_DIR), 60, 60, 3) { @Override protected File findBiggestImageFile() { biggestFoundImage = super.findBiggestImageFile(); return biggestFoundImage; } }.generatePreview(); assertNotNull(biggestFoundImage); assertEquals("big.jpgnr", biggestFoundImage.getName()); } /** meanwhile all extensions are allowed */ public void oldtestFindOnlyRelevantImages() { new PreviewGenerator(getInstrumentation().getContext(), new File( TEST_DIR), 60, 60, 3) { protected List<File> findAllImageFiles() { List<File> images = super.findAllImageFiles(); numberOfRelevantImages = images.size(); return images; } }.generatePreview(); assertNotNull(numberOfRelevantImages); assertEquals(5, numberOfRelevantImages.intValue()); } public void testGenerationSuccessful() { assertFalse(new File(TEST_DIR, "preview.pngnr").exists()); assertTrue(new PreviewGenerator(getInstrumentation().getContext(), new File(TEST_DIR), 30, 30, 3).generatePreview()); assertTrue(new File(TEST_DIR, "preview.pngnr").exists()); } public void testPreviewIsOffTheRightSize() { assertTrue(new PreviewGenerator(getInstrumentation().getContext(), new File(TEST_DIR), 60, 60, 3).generatePreview()); Bitmap bm = BitmapFactory .decodeFile(new File(TEST_DIR, "preview.pngnr") .getAbsolutePath()); assertEquals(60, bm.getWidth()); assertEquals(60, bm.getHeight()); new File(TEST_DIR, "preview.pngnr").delete(); assertTrue(new PreviewGenerator(getInstrumentation().getContext(), new File(TEST_DIR), 12, 6, 3).generatePreview()); bm = BitmapFactory.decodeFile(new File(TEST_DIR, "preview.pngnr") .getAbsolutePath()); assertEquals(12, bm.getWidth()); assertEquals(6, bm.getHeight()); } } class PG extends PreviewGenerator { public PG(Context ctx, File assetsDir, int targetWidth, int targetHeight, int roundedCornerRadiusPx) { super(ctx, assetsDir, targetWidth, targetHeight, roundedCornerRadiusPx); } protected static int getMinSizeInBytes() { return 100; } }