/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.resolver.locale; import java.util.Locale; import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import com.enonic.cms.framework.xml.XMLDocument; import com.enonic.cms.framework.xml.XMLDocumentImpl; import com.enonic.cms.core.resolver.ResolverContext; import com.enonic.cms.core.resolver.ScriptResolverResult; import com.enonic.cms.core.resolver.locale.mock.LocaleResolverInputXMLCreatorMock; import com.enonic.cms.core.resource.ResourceFile; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.junit.Assert.*; /** * Created by rmy - Date: Aug 25, 2009 */ public class LocaleXsltScriptResolverTest { private MockHttpServletRequest request; private LocaleXsltScriptResolver localeXsltScriptResolver; private ResourceFile resourceFile; private LocaleResolverInputXMLCreatorMock localeResolverInputInputXMLCreator; @Before public void setUp() { resourceFile = createMock( ResourceFile.class ); request = new MockHttpServletRequest(); request.setRequestURI( "/site/0/Frontpage" ); localeXsltScriptResolver = new LocaleXsltScriptResolver(); } // @Test public void testScriptResolvedLocale() throws Exception { setupResourceAndXsltManager(); String testLanguageCode = "sz"; localeResolverInputInputXMLCreator = new LocaleResolverInputXMLCreatorMock( testLanguageCode ); localeXsltScriptResolver.setResolverInputXMLCreator( localeResolverInputInputXMLCreator ); ResolverContext context = new ResolverContext( null, null ); ScriptResolverResult result = null; try { result = localeXsltScriptResolver.resolveValue( context, resourceFile ); } catch ( Exception e ) { e.printStackTrace(); fail( "XSLT-processing failed, probably an error in script" ); } Locale locale = (Locale) result.getResolverReturnValues().get( LocaleXsltScriptResolver.LOCALE_RETURN_VALUE_KEY ); assertNotNull( "Locale should be set in script", locale ); assertEquals( "Locale should be resolved from script", testLanguageCode, locale.getLanguage() ); } private void setupResourceAndXsltManager() throws Exception { expect( resourceFile.getDataAsXml() ).andReturn( createXMLDocument() ).anyTimes(); expect( resourceFile.getPath() ).andReturn( "scriptpath" ).anyTimes(); replay( resourceFile ); /* final XsltProcessorManagerImpl xsltProcessorManager = new XsltProcessorManagerImpl(); this.localeXsltScriptResolver.setXsltProcessorManager( xsltProcessorManager ); */ } private XMLDocument createXMLDocument() { XMLDocument xmlDoc = new XMLDocumentImpl( createLocaleResolverXslt() ); return xmlDoc; } private String createLocaleResolverXslt() { StringBuffer buffer = new StringBuffer(); buffer.append( "<?xml version=\"1.0\" encoding=\"utf-8\"?>" ); buffer.append( "<xsl:stylesheet exclude-result-prefixes=\"xs portal\" version=\"2.0\" xmlns=\"http://www.w3.org/1999/xhtml\"" ); buffer.append( " xmlns:portal=\"http://www.enonic.com/cms/xslt/portal\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"" ); buffer.append( " xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" ); buffer.append( "<xsl:output indent=\"no\" media-type=\"text\" method=\"text\" omit-xml-declaration=\"yes\"/>" ); buffer.append( "<xsl:template match=\"/\">" ); buffer.append( " <xsl:variable name=\"userLocale\" select=\"/context/user/block/locale\"/>" ); buffer.append( " <xsl:choose>" ); buffer.append( " <xsl:when test=\"$userLocale != ''\"><xsl:value-of select=\"$userLocale\"/></xsl:when>" ); buffer.append( " <xsl:otherwise>default</xsl:otherwise>" ); buffer.append( " </xsl:choose>" ); buffer.append( "</xsl:template>" ); buffer.append( "</xsl:stylesheet>" ); return buffer.toString(); } }