#!/usr/bin/env python3
import sys
import os
import unittest
import logging
import inspect
# Extend PYTHONPATH with local 'lib' folder
if __name__ == "__main__":
jasyroot = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]), os.pardir, os.pardir, os.pardir, os.pardir))
sys.path.insert(0, jasyroot)
print("Running from %s..." % jasyroot)
import jasy.style.Engine as Engine
"""
SUPPORTS
h1{
font-size: 20px;
@root html.desktop &{
font-size: 30px;
}
}
"""
[docs]class Tests(unittest.TestCase):
[docs] def process(self, code):
callerName = inspect.stack()[1][3][5:]
tree = Engine.getTree(code, callerName)
tree = Engine.reduceTree(tree)
return Engine.compressTree(tree)
[docs] def test_basic(self):
self.assertEqual(self.process('''
.foo {
color: red;
@root .bar {
color: gray;
}
}
'''), '.foo{color:red;}.bar{color:gray;}')
[docs] def test_basic_supports(self):
self.assertEqual(self.process('''
.foo {
color: red;
@root .bar {
@supports(color:gray){
color: gray;
}
}
}
'''), '.foo{color:red;}@supports (color:gray){.bar{color:gray;}}')
[docs] def test_deep(self):
self.assertEqual(self.process('''
.foo {
color: red;
@root .bar {
.deeper{
color: gray;
}
}
}
'''), '.foo{color:red;}.bar .deeper{color:gray;}')
[docs] def test_deep_multidist(self):
self.assertEqual(self.process('''
.foo {
color: red;
@root .bar, .baz {
.deeper{
color: gray;
}
}
}
'''), '.foo{color:red;}.bar .deeper,.baz .deeper{color:gray;}')
[docs] def test_parentreference_append(self):
self.assertEqual(self.process('''
.foo {
color: red;
@root .bar & {
color: gray;
}
}
'''), '.foo{color:red;}.bar .foo{color:gray;}')
[docs] def test_parentreference_between(self):
self.assertEqual(self.process('''
.message {
color: red;
@root & .title-bar {
background: gray;
font-weight: bold;
}
}
'''), '.message{color:red;}.message .title-bar{background:gray;font-weight:bold;}')
[docs] def test_parentreference_generatedcontent(self):
self.assertEqual(self.process('''
.foo {
color: red;
&::after{
content: "DESKTOP";
}
@root html.mobile &::after {
content: "MOBILE";
}
}
'''), '.foo{color:red;}.foo::after{content:"DESKTOP";}html.mobile .foo::after{content:"MOBILE";}')
[docs] def test_parentreference_append_multiroot(self):
self.assertEqual(self.process('''
.foo,
h1 .innerfoo {
color: red;
@root .bar & {
color: gray;
}
}
'''), '.foo,h1 .innerfoo{color:red;}.bar .foo,.bar h1 .innerfoo{color:gray;}')
[docs] def test_parentreference_inline_inner(self):
self.assertEqual(self.process('''
.date{
color: black;
background: white;
@root{
&__dialog{
position: absolute;
}
}
}
'''), '.date{color:black;background:white;}.date__dialog{position:absolute;}')
[docs] def test_parentreference_inline(self):
self.assertEqual(self.process('''
.date{
color: black;
background: white;
@root &__dialog{
position: absolute;
}
}
'''), '.date{color:black;background:white;}.date__dialog{position:absolute;}')
[docs] def test_parentreference_inline_multiroot(self):
self.assertEqual(self.process('''
.date,
.color{
color: black;
background: white;
@root &__dialog{
position: absolute;
}
}
'''), '.date,.color{color:black;background:white;}.date__dialog,.color__dialog{position:absolute;}')
[docs] def test_parentreference_inline_multiroot_multidist(self):
self.assertEqual(self.process('''
.date,
.color{
color: black;
background: white;
@root &__dialog, &__overlay{
position: absolute;
}
}
'''), '.date,.color{color:black;background:white;}.date__dialog,.date__overlay,.color__dialog,.color__overlay{position:absolute;}')
[docs] def test_parentreference_inline_extend(self):
self.assertEqual(self.process('''
$field{
color: black;
background: white;
@root &__dialog{
position: absolute;
}
}
.date{
$field;
}
.color{
$field;
}
'''), '.date,.color{color:black;background:white;}.date__dialog,.color__dialog{position:absolute;}')
[docs] def test_parentreference_inline_multidist_extend(self):
self.assertEqual(self.process('''
$field{
color: black;
background: white;
@root &__dialog, &__overlay{
position: absolute;
}
}
.date{
$field;
}
.color{
$field;
}
'''), '.date,.color{color:black;background:white;}.date__dialog,.date__overlay,.color__dialog,.color__overlay{position:absolute;}')
[docs] def test_parentreference_extend_content_single(self):
self.assertEqual(self.process('''
$field{
@root &__dialog{
@content;
}
}
.date{
$field < {
width: 100px;
}
}
'''), '.date__dialog{width:100px;}')
[docs] def test_parentreference_extend_content_double(self):
self.assertEqual(self.process('''
$field{
@root &__dialog{
@content;
}
}
.date{
$field < {
width: 100px;
}
}
.color{
$field < {
width: 200px;
}
}
'''), '.date__dialog{width:100px;}.color__dialog{width:200px;}')
[docs] def test_parentreference_extend_content_double_deeper(self):
self.assertEqual(self.process('''
$field{
@root &__dialog{
@content;
}
}
.date{
$field < {
width: 100px;
}
}
.color{
$field < {
width: 200px;
.button{
border: 2px solid red;
}
}
}
'''), '.date__dialog{width:100px;}.color__dialog{width:200px;}.color__dialog .button{border:2px solid red;}')
[docs] def test_parentreference_extend_content_double_multi(self):
self.assertEqual(self.process('''
$field{
border: 1px solid black;
@root &__dialog, &__overlay{
position: absolute;
@content;
}
}
.date{
background: blue;
$field < {
width: 100px;
height: 50px;
}
}
.color{
background: red;
$field < {
width: 200px;
height: 200px;
}
}
'''), '.date,.color{border:1px solid black;}.date__dialog,.date__overlay,.color__dialog,.color__overlay{position:absolute;}.date__dialog,.date__overlay{width:100px;height:50px;}.color__dialog,.color__overlay{width:200px;height:200px;}.date{background:blue;}.color{background:red;}')
if __name__ == '__main__':
logging.getLogger().setLevel(logging.ERROR)
suite = unittest.TestLoader().loadTestsFromTestCase(Tests)
unittest.TextTestRunner(verbosity=2).run(suite)