| /* |
| * $Id$ |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 org.apache.tiles.definition.pattern; |
| |
| import static org.junit.Assert.*; |
| |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.apache.tiles.Attribute; |
| import org.apache.tiles.Definition; |
| import org.apache.tiles.Expression; |
| import org.apache.tiles.ListAttribute; |
| import org.junit.Test; |
| |
| /** |
| * Tests {@link PatternUtil}. |
| * |
| * @version $Rev$ $Date$ |
| * @since 2.2.0 |
| */ |
| public class PatternUtilTest { |
| |
| /** |
| * The size of the list in the main list attribute. |
| */ |
| private static final int LIST_ATTRIBUTE_SIZE = 3; |
| |
| /** |
| * Test method for |
| * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}. |
| */ |
| @Test |
| public void testReplacePlaceholders() { |
| Map<String, Attribute> attributes = new HashMap<String, Attribute>(); |
| attributes.put("attrib1", new Attribute("value{2}")); |
| attributes.put("attrib2", new Attribute("value{2}{3}")); |
| attributes.put("attrib3", new Attribute(null, Expression |
| .createExpression("expr{1}", "EL"), null, null)); |
| Definition definition = new Definition("definitionName", new Attribute( |
| "template{1}"), attributes); |
| definition.setExtends("{2}ext"); |
| definition.setPreparer("{3}prep"); |
| Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", |
| "value0", "value1", "value2", "value3"); |
| assertEquals("nudef", nudef.getName()); |
| assertEquals("value2ext", nudef.getExtends()); |
| assertEquals("value3prep", nudef.getPreparer()); |
| Attribute attribute = nudef.getTemplateAttribute(); |
| assertEquals("templatevalue1", attribute.getValue()); |
| attribute = nudef.getAttribute("attrib1"); |
| assertEquals("valuevalue2", attribute.getValue()); |
| attribute = nudef.getAttribute("attrib2"); |
| assertEquals("valuevalue2value3", attribute.getValue()); |
| attribute = nudef.getAttribute("attrib3"); |
| assertEquals("exprvalue1", attribute.getExpressionObject().getExpression()); |
| } |
| |
| /** |
| * Test method for |
| * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}. |
| */ |
| @Test |
| public void testReplacePlaceholdersNullTemplate() { |
| Map<String, Attribute> attributes = new HashMap<String, Attribute>(); |
| attributes.put("attrib1", new Attribute("value{2}")); |
| attributes.put("attrib2", new Attribute("value{2}{3}")); |
| Definition definition = new Definition("definitionName", (Attribute) null, attributes); |
| Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", |
| "value0", "value1", "value2", "value3"); |
| assertEquals("nudef", nudef.getName()); |
| assertNull(nudef.getTemplateAttribute()); |
| Attribute attribute = nudef.getAttribute("attrib1"); |
| assertEquals("valuevalue2", attribute.getValue()); |
| attribute = nudef.getAttribute("attrib2"); |
| assertEquals("valuevalue2value3", attribute.getValue()); |
| } |
| |
| /** |
| * Test method for |
| * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}. |
| */ |
| @Test |
| public void testReplacePlaceholdersCascadedAttributes() { |
| Definition definition = new Definition("definitionName", new Attribute( |
| "template{1}"), null); |
| definition.putAttribute("attrib1", new Attribute("value{2}"), true); |
| definition.putAttribute("attrib2", new Attribute("value{2}{3}"), true); |
| Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", |
| "value0", "value1", "value2", "value3"); |
| assertEquals("nudef", nudef.getName()); |
| Attribute attribute = nudef.getTemplateAttribute(); |
| assertEquals("templatevalue1", attribute.getValue()); |
| attribute = nudef.getAttribute("attrib1"); |
| assertEquals("valuevalue2", attribute.getValue()); |
| attribute = nudef.getAttribute("attrib2"); |
| assertEquals("valuevalue2value3", attribute.getValue()); |
| } |
| |
| /** |
| * Test method for |
| * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}. |
| */ |
| @Test |
| public void testReplacePlaceholdersListAttribute() { |
| Map<String, Attribute> attributes = new HashMap<String, Attribute>(); |
| ListAttribute listAttribute = new ListAttribute(); |
| ListAttribute internalListAttribute = new ListAttribute(); |
| listAttribute.setInherit(true); |
| attributes.put("myList", listAttribute); |
| listAttribute.add(new Attribute("value{2}")); |
| listAttribute.add(new Attribute("value{2}{3}")); |
| listAttribute.add(internalListAttribute); |
| internalListAttribute.add(new Attribute("secondvalue{2}")); |
| internalListAttribute.add(new Attribute("secondvalue{2}{3}")); |
| Definition definition = new Definition("definitionName", new Attribute( |
| "template{1}"), attributes); |
| Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", |
| "value0", "value1", "value2", "value3"); |
| assertEquals("nudef", nudef.getName()); |
| Attribute attribute = nudef.getTemplateAttribute(); |
| assertEquals("templatevalue1", attribute.getValue()); |
| ListAttribute nuListAttribute = (ListAttribute) nudef.getAttribute("myList"); |
| assertTrue(nuListAttribute.isInherit()); |
| List<Attribute> list = nuListAttribute.getValue(); |
| assertEquals(LIST_ATTRIBUTE_SIZE, list.size()); |
| attribute = list.get(0); |
| assertEquals("valuevalue2", attribute.getValue()); |
| attribute = list.get(1); |
| assertEquals("valuevalue2value3", attribute.getValue()); |
| ListAttribute evaluatedListAttribute = (ListAttribute) list.get(2); |
| assertFalse(evaluatedListAttribute.isInherit()); |
| list = evaluatedListAttribute.getValue(); |
| assertEquals(2, list.size()); |
| attribute = list.get(0); |
| assertEquals("secondvaluevalue2", attribute.getValue()); |
| attribute = list.get(1); |
| assertEquals("secondvaluevalue2value3", attribute.getValue()); |
| } |
| |
| |
| /** |
| * Tests {@link PatternUtil#createExtractedMap(Map, java.util.Set)}. |
| */ |
| @Test |
| public void testCreateExtractedMap() { |
| Map<Integer, String> map = new HashMap<Integer, String>(); |
| map.put(0, "value0"); |
| map.put(1, "value1"); |
| map.put(2, "value2"); |
| Set<Integer> set = new HashSet<Integer>(); |
| set.add(1); |
| set.add(2); |
| Map<Integer, String> extractedMap = PatternUtil.createExtractedMap(map, set); |
| assertEquals(2, extractedMap.size()); |
| assertEquals("value1", extractedMap.get(1)); |
| assertEquals("value2", extractedMap.get(2)); |
| } |
| |
| /** |
| * Test method for |
| * {@link PatternUtil#replacePlaceholders(Definition, String, Object[])}. |
| * See TILES-502 |
| */ |
| @Test |
| public void testReplacePlaceholdersEL() { |
| Map<String, Attribute> attributes = new HashMap<String, Attribute>(); |
| attributes.put("something", new Attribute("some-{1}-${requestScope.someVariable}.jsp")); |
| Definition definition = new Definition("definitionName", new Attribute( |
| "template"), attributes); |
| Definition nudef = PatternUtil.replacePlaceholders(definition, "nudef", |
| "value0", "value1", "value2", "value3"); |
| assertEquals("nudef", nudef.getName()); |
| Attribute attribute = nudef.getAttribute("something"); |
| assertEquals("some-value1-${requestScope.someVariable}.jsp", attribute.getValue()); |
| } |
| } |