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.corelib.components;
016:
017: import java.io.BufferedInputStream;
018: import java.io.InputStream;
019: import java.io.InputStreamReader;
020: import java.io.Reader;
021: import java.util.Arrays;
022: import java.util.Collections;
023: import java.util.List;
024: import java.util.Map;
025:
026: import org.apache.tapestry.MarkupWriter;
027: import org.apache.tapestry.OptionGroupModel;
028: import org.apache.tapestry.OptionModel;
029: import org.apache.tapestry.SelectModel;
030: import org.apache.tapestry.dom.XMLMarkupModel;
031: import org.apache.tapestry.internal.OptionGroupModelImpl;
032: import org.apache.tapestry.internal.OptionModelImpl;
033: import org.apache.tapestry.internal.SelectModelImpl;
034: import org.apache.tapestry.internal.TapestryInternalUtils;
035: import org.apache.tapestry.internal.services.MarkupWriterImpl;
036: import org.apache.tapestry.internal.services.StringValueEncoder;
037: import org.apache.tapestry.internal.test.InternalBaseTestCase;
038: import org.apache.tapestry.ioc.internal.util.CollectionFactory;
039: import org.testng.annotations.Test;
040:
041: /**
042: * Mostly, this is about how the Select component renders its {@link SelectModel}. The real nuts
043: * and bolts are tested in the integration tests.
044: */
045: public class SelectTest extends InternalBaseTestCase {
046:
047: @Test
048: public void empty_model() {
049: Select select = new Select();
050:
051: select.setModel(new SelectModelImpl(null, null));
052:
053: select.options(null);
054: }
055:
056: private String read(String file) throws Exception {
057: InputStream is = getClass().getResourceAsStream(file);
058: Reader reader = new InputStreamReader(new BufferedInputStream(
059: is));
060:
061: StringBuilder builder = new StringBuilder();
062: char[] buffer = new char[1000];
063:
064: while (true) {
065: int length = reader.read(buffer);
066:
067: if (length < 0)
068: break;
069:
070: builder.append(buffer, 0, length);
071: }
072:
073: reader.close();
074:
075: return builder.toString();
076: }
077:
078: @Test
079: public void just_options() throws Exception {
080: List<OptionModel> options = TapestryInternalUtils
081: .toOptionModels("fred=Fred Flintstone,barney=Barney Rubble");
082:
083: Select select = new Select();
084:
085: select.setModel(new SelectModelImpl(null, options));
086: select.setValueEncoder(new StringValueEncoder());
087: select.setValue("barney");
088:
089: MarkupWriter writer = new MarkupWriterImpl(
090: new XMLMarkupModel(), null);
091:
092: writer.element("select");
093:
094: select.options(writer);
095:
096: writer.end();
097:
098: assertEquals(writer.toString(), read("just_options.html"));
099: }
100:
101: @Test
102: public void option_attributes() throws Exception {
103: // Extra cast needed for Sun compiler, not Eclipse compiler.
104:
105: List<OptionModel> options = Arrays
106: .asList((OptionModel) new OptionModelImpl("Fred",
107: false, "fred", "class", "pixie"));
108:
109: Select select = new Select();
110:
111: select.setModel(new SelectModelImpl(null, options));
112: select.setValueEncoder(new StringValueEncoder());
113: select.setValue("barney");
114:
115: MarkupWriter writer = new MarkupWriterImpl(
116: new XMLMarkupModel(), null);
117:
118: writer.element("select");
119:
120: select.options(writer);
121:
122: writer.end();
123:
124: assertEquals(writer.toString(), read("option_attributes.html"));
125: }
126:
127: @Test
128: public void disabled_option() throws Exception {
129: // Extra cast needed for Sun compiler, not Eclipse compiler.
130:
131: List<OptionModel> options = CollectionFactory
132: .newList((OptionModel) new OptionModelImpl("Fred",
133: true, "fred", "class", "pixie"));
134:
135: Select select = new Select();
136:
137: select.setModel(new SelectModelImpl(null, options));
138: select.setValueEncoder(new StringValueEncoder());
139: select.setValue("barney");
140:
141: MarkupWriter writer = new MarkupWriterImpl(
142: new XMLMarkupModel(), null);
143:
144: writer.element("select");
145:
146: select.options(writer);
147:
148: writer.end();
149:
150: assertEquals(writer.toString(), read("disabled_option.html"));
151:
152: }
153:
154: @Test
155: public void option_groups() throws Exception {
156: OptionGroupModel husbands = new OptionGroupModelImpl(
157: "Husbands", false, TapestryInternalUtils
158: .toOptionModels("Fred,Barney"));
159: OptionGroupModel wives = new OptionGroupModelImpl("Wives",
160: true, TapestryInternalUtils
161: .toOptionModels("Wilma,Betty"));
162: List<OptionGroupModel> groupModels = CollectionFactory.newList(
163: husbands, wives);
164:
165: Select select = new Select();
166:
167: select.setModel(new SelectModelImpl(groupModels, null));
168: select.setValueEncoder(new StringValueEncoder());
169: select.setValue("Fred");
170:
171: MarkupWriter writer = new MarkupWriterImpl(
172: new XMLMarkupModel(), null);
173:
174: writer.element("select");
175:
176: select.options(writer);
177:
178: writer.end();
179:
180: assertEquals(writer.toString(), read("option_groups.html"));
181: }
182:
183: @Test
184: public void option_groups_precede_ungroup_options()
185: throws Exception {
186: OptionGroupModel husbands = new OptionGroupModelImpl(
187: "Husbands", false, TapestryInternalUtils
188: .toOptionModels("Fred,Barney"));
189:
190: Select select = new Select();
191:
192: select.setModel(new SelectModelImpl(Collections
193: .singletonList(husbands), TapestryInternalUtils
194: .toOptionModels("Wilma,Betty")));
195: select.setValueEncoder(new StringValueEncoder());
196: select.setValue("Fred");
197:
198: MarkupWriter writer = new MarkupWriterImpl(
199: new XMLMarkupModel(), null);
200:
201: writer.element("select");
202:
203: select.options(writer);
204:
205: writer.end();
206:
207: assertEquals(writer.toString(),
208: read("option_groups_precede_ungroup_options.html"));
209: }
210:
211: @Test
212: public void option_group_attributes() throws Exception {
213: Map<String, String> attributes = Collections.singletonMap(
214: "class", "pixie");
215:
216: OptionGroupModel husbands = new OptionGroupModelImpl(
217: "Husbands", false, TapestryInternalUtils
218: .toOptionModels("Fred,Barney"), attributes);
219:
220: Select select = new Select();
221:
222: select.setModel(new SelectModelImpl(Collections
223: .singletonList(husbands), null));
224: select.setValueEncoder(new StringValueEncoder());
225: select.setValue("Fred");
226:
227: MarkupWriter writer = new MarkupWriterImpl(
228: new XMLMarkupModel(), null);
229:
230: writer.element("select");
231:
232: select.options(writer);
233:
234: writer.end();
235:
236: assertEquals(writer.toString(),
237: read("option_group_attributes.html"));
238: }
239: }
|