001: /*
002: * Copyright (c) 2002-2007 JGoodies Karsten Lentzsch. All Rights Reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
015: * its contributors may be used to endorse or promote products derived
016: * from this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
020: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
021: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
022: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
025: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
026: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
027: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
028: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: */
030:
031: package com.jgoodies.forms.layout;
032:
033: import junit.framework.TestCase;
034:
035: /**
036: * Tests column and row groups of the FormLayout.
037: *
038: * @author Karsten Lentzsch
039: * @version $Revision: 1.10 $
040: */
041:
042: public final class FormLayoutGroupsTest extends TestCase {
043:
044: private FormLayout layout;
045:
046: /**
047: * @throws Exception in case of an unexpected problem
048: */
049: protected void setUp() throws Exception {
050: super .setUp();
051: layout = new FormLayout("pref, pref, pref, pref",
052: "pref, pref, pref, pref");
053: }
054:
055: /**
056: * @throws Exception in case of an unexpected problem
057: */
058: protected void tearDown() throws Exception {
059: super .tearDown();
060: layout = null;
061: }
062:
063: /**
064: * Checks that column groups use a deep copy mechanism,
065: * not a shallow copy.
066: */
067: public void testDeepCopyColumnGroups() {
068: int[][] columnGroups = createAllGroups();
069: layout.setColumnGroups(columnGroups);
070:
071: // Modify the column group set (first level).
072: columnGroups[1] = new int[] { 1, 4 };
073: if (equals(columnGroups, layout.getColumnGroups()))
074: fail("Column group sets should be immutable.");
075:
076: // Modify a column group (second level)
077: columnGroups[0][0] = 5;
078: if (equals(columnGroups, layout.getColumnGroups()))
079: fail("Column groups should be immutable.");
080: }
081:
082: /**
083: * Checks that row groups use a deep copy mechanism,
084: * not a shallow copy.
085: */
086: public void testDeepCopyRowGroups() {
087: int[][] rowGroups = createAllGroups();
088: layout.setRowGroups(rowGroups);
089:
090: // Modify the row group set (first level).
091: rowGroups[1] = new int[] { 1, 4 };
092: if (equals(rowGroups, layout.getRowGroups()))
093: fail("The row group sets should be immutable.");
094:
095: // Modify a row group (second level)
096: rowGroups[0][0] = 5;
097: if (equals(rowGroups, layout.getRowGroups()))
098: fail("Row groups should be immutable.");
099: }
100:
101: /**
102: * Tests if invalid column indices are rejected.
103: */
104: public void testRejectInvalidColumnIndex() {
105: try {
106: layout.setColumnGroups(new int[][] { { 1, 5 } });
107: fail("An invalid column index should be rejected.");
108: } catch (IndexOutOfBoundsException e) {
109: // The expected behavior
110: }
111: }
112:
113: /**
114: * Tests if invalid row indices are rejected.
115: */
116: public void testRejectInvalidRowIndex() {
117: try {
118: layout.setRowGroups(new int[][] { { 1, 5 } });
119: fail("An invalid row index should be rejected.");
120: } catch (IndexOutOfBoundsException e) {
121: // The expected behavior
122: }
123: }
124:
125: /**
126: * Tests if duplicate column indices are rejected.
127: */
128: public void testRejectDuplicateColumnIndex() {
129: try {
130: layout.setColumnGroups(new int[][] { { 1, 2 }, { 2, 3 } });
131: fail("A duplicate column index should be rejected.");
132: } catch (IllegalArgumentException e) {
133: // The expected behavior
134: }
135: }
136:
137: /**
138: * Tests if duplicate row indices are rejected.
139: */
140: public void testRejectDuplicateRowIndex() {
141: try {
142: layout.setRowGroups(new int[][] { { 1, 2 }, { 2, 3 } });
143: fail("A duplicate row index should be rejected.");
144: } catch (IllegalArgumentException e) {
145: // The expected behavior
146: }
147: }
148:
149: // Helper Code *************************************************
150:
151: private int[][] createAllGroups() {
152: int[] group1 = new int[] { 1, 2 };
153: int[] group2 = new int[] { 3, 4 };
154: return new int[][] { group1, group2 };
155: }
156:
157: /**
158: * Checks and returns if the two-dimensional arrays are equal.
159: * @param array1 a two-dimensional array
160: * @param array2 a second two-dimensional array
161: * @return true if both arrays are equal, false otherwise
162: */
163: private boolean equals(int[][] array1, int[][] array2) {
164: if (array1.length != array2.length)
165: return false;
166: for (int i = 0; i < array1.length; i++) {
167: int[] subarray1 = array1[i];
168: int[] subarray2 = array2[i];
169: if (subarray1.length != subarray2.length)
170: return false;
171: for (int j = 0; j < subarray1.length; j++) {
172: if (subarray1[j] != subarray2[j])
173: return false;
174: }
175: }
176: return true;
177: }
178:
179: }
|