| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- $prefix: bs-;
- $enable-important-utilities: false;
- // Important: Do not import rfs to check that the mixin just calls the appropriate functions from it
- @import "../../mixins/utilities";
- @mixin test-generate-utility($params...) {
- @include assert() {
- @include output() {
- @include generate-utility($params...);
- }
- @include expect() {
- @content;
- }
- }
- }
- @include describe(generate-utility) {
- @include it("generates a utility class for each value") {
- @include test-generate-utility(
- (
- property: "padding",
- values: (small: .5rem, large: 2rem)
- )
- ) {
- .padding-small {
- padding: .5rem;
- }
- .padding-large {
- padding: 2rem;
- }
- }
- }
- @include describe("global $enable-important-utilities: true") {
- @include it("sets !important") {
- $enable-important-utilities: true !global;
- @include test-generate-utility(
- (
- property: "padding",
- values: (small: .5rem, large: 2rem)
- )
- ) {
- .padding-small {
- padding: .5rem !important;
- }
- .padding-large {
- padding: 2rem !important;
- }
- }
- $enable-important-utilities: false !global;
- }
- }
- @include describe("$utility") {
- @include describe("values") {
- @include it("supports null keys") {
- @include test-generate-utility(
- (
- property: "padding",
- values: (null: 1rem, small: .5rem, large: 2rem)
- ),
- ) {
- .padding {
- padding: 1rem;
- }
- .padding-small {
- padding: .5rem;
- }
- .padding-large {
- padding: 2rem;
- }
- }
- }
- @include it("ignores null values") {
- @include test-generate-utility(
- (
- property: "padding",
- values: (small: null, large: 2rem)
- )
- ) {
- .padding-large {
- padding: 2rem;
- }
- }
- }
- @include it("supports lists") {
- @include test-generate-utility(
- (
- property: "padding",
- values: 1rem 2rem
- )
- ) {
- .padding-1rem {
- padding: 1rem;
- }
- .padding-2rem {
- padding: 2rem;
- }
- }
- }
- @include it("supports single values") {
- @include test-generate-utility(
- (
- property: padding,
- values: 1rem
- )
- ) {
- .padding-1rem {
- padding: 1rem;
- }
- }
- }
- }
- @include describe("class & property") {
- @include it("adds each property to the declaration") {
- @include test-generate-utility(
- (
- class: padding-x,
- property: padding-inline-start padding-inline-end,
- values: 1rem
- )
- ) {
- .padding-x-1rem {
- padding-inline-start: 1rem;
- padding-inline-end: 1rem;
- }
- }
- }
- @include it("uses the first property as class name") {
- @include test-generate-utility(
- (
- property: padding-inline-start padding-inline-end,
- values: 1rem
- )
- ) {
- .padding-inline-start-1rem {
- padding-inline-start: 1rem;
- padding-inline-end: 1rem;
- }
- }
- }
- @include it("supports a null class to create classes straight from the values") {
- @include test-generate-utility(
- (
- property: visibility,
- class: null,
- values: (
- visible: visible,
- invisible: hidden,
- )
- )
- ) {
- .visible {
- visibility: visible;
- }
- .invisible {
- visibility: hidden;
- }
- }
- }
- }
- @include describe("state") {
- @include it("Generates selectors for each states") {
- @include test-generate-utility(
- (
- property: padding,
- values: 1rem,
- state: hover focus,
- )
- ) {
- .padding-1rem {
- padding: 1rem;
- }
- .padding-1rem-hover:hover {
- padding: 1rem;
- }
- .padding-1rem-focus:focus {
- padding: 1rem;
- }
- }
- }
- }
- @include describe("css-var"){
- @include it("sets a CSS variable instead of the property") {
- @include test-generate-utility(
- (
- property: padding,
- css-variable-name: padding,
- css-var: true,
- values: 1rem 2rem
- )
- ) {
- .padding-1rem {
- --bs-padding: 1rem;
- }
- .padding-2rem {
- --bs-padding: 2rem;
- }
- }
- }
- @include it("defaults to class") {
- @include test-generate-utility(
- (
- property: padding,
- class: padding,
- css-var: true,
- values: 1rem 2rem
- )
- ) {
- .padding-1rem {
- --bs-padding: 1rem;
- }
- .padding-2rem {
- --bs-padding: 2rem;
- }
- }
- }
- }
- @include describe("local-vars") {
- @include it("generates the listed variables") {
- @include test-generate-utility(
- (
- property: color,
- class: desaturated-color,
- local-vars: (
- color-opacity: 1,
- color-saturation: .25
- ),
- values: (
- blue: hsla(192deg, var(--bs-color-saturation), 0, var(--bs-color-opacity))
- )
- )
- ) {
- .desaturated-color-blue {
- --bs-color-opacity: 1;
- // Sass compilation will put a leading zero so we want to keep that one
- // stylelint-disable-next-line @stylistic/number-leading-zero
- --bs-color-saturation: 0.25;
- color: hsla(192deg, var(--bs-color-saturation), 0, var(--bs-color-opacity));
- }
- }
- }
- }
- @include describe("css-var & state") {
- @include it("Generates a rule with for each state with a CSS variable") {
- @include test-generate-utility(
- (
- property: padding,
- css-var: true,
- css-variable-name: padding,
- values: 1rem,
- state: hover focus,
- )
- ) {
- .padding-1rem {
- --bs-padding: 1rem;
- }
- .padding-1rem-hover:hover {
- --bs-padding: 1rem;
- }
- .padding-1rem-focus:focus {
- --bs-padding: 1rem;
- }
- }
- }
- }
- @include describe("rtl") {
- @include it("sets up RTLCSS for removal when false") {
- @include test-generate-utility(
- (
- property: padding,
- values: 1rem,
- rtl: false
- )
- ) {
- /* rtl:begin:remove */
- .padding-1rem {
- padding: 1rem;
- }
- /* rtl:end:remove */
- }
- }
- }
- @include describe("rfs") {
- @include it("sets the fluid value when not inside media query") {
- @include test-generate-utility(
- (
- property: padding,
- values: 1rem,
- rfs: true
- )
- ) {
- .padding-1rem {
- padding: rfs-fluid-value(1rem);
- }
- }
- }
- @include it("sets the value when inside the media query") {
- @include test-generate-utility(
- (
- property: padding,
- values: 1rem,
- rfs: true
- ),
- $is-rfs-media-query: true
- ) {
- .padding-1rem {
- padding: rfs-value(1rem);
- }
- }
- }
- }
- }
- @include describe("$infix") {
- @include it("inserts the given infix") {
- @include test-generate-utility(
- (
- property: "padding",
- values: (null: 1rem, small: .5rem, large: 2rem)
- ),
- $infix: -sm
- ) {
- .padding-sm {
- padding: 1rem;
- }
- .padding-sm-small {
- padding: .5rem;
- }
- .padding-sm-large {
- padding: 2rem;
- }
- }
- }
- @include it("strips leading - if class is null") {
- @include test-generate-utility(
- (
- property: visibility,
- class: null,
- values: (
- visible: visible,
- invisible: hidden,
- )
- ),
- -sm
- ) {
- .sm-visible {
- visibility: visible;
- }
- .sm-invisible {
- visibility: hidden;
- }
- }
- }
- }
- }
|