/*
* 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.resource;
import java.util.Locale;
import org.apache.wicket.request.Url;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.wicket.request.resource.ResourceReference.UrlAttributes;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
public class ResourceUtilTest extends Assert
{
@Test
public void decodeResourceReferenceAttributesWithString() throws Exception
{
String urlParameter = "en_GB-style-variation";
UrlAttributes attributes = ResourceUtil.decodeResourceReferenceAttributes(urlParameter);
assertEquals(Locale.UK, attributes.getLocale());
assertEquals("style", attributes.getStyle());
assertEquals("variation", attributes.getVariation());
attributes = ResourceUtil.decodeResourceReferenceAttributes("it_IT");
assertEquals(Locale.ITALY, attributes.getLocale());
assertNull(attributes.getStyle());
assertNull(attributes.getVariation());
attributes = ResourceUtil.decodeResourceReferenceAttributes("-style-variation");
assertNull(attributes.getLocale());
assertEquals("style", attributes.getStyle());
assertEquals("variation", attributes.getVariation());
attributes = ResourceUtil.decodeResourceReferenceAttributes("--variation");
assertNull(attributes.getLocale());
assertNull(attributes.getStyle());
assertEquals("variation", attributes.getVariation());
attributes = ResourceUtil.decodeResourceReferenceAttributes("-style");
assertNull(attributes.getLocale());
assertEquals("style", attributes.getStyle());
assertNull(attributes.getVariation());
}
@Test
public void decodeResourceReferenceAttributesWithUrl() throws Exception
{
Url url = Url.parse("www.funny.url/?param1=value1");
UrlAttributes attributes = ResourceUtil.decodeResourceReferenceAttributes(url);
assertEquals(new UrlAttributes(null, null, null), attributes);
url = Url.parse("www.funny.url/?de_DE");
attributes = ResourceUtil.decodeResourceReferenceAttributes(url);
assertEquals(Locale.GERMANY, attributes.getLocale());
assertNull(attributes.getStyle());
assertNull(attributes.getVariation());
url = Url.parse("www.funny.url/?-style");
attributes = ResourceUtil.decodeResourceReferenceAttributes(url);
assertNull(attributes.getLocale());
assertEquals("style", attributes.getStyle());
assertNull(attributes.getVariation());
}
@Test
public void encodeResourceReferenceAttributes() throws Exception
{
UrlAttributes attributes = new UrlAttributes(null, null, null);
assertNull(ResourceUtil.encodeResourceReferenceAttributes(attributes));
attributes = new UrlAttributes(Locale.CANADA_FRENCH, "style", "variation");
assertEquals("fr_CA-style-variation", ResourceUtil.encodeResourceReferenceAttributes(attributes));
attributes = new UrlAttributes(null, null, "variation");
assertEquals("--variation", ResourceUtil.encodeResourceReferenceAttributes(attributes));
}
@Test
public void encodeResourceReferenceAttributesWithResource() throws Exception
{
ResourceReference resourceReference = Mockito.mock(ResourceReference.class);
//test with all null attributes
UrlAttributes attributes = new UrlAttributes(null, null, null);
String urlString = "www.funny.url";
Url url = Url.parse(urlString);
Mockito.when(resourceReference.getUrlAttributes()).thenReturn(attributes);
ResourceUtil.encodeResourceReferenceAttributes(url, resourceReference);
assertEquals(urlString, url.toString());
Mockito.reset(resourceReference);
//test with locale, style and variation
attributes = new UrlAttributes(Locale.CANADA_FRENCH, "style", "variation");
Mockito.when(resourceReference.getUrlAttributes()).thenReturn(attributes);
ResourceUtil.encodeResourceReferenceAttributes(url, resourceReference);
assertEquals(urlString + "?fr_CA-style-variation", url.toString());
Mockito.reset(resourceReference);
//test with just variation
attributes = new UrlAttributes(null, null, "variation");
url = Url.parse(urlString);
Mockito.when(resourceReference.getUrlAttributes()).thenReturn(attributes);
ResourceUtil.encodeResourceReferenceAttributes(url, resourceReference);
assertEquals(urlString + "?--variation", url.toString());
}
}