001: // Copyright 2007 The Apache Software Foundation
002: //
003: // Licensed under the Apache License, Version 2.0 (the "License");
004: // you may not use this file except in compliance with the License.
005: // You may obtain a copy of the License at
006: //
007: // http://www.apache.org/licenses/LICENSE-2.0
008: //
009: // Unless required by applicable law or agreed to in writing, software
010: // distributed under the License is distributed on an "AS IS" BASIS,
011: // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012: // See the License for the specific language governing permissions and
013: // limitations under the License.
014:
015: package org.apache.tapestry.util;
016:
017: import java.util.Arrays;
018:
019: import org.apache.tapestry.internal.test.InternalBaseTestCase;
020: import org.apache.tapestry.util.DefaultPrimaryKeyEncoder;
021: import org.testng.annotations.Test;
022:
023: public class DefaultPrimaryKeyEncoderTest extends InternalBaseTestCase {
024: static class IntStringEncoder extends
025: DefaultPrimaryKeyEncoder<Integer, String> {
026:
027: };
028:
029: private final int FRED_ID = 1;
030:
031: private final String FRED = "FRED";
032:
033: private final int BARNEY_ID = 2;
034:
035: private final String BARNEY = "BARNEY";
036:
037: private final int WILMA_ID = 3;
038:
039: private final String WILMA = "WILMA";
040:
041: @Test
042: public void empty_encoder_has_no_values() {
043: IntStringEncoder encoder = new IntStringEncoder();
044:
045: assertTrue(encoder.getValues().isEmpty());
046: }
047:
048: @Test
049: public void keys_must_be_unique() {
050: IntStringEncoder encoder = newEncoder();
051:
052: try {
053: encoder.add(FRED_ID, "NewFred");
054: unreachable();
055: } catch (IllegalArgumentException ex) {
056: assertEquals(
057: ex.getMessage(),
058: "Key 1 may not be added with value NewFred, as an existing value, FRED, is already present.");
059: }
060: }
061:
062: @Test
063: public void extract_key_for_missing_value() {
064: IntStringEncoder encoder = newEncoder();
065:
066: try {
067: encoder.toKey("BETTY");
068: unreachable();
069: } catch (IllegalArgumentException ex) {
070: assertEquals(ex.getMessage(),
071: "Key for value BETTY not found. Available values: BARNEY, FRED, WILMA");
072: }
073: }
074:
075: @Test
076: public void value_orderer_maintained() {
077: IntStringEncoder encoder = newEncoder();
078:
079: assertEquals(encoder.getValues(), Arrays.asList(BARNEY, FRED,
080: WILMA));
081: }
082:
083: @Test
084: public void value_to_key() {
085: IntStringEncoder encoder = newEncoder();
086:
087: assertEquals(encoder.toKey(FRED).intValue(), FRED_ID);
088: assertEquals(encoder.toKey(BARNEY).intValue(), BARNEY_ID);
089: }
090:
091: @Test
092: public void known_key_to_value() {
093: IntStringEncoder encoder = newEncoder();
094:
095: assertEquals(encoder.toValue(FRED_ID), FRED);
096: assertEquals(encoder.toValue(BARNEY_ID), BARNEY);
097: }
098:
099: @Test
100: public void unknown_key_to_value() {
101: IntStringEncoder encoder = newEncoder();
102:
103: assertNull(encoder.toValue(99), null);
104: }
105:
106: @Test
107: public void missing_key_to_provided_object() {
108: final int bettyId = 5;
109: final String betty = "BETTY";
110:
111: IntStringEncoder encoder = new IntStringEncoder() {
112: @Override
113: protected String provideMissingObject(Integer key) {
114: assertEquals(key, new Integer(bettyId));
115:
116: return betty;
117: }
118: };
119:
120: assertSame(encoder.toValue(bettyId), betty);
121: }
122:
123: @Test
124: public void set_delete_false_when_nothing_yet_deleted() {
125: IntStringEncoder encoder = newEncoder();
126:
127: assertSame(FRED, encoder.toValue(FRED_ID));
128:
129: encoder.setDeleted(false);
130:
131: assertEquals(encoder.getValues(), encoder.getAllValues());
132: }
133:
134: @Test
135: public void difference_between_get_values_and_get_all_values() {
136: IntStringEncoder encoder = newEncoder();
137:
138: assertSame(FRED, encoder.toValue(FRED_ID));
139:
140: assertFalse(encoder.isDeleted());
141:
142: encoder.setDeleted(true);
143:
144: assertTrue(encoder.isDeleted());
145:
146: assertEquals(encoder.getValues(), Arrays.asList(BARNEY, WILMA));
147:
148: assertEquals(encoder.getAllValues(), Arrays.asList(BARNEY,
149: FRED, WILMA));
150: }
151:
152: @Test
153: public void undelete_a_value() {
154: IntStringEncoder encoder = newEncoder();
155:
156: assertSame(FRED, encoder.toValue(FRED_ID));
157:
158: encoder.setDeleted(true);
159: encoder.setDeleted(false);
160:
161: assertEquals(encoder.getValues(), encoder.getAllValues());
162: }
163:
164: private IntStringEncoder newEncoder() {
165: IntStringEncoder encoder = new IntStringEncoder();
166:
167: encoder.add(BARNEY_ID, BARNEY);
168: encoder.add(FRED_ID, FRED);
169: encoder.add(WILMA_ID, WILMA);
170:
171: return encoder;
172: }
173:
174: }
|