// Output tests for the grid mixins in scss/mixins/bootstrap/_grid.scss.
// `make-col`/`make-col-offset`/`row-cols` do the real width maths (via `divide`
// + math.percentage); `$columns` is passed explicitly so the tests don't depend
// on the global `$grid-columns`.

@use '../mixins/bootstrap/grid' as *;

@include describe('make-col') {
  @include it('sets a fixed width as a percentage of the column count') {
    @include assert() {
      @include output() {
        .t {
          @include make-col(6, 12);
        }
      }
      @include expect() {
        .t {
          flex: 0 0 auto;
          width: 50%;
        }
      }
    }
  }

  @include it('grows to fill the row when no size is given') {
    @include assert() {
      @include output() {
        .t {
          @include make-col();
        }
      }
      @include expect() {
        .t {
          flex: 1 1 0;
          max-width: 100%;
        }
      }
    }
  }
}

@include describe('make-col-auto') {
  @include it('sizes to the content') {
    @include assert() {
      @include output() {
        .t {
          @include make-col-auto();
        }
      }
      @include expect() {
        .t {
          flex: 0 0 auto;
          width: auto;
        }
      }
    }
  }
}

@include describe('make-col-offset') {
  @include it('offsets by a percentage of the column count') {
    @include assert() {
      @include output() {
        .t {
          @include make-col-offset(3, 12);
        }
      }
      @include expect() {
        .t {
          margin-inline-start: 25%;
        }
      }
    }
  }

  @include it('collapses a zero offset to 0 (not 0%)') {
    @include assert() {
      @include output() {
        .t {
          @include make-col-offset(0, 12);
        }
      }
      @include expect() {
        .t {
          margin-inline-start: 0;
        }
      }
    }
  }
}

@include describe('row-cols') {
  @include it('splits children into equal fractions of the row') {
    @include assert() {
      @include output() {
        .t {
          @include row-cols(3);
        }
      }
      @include expect() {
        .t > * {
          flex: 0 0 auto;
          width: 33.33333333%;
        }
      }
    }
  }
}

@include describe('make-row') {
  @include it('sets the gutter custom properties and negative margins') {
    @include assert() {
      @include output() {
        .t {
          @include make-row(1rem);
        }
      }
      @include expect() {
        .t {
          --gutter-x: 1rem;
          --gutter-y: 0;
          display: flex;
          flex-wrap: wrap;
          margin-top: calc(-1 * var(--gutter-y));
          margin-inline-end: calc(-0.5 * var(--gutter-x));
          margin-inline-start: calc(-0.5 * var(--gutter-x));
        }
      }
    }
  }
}

@include describe('make-col-ready') {
  @include it('primes a column with full width and gutter padding') {
    @include assert() {
      @include output() {
        .t {
          @include make-col-ready();
        }
      }
      @include expect() {
        .t {
          flex-shrink: 0;
          width: 100%;
          max-width: 100%;
          padding-inline-end: calc(var(--gutter-x) * 0.5);
          padding-inline-start: calc(var(--gutter-x) * 0.5);
          margin-top: var(--gutter-y);
        }
      }
    }
  }
}
