/* * � Copyright IBM Corp. 2013 * * Licensed 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. */ /* * Author: Maire Kehoe (mkehoe@ie.ibm.com) * Date: 30 May 2011 * DisplayNameDuplicateTest.java */ package com.ibm.xsp.test.framework.registry.annotate; import java.util.HashMap; import java.util.Map; import com.ibm.commons.util.StringUtil; import com.ibm.xsp.page.translator.JavaUtil; import com.ibm.xsp.registry.FacesDefinition; import com.ibm.xsp.registry.FacesExtensibleNode; import com.ibm.xsp.registry.FacesProperty; import com.ibm.xsp.registry.FacesSharableRegistry; import com.ibm.xsp.registry.RegistryUtil; import com.ibm.xsp.registry.parse.ParseUtil; import com.ibm.xsp.test.framework.AbstractXspTest; import com.ibm.xsp.test.framework.TestProject; import com.ibm.xsp.test.framework.XspTestUtil; import com.ibm.xsp.test.framework.registry.annotate.SpellCheckTest.DescriptionDisplayNameAnnotater; import com.ibm.xsp.test.framework.setup.SkipFileContent; /** * * @author Maire Kehoe (mkehoe@ie.ibm.com) */ public class DisplayNameDuplicateTest extends AbstractXspTest { @Override public String getDescription() { return "to prevent copy/paste errors when copy a <property> within a descr, " + "or when copying a <component> or <complex-type>"; } public void testDisplayNameDuplicate() throws Exception { FacesSharableRegistry reg = TestProject.createRegistryWithAnnotater( this, new DescriptionDisplayNameAnnotater()); String fails = ""; Map<String, FacesDefinition> textToDef = new HashMap<String, FacesDefinition>(); Map<String, FacesProperty> textToProp = new HashMap<String, FacesProperty>(); for (FacesDefinition def : TestProject.getLibDefinitions(reg, this)) { { String displayName = (String) def.getExtension("display-name"); String description = (String) def.getExtension("description"); boolean sameDescrDisplayName = !StringUtil.isEmpty(displayName) && StringUtil.equals(description, displayName); if( sameDescrDisplayName ){ fails += def.getFile().getFilePath()+ " "+ ParseUtil.getTagRef(def) + " Same def description and display-name: " +displayName+"\n"; } FacesDefinition existingNameDef = null; if( ! StringUtil.isEmpty(displayName) ){ existingNameDef = textToDef.put(displayName, def); } FacesDefinition existingDescrDef = null; if( !StringUtil.isEmpty(description) && !sameDescrDisplayName ){ existingDescrDef = textToDef.put(description, def); } if( null != existingNameDef || null != existingDescrDef){ String existing = ""; if( null != existingNameDef ){ existing += existingNameDef.getFile().getFilePath()+" "+ParseUtil.getTagRef(existingNameDef) +getNameAndDescr(existingNameDef); } if( null != existingDescrDef && existingDescrDef != existingNameDef){ if( existing.length() > 0 ){ existing += " "; } existing += existingDescrDef.getFile().getFilePath()+" "+ParseUtil.getTagRef(existingDescrDef) +getNameAndDescr(existingDescrDef); } fails += def.getFile().getFilePath() + " " + ParseUtil.getTagRef(def) + " Duplicate def description/display-name. Existing: " + existing+ "\n"; } } textToProp.clear(); for (FacesProperty prop : RegistryUtil.getProperties(def, def.getDefinedInlinePropertyNames())) { String displayName = (String) prop.getExtension("display-name"); String description = (String) prop.getExtension("description"); boolean sameDescrDisplayName = !StringUtil.isEmpty(displayName) && StringUtil.equals(description, displayName); if( sameDescrDisplayName ){ fails += def.getFile().getFilePath()+ " "+ ParseUtil.getTagRef(def)+" "+prop.getName() + " Same prop description and display-name: " +displayName+"\n"; } FacesProperty existingNameProp = null; if( !StringUtil.isEmpty(displayName) ){ existingNameProp = textToProp.put(displayName, prop); } FacesProperty existingDescrProp = null; if (!StringUtil.isEmpty(description) && !sameDescrDisplayName) { existingDescrProp = textToProp.put(description, prop); } if( null != existingNameProp || null != existingDescrProp ){ String existing = ""; if( null != existingNameProp ){ existing += existingNameProp.getName() + getNameAndDescr(existingNameProp); } if( null != existingDescrProp && existingDescrProp != existingNameProp ){ if( existing.length() > 0 ){ existing += " "; } existing += existingDescrProp.getName() + getNameAndDescr(existingDescrProp); } fails += def.getFile().getFilePath() + " " + ParseUtil.getTagRef(def) +" " + prop.getName() + " Duplicate prop description/display-name. Existing: " + existing+ "\n"; } } } fails = XspTestUtil.removeMultilineFailSkips(fails, SkipFileContent.concatSkips(getSkips(), this, "testDisplayNameDuplicate")); if( fails.length() > 0 ){ fail( XspTestUtil.getMultilineFailMessage(fails)); } } /** * @param existingNameProp * @return */ private String getNameAndDescr(FacesExtensibleNode existingNameProp) { return ("(" + existingNameProp.getExtension("display-name") + "|" + JavaUtil.toJavaString((String)existingNameProp.getExtension("description")) + ")"); } protected String[] getSkips(){ return StringUtil.EMPTY_STRING_ARRAY; } }