// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/painting.dart';

import '../flutter_test_alternative.dart';

void main() {
  test('applyBoxFit', () {
    FittedSizes result;

    result = applyBoxFit(BoxFit.scaleDown, const Size(100.0, 1000.0), const Size(200.0, 2000.0));
    expect(result.source, equals(const Size(100.0, 1000.0)));
    expect(result.destination, equals(const Size(100.0, 1000.0)));

    result = applyBoxFit(BoxFit.scaleDown, const Size(300.0, 3000.0), const Size(200.0, 2000.0));
    expect(result.source, equals(const Size(300.0, 3000.0)));
    expect(result.destination, equals(const Size(200.0, 2000.0)));

    result = applyBoxFit(BoxFit.fitWidth, const Size(2000.0, 400.0), const Size(1000.0, 100.0));
    expect(result.source, equals(const Size(2000.0, 200.0)));
    expect(result.destination, equals(const Size(1000.0, 100.0)));

    result = applyBoxFit(BoxFit.fitHeight, const Size(400.0, 2000.0), const Size(100.0, 1000.0));
    expect(result.source, equals(const Size(200.0, 2000.0)));
    expect(result.destination, equals(const Size(100.0, 1000.0)));

    _testZeroAndNegativeSizes(BoxFit.fill);
    _testZeroAndNegativeSizes(BoxFit.contain);
    _testZeroAndNegativeSizes(BoxFit.cover);
    _testZeroAndNegativeSizes(BoxFit.fitWidth);
    _testZeroAndNegativeSizes(BoxFit.fitHeight);
    _testZeroAndNegativeSizes(BoxFit.none);
    _testZeroAndNegativeSizes(BoxFit.scaleDown);
  });
}

void _testZeroAndNegativeSizes(BoxFit fit) {
    FittedSizes result;

    result = applyBoxFit(fit, const Size(-400.0, 2000.0), const Size(100.0, 1000.0));
    expect(result.source, equals(Size.zero));
    expect(result.destination, equals(Size.zero));

    result = applyBoxFit(fit, const Size(400.0, -2000.0), const Size(100.0, 1000.0));
    expect(result.source, equals(Size.zero));
    expect(result.destination, equals(Size.zero));

    result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(-100.0, 1000.0));
    expect(result.source, equals(Size.zero));
    expect(result.destination, equals(Size.zero));

    result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(100.0, -1000.0));
    expect(result.source, equals(Size.zero));
    expect(result.destination, equals(Size.zero));

    result = applyBoxFit(fit, const Size(0.0, 2000.0), const Size(100.0, 1000.0));
    expect(result.source, equals(Size.zero));
    expect(result.destination, equals(Size.zero));

    result = applyBoxFit(fit, const Size(400.0, 0.0), const Size(100.0, 1000.0));
    expect(result.source, equals(Size.zero));
    expect(result.destination, equals(Size.zero));

    result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(0.0, 1000.0));
    expect(result.source, equals(Size.zero));
    expect(result.destination, equals(Size.zero));

    result = applyBoxFit(fit, const Size(400.0, 2000.0), const Size(100.0, 0.0));
    expect(result.source, equals(Size.zero));
    expect(result.destination, equals(Size.zero));
}
