package org.jooby.assets;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Test;
import com.typesafe.config.ConfigFactory;
public class SvgSymbolTest {
@Test
public void defaults() throws Exception {
String svgname = "symbols";
String cssname = "symbols";
Path output = Paths.get("target", "symbols1");
new SvgSymbol()
.set("input", "svg")
.set("output", Paths.get("..").resolve(output).resolve(svgname).toString())
.run(ConfigFactory.empty());
assertTrue(Files.exists(output.resolve(svgname + ".svg")));
assertTrue(Files.exists(output.resolve(cssname + ".css")));
assertEquals(".approved {\n" +
" width: 32px;\n" +
" height: 32px;\n" +
"}\n" +
".rejected {\n" +
" width: 18px;\n" +
" height: 18px;\n" +
"}", Files.readAllLines(output.resolve(cssname + ".css")).stream()
.collect(Collectors.joining("\n")));
Document svg = Jsoup.parse(output.resolve(svgname + ".svg").toFile(), "UTF-8");
assertNotNull(svg.select("symbol#approved").first());
assertEquals("0 0 32 32", svg.select("symbol#approved").first().attr("viewbox"));
assertNotNull(svg.select("symbol#rejected").first());
assertEquals("0 0 18 18", svg.select("symbol#rejected").first().attr("viewbox"));
}
@Test
public void defaultsNoOutput() throws Exception {
String svgname = "sprite";
String cssname = "sprite";
Path output = Paths.get("public");
new SvgSymbol()
.set("input", "svg")
.run(ConfigFactory.empty());
assertTrue(Files.exists(output.resolve(svgname + ".svg")));
assertTrue(Files.exists(output.resolve(cssname + ".css")));
assertEquals(".approved {\n" +
" width: 32px;\n" +
" height: 32px;\n" +
"}\n" +
".rejected {\n" +
" width: 18px;\n" +
" height: 18px;\n" +
"}", Files.readAllLines(output.resolve(cssname + ".css")).stream()
.collect(Collectors.joining("\n")));
Document svg = Jsoup.parse(output.resolve(svgname + ".svg").toFile(), "UTF-8");
assertNotNull(svg.select("symbol#approved").first());
assertEquals("0 0 32 32", svg.select("symbol#approved").first().attr("viewbox"));
assertNotNull(svg.select("symbol#rejected").first());
assertEquals("0 0 18 18", svg.select("symbol#rejected").first().attr("viewbox"));
}
@Test
public void customOutput() throws Exception {
Path output = Paths.get("target", "symbols2");
Path svgoutput = output.resolve("img").resolve("sprite.svg");
Path cssoutput = output.resolve("css").resolve("sprite.css");
new SvgSymbol()
.set("input", "svg")
.set("css.output", Paths.get("..").resolve(cssoutput).toString())
.set("svg.output", Paths.get("..").resolve(svgoutput).toString())
.run(ConfigFactory.empty());
assertTrue(Files.exists(svgoutput));
assertTrue(Files.exists(cssoutput));
assertEquals(".approved {\n" +
" width: 32px;\n" +
" height: 32px;\n" +
"}\n" +
".rejected {\n" +
" width: 18px;\n" +
" height: 18px;\n" +
"}", Files.readAllLines(cssoutput).stream()
.collect(Collectors.joining("\n")));
Document svg = Jsoup.parse(svgoutput.toFile(), "UTF-8");
assertNotNull(svg.select("symbol#approved").first());
assertEquals("0 0 32 32", svg.select("symbol#approved").first().attr("viewbox"));
assertNotNull(svg.select("symbol#rejected").first());
assertEquals("0 0 18 18", svg.select("symbol#rejected").first().attr("viewbox"));
}
@Test
public void mergWithCssClassPrefix() throws Exception {
String svgname = "symbols";
String cssname = "symbols";
Path output = Paths.get("target", "symbols3");
new SvgSymbol()
.set("input", "svg")
.set("css.prefix", "svg")
.set("output", Paths.get("..").resolve(output).resolve(svgname).toString())
.run(ConfigFactory.empty());
assertTrue(Files.exists(output.resolve(svgname + ".svg")));
assertTrue(Files.exists(output.resolve(cssname + ".css")));
assertEquals("svg.approved {\n" +
" width: 32px;\n" +
" height: 32px;\n" +
"}\n" +
"svg.rejected {\n" +
" width: 18px;\n" +
" height: 18px;\n" +
"}", Files.readAllLines(output.resolve(cssname + ".css")).stream()
.collect(Collectors.joining("\n")));
Document svg = Jsoup.parse(output.resolve(svgname + ".svg").toFile(), "UTF-8");
assertNotNull(svg.select("symbol#approved").first());
assertEquals("0 0 32 32", svg.select("symbol#approved").first().attr("viewbox"));
assertNotNull(svg.select("symbol#rejected").first());
assertEquals("0 0 18 18", svg.select("symbol#rejected").first().attr("viewbox"));
}
@Test
public void mergeWithIdSuffix() throws Exception {
String svgname = "symbols";
String cssname = "symbols";
Path output = Paths.get("target", "symbols4");
new SvgSymbol()
.set("input", "svg")
.set("id.suffix", "-icon")
.set("output", Paths.get("..").resolve(output).resolve(svgname).toString())
.run(ConfigFactory.empty());
assertTrue(Files.exists(output.resolve(svgname + ".svg")));
assertTrue(Files.exists(output.resolve(cssname + ".css")));
assertEquals(".approved-icon {\n" +
" width: 32px;\n" +
" height: 32px;\n" +
"}\n" +
".rejected-icon {\n" +
" width: 18px;\n" +
" height: 18px;\n" +
"}", Files.readAllLines(output.resolve(cssname + ".css")).stream()
.collect(Collectors.joining("\n")));
Document svg = Jsoup.parse(output.resolve(svgname + ".svg").toFile(), "UTF-8");
assertNotNull(svg.select("symbol#approved-icon").first());
assertEquals("0 0 32 32", svg.select("symbol#approved-icon").first().attr("viewbox"));
assertNotNull(svg.select("symbol#rejected-icon").first());
assertEquals("0 0 18 18", svg.select("symbol#rejected-icon").first().attr("viewbox"));
}
@Test
public void mergeWithIdPrefix() throws Exception {
String svgname = "symbols";
String cssname = "symbols";
Path output = Paths.get("target", "symbols5");
new SvgSymbol()
.set("input", "svg")
.set("id.prefix", "icon-")
.set("output", Paths.get("..").resolve(output).resolve(svgname).toString())
.run(ConfigFactory.empty());
assertTrue(Files.exists(output.resolve(svgname + ".svg")));
assertTrue(Files.exists(output.resolve(cssname + ".css")));
assertEquals(".icon-approved {\n" +
" width: 32px;\n" +
" height: 32px;\n" +
"}\n" +
".icon-rejected {\n" +
" width: 18px;\n" +
" height: 18px;\n" +
"}", Files.readAllLines(output.resolve(cssname + ".css")).stream()
.collect(Collectors.joining("\n")));
Document svg = Jsoup.parse(output.resolve(svgname + ".svg").toFile(), "UTF-8");
assertNotNull(svg.select("symbol#icon-approved").first());
assertEquals("0 0 32 32", svg.select("symbol#icon-approved").first().attr("viewbox"));
assertNotNull(svg.select("symbol#icon-rejected").first());
assertEquals("0 0 18 18", svg.select("symbol#icon-rejected").first().attr("viewbox"));
}
}