package test; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import cz.vutbr.web.css.CSSException; import cz.vutbr.web.css.CSSFactory; import cz.vutbr.web.css.RuleFontFace; import cz.vutbr.web.css.StyleSheet; import cz.vutbr.web.css.TermFactory; import java.io.IOException; import java.util.Date; import java.util.List; import static org.junit.Assert.*; public class FontFaceTest { private static final Logger log = LoggerFactory.getLogger(FontFaceTest.class); public static final TermFactory tf = CSSFactory.getTermFactory(); public static final String TEST_STRING1 = "@font-face {\n" + " font-family: 'MyWebFont';\n" + " src: url('myfont.woff2') format('woff2');\n" + "}"; public static final String TEST_STRING2 = "@font-face {\n" + " font-family: 'MyWebFont';\n" + " src: url('myfont.woff2') format('woff2'),\n" + " url('myfont.woff') format('woff'),\n" + " url('myfont.ttf') format('truetype');\n" + "}"; public static final String TEST_STRING3 = "@font-face {\n" + " font-family: 'MyWebFont';\n" + " src: url('webfont.eot'); /* IE9 Compat Modes */\n" + " src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n" + " url('webfont.woff2') format('woff2'), /* Super Modern Browsers */\n" + " url('webfont.woff') format('woff'), /* Pretty Modern Browsers */\n" + " url('webfont.ttf') format('truetype'), /* Safari, Android, iOS */\n" + " url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */\n" + "}\n" + "" + "body {\n" + " font-family: 'MyWebFont', Fallback, sans-serif;\n" + "}"; public static final String TEST_STRING4 = FilesUtil.readResource("/simple/fontfaces.css"); @BeforeClass public static void init() { log.info("\n\n\n == FontFaceTest test at {} == \n\n\n", new Date()); } @Test public void testSimpleFF() throws IOException, CSSException { log.info("input:\n\n\n" + TEST_STRING1 + "\n\n\n"); StyleSheet ss; ss = CSSFactory.parseString(TEST_STRING1, null); assertEquals("One rule is set", 1, ss.size()); RuleFontFace rule = (RuleFontFace) ss.get(0); assertEquals("Rule contains 2 declarations ", 2, rule.size()); assertEquals("Rule contains font-family declaration", "font-family: 'MyWebFont';\n", rule.get(0).toString()); assertEquals("Rule contains scr declaration", "src: url('myfont.woff2') format('woff2');\n", rule.get(1).toString()); } @Test public void testFFMultiSrc() throws IOException, CSSException { log.info("input:\n\n\n" + TEST_STRING2 + "\n\n\n"); StyleSheet ss; ss = CSSFactory.parseString(TEST_STRING2, null); assertEquals("One rule is set", 1, ss.size()); RuleFontFace rule = (RuleFontFace) ss.get(0); assertEquals("Rule contains 2 declarations ", 2, rule.size()); assertEquals("Rule contains font-family declaration", "font-family: 'MyWebFont';\n", rule.get(0).toString()); assertEquals("Rule contains scr declaration", "src: url('myfont.woff2') format('woff2'), url('myfont.woff') format('woff'), url('myfont.ttf') format('truetype');\n", rule.get(1).toString()); } @Test public void testFFMultiSrc2() throws IOException, CSSException { log.info("input:\n\n\n" + TEST_STRING3 + "\n\n\n"); StyleSheet ss; ss = CSSFactory.parseString(TEST_STRING3, null); assertEquals("Two rules are set", 2, ss.size()); RuleFontFace rule = (RuleFontFace) ss.get(0); assertEquals("Rule contains 3 declarations ", 3, rule.size()); assertEquals("Rule contains font-family declaration", "font-family: 'MyWebFont';\n", rule.get(0).toString()); // assertEquals("Rule contains scr declaration", // "src: url('myfont.woff2') format('woff2'), url('myfont.woff') format('woff'), url('myfont.ttf') format('truetype');\n", // rule.get(1).toString()); } @Test public void testFFSources() throws IOException, CSSException { log.info("input:\n\n\n" + TEST_STRING4 + "\n\n\n"); StyleSheet ss; ss = CSSFactory.parseString(TEST_STRING4, null); assertEquals("Four rules are set", 4, ss.size()); RuleFontFace rule = (RuleFontFace) ss.get(0); assertEquals("Rule contains 5 declarations", 5, rule.size()); List<RuleFontFace.Source> srcs = rule.getSources(); assertEquals("There are 3 sources declared", 3, srcs.size()); assertEquals("First name is correct", "Indie Flower", ((RuleFontFace.SourceLocal) srcs.get(0)).getName()); assertEquals("Second name is correct", "IndieFlower", ((RuleFontFace.SourceLocal) srcs.get(1)).getName()); assertEquals("Third name is correct URI", "https://fonts.gstatic.com/s/indieflower/v9/10JVD_humAd5zP2yrFqw6ugdm0LZdjqr5-oayXSOefg.woff2", ((RuleFontFace.SourceURL) srcs.get(2)).getURI().getValue()); List<String> unirange = rule.getUnicodeRanges(); assertEquals("There are 11 unicode ranges", 11, unirange.size()); } }