001 /** 002 * Copyright 2005-2014 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.uif.util; 017 018 import org.junit.Test; 019 import org.kuali.rice.krad.datadictionary.uif.UifDictionaryBeanBase; 020 021 import java.util.HashMap; 022 import java.util.Map; 023 024 import static junit.framework.Assert.*; 025 026 /** 027 * Test class for {@link ExpressionUtils} 028 * 029 * @author Kuali Rice Team (rice.collab@kuali.org) 030 */ 031 public class ExpressionUtilsTest { 032 033 /** 034 * Tests the moving of expressions from the configurable expression graph to the property expressions map 035 * 036 * <p> 037 * Tests include nesting up to two levels and map properties 038 * </p> 039 */ 040 @Test 041 public void testPopulatePropertyExpressionsFromGraph() { 042 Map<String, String> expressionGraph = new HashMap<String, String>(); 043 044 expressionGraph.put("property1", "@{expr1}"); 045 expressionGraph.put("property2", "@{expr2}"); 046 expressionGraph.put("property3['key1']", "@{key1expr}"); 047 expressionGraph.put("property4.property1", "@{nexpr1}"); 048 expressionGraph.put("property4.property4.property3['key2']", "@{nkey2expr}"); 049 050 MockConfigurable configurable = new MockConfigurable(); 051 MockConfigurable configurable2 = new MockConfigurable(); 052 MockConfigurable configurable3 = new MockConfigurable(); 053 054 configurable2.setProperty4(configurable3); 055 configurable.setProperty4(configurable2); 056 057 configurable.setExpressionGraph(expressionGraph); 058 059 ExpressionUtils.populatePropertyExpressionsFromGraph(configurable, false); 060 061 assertEquals("Expression count not correct in root configurable", 3, 062 configurable.getPropertyExpressions().size()); 063 assertEquals("Expression not correct for property1", "@{expr1}", configurable.getPropertyExpression( 064 "property1")); 065 assertEquals("Expression not correct for property2", "@{expr2}", configurable.getPropertyExpression( 066 "property2")); 067 assertEquals("Expression not correct for map property3", "@{key1expr}", configurable.getPropertyExpression( 068 "property3['key1']")); 069 070 assertEquals("Expression count not correct in nested configurable", 1, 071 configurable.getProperty4().getPropertyExpressions().size()); 072 assertEquals("Expression not correct for nested property1", "@{nexpr1}", 073 configurable.getProperty4().getPropertyExpression("property1")); 074 075 assertEquals("Expression count not correct in two level nested configurable", 1, 076 configurable.getProperty4().getProperty4().getPropertyExpressions().size()); 077 assertEquals("Expression not correct for nested map property3", "@{nkey2expr}", 078 configurable.getProperty4().getProperty4().getPropertyExpression("property3['key2']")); 079 } 080 081 /** 082 * Test the population of refresh expression graphs by the expression utility method 083 */ 084 @Test 085 public void testPopulatePropertyExpressionsFromGraph_RefreshGraphs() { 086 Map<String, String> expressionGraph = new HashMap<String, String>(); 087 088 expressionGraph.put("property1", "@{expr1}"); 089 expressionGraph.put("property2", "@{expr2}"); 090 expressionGraph.put("property3['key1']", "@{key1expr}"); 091 expressionGraph.put("property4.property1", "@{nexpr1}"); 092 expressionGraph.put("property4.property4.property3['key2']", "@{nkey2expr}"); 093 094 MockConfigurable configurable = new MockConfigurable(); 095 MockConfigurable configurable2 = new MockConfigurable(); 096 MockConfigurable configurable3 = new MockConfigurable(); 097 098 configurable2.setProperty4(configurable3); 099 configurable.setProperty4(configurable2); 100 101 configurable.setExpressionGraph(expressionGraph); 102 103 ExpressionUtils.populatePropertyExpressionsFromGraph(configurable, true); 104 105 assertEquals("Refresh expression count not correct in root configurable", 5, 106 configurable.getRefreshExpressionGraph().size()); 107 assertEquals("Refresh expression count not correct in nested configurable", 2, 108 configurable.getProperty4().getRefreshExpressionGraph().size()); 109 assertEquals("Refresh expression count not correct in two level nested configurable", 1, 110 configurable.getProperty4().getProperty4().getRefreshExpressionGraph().size()); 111 } 112 113 /** 114 * Mock class used to test expression handling 115 */ 116 public class MockConfigurable extends UifDictionaryBeanBase { 117 private String property1; 118 private String property2; 119 120 private Map<String, String> property3; 121 private MockConfigurable property4; 122 123 public MockConfigurable() { 124 property3 = new HashMap<String, String>(); 125 } 126 127 public String getProperty1() { 128 return property1; 129 } 130 131 public void setProperty1(String property1) { 132 this.property1 = property1; 133 } 134 135 public String getProperty2() { 136 return property2; 137 } 138 139 public void setProperty2(String property2) { 140 this.property2 = property2; 141 } 142 143 public Map<String, String> getProperty3() { 144 return property3; 145 } 146 147 public void setProperty3(Map<String, String> property3) { 148 this.property3 = property3; 149 } 150 151 public MockConfigurable getProperty4() { 152 return property4; 153 } 154 155 public void setProperty4(MockConfigurable property4) { 156 this.property4 = property4; 157 } 158 } 159 }