CSS-Sass

 view release on metacpan or  search on metacpan

t/03_xs_functions.t  view on Meta::CPAN

# -*- perl -*-

# Usefult for debugging the xs with prints:
# cd text-sass-xs && ./Build && perl -Mlib=blib/arch -Mlib=blib/lib t/04_perl_functions.t

use strict;
use warnings;

use Test::More tests => 37;

use CSS::Sass;

#use CSS::Sass::Type;

my ($r, $err);
# Boolean input/output
($r, $err) = CSS::Sass::sass_compile('.valid { color: test(false); }',
    sass_functions => { 'test($x)' => sub { CSS::Sass::Type::Boolean->new(!shift->value) } } );
like  ($r,   qr/color: true;/,                         "Sass function boolean works");
is    ($err, undef,                                    "Sass function boolean returns no errors");

# Number input/output
($r, $err) = CSS::Sass::sass_compile('.valid { color: test(40); }',
    sass_functions => { 'test($x)' => sub { CSS::Sass::Type::Number->new(shift->value**2) } } );
like  ($r,   qr/color: 1600;/,                         "Sass function number works");
is    ($err, undef,                                    "Sass function number returns no errors");

# Percentage input/output
($r, $err) = CSS::Sass::sass_compile('.valid { color: test(40%); }',
    sass_functions => { 'test($x)' => sub { CSS::Sass::Type::Number->new(shift->value/2, '%') } } );
like  ($r,   qr/color: 20%;/,                          "Sass function percentage works");
is    ($err, undef,                                    "Sass function percentage returns no errors");

# Dimension input/output
($r, $err) = CSS::Sass::sass_compile('.valid { color: test(20rods); }',
    sass_functions => { 'test($x)' => sub { CSS::Sass::Type::Number->new($_[0]->value*2,
                                                                            $_[0]->unit."perhogshead") } } );
like  ($r,   qr/color: 40rodsperhogshead;/,            "Sass function dimension works");
is    ($err, undef,                                    "Sass function dimension returns no errors");

# Color input/output
($r, $err) = CSS::Sass::sass_compile('.valid { color: test(rgba(40,30,20,.3)); }',
    sass_functions => { 'test($x)' => sub { CSS::Sass::Type::Color->new($_[0]->r*2, $_[0]->g*2, $_[0]->b*2, $_[0]->a*2) } } );
like  ($r,   qr/color: rgba\(80, 60, 40, 0.6\);/,      "Sass function color works");
is    ($err, undef,                                    "Sass function color returns no errors");

# String input/output
($r, $err) = CSS::Sass::sass_compile(".valid { color: test('x y z'); }",
    sass_functions => { 'test($x)' => sub { CSS::Sass::Type::String->new($_[0]->value . "_" . $_[0]->value) } } );
like  ($r,   qr/color: x y z_x y z;/,                  "Sass function string works");
is    ($err, undef,                                    "Sass function string returns no errors");

# Error output
($r, $err) = CSS::Sass::sass_compile('.valid { color: test("x"); }',
    sass_functions => { 'test($x)' => sub { die "Perl Error" } } );
is    ($r,   undef,                                    "Sass function die returns no css");
like  ($err, qr/Perl Error/,                           "Sass function die returns informative error message");


# List output
($r, $err) = CSS::Sass::sass_compile(".valid { color: test(5%); }",
    sass_functions => { 'test($x)' => sub { CSS::Sass::Type::List->new(CSS::Sass::Type::Number->new($_[0]->value * 2, '%'),
                                                                       CSS::Sass::Type::Number->new($_[0]->value * 3, '%'),
                                                                       CSS::Sass::Type::Number->new($_[0]->value * 4, '%'))
                                          } } );
like  ($r,   qr/color: 10%, 15%, 20%;/,                "Sass function comma list works");
is    ($err, undef,                                    "Sass function comma list returns no errors");

($r, $err) = CSS::Sass::sass_compile(".valid { color: test(5%); }",
    sass_functions => { 'test($x)' => sub { CSS::Sass::Type::List::Space->new(CSS::Sass::Type::Number->new($_[0]->value * 2, '%'),
                                                                              CSS::Sass::Type::Number->new($_[0]->value * 3, '%'),
                                                                              CSS::Sass::Type::Number->new($_[0]->value * 4, '%'))
                                          } } );
like  ($r,   qr/color: 10% 15% 20%;/,                  "Sass function space list works");
is    ($err, undef,                                    "Sass function space list returns no errors");

# List input/output
($r, $err) = CSS::Sass::sass_compile(".valid { color: test(5%,40in,rgba(4,3,2,.5)); }",
    sass_functions => { 'test($x,$y,$z)' => sub { CSS::Sass::Type::List::Space->new($_[2], $_[1], $_[0]) } });
like  ($r,   qr/color: rgba\(4, 3, 2, 0.5\) 40in 5%;/, "Sass function list i/o works");
is    ($err, undef,                                    "Sass function list i/o returns no errors");

# Returning undef
($r, $err) = CSS::Sass::sass_compile(".valid { color: test(); }",
    sass_functions => { 'test()' => sub { } } );
like  ($r,   qr//,                                     "Sass function undef works");
is    ($err, undef,                                    "Sass function undef returns no errors");


# Testing my example code
my %sass_func = (
    sass_functions => {



( run in 0.751 second using v1.01-cache-2.11-cpan-39bf76dae61 )