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.kew.xml.export; 017 018 import org.jdom.Document; 019 import org.junit.Test; 020 import org.kuali.rice.core.api.CoreApiServiceLocator; 021 import org.kuali.rice.coreservice.api.style.Style; 022 import org.kuali.rice.core.api.util.xml.XmlHelper; 023 import org.kuali.rice.core.api.util.xml.XmlJotter; 024 import org.kuali.rice.coreservice.impl.style.StyleBo; 025 import org.kuali.rice.coreservice.impl.style.StyleExportDataSet; 026 import org.kuali.rice.coreservice.api.CoreServiceApiServiceLocator; 027 import org.kuali.rice.test.BaselineTestCase; 028 029 import java.io.BufferedInputStream; 030 import java.io.ByteArrayInputStream; 031 import java.io.StringReader; 032 import java.util.Iterator; 033 import java.util.List; 034 035 import static org.junit.Assert.*; 036 037 038 /** 039 * Tests exporting Styles 040 * @author Kuali Rice Team (rice.collab@kuali.org) 041 */ 042 @BaselineTestCase.BaselineMode(BaselineTestCase.Mode.NONE) 043 public class StyleXmlExporterTest extends XmlExporterTestCase { 044 045 public void testExportActionConfig() throws Exception { 046 // action config has no help entries 047 } 048 049 public void testExportEngineConfig() throws Exception { 050 // engine config has no help entries 051 } 052 053 /** 054 * This will test exporting some styles 055 */ 056 @Test public void testExport() throws Exception { 057 loadXmlFile("StyleExportConfig.xml"); 058 assertExport(); 059 } 060 061 protected void assertExport() throws Exception { 062 List<String> oldStyleNames = CoreServiceApiServiceLocator.getStyleService().getAllStyleNames(); 063 064 StyleExportDataSet dataSet = new StyleExportDataSet(); 065 for (String oldStyleName : oldStyleNames) { 066 Style oldStyle = CoreServiceApiServiceLocator.getStyleService().getStyle(oldStyleName); 067 assertNotNull(oldStyle); 068 dataSet.getStyles().add(StyleBo.from(oldStyle)); 069 } 070 071 byte[] xmlBytes = CoreApiServiceLocator.getXmlExporterService().export(dataSet.createExportDataSet()); 072 assertTrue("XML should be non empty.", xmlBytes != null && xmlBytes.length > 0); 073 // quick check to verify that not only is the XML non-empty, but that it might actually contain an attempt at an exported style 074 // (otherwise the XML could not contain any styles, and the test would pass with a false positive even though the export never 075 // exported anything) 076 assertTrue("XML does not contain exported style", new String(xmlBytes).contains("<styles ")); 077 assertTrue("XML does not contain exported style", new String(xmlBytes).contains("<style name=\"an_arbitrary_style\">")); 078 079 // import the exported xml 080 loadXmlStream(new BufferedInputStream(new ByteArrayInputStream(xmlBytes))); 081 082 List<String> newStyleNames = CoreServiceApiServiceLocator.getStyleService().getAllStyleNames(); 083 assertEquals("Should have same number of old and new Styles.", oldStyleNames.size(), newStyleNames.size()); 084 for (Iterator<String> iterator = oldStyleNames.iterator(); iterator.hasNext();) { 085 String oldStyleName = iterator.next(); 086 Style oldStyleEntry = CoreServiceApiServiceLocator.getStyleService().getStyle(oldStyleName); 087 assertNotNull(oldStyleEntry); 088 boolean foundAttribute = false; 089 for (String newStyleName : newStyleNames) { 090 if (oldStyleEntry.getName().equals(newStyleName)) { 091 Style newStyleEntry = CoreServiceApiServiceLocator.getStyleService().getStyle(newStyleName); 092 assertNotNull(newStyleEntry); 093 // NOTE: xmlns="http://www.w3.org/1999/xhtml" must be set on elements that contain HTML; exporter will automatically append an empty 094 // attribute, which will result in trivially unmatching content 095 assertEquals(canonicalize(oldStyleEntry.getXmlContent()), 096 canonicalize(newStyleEntry.getXmlContent())); 097 foundAttribute = true; 098 } 099 } 100 assertTrue("Could not locate the new style for name " + oldStyleEntry.getName(), foundAttribute); 101 } 102 } 103 104 private String canonicalize(String xml) throws Exception { 105 Document document = XmlHelper.buildJDocument(new StringReader(xml)); 106 return XmlJotter.jotDocument(document); 107 } 108 }