/**
* Copyright (C) 2014-2017 Philip Helger (www.helger.com)
* philip[at]helger[dot]com
*
* Licensed 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 com.helger.css.utils;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.junit.Test;
import com.helger.commons.url.SMap;
import com.helger.commons.url.SimpleURL;
import com.helger.css.parser.CSSParseHelper;
/**
* Test class for class {@link CSSURLHelper}.
*
* @author Philip Helger
*/
public final class CSSURLHelperTest
{
@Test
public void testGetURLValue ()
{
assertEquals ("a.gif", CSSURLHelper.getURLValue ("url(a.gif)"));
assertEquals ("a.gif", CSSURLHelper.getURLValue ("url('a.gif')"));
assertEquals ("a.gif", CSSURLHelper.getURLValue ("url(\"a.gif\")"));
assertEquals ("a.gif?x=y", CSSURLHelper.getURLValue ("url(\"a.gif?x=y\")"));
// Test quote 'a' character
assertEquals ("a.gif", CSSURLHelper.getURLValue ("url(\"\\a.gif\")"));
// different quote types
assertEquals ("\"a.gif?x=y'", CSSURLHelper.getURLValue ("url(\"a.gif?x=y')"));
// missing trailing ")"
assertNull (CSSURLHelper.getURLValue ("url(a.gif"));
// blank between "url" and "("
assertNull (CSSURLHelper.getURLValue ("url (a.gif)"));
}
@Test
public void testGetAsCSSURL ()
{
for (final String sURL : new String [] { "a.gif",
"\"a.gif\"",
"b\\a.gif",
"\\b\\a\\c.gif",
"'a.gif'",
"'a\".gif'",
"\"a'.gif\"",
"a().gif",
"a\\(\\).gif" })
{
final String sEscaped = CSSURLHelper.getAsCSSURL (sURL, false);
assertEquals (sURL, CSSParseHelper.trimUrl (sEscaped));
}
assertEquals ("url(a.gif)", CSSURLHelper.getAsCSSURL ("a.gif", false));
// By default: single quotes
assertEquals ("url('a.gif')", CSSURLHelper.getAsCSSURL ("a.gif", true));
// Force single quotes
assertEquals ("url('\"a.gif\"')", CSSURLHelper.getAsCSSURL ("\"a.gif\"", true));
// auto-quote
assertEquals ("url('\"a.gif\"')", CSSURLHelper.getAsCSSURL ("\"a.gif\"", false));
// auto-quote
assertEquals ("url('b\\\\a.gif')", CSSURLHelper.getAsCSSURL ("b\\a.gif", false));
// Force double quotes
assertEquals ("url(\"'a.gif'\")", CSSURLHelper.getAsCSSURL ("'a.gif'", true));
// auto-quote
assertEquals ("url(\"'a.gif'\")", CSSURLHelper.getAsCSSURL ("'a.gif'", false));
// Containing char to be escaped
assertEquals ("url('\\'a\".gif\\'')", CSSURLHelper.getAsCSSURL ("'a\".gif'", true));
// auto-quote
assertEquals ("url('\\'a\".gif\\'')", CSSURLHelper.getAsCSSURL ("'a\".gif'", false));
// Containing char to be escaped
assertEquals ("url('\"a\\'.gif\"')", CSSURLHelper.getAsCSSURL ("\"a'.gif\"", true));
// auto-quote
assertEquals ("url('\"a\\'.gif\"')", CSSURLHelper.getAsCSSURL ("\"a'.gif\"", false));
// Escaped brackets
assertEquals ("url('a().gif')", CSSURLHelper.getAsCSSURL ("a().gif", false));
final SimpleURL aURL = new SimpleURL ("a.gif", new SMap ("x", "y"));
assertEquals ("url(a.gif?x=y)", CSSURLHelper.getAsCSSURL (aURL, false));
assertEquals ("url('a.gif?x=y')", CSSURLHelper.getAsCSSURL (aURL, true));
assertEquals ("url()", CSSURLHelper.getAsCSSURL (new SimpleURL (), false));
assertEquals ("url('')", CSSURLHelper.getAsCSSURL (new SimpleURL (), true));
// SimpleURL -> CSS URL -> String -> SimpleURL
assertEquals (aURL, new SimpleURL (CSSURLHelper.getURLValue (CSSURLHelper.getAsCSSURL (aURL, true))));
// empty URL!
assertEquals ("url()", CSSURLHelper.getAsCSSURL ("", false));
assertEquals ("url('')", CSSURLHelper.getAsCSSURL ("", true));
}
}