/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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
*
* 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.
*/
package org.apache.wicket.request.resource;
import org.apache.wicket.Application;
import org.apache.wicket.core.util.resource.locator.ResourceStreamLocator;
import org.apache.wicket.request.resource.IResource.Attributes;
import org.apache.wicket.response.ByteArrayResponse;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.tester.WicketTestCase;
import org.junit.Before;
import org.junit.Test;
import java.util.Locale;
/**
* Testcases for minified aware resources.
* There is a logic in PackageResourceReference to use a minified version of a resource
* if there is such.
*
* @author papegaaij
*/
public class MinifiedAwareResourceReferenceTest extends WicketTestCase
{
@Before
public void before()
{
tester.getSession().setLocale(Locale.US);
}
private String renderResource(ResourceReference reference)
{
ByteArrayResponse byteResponse = new ByteArrayResponse();
Attributes mockAttributes = new Attributes(tester.getRequestCycle().getRequest(),
byteResponse);
reference.getResource().respond(mockAttributes);
return new String(byteResponse.getBytes());
}
/**
* Tests is a pre-minified resource is detected
*/
@Test
public void minifiedResourceAvailable()
{
Application.get().getResourceSettings().setUseMinifiedResources(true);
ResourceReference reference = new JavaScriptResourceReference(
MinifiedAwareResourceReferenceTest.class, "b.js");
assertEquals("b.js", reference.getName());
String fileContent = renderResource(reference);
assertEquals("// b.min.js", fileContent.trim());
}
/**
* Tests fallback to normal resource when pre-minified is not available
*/
@Test
public void noMinifiedResourceAvailable()
{
MinCountingResourceStreamLocator locator = new MinCountingResourceStreamLocator();
Application.get().getResourceSettings().setResourceStreamLocator(locator);
Application.get().getResourceSettings().setUseMinifiedResources(true);
ResourceReference reference = new JavaScriptResourceReference(
MinifiedAwareResourceReferenceTest.class, "a.js");
assertEquals("a.js", reference.getName());
String fileContent = renderResource(reference);
assertEquals("//a", fileContent);
// this will try 3 lookups for minified resources: en_US.min, en.min and .min
assertEquals(3, locator.minLocated);
}
private class MinCountingResourceStreamLocator extends ResourceStreamLocator
{
public int minLocated = 0;
@Override
public IResourceStream locate(Class<?> clazz, String path)
{
if (path.contains(".min."))
{
minLocated++;
}
return super.locate(clazz, path);
}
}
}