package org.jooby.assets;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.typesafe.config.ConfigFactory;
public class JSassTest {
@Test
public void name() throws Exception {
assertEquals("sass", new Sass().name());
}
@Test
public void basic() throws Exception {
assertEquals(".some-selector {\n" +
" width: 123px; }\n",
new Sass().process("/css/x.scss", "$someVar: 123px; .some-selector { width: $someVar; }",
ConfigFactory.empty()));
}
@Test
public void some() throws Exception {
assertEquals("body {\n" +
" font: 100% Helvetica, sans-serif;\n" +
" color: #333; }\n",
new Sass().process("/styles.scss", "$font-stack: Helvetica, sans-serif;\n" +
"$primary-color: #333;\n" +
"\n" +
"body {\n" +
" font: 100% $font-stack;\n" +
" color: $primary-color;\n" +
"}\n", ConfigFactory.empty()));
}
@Test
public void sass() throws Exception {
assertEquals("body {\n" +
" font: 100% Helvetica, sans-serif;\n" +
" color: #333; }\n",
new Sass().set("syntax", "sass").process("/styles.scss",
"$font-stack: Helvetica, sans-serif\n" +
"$primary-color: #333\n" +
"\n" +
"body\n" +
" font: 100% $font-stack\n" +
" color: $primary-color\n",
ConfigFactory.empty()));
}
@Test
public void fn() throws Exception {
assertEquals(".foo {\n" +
" color: lime; }\n",
new Sass().process("/styles.scss",
"$color: hsl(120deg, 100%, 50%);\n.foo {\n color: $color;\n}", ConfigFactory.empty()));
}
@Test
public void customfn() throws Exception {
assertEquals(".my-module {\n" +
" padding: 15px; }\n",
new Sass().process("/styles.scss",
"@function my-calculation-function($some-number, $another-number){\n" +
" @return $some-number + $another-number\n" +
"}\n.my-module {\n" +
" padding: my-calculation-function(10px, 5px);\n" +
"}",
ConfigFactory.empty()));
}
@Test(expected = AssetException.class)
public void err() throws Exception {
assertEquals("body {\n" +
" font: 100% Helvetica, sans-serif;\n" +
" color: #333; }\n",
new Sass().process("/styles.scss", "$font-stack: Helvetica, sans-serif;\n" +
"$primary-color: #333;\n" +
"\n" +
"body {\n" +
" font: 100% $font-stack\n" +
" color: $primary-color;\n" +
"}\n", ConfigFactory.empty()));
}
@Test
public void importDirective() throws Exception {
assertEquals(".foo {\n" +
" color: #fff; }\n" +
"\n" +
"body {\n" +
" font: 100% Helvetica, sans-serif;\n" +
" color: #333; }\n" +
"",
new Sass().process("/styles.scss",
"@import 'foo';\n$font-stack: Helvetica, sans-serif;\n" +
"$primary-color: #333;\n" +
"\n" +
"body {\n" +
" font: 100% $font-stack;\n" +
" color: $primary-color;\n" +
"}\n",
ConfigFactory.empty()));
}
@Test(expected = AssetException.class)
public void importFnF() throws Exception {
assertEquals(".foo {\n" +
" color: #fff; }\n" +
"\n" +
"body {\n" +
" font: 100% Helvetica, sans-serif;\n" +
" color: #333; }\n" +
"",
new Sass().process("/styles.scss",
"\n@import 'missing';\n$font-stack: Helvetica, sans-serif;\n" +
"$primary-color: #333;\n" +
"\n" +
"body {\n" +
" font: 100% $font-stack;\n" +
" color: $primary-color;\n" +
"}\n",
ConfigFactory.empty()));
}
@Test
public void importDirectiveRelative() throws Exception {
assertEquals(".relative {\n" +
" color: #fff; }\n" +
"\n" +
"body {\n" +
" font: 100% Helvetica, sans-serif;\n" +
" color: #333; }\n",
new Sass().process("/relative/styles.scss",
"@import 'foo';\n$font-stack: Helvetica, sans-serif;\n" +
"$primary-color: #333;\n" +
"\n" +
"body {\n" +
" font: 100% $font-stack;\n" +
" color: $primary-color;\n" +
"}\n",
ConfigFactory.empty()));
}
@Test
public void importDirectiveWithExt() throws Exception {
assertEquals(".foo {\n" +
" color: #fff; }\n" +
"\n" +
"body {\n" +
" font: 100% Helvetica, sans-serif;\n" +
" color: #333; }\n" +
"",
new Sass().process("/styles.scss",
"@import 'foo.scss';\n$font-stack: Helvetica, sans-serif;\n" +
"$primary-color: #333;\n" +
"\n" +
"body {\n" +
" font: 100% $font-stack;\n" +
" color: $primary-color;\n" +
"}\n",
ConfigFactory.empty()));
}
@Test
public void inlineSourceMap() throws Exception {
String output = new Sass().set("sourcemap", "inline")
.process("/styles.scss",
"@import 'foo.scss';\n$font-stack: Helvetica, sans-serif;\n" +
"$primary-color: #333;\n" +
"\n" +
"body {\n" +
" font: 100% $font-stack;\n" +
" color: $primary-color;\n" +
"}\n",
ConfigFactory.empty());
assertTrue(output.startsWith(".foo {\n" +
" color: #fff; }\n" +
"\n" +
"body {\n" +
" font: 100% Helvetica, sans-serif;\n" +
" color: #333; }\n" +
"\n" +
"/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiLi4vLi4v"));
}
@Test
public void sourceMap() throws Exception {
assertEquals(".relative {\n" +
" color: #fff; }\n" +
"\n" +
"body {\n" +
" font: 100% Helvetica, sans-serif;\n" +
" color: #333; }\n" +
"\n" +
"/*# sourceMappingURL=styles.scss.map */",
new Sass().set("sourcemap", "file")
.process("/relative/styles.scss",
"@import 'foo.scss';\n$font-stack: Helvetica, sans-serif;\n" +
"$primary-color: #333;\n" +
"\n" +
"body {\n" +
" font: 100% $font-stack;\n" +
" color: $primary-color;\n" +
"}\n",
ConfigFactory.empty()));
String output = new Sass().set("sourcemap", "file")
.process("/relative/styles.scss.map",
"@import 'foo.scss';\n$font-stack: Helvetica, sans-serif;\n" +
"$primary-color: #333;\n" +
"\n" +
"body {\n" +
" font: 100% $font-stack;\n" +
" color: $primary-color;\n" +
"}\n",
ConfigFactory.empty());
assertTrue(output.contains("\"version\": 3"));
}
}