/*
*
Copyright (c) 1998-2017 iText Group NV
* Ackermann, et al.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3
* as published by the Free Software Foundation with the addition of the
* following permission added to Section 15 as permitted in Section 7(a):
* FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY
* ITEXT GROUP. ITEXT GROUP DISCLAIMS THE WARRANTY OF NON INFRINGEMENT
* OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details. You should have received a copy of the GNU Affero General Public License along with this program; if not,
* see http://www.gnu.org/licenses or write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA, 02110-1301 USA, or download the license from the following URL: http://itextpdf.com/terms-of-use/
*
* The interactive user interfaces in modified source and object code versions of this program must display Appropriate
* Legal Notices, as required under Section 5 of the GNU Affero General Public License.
*
* In accordance with Section 7(b) of the GNU Affero General Public License, a covered work must retain the producer
* line in every PDF that is created or manipulated using iText.
*
* You can be released from the requirements of the license by purchasing a commercial license. Buying such a license is
* mandatory as soon as you develop commercial activities involving the iText software without disclosing the source
* code of your own applications. These activities include: offering paid services to customers as an ASP, serving PDFs
* on the fly in a web application, shipping iText with a closed source product.
*
* For more information, please contact iText Software Corp. at this address: sales@itextpdf.com
*/
package com.itextpdf.tool.xml.css;
import java.util.Map;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import com.itextpdf.text.log.LoggerFactory;
import com.itextpdf.text.log.SysoLogger;
import com.itextpdf.tool.xml.Tag;
/**
* @author redlab_b
*
*/
public class CssUtilsTest {
private static final int MAX = 10000;
private CssUtils css;
private String string;
@Before
public void setup() {
LoggerFactory.getInstance().setLogger(new SysoLogger(3));
css = CssUtils.getInstance();
string = " een twee drie vier een twee drie vier";
}
@Test
public void calculateHorizontalMargin() {
Tag t = new Tag(string);
t.getCSS().put("margin-left", "15pt");
t.getCSS().put("margin-right", "15pt");
Assert.assertEquals(30, css.getLeftAndRightMargin(t, 0f), 0);
}
@Test
public void validateMetricValue() {
Assert.assertEquals(true, css.isMetricValue("px"));
Assert.assertEquals(true, css.isMetricValue("in"));
Assert.assertEquals(true, css.isMetricValue("cm"));
Assert.assertEquals(true, css.isMetricValue("mm"));
Assert.assertEquals(true, css.isMetricValue("pc"));
Assert.assertEquals(false, css.isMetricValue("em"));
Assert.assertEquals(false, css.isMetricValue("ex"));
Assert.assertEquals(true, css.isMetricValue("pt"));
Assert.assertEquals(true, css.isMetricValue("inch"));
Assert.assertEquals(false, css.isMetricValue("m"));
}
@Test
public void validateNumericValue() {
Assert.assertEquals(true, css.isNumericValue("1"));
Assert.assertEquals(true, css.isNumericValue("12"));
Assert.assertEquals(true, css.isNumericValue("1.2"));
Assert.assertEquals(true, css.isNumericValue(".12"));
Assert.assertEquals(false, css.isNumericValue("12f"));
Assert.assertEquals(false, css.isNumericValue("f1.2"));
Assert.assertEquals(false, css.isNumericValue(".12f"));
}
@Test
public void parseLength() {
Assert.assertEquals(9, css.parsePxInCmMmPcToPt("12"), 0);
Assert.assertEquals(576, css.parsePxInCmMmPcToPt("8inch"), 0);
Assert.assertEquals(576, css.parsePxInCmMmPcToPt("8", CSS.Value.IN), 0);
}
@Test
public void splitFont() {
Map<String, String> processFont = css.processFont("bold italic 16pt/3px Verdana");
Assert.assertEquals("bold", processFont.get("font-weight"));
Assert.assertEquals("italic", processFont.get("font-style"));
Assert.assertEquals("16pt", processFont.get("font-size"));
Assert.assertEquals("3px", processFont.get("line-height"));
Assert.assertEquals("Verdana", processFont.get("font-family"));
}
@Test
public void splitBackgroundOne() {
Map<String, String> background = css.processBackground("#00ff00 url('smiley.gif') no-repeat fixed center top");
Assert.assertEquals("#00ff00", background.get("background-color"));
Assert.assertEquals("url('smiley.gif')", background.get("background-image"));
Assert.assertEquals("no-repeat", background.get("background-repeat"));
Assert.assertEquals("fixed", background.get("background-attachment"));
Assert.assertEquals("top center", background.get("background-position"));
}
@Test
public void splitBackgroundTwo() {
Map<String, String> background = css
.processBackground("rgdbq(150, 90, 60) url'smiley.gif') repeat-x scroll 20 60%");
Assert.assertEquals(null, background.get("background-color"));
Assert.assertEquals(null, background.get("background-image"));
Assert.assertEquals("repeat-x", background.get("background-repeat"));
Assert.assertEquals("scroll", background.get("background-attachment"));
Assert.assertEquals("60% 20", background.get("background-position"));
}
@Test
public void splitBackgroundThree() {
Map<String, String> background = css.processBackground("DarkOliveGreen fixed center");
Assert.assertEquals("DarkOliveGreen", background.get("background-color"));
Assert.assertEquals(null, background.get("background-image"));
Assert.assertEquals(null, background.get("background-repeat"));
Assert.assertEquals("fixed", background.get("background-attachment"));
Assert.assertEquals("center", background.get("background-position"));
}
@Test
public void replaceDoubleSpaces() {
String stripDoubleSpacesAndTrim = css.stripDoubleSpacesAndTrim(string);
Assert.assertTrue("double spaces [ ] detected", !(stripDoubleSpacesAndTrim.contains(" ")));
}
@Test
public void parse1BoxValuesTest() {
String box = "2px";
Map<String, String> values = css.parseBoxValues(box, "pre-", "-post");
validateKeys(values);
Assert.assertEquals(box, values.get("pre-right-post"));
Assert.assertEquals(box, values.get("pre-left-post"));
Assert.assertEquals(box, values.get("pre-bottom-post"));
Assert.assertEquals(box, values.get("pre-top-post"));
}
/**
* @param values
*/
private void validateKeys(final Map<String, String> values) {
Assert.assertTrue("key not found top", values.containsKey("pre-top-post"));
Assert.assertTrue("key not found bottom", values.containsKey("pre-bottom-post"));
Assert.assertTrue("key not found left", values.containsKey("pre-left-post"));
Assert.assertTrue("key not found right", values.containsKey("pre-right-post"));
}
@Test
public void parse2BoxValuesTest() {
String box = "2px 5px";
Map<String, String> values = css.parseBoxValues(box, "pre-", "-post");
validateKeys(values);
Assert.assertEquals("5px", values.get("pre-right-post"));
Assert.assertEquals("5px", values.get("pre-left-post"));
Assert.assertEquals("2px", values.get("pre-bottom-post"));
Assert.assertEquals("2px", values.get("pre-top-post"));
}
@Test
public void parse3BoxValuesTest() {
String box = "2px 3px 4px";
Map<String, String> values = css.parseBoxValues(box, "pre-", "-post");
validateKeys(values);
Assert.assertEquals("3px", values.get("pre-right-post"));
Assert.assertEquals("3px", values.get("pre-left-post"));
Assert.assertEquals("4px", values.get("pre-bottom-post"));
Assert.assertEquals("2px", values.get("pre-top-post"));
}
@Test
public void parse4BoxValuesTest() {
String box = "2px 3px 4px 5px";
Map<String, String> values = css.parseBoxValues(box, "pre-", "-post");
validateKeys(values);
Assert.assertEquals("3px", values.get("pre-right-post"));
Assert.assertEquals("5px", values.get("pre-left-post"));
Assert.assertEquals("4px", values.get("pre-bottom-post"));
Assert.assertEquals("2px", values.get("pre-top-post"));
}
@Test
public void parseBorder() {
String border = "dashed";
Map<String, String> map = css.parseBorder(border);
Assert.assertTrue(map.containsKey("border-left-style"));
Assert.assertEquals("dashed", map.get("border-left-style"));
Assert.assertTrue(map.containsKey("border-top-style"));
Assert.assertEquals("dashed", map.get("border-top-style"));
Assert.assertTrue(map.containsKey("border-bottom-style"));
Assert.assertEquals("dashed", map.get("border-bottom-style"));
Assert.assertTrue(map.containsKey("border-right-style"));
Assert.assertEquals("dashed", map.get("border-right-style"));
}
@Test
public void parseBorder2() {
String border = "dashed green";
Map<String, String> map = css.parseBorder(border);
Assert.assertTrue(map.containsKey("border-left-style"));
Assert.assertEquals("dashed", map.get("border-left-style"));
Assert.assertTrue(map.containsKey("border-top-style"));
Assert.assertEquals("dashed", map.get("border-top-style"));
Assert.assertTrue(map.containsKey("border-bottom-style"));
Assert.assertEquals("dashed", map.get("border-bottom-style"));
Assert.assertTrue(map.containsKey("border-right-style"));
Assert.assertEquals("dashed", map.get("border-right-style"));
Assert.assertTrue(map.containsKey("border-left-color"));
Assert.assertEquals("green", map.get("border-left-color"));
Assert.assertTrue(map.containsKey("border-top-color"));
Assert.assertEquals("green", map.get("border-top-color"));
Assert.assertTrue(map.containsKey("border-bottom-color"));
Assert.assertEquals("green", map.get("border-bottom-color"));
Assert.assertTrue(map.containsKey("border-right-color"));
Assert.assertEquals("green", map.get("border-right-color"));
}
@Test
public void parseBorder3() {
String border = "1px dashed";
Map<String, String> map = css.parseBorder(border);
Assert.assertTrue(map.containsKey("border-left-style"));
Assert.assertEquals("dashed", map.get("border-left-style"));
Assert.assertTrue(map.containsKey("border-top-style"));
Assert.assertEquals("dashed", map.get("border-top-style"));
Assert.assertTrue(map.containsKey("border-bottom-style"));
Assert.assertEquals("dashed", map.get("border-bottom-style"));
Assert.assertTrue(map.containsKey("border-right-style"));
Assert.assertEquals("dashed", map.get("border-right-style"));
Assert.assertTrue(map.containsKey("border-left-width"));
Assert.assertEquals("1px", map.get("border-left-width"));
Assert.assertTrue(map.containsKey("border-top-width"));
Assert.assertEquals("1px", map.get("border-top-width"));
Assert.assertTrue(map.containsKey("border-bottom-width"));
Assert.assertEquals("1px", map.get("border-bottom-width"));
Assert.assertTrue(map.containsKey("border-right-width"));
Assert.assertEquals("1px", map.get("border-right-width"));
}
@Test
public void parseBorder4() {
String border = "1px dashed green";
Map<String, String> map = css.parseBorder(border);
Assert.assertTrue(map.containsKey("border-left-style"));
Assert.assertEquals("dashed", map.get("border-left-style"));
Assert.assertTrue(map.containsKey("border-top-style"));
Assert.assertEquals("dashed", map.get("border-top-style"));
Assert.assertTrue(map.containsKey("border-bottom-style"));
Assert.assertEquals("dashed", map.get("border-bottom-style"));
Assert.assertTrue(map.containsKey("border-right-style"));
Assert.assertEquals("dashed", map.get("border-right-style"));
Assert.assertTrue(map.containsKey("border-left-color"));
Assert.assertEquals("green", map.get("border-left-color"));
Assert.assertTrue(map.containsKey("border-top-color"));
Assert.assertEquals("green", map.get("border-top-color"));
Assert.assertTrue(map.containsKey("border-bottom-color"));
Assert.assertEquals("green", map.get("border-bottom-color"));
Assert.assertTrue(map.containsKey("border-right-color"));
Assert.assertEquals("green", map.get("border-right-color"));
Assert.assertTrue(map.containsKey("border-left-width"));
Assert.assertEquals("1px", map.get("border-left-width"));
Assert.assertTrue(map.containsKey("border-top-width"));
Assert.assertEquals("1px", map.get("border-top-width"));
Assert.assertTrue(map.containsKey("border-bottom-width"));
Assert.assertEquals("1px", map.get("border-bottom-width"));
Assert.assertTrue(map.containsKey("border-right-width"));
Assert.assertEquals("1px", map.get("border-right-width"));
Assert.assertTrue(map.containsKey("border-left-width"));
Assert.assertEquals("1px", map.get("border-left-width"));
Assert.assertTrue(map.containsKey("border-top-width"));
Assert.assertEquals("1px", map.get("border-top-width"));
Assert.assertTrue(map.containsKey("border-bottom-width"));
Assert.assertEquals("1px", map.get("border-bottom-width"));
Assert.assertTrue(map.containsKey("border-right-width"));
Assert.assertEquals("1px", map.get("border-right-width"));
}
@Test
public void parseUrlSingleQuoted() {
Assert.assertEquals("file.jpg", css.extractUrl("url( 'file.jpg')"));
}
@Test
public void parseUrlDoubleQuoted() {
Assert.assertEquals("file.jpg", css.extractUrl("url ( \"file.jpg\" )"));
}
@Test
public void parseUnparsableUrl() {
Assert.assertEquals("('file.jpg')", css.extractUrl("('file.jpg')"));
}
}