aboutsummaryrefslogtreecommitdiffstats
path: root/assetstudio/tests/src/com/android/assetstudiolib/GeneratorTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'assetstudio/tests/src/com/android/assetstudiolib/GeneratorTest.java')
-rw-r--r--assetstudio/tests/src/com/android/assetstudiolib/GeneratorTest.java226
1 files changed, 0 insertions, 226 deletions
diff --git a/assetstudio/tests/src/com/android/assetstudiolib/GeneratorTest.java b/assetstudio/tests/src/com/android/assetstudiolib/GeneratorTest.java
deleted file mode 100644
index 4a96f30..0000000
--- a/assetstudio/tests/src/com/android/assetstudiolib/GeneratorTest.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Eclipse Public License, Version 1.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.eclipse.org/org/documents/epl-v10.php
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.assetstudiolib;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.imageio.ImageIO;
-
-import junit.framework.TestCase;
-
-/**
- * Shared test infrastructure for code generator
- */
-public abstract class GeneratorTest extends TestCase implements GraphicGeneratorContext {
- private static final String TEST_DATA_REL_PATH =
- "assetstudio/tests/src/com/android/assetstudiolib/testdata";
-
- protected void checkGraphic(int expectedFileCount, String folderName, String baseName,
- GraphicGenerator generator, GraphicGenerator.Options options)
- throws IOException {
- Map<String, Map<String, BufferedImage>> categoryMap =
- new HashMap<String, Map<String, BufferedImage>>();
- options.sourceImage = GraphicGenerator.getClipartImage("android.png");
- generator.generate(null, categoryMap, this, options, baseName);
-
- File targetDir = getTargetDir();
-
- List<String> errors = new ArrayList<String>();
- int fileCount = 0;
- for (Map<String, BufferedImage> previews : categoryMap.values()) {
- for (Map.Entry<String, BufferedImage> entry : previews.entrySet()) {
- String relativePath = entry.getKey();
- BufferedImage image = entry.getValue();
-
- String path = "testdata" + File.separator + folderName + File.separator
- + relativePath;
- InputStream is = GeneratorTest.class.getResourceAsStream(path);
- if (is == null) {
- if (targetDir == null) {
- fail("Did not find " + path
- + ". Set ADT_SDK_SOURCE_PATH to have it created automatically");
- }
- File fileName = new File(targetDir, folderName + File.separator
- + relativePath);
- assertFalse(fileName.exists());
- if (!fileName.getParentFile().exists()) {
- boolean mkdir = fileName.getParentFile().mkdirs();
- assertTrue(fileName.getParent(), mkdir);
- }
-
- ImageIO.write(image, "PNG", fileName);
- errors.add("File did not exist, created " + fileName.getPath());
- } else {
- BufferedImage goldenImage = ImageIO.read(is);
- assertImageSimilar(relativePath, goldenImage, image, 5.0f);
- }
- }
-
- fileCount += previews.values().size();
- }
- if (errors.size() > 0) {
- fail(errors.toString());
- }
-
- assertEquals("Wrong number of generated files", expectedFileCount, fileCount);
- }
-
- private void assertImageSimilar(String imageName, BufferedImage goldenImage,
- BufferedImage image, float maxPercentDifferent) throws IOException {
- assertTrue("Widths differ too much for " + imageName, Math.abs(goldenImage.getWidth()
- - image.getWidth()) < 2);
- assertTrue("Widths differ too much for " + imageName, Math.abs(goldenImage.getHeight()
- - image.getHeight()) < 2);
-
- assertEquals(BufferedImage.TYPE_INT_ARGB, image.getType());
-
- if (goldenImage.getType() != BufferedImage.TYPE_INT_ARGB) {
- BufferedImage temp = new BufferedImage(goldenImage.getWidth(), goldenImage.getHeight(),
- BufferedImage.TYPE_INT_ARGB);
- temp.getGraphics().drawImage(goldenImage, 0, 0, null);
- goldenImage = temp;
- }
- assertEquals(BufferedImage.TYPE_INT_ARGB, goldenImage.getType());
-
- int imageWidth = Math.min(goldenImage.getWidth(), image.getWidth());
- int imageHeight = Math.min(goldenImage.getHeight(), image.getHeight());
-
- // Blur the images to account for the scenarios where there are pixel
- // differences
- // in where a sharp edge occurs
- // goldenImage = blur(goldenImage, 6);
- // image = blur(image, 6);
-
- int width = 3 * imageWidth;
- int height = imageHeight;
- BufferedImage deltaImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
- Graphics g = deltaImage.getGraphics();
-
- // Compute delta map
- long delta = 0;
- for (int y = 0; y < imageHeight; y++) {
- for (int x = 0; x < imageWidth; x++) {
- int goldenRgb = goldenImage.getRGB(x, y);
- int rgb = image.getRGB(x, y);
- if (goldenRgb == rgb) {
- deltaImage.setRGB(imageWidth + x, y, 0x00808080);
- continue;
- }
-
- // If the pixels have no opacity, don't delta colors at all
- if (((goldenRgb & 0xFF000000) == 0) && (rgb & 0xFF000000) == 0) {
- deltaImage.setRGB(imageWidth + x, y, 0x00808080);
- continue;
- }
-
- int deltaR = ((rgb & 0xFF0000) >>> 16) - ((goldenRgb & 0xFF0000) >>> 16);
- int newR = 128 + deltaR & 0xFF;
- int deltaG = ((rgb & 0x00FF00) >>> 8) - ((goldenRgb & 0x00FF00) >>> 8);
- int newG = 128 + deltaG & 0xFF;
- int deltaB = (rgb & 0x0000FF) - (goldenRgb & 0x0000FF);
- int newB = 128 + deltaB & 0xFF;
-
- int avgAlpha = ((((goldenRgb & 0xFF000000) >>> 24)
- + ((rgb & 0xFF000000) >>> 24)) / 2) << 24;
-
- int newRGB = avgAlpha | newR << 16 | newG << 8 | newB;
- deltaImage.setRGB(imageWidth + x, y, newRGB);
-
- delta += Math.abs(deltaR);
- delta += Math.abs(deltaG);
- delta += Math.abs(deltaB);
- }
- }
-
- // 3 different colors, 256 color levels
- long total = imageHeight * imageWidth * 3L * 256L;
- float percentDifference = (float) (delta * 100 / (double) total);
-
- if (percentDifference > maxPercentDifferent) {
- // Expected on the left
- // Golden on the right
- g.drawImage(goldenImage, 0, 0, null);
- g.drawImage(image, 2 * imageWidth, 0, null);
-
- // Labels
- if (imageWidth > 80) {
- g.setColor(Color.RED);
- g.drawString("Expected", 10, 20);
- g.drawString("Actual", 2 * imageWidth + 10, 20);
- }
-
- File output = new File(getTempDir(), "delta-"
- + imageName.replace(File.separatorChar, '_'));
- if (output.exists()) {
- output.delete();
- }
- ImageIO.write(deltaImage, "PNG", output);
- String message = String.format("Images differ (by %.1f%%) - see details in %s",
- percentDifference, output);
- System.out.println(message);
- fail(message);
- }
-
- g.dispose();
- }
-
- protected File getTempDir() {
- if (System.getProperty("os.name").equals("Mac OS X")) {
- return new File("/tmp"); //$NON-NLS-1$
- }
-
- return new File(System.getProperty("java.io.tmpdir")); //$NON-NLS-1$
- }
-
- @Override
- public BufferedImage loadImageResource(String path) {
- try {
- return GraphicGenerator.getStencilImage(path);
- } catch (IOException e) {
- fail(e.toString());
- }
-
- return null;
- }
-
- /** Get the location to write missing golden files to */
- protected File getTargetDir() {
- // Set $ADT_SDK_SOURCE_PATH to point to your git "sdk" directory
- String sdk = System.getenv("ADT_SDK_SOURCE_PATH");
- if (sdk != null) {
- File sdkPath = new File(sdk);
- if (sdkPath.exists()) {
- File testData = new File(sdkPath, TEST_DATA_REL_PATH.replace('/',
- File.separatorChar));
- if (testData.exists()) {
- return testData;
- }
- }
- }
-
- return null;
- }
-}