test: add more integration tests with insta. Like it!

This commit is contained in:
Yiffy Dev 2024-11-03 17:52:28 +05:00
commit 45ba23e962
No known key found for this signature in database
GPG key ID: FB83DFEAFB3F4709
23 changed files with 413 additions and 21 deletions

View file

@ -0,0 +1,19 @@
@mixin color($color: black)
@if $color == black
color: white
background-color: green
@else if $color == white
color: red
background-color: black
@else
color: #c6c6c6
background-color: #00ffff
&::after
content: 'Colored'
color: $color
background-color: blue
&:hover
transform: scale(2)
&:hover
transform: translateX(10%)

View file

@ -0,0 +1,24 @@
@mixin surface($color: black){
@if $color == black{
color: white;
background-color: green;
}@else if $color == white{
color: red;
background-color: black;
}@else{
color: #c6c6c6;
background-color: #00ffff;
}
&::after{
content: 'Colored';
color: $color;
background-color: blue;
&:hover{
transform: scale(2);
}
}
&:hover{
transform: translateX(10%);
}
}

View file

@ -1,5 +0,0 @@
@mixin colored($color: primary)
@if $color == primary
color: white
@else
color: $col

View file

@ -1,9 +0,0 @@
$primary-color: black;
@mixin colored($col: primary) {
@if $col == primary {
color: $primary-color;
} @else {
color: $col;
}
}

View file

@ -0,0 +1,3 @@
@forward 'mixins_a'
@forward 'mixins_c'

View file

@ -0,0 +1,3 @@
@forward 'mixins_a';
@forward 'mixins_c';

View file

@ -0,0 +1,15 @@
@use 'mixins_a' as *
@use 'mixins_c' as *
.coated
@include color(green)
@include surface(black)
&-dark
@include surface(red)
a
@include surface(blue)
img
@include color(black)
span
@include color(green)
display: block

View file

@ -0,0 +1,20 @@
@use 'mixins_a' as *;
@use 'mixins_c' as *;
.coated{
@include color(green);
@include surface(black);
&-dark{
@include surface(red);
a{
@include surface(blue);
img{
@include color(black);
}
}
}
span{
@include color(green);
display: block;
}
}

3
tests/assets/prelude.css Normal file
View file

@ -0,0 +1,3 @@
html {
background-color: dark;
}

View file

@ -0,0 +1,5 @@
@use 'mixins_a' as *
@use 'mixins_c' as *
body
@include color()

View file

@ -0,0 +1,6 @@
@use 'mixins_a' as *;
@use 'mixins_c' as *;
body {
@include surface();
}

View file

@ -0,0 +1,17 @@
.fuzz
background-color: red
display: block
&-dark
background-color: black
color: white
a
text-transform: uppercase
img
position: absolute
top: 0
left: 10rem
span
position: relative
display: grid
grid-template-areas: 'a b c' 'd e f' 'x x x'
display: block

View file

@ -0,0 +1,22 @@
.fuzz{
background-color: red;
display: block;
&-dark{
background-color: black;
color: white;
a{
text-transform: uppercase;
img{
position: absolute;
top: 0;
left: 10rem;
}
}
}
span{
position: relative;
display: grid;
grid-template-areas: 'a b c' 'd e f' 'x x x';
display: block;
}
}

View file

@ -0,0 +1,14 @@
@use 'module_a' as *
.coated
@include color(green)
@include surface(black)
&-dark
@include surface(red)
a
@include surface(blue)
img
@include color(black)
span
@include color(green)
display: block

View file

@ -0,0 +1,20 @@
@use 'module_c' as *;
.coated{
@include color(green);
@include surface(black);
&-dark{
@include surface(red);
a{
@include surface(blue);
img{
@include color(black);
}
}
}
span{
@include color(green);
display: block;
}
}

182
tests/macros.rs Normal file
View file

@ -0,0 +1,182 @@
use std::fs;
use insta::{glob, Settings};
use sabry::{
buildmagic::SabryBuilder,
config::{BehavHashCollision, BehavSassModCollision, SabryConfig},
sassy, styly, usey,
};
pub mod sass {
use sabry::sassy;
sassy!(mixins_sass:sass "tests/assets/mixin-module.sass");
sassy!(mixins_inline_sass:sass {"
@mixin color($color: black)
@if $color == black
color: white
background-color: green
@else if $color == white
color: red
background-color: black
@else
color: #c6c6c6
background-color: #00ffff
&::after
content: 'Colored'
color: $color
background-color: blue
&:hover
transform: scale(2)
&:hover
transform: translateX(10%)
"});
sassy!(module_sass:sass "tests/assets/module-forward.sass");
sassy!(module_inline_sass:sass {"
@forward 'mixins_a'
@forward 'mixins_c'
"});
pub(crate) use mixins_inline_sass as mixins_inline_a;
pub(crate) use mixins_sass as mixins_a;
pub(crate) use module_inline_sass as module_inline_a;
pub(crate) use module_sass as module_a;
}
pub mod scss {
use sabry::sassy;
sassy!(mixins_scss:scss "tests/assets/mixin-module.scss");
sassy!(mixins_inline_scss:scss {"
@mixin surface($color: black){
@if $color == black{
color: white;
background-color: green;
}@else if $color == white{
color: red;
background-color: black;
}@else{
color: #c6c6c6;
background-color: #00ffff;
}
&::after{
content: 'Colored';
color: $color;
background-color: blue;
&:hover{
transform: scale(2);
}
}
&:hover{
transform: translateX(10%);
}
}
"});
sassy!(module_scss:scss "tests/assets/module-forward.scss");
sassy!(module_inline_scss:scss {"
@forward 'mixins_a';
@forward 'mixins_c';
"});
pub(crate) use mixins_inline_scss as mixins_inline_c;
pub(crate) use mixins_scss as mixins_c;
pub(crate) use module_inline_scss as module_inline_c;
pub(crate) use module_scss as module_c;
}
styly!(sole_code_sass:sass "tests/assets/sole-code.sass");
styly!(sole_code_scss:scss "tests/assets/sole-code.scss");
styly!(module_usage_sass:sass "tests/assets/module-usage.sass");
styly!(module_usage_scss:scss "tests/assets/module-usage.scss");
styly!(use_forwarded_sass:sass "tests/assets/use-forwarded.sass");
styly!(use_forwarded_scss:scss "tests/assets/use-forwarded.scss");
#[test]
fn ensure_inline_matches_file() {
assert_eq!(sass::mixins_a!(), sass::mixins_inline_a!());
assert_eq!(scss::mixins_c!(), scss::mixins_inline_c!());
assert_eq!(sass::module_a!(), sass::module_inline_a!());
assert_eq!(scss::module_c!(), scss::module_inline_c!());
}
#[test]
fn syntax_contract() {
assert_eq!(scss::mixins_inline_c!(syntax), "scss");
assert_eq!(scss::mixins_c!(syntax), "scss");
assert_eq!(scss::module_inline_c!(syntax), "scss");
assert_eq!(scss::module_c!(syntax), "scss");
assert_eq!(sass::mixins_a!(syntax), "sass");
assert_eq!(sass::mixins_inline_a!(syntax), "sass");
assert_eq!(sass::module_a!(syntax), "sass");
assert_eq!(sass::module_inline_a!(syntax), "sass");
}
fn gen_config() -> SabryConfig {
let mut config = SabryConfig::require().unwrap();
config.css.bundle = Some("tests/sabry_output/bundle.css".into());
config.css.scopes = Some("tests/sabry_output/scopes".into());
config.css.minify = true;
config.css.prelude = Some(vec!["tests/assets/prelude.css".into()]);
config.sass.prelude = Some(vec![
"tests/assets/prelude.sass".into(),
"tests/assets/prelude.scss".into(),
]);
config.sass.intermediate_dir = "tests/sabry_intermediate".into();
config.sass.scanroot = "tests".into();
config.sass.module_name_collision = BehavSassModCollision::Merge;
config.hash.collision = BehavHashCollision::Error;
config.hash.size = 16;
config.hash.use_code_size = true;
config.hash.use_code_text = true;
config.hash.use_item_names = true;
config.hash.use_scope_name = true;
config.lightningcss.targets.android = Some("10".into());
config.lightningcss.targets.chrome = Some("100".into());
config.lightningcss.targets.edge = Some("80".into());
config.lightningcss.targets.firefox = Some("100".into());
config.lightningcss.targets.ie = Some("8".into());
config.lightningcss.targets.ios_saf = Some("13.2".into());
config.lightningcss.targets.opera = Some("80".into());
config.lightningcss.targets.safari = Some("11".into());
config.lightningcss.targets.samsung = Some("80".into());
config
}
fn gen_builder() -> SabryBuilder {
let config = gen_config();
let builder = SabryBuilder::new(config);
builder
}
#[test]
fn compilation_with_buildy() {
let mut builder = gen_builder();
builder
.build(usey!(
sass::mixins_a!(),
sass::module_a!(),
scss::mixins_c!(),
scss::module_c!()
))
.unwrap();
glob!("sabry_output/**/*.css", |path| {
let generated = fs::read_to_string(path).unwrap();
let mut settings = Settings::clone_current();
settings.set_snapshot_path("sabry_output_snapshots");
settings.set_prepend_module_to_snapshot(false);
settings.set_omit_expression(true);
settings.remove_info();
settings.bind(|| {
insta::assert_snapshot!(generated);
});
});
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,7 @@
---
source: tests/macros.rs
assertion_line: 170
input_file: tests/sabry_output/scopes/module_usage_sass.css
snapshot_kind: text
---
.n5vGKZlIscA58H8d7ZMOhSw.coated{color:#fff;background-color:green}.n5vGKZlIscA58H8d7ZMOhSw.coated:after{content:"Colored";color:#000;background-color:#00f}.n5vGKZlIscA58H8d7ZMOhSw.coated:after:hover{-ms-transform:scale(2);transform:scale(2)}.n5vGKZlIscA58H8d7ZMOhSw.coated:hover{-ms-transform:translate(10%);transform:translate(10%)}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark{color:#c6c6c6;background-color:#0ff}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark:after{content:"Colored";color:red;background-color:#00f}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark:after:hover{-ms-transform:scale(2);transform:scale(2)}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark:hover{-ms-transform:translate(10%);transform:translate(10%)}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark a.n5vGKZlIscA58H8d7ZMOhSw{color:#c6c6c6;background-color:#0ff}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark a.n5vGKZlIscA58H8d7ZMOhSw:after{content:"Colored";color:#00f;background-color:#00f}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark a.n5vGKZlIscA58H8d7ZMOhSw:after:hover{-ms-transform:scale(2);transform:scale(2)}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark a.n5vGKZlIscA58H8d7ZMOhSw:hover{-ms-transform:translate(10%);transform:translate(10%)}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark a.n5vGKZlIscA58H8d7ZMOhSw img.n5vGKZlIscA58H8d7ZMOhSw{color:#fff;background-color:green}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark a.n5vGKZlIscA58H8d7ZMOhSw img.n5vGKZlIscA58H8d7ZMOhSw:after{content:"Colored";color:#000;background-color:#00f}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark a.n5vGKZlIscA58H8d7ZMOhSw img.n5vGKZlIscA58H8d7ZMOhSw:after:hover{-ms-transform:scale(2);transform:scale(2)}.n5vGKZlIscA58H8d7ZMOhSw.coated-dark a.n5vGKZlIscA58H8d7ZMOhSw img.n5vGKZlIscA58H8d7ZMOhSw:hover{-ms-transform:translate(10%);transform:translate(10%)}.n5vGKZlIscA58H8d7ZMOhSw.coated span.n5vGKZlIscA58H8d7ZMOhSw{color:#c6c6c6;background-color:#0ff;display:block}.n5vGKZlIscA58H8d7ZMOhSw.coated span.n5vGKZlIscA58H8d7ZMOhSw:after{content:"Colored";color:green;background-color:#00f}.n5vGKZlIscA58H8d7ZMOhSw.coated span.n5vGKZlIscA58H8d7ZMOhSw:after:hover{-ms-transform:scale(2);transform:scale(2)}.n5vGKZlIscA58H8d7ZMOhSw.coated span.n5vGKZlIscA58H8d7ZMOhSw:hover{-ms-transform:translate(10%);transform:translate(10%)}

View file

@ -0,0 +1,7 @@
---
source: tests/macros.rs
assertion_line: 170
input_file: tests/sabry_output/scopes/module_usage_scss.css
snapshot_kind: text
---
.n6ROVrVzYikGtxgKBYy11kA.coated{color:#fff;background-color:green}.n6ROVrVzYikGtxgKBYy11kA.coated:after{content:"Colored";color:#000;background-color:#00f}.n6ROVrVzYikGtxgKBYy11kA.coated:after:hover{-ms-transform:scale(2);transform:scale(2)}.n6ROVrVzYikGtxgKBYy11kA.coated:hover{-ms-transform:translate(10%);transform:translate(10%)}.n6ROVrVzYikGtxgKBYy11kA.coated-dark{color:#c6c6c6;background-color:#0ff}.n6ROVrVzYikGtxgKBYy11kA.coated-dark:after{content:"Colored";color:red;background-color:#00f}.n6ROVrVzYikGtxgKBYy11kA.coated-dark:after:hover{-ms-transform:scale(2);transform:scale(2)}.n6ROVrVzYikGtxgKBYy11kA.coated-dark:hover{-ms-transform:translate(10%);transform:translate(10%)}.n6ROVrVzYikGtxgKBYy11kA.coated-dark a.n6ROVrVzYikGtxgKBYy11kA{color:#c6c6c6;background-color:#0ff}.n6ROVrVzYikGtxgKBYy11kA.coated-dark a.n6ROVrVzYikGtxgKBYy11kA:after{content:"Colored";color:#00f;background-color:#00f}.n6ROVrVzYikGtxgKBYy11kA.coated-dark a.n6ROVrVzYikGtxgKBYy11kA:after:hover{-ms-transform:scale(2);transform:scale(2)}.n6ROVrVzYikGtxgKBYy11kA.coated-dark a.n6ROVrVzYikGtxgKBYy11kA:hover{-ms-transform:translate(10%);transform:translate(10%)}.n6ROVrVzYikGtxgKBYy11kA.coated-dark a.n6ROVrVzYikGtxgKBYy11kA img.n6ROVrVzYikGtxgKBYy11kA{color:#fff;background-color:green}.n6ROVrVzYikGtxgKBYy11kA.coated-dark a.n6ROVrVzYikGtxgKBYy11kA img.n6ROVrVzYikGtxgKBYy11kA:after{content:"Colored";color:#000;background-color:#00f}.n6ROVrVzYikGtxgKBYy11kA.coated-dark a.n6ROVrVzYikGtxgKBYy11kA img.n6ROVrVzYikGtxgKBYy11kA:after:hover{-ms-transform:scale(2);transform:scale(2)}.n6ROVrVzYikGtxgKBYy11kA.coated-dark a.n6ROVrVzYikGtxgKBYy11kA img.n6ROVrVzYikGtxgKBYy11kA:hover{-ms-transform:translate(10%);transform:translate(10%)}.n6ROVrVzYikGtxgKBYy11kA.coated span.n6ROVrVzYikGtxgKBYy11kA{color:#c6c6c6;background-color:#0ff;display:block}.n6ROVrVzYikGtxgKBYy11kA.coated span.n6ROVrVzYikGtxgKBYy11kA:after{content:"Colored";color:green;background-color:#00f}.n6ROVrVzYikGtxgKBYy11kA.coated span.n6ROVrVzYikGtxgKBYy11kA:after:hover{-ms-transform:scale(2);transform:scale(2)}.n6ROVrVzYikGtxgKBYy11kA.coated span.n6ROVrVzYikGtxgKBYy11kA:hover{-ms-transform:translate(10%);transform:translate(10%)}

View file

@ -0,0 +1,7 @@
---
source: tests/macros.rs
assertion_line: 170
input_file: tests/sabry_output/scopes/sole_code_sass.css
snapshot_kind: text
---
.smfXzGrnTs2kl9jPP0nk6w.fuzz{background-color:red;display:block}.smfXzGrnTs2kl9jPP0nk6w.fuzz-dark{color:#fff;background-color:#000}.smfXzGrnTs2kl9jPP0nk6w.fuzz-dark a.smfXzGrnTs2kl9jPP0nk6w{text-transform:uppercase}.smfXzGrnTs2kl9jPP0nk6w.fuzz-dark a.smfXzGrnTs2kl9jPP0nk6w img.smfXzGrnTs2kl9jPP0nk6w{position:absolute;top:0;left:10rem}.smfXzGrnTs2kl9jPP0nk6w.fuzz span.smfXzGrnTs2kl9jPP0nk6w{grid-template-areas:"a b c""d e f""x x x";display:block;position:relative}

Some files were not shown because too many files have changed in this diff Show more