blob: 7350b826e0e98da8a9f7e91f66018fe49a1f8d99 [file] [log] [blame]
/*
*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* 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.draw9patch.ui;
import junit.framework.TestCase;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
public class PatchInfoTest extends TestCase {
private BufferedImage createImage(String[] data) {
int h = data.length;
int w = data[0].length();
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
char c = data[row].charAt(col);
int color = 0;
if (c == '*') {
color = PatchInfo.BLACK_TICK;
} else if (c == 'R') {
color = PatchInfo.RED_TICK;
}
image.setRGB(col, row, color);
}
}
return image;
}
public void testPatchInfo() {
BufferedImage image = createImage(new String[] {
"0123**6789",
"1........*",
"*........*",
"3........*",
"412*****89",
});
PatchInfo pi = new PatchInfo(image);
// The left and top patch markers don't begin from the first pixel
assertFalse(pi.horizontalStartWithPatch);
assertFalse(pi.verticalStartWithPatch);
// There should be one patch in the middle where the left and top patch markers intersect
assertEquals(1, pi.patches.size());
assertEquals(new Rectangle(4, 2, 2, 1), pi.patches.get(0));
// There should be 2 horizontal stretchable areas - area below the top marker but excluding
// the main patch
assertEquals(2, pi.horizontalPatches.size());
assertEquals(new Rectangle(4, 1, 2, 1), pi.horizontalPatches.get(0));
assertEquals(new Rectangle(4, 3, 2, 1), pi.horizontalPatches.get(1));
// Similarly, there should be 2 vertical stretchable areas
assertEquals(2, pi.verticalPatches.size());
assertEquals(new Rectangle(1, 2, 3, 1), pi.verticalPatches.get(0));
assertEquals(new Rectangle(6, 2, 3, 1), pi.verticalPatches.get(1));
// The should be 4 fixed regions - the regions that don't fall under the patches
assertEquals(4, pi.fixed.size());
// The horizontal padding is described by the bottom bar.
// In this case, there is a 2 pixel (pixels 1 & 2) padding at start and 1 pixel (pixel 8)
// padding at end
assertEquals(2, pi.horizontalPadding.first.intValue());
assertEquals(1, pi.horizontalPadding.second.intValue());
// The vertical padding is described by the bar at the right.
// In this case, there is no padding as the content area matches the image area
assertEquals(0, pi.verticalPadding.first.intValue());
assertEquals(0, pi.verticalPadding.second.intValue());
}
public void testPadding() {
BufferedImage image = createImage(new String[] {
"0123**6789",
"1.........",
"2.........",
"3........*",
"4........*",
"5***456789",
});
PatchInfo pi = new PatchInfo(image);
// 0 pixel padding at start and 5 pixel padding at the end (pixels 4 through 8 inclusive)
assertEquals(0, pi.horizontalPadding.first.intValue());
assertEquals(5, pi.horizontalPadding.second.intValue());
// 2 pixel padding at the start and 0 at the end
assertEquals(2, pi.verticalPadding.first.intValue());
assertEquals(0, pi.verticalPadding.second.intValue());
}
// make sure that the presence of layout bound markers doesn't affect patch/padding info
public void testIgnoreLayoutBoundMarkers() {
BufferedImage image = createImage(new String[] {
"0RR3**6789",
"R........R",
"*.........",
"*........*",
"4........*",
"5***456R89",
});
PatchInfo pi = new PatchInfo(image);
assertFalse(pi.horizontalStartWithPatch);
assertEquals(1, pi.patches.size());
assertEquals(2, pi.verticalPatches.size());
assertEquals(2, pi.horizontalPatches.size());
}
}