// Scale Tests
// ===========


// Size [function]
// ---------------
@include describe('size [function]') {
  @include it('Get size from map setting') {
    @include assert-equal(
      size('root'),
      20px
    );
  }

  @include it('Get size from unit adjustment') {
    @include assert-equal(
      size('text'),
      1rem
    );
  }

  @include it('Get size from linear adjustment') {
    @include assert-equal(
      size('h3'),
      2rem
    );
  }

  @include it('Get size from ratio adjustment') {
    @include assert-equal(
      size('big'),
      7.59375rem
    );
  }

  @include it('Get size from negative ratio') {
    @include assert-equal(
      size('small'),
      0.5rem
    );
  }

  @include it('Get unit-adjusted size') {
    @include assert-equal(
      size(24px, 'rem'),
      1.2rem
    );
  }

  @include it('Get unit-adjusted size with args') {
    @include assert-equal(
      size(24px, 'em', 10px),
      2.4em
    );
  }

  @include it('Adjusted size with multiple arguments') {
    @include assert-equal(
      size('medium-page'),
      75em
    );
  }

  @include it('Get rounded size') {
    @include assert-equal(
      size('round'),
      3rem
    );
  }

  @include it('Dont adjust non-comparable units') {
    @include assert-equal(
      size(24vmin),
      24vmin
    );
  }

  @include it('Allow viewport units without warning') {
    @include assert-equal(
      size('viewport'),
      10vw
    );
  }

  @include it('Allow viewport units without warning') {
    @include assert-equal(
      size('percent'),
      20%
    );
  }

  @include it('Allow simple calc values') {
    @include assert-equal(
      size('calc-simple'),
      calc(1em + 2vw)
    );
  }

  @include it('Allow compiled calc values') {
    @include assert-equal(
      size('calc'),
      calc(60px + 2vw / 3)
    );
  }

  @include it('Allow calc references') {
    @include assert-equal(
      size('calc-ref'),
      calc(60px + 2vw / 3)
    );
  }
}


// Scale [function]
// ----------------
@include describe('scale [function]') {
  @include it('Named ratio') {
    @include assert-equal(
      ratio('fifth'),
      3/2
    );
  }

  @include it('Linear ratio') {
    @include assert-equal(
      ratio('linear'),
      'linear'
    );
  }

  @include it('Recursive ratio') {
    @include assert-equal(
      ratio('new'),
      ratio('octave')
    );
  }
}


// Negative [function]
// -------------------
@include describe('negative [function]') {
  @include it('Get negative size') {
    @include assert-equal(
      negative('rhythm'),
      0 - size('rhythm')
    );
  }

  @include it('Get negative size with unit conversion') {
    @include assert-equal(
      negative('rhythm', 'px'),
      -30px
    );
  }

  @include it('Generates a negative calc size') {
    @include assert-equal(
      negative('calc-ref'),
      calc(-1 * (60px + 2vw / 3))
    );
  }
}


// Square [mixin]
// --------------
@include describe('square [mixin]') {
  @include it('Set height and width') {
    @include assert('Output height/width based on keyword') {
      @include output {
        @include square('h1');
      }

      @include expect {
        height: 4rem;
        width: 4rem;
      }
    }
  }
}


// For testing...
@function _plus-test-function(
  $size,
  $add
) {
  @return $size + $add;
}


// Adjust Size [function]
// ----------------------
@include describe('_ac-scale-adjust-size [function]') {
  @include it('Adjust units') {
    @include assert-equal(
      _ac-scale-adjust-size(30px, 'convert-units', 'rem'),
      1.5rem
    );
  }

  @include it('Linear adjustment') {
    @include assert-equal(
      _ac-scale-adjust-size(24px, 'linear', 3),
      72px
    );
  }

  @include it('Explicit ratio adjustment') {
    @include assert-equal(
      _ac-scale-adjust-size(24px, 1.5, 2),
      54px
    );
  }

  @include it('Named ratio adjustment') {
    @include assert-equal(
      _ac-scale-adjust-size(24px, 'fifth', 2),
      54px
    );
  }

  @include it('Arbitrary adjustment') {
    @include assert-equal(
      _ac-scale-adjust-size(24px, '_plus-test-function', 2px),
      24px + 2px
    );
  }

  @include it('Single-argument adjustment, with null') {
    @include assert-equal(
      _ac-scale-adjust-size(10px / 3, 'round', null),
      3px
    );
  }
}
