| /* |
| * |
| * 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()); |
| } |
| } |