/**
* Licensed to Apereo under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright ownership. Apereo
* 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 the
* following location:
*
* <p>http://www.apache.org/licenses/LICENSE-2.0
*
* <p>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.apereo.portal.portlets.sitemap;
import java.io.CharArrayWriter;
import java.io.IOException;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apereo.portal.security.xslt.XalanLayoutElementTitleHelper;
import org.apereo.portal.security.xslt.XalanMessageHelper;
import org.apereo.portal.security.xslt.XalanMessageHelperBean;
import org.apereo.portal.url.xml.XsltPortalUrlProvider;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.context.MessageSource;
import org.springframework.context.support.StaticMessageSource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.util.xml.TransformerUtils;
@RunWith(MockitoJUnitRunner.class)
public class SitemapTest {
private static final String STYLESHEET_LOCATION =
"/org/apereo/portal/portlets/sitemap/sitemap.xsl";
private static final String XML_LOCATION = "/org/apereo/portal/portlets/sitemap/layout.xml";
private final Log logger = LogFactory.getLog(getClass());
@InjectMocks private XsltPortalUrlProvider xsltPortalUrlProvider = new XsltPortalUrlProvider();
private boolean useTabGroups = true;
private MessageSource messageSource;
public SitemapTest() {
StaticMessageSource staticMessageSource = new StaticMessageSource();
staticMessageSource.setUseCodeAsDefaultMessage(true);
this.messageSource = staticMessageSource;
}
@Before
public void setup() {
new XalanLayoutElementTitleHelper().setMessageSource(messageSource);
XalanMessageHelperBean messageHelper = new XalanMessageHelperBean();
messageHelper.setMessageSource(messageSource);
new XalanMessageHelper().setMessageHelper(messageHelper);
}
@Test
public void testStylesheetCompilation() throws IOException {
final MockHttpServletRequest request = new MockHttpServletRequest();
Resource resource = new ClassPathResource(STYLESHEET_LOCATION);
Source source =
new StreamSource(resource.getInputStream(), resource.getURI().toASCIIString());
try {
Transformer transformer = TransformerFactory.newInstance().newTransformer(source);
transformer.setParameter(SitemapPortletController.USE_TAB_GROUPS, useTabGroups);
transformer.setParameter(SitemapPortletController.USER_LANG, "en_US");
transformer.setParameter(XsltPortalUrlProvider.CURRENT_REQUEST, request);
transformer.setParameter(
XsltPortalUrlProvider.XSLT_PORTAL_URL_PROVIDER, this.xsltPortalUrlProvider);
Source xmlSource = new StreamSource(new ClassPathResource(XML_LOCATION).getFile());
CharArrayWriter buffer = new CharArrayWriter();
TransformerUtils.enableIndenting(transformer);
transformer.transform(xmlSource, new StreamResult(buffer));
if (logger.isTraceEnabled()) {
logger.trace("XML: " + new String(buffer.toCharArray()));
}
} catch (TransformerConfigurationException e) {
logger.error(e.getMessage(), e);
throw new RuntimeException(e);
} catch (TransformerException e) {
logger.error(e.getMessage(), e);
throw new RuntimeException(e);
}
}
}