blob: 5e29b72279c9ddd0f8b6202083b1dbfdef59bdf2 [file] [log] [blame]
// Copyright 2014 The Flutter 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 'package:flutter_test/flutter_test.dart';
void main() {
test('BorderRadius control test', () {
const Rect rect = Rect.fromLTRB(19.0, 23.0, 29.0, 31.0);
BorderRadius borderRadius;
borderRadius = const BorderRadius.all(Radius.elliptical(5.0, 7.0));
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topLeft, const Radius.elliptical(5.0, 7.0));
expect(borderRadius.topRight, const Radius.elliptical(5.0, 7.0));
expect(borderRadius.bottomLeft, const Radius.elliptical(5.0, 7.0));
expect(borderRadius.bottomRight, const Radius.elliptical(5.0, 7.0));
expect(borderRadius.toRRect(rect), RRect.fromRectXY(rect, 5.0, 7.0));
borderRadius = BorderRadius.circular(3.0);
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topLeft, const Radius.elliptical(3.0, 3.0));
expect(borderRadius.topRight, const Radius.elliptical(3.0, 3.0));
expect(borderRadius.bottomLeft, const Radius.elliptical(3.0, 3.0));
expect(borderRadius.bottomRight, const Radius.elliptical(3.0, 3.0));
expect(borderRadius.toRRect(rect), RRect.fromRectXY(rect, 3.0, 3.0));
const Radius radius1 = Radius.elliptical(89.0, 87.0);
const Radius radius2 = Radius.elliptical(103.0, 107.0);
borderRadius = const BorderRadius.vertical(top: radius1, bottom: radius2);
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topLeft, radius1);
expect(borderRadius.topRight, radius1);
expect(borderRadius.bottomLeft, radius2);
expect(borderRadius.bottomRight, radius2);
expect(borderRadius.toRRect(rect), RRect.fromRectAndCorners(
rect,
topLeft: radius1,
topRight: radius1,
bottomLeft: radius2,
bottomRight: radius2,
));
borderRadius = const BorderRadius.horizontal(left: radius1, right: radius2);
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topLeft, radius1);
expect(borderRadius.topRight, radius2);
expect(borderRadius.bottomLeft, radius1);
expect(borderRadius.bottomRight, radius2);
expect(borderRadius.toRRect(rect), RRect.fromRectAndCorners(
rect,
topLeft: radius1,
topRight: radius2,
bottomLeft: radius1,
bottomRight: radius2,
));
borderRadius = BorderRadius.zero;
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topLeft, Radius.zero);
expect(borderRadius.topRight, Radius.zero);
expect(borderRadius.bottomLeft, Radius.zero);
expect(borderRadius.bottomRight, Radius.zero);
expect(borderRadius.toRRect(rect), RRect.fromRectAndCorners(rect));
borderRadius = const BorderRadius.only(topRight: radius1, bottomRight: radius2);
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topLeft, Radius.zero);
expect(borderRadius.topRight, radius1);
expect(borderRadius.bottomLeft, Radius.zero);
expect(borderRadius.bottomRight, radius2);
expect(borderRadius.toRRect(rect), RRect.fromRectAndCorners(
rect,
topRight: radius1,
bottomRight: radius2,
));
expect(
const BorderRadius.only(topLeft: Radius.elliptical(1.0, 2.0)).subtract(const BorderRadius.only(topLeft: Radius.elliptical(3.0, 5.0))),
const BorderRadius.only(topLeft: Radius.elliptical(-2.0, -3.0)),
);
expect(
const BorderRadius.only(topRight: Radius.elliptical(1.0, 2.0)).add(const BorderRadius.only(topLeft: Radius.elliptical(3.0, 5.0))),
const BorderRadius.only(topLeft: Radius.elliptical(3.0, 5.0), topRight: Radius.elliptical(1.0, 2.0)),
);
expect(
const BorderRadius.only(topLeft: Radius.elliptical(1.0, 2.0)) - const BorderRadius.only(topLeft: Radius.elliptical(3.0, 5.0)),
const BorderRadius.only(topLeft: Radius.elliptical(-2.0, -3.0)),
);
expect(
const BorderRadius.only(topRight: Radius.elliptical(1.0, 2.0)) + const BorderRadius.only(topLeft: Radius.elliptical(3.0, 5.0)),
const BorderRadius.only(topLeft: Radius.elliptical(3.0, 5.0), topRight: Radius.elliptical(1.0, 2.0)),
);
expect(
-const BorderRadius.only(topLeft: Radius.elliptical(1.0, 2.0)),
const BorderRadius.only(topLeft: Radius.elliptical(-1.0, -2.0)),
);
expect(
const BorderRadius.only(
topLeft: radius1,
topRight: radius2,
bottomLeft: radius2,
bottomRight: radius1,
) * 0.0,
BorderRadius.zero,
);
expect(
BorderRadius.circular(15.0) / 10.0,
BorderRadius.circular(1.5),
);
expect(
BorderRadius.circular(15.0) ~/ 10.0,
BorderRadius.circular(1.0),
);
expect(
BorderRadius.circular(15.0) % 10.0,
BorderRadius.circular(5.0),
);
});
test('BorderRadius.lerp() invariants', () {
final BorderRadius a = BorderRadius.circular(10.0);
final BorderRadius b = BorderRadius.circular(20.0);
expect(BorderRadius.lerp(a, b, 0.25), equals(a * 1.25));
expect(BorderRadius.lerp(a, b, 0.25), equals(b * 0.625));
expect(BorderRadius.lerp(a, b, 0.25), equals(a + BorderRadius.circular(2.5)));
expect(BorderRadius.lerp(a, b, 0.25), equals(b - BorderRadius.circular(7.5)));
expect(BorderRadius.lerp(null, null, 0.25), isNull);
expect(BorderRadius.lerp(null, b, 0.25), equals(b * 0.25));
expect(BorderRadius.lerp(a, null, 0.25), equals(a * 0.75));
});
test('BorderRadius.lerp() crazy', () {
const BorderRadius a = BorderRadius.only(
topLeft: Radius.elliptical(10.0, 20.0),
topRight: Radius.elliptical(30.0, 40.0),
bottomLeft: Radius.elliptical(50.0, 60.0),
);
const BorderRadius b = BorderRadius.only(
topRight: Radius.elliptical(100.0, 110.0),
bottomLeft: Radius.elliptical(120.0, 130.0),
bottomRight: Radius.elliptical(140.0, 150.0),
);
const BorderRadius c = BorderRadius.only(
topLeft: Radius.elliptical(5.0, 10.0), // 10,20 -> 0
topRight: Radius.elliptical(65.0, 75.0), // 30,40 -> 100,110
bottomLeft: Radius.elliptical(85.0, 95.0), // 50,60 -> 120,130
bottomRight: Radius.elliptical(70.0, 75.0), // 0,0 -> 140,150
);
expect(BorderRadius.lerp(a, b, 0.5), c);
});
test('BorderRadiusDirectional control test', () {
const Rect rect = Rect.fromLTRB(19.0, 23.0, 29.0, 31.0);
BorderRadiusDirectional borderRadius;
borderRadius = const BorderRadiusDirectional.all(Radius.elliptical(5.0, 7.0));
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topStart, const Radius.elliptical(5.0, 7.0));
expect(borderRadius.topEnd, const Radius.elliptical(5.0, 7.0));
expect(borderRadius.bottomStart, const Radius.elliptical(5.0, 7.0));
expect(borderRadius.bottomEnd, const Radius.elliptical(5.0, 7.0));
expect(borderRadius.resolve(TextDirection.ltr).toRRect(rect), RRect.fromRectXY(rect, 5.0, 7.0));
expect(borderRadius.resolve(TextDirection.rtl).toRRect(rect), RRect.fromRectXY(rect, 5.0, 7.0));
borderRadius = BorderRadiusDirectional.circular(3.0);
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topStart, const Radius.elliptical(3.0, 3.0));
expect(borderRadius.topEnd, const Radius.elliptical(3.0, 3.0));
expect(borderRadius.bottomStart, const Radius.elliptical(3.0, 3.0));
expect(borderRadius.bottomEnd, const Radius.elliptical(3.0, 3.0));
expect(borderRadius.resolve(TextDirection.ltr).toRRect(rect), RRect.fromRectXY(rect, 3.0, 3.0));
expect(borderRadius.resolve(TextDirection.rtl).toRRect(rect), RRect.fromRectXY(rect, 3.0, 3.0));
const Radius radius1 = Radius.elliptical(89.0, 87.0);
const Radius radius2 = Radius.elliptical(103.0, 107.0);
borderRadius = const BorderRadiusDirectional.vertical(top: radius1, bottom: radius2);
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topStart, radius1);
expect(borderRadius.topEnd, radius1);
expect(borderRadius.bottomStart, radius2);
expect(borderRadius.bottomEnd, radius2);
expect(borderRadius.resolve(TextDirection.ltr).toRRect(rect), RRect.fromRectAndCorners(
rect,
topLeft: radius1,
topRight: radius1,
bottomLeft: radius2,
bottomRight: radius2,
));
expect(borderRadius.resolve(TextDirection.rtl).toRRect(rect), RRect.fromRectAndCorners(
rect,
topLeft: radius1,
topRight: radius1,
bottomLeft: radius2,
bottomRight: radius2,
));
borderRadius = const BorderRadiusDirectional.horizontal(start: radius1, end: radius2);
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topStart, radius1);
expect(borderRadius.topEnd, radius2);
expect(borderRadius.bottomStart, radius1);
expect(borderRadius.bottomEnd, radius2);
expect(borderRadius.resolve(TextDirection.ltr).toRRect(rect), RRect.fromRectAndCorners(
rect,
topLeft: radius1,
topRight: radius2,
bottomLeft: radius1,
bottomRight: radius2,
));
expect(borderRadius.resolve(TextDirection.rtl).toRRect(rect), RRect.fromRectAndCorners(
rect,
topLeft: radius2,
topRight: radius1,
bottomLeft: radius2,
bottomRight: radius1,
));
borderRadius = BorderRadiusDirectional.zero;
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topStart, Radius.zero);
expect(borderRadius.topEnd, Radius.zero);
expect(borderRadius.bottomStart, Radius.zero);
expect(borderRadius.bottomEnd, Radius.zero);
expect(borderRadius.resolve(TextDirection.ltr).toRRect(rect), RRect.fromRectAndCorners(rect));
expect(borderRadius.resolve(TextDirection.rtl).toRRect(rect), RRect.fromRectAndCorners(rect));
borderRadius = const BorderRadiusDirectional.only(topEnd: radius1, bottomEnd: radius2);
expect(borderRadius, hasOneLineDescription);
expect(borderRadius.topStart, Radius.zero);
expect(borderRadius.topEnd, radius1);
expect(borderRadius.bottomStart, Radius.zero);
expect(borderRadius.bottomEnd, radius2);
expect(borderRadius.resolve(TextDirection.ltr).toRRect(rect), RRect.fromRectAndCorners(
rect,
topRight: radius1,
bottomRight: radius2,
));
expect(borderRadius.resolve(TextDirection.rtl).toRRect(rect), RRect.fromRectAndCorners(
rect,
topLeft: radius1,
bottomLeft: radius2,
));
expect(
const BorderRadiusDirectional.only(topStart: Radius.elliptical(1.0, 2.0)).subtract(const BorderRadiusDirectional.only(topStart: Radius.elliptical(3.0, 5.0))),
const BorderRadiusDirectional.only(topStart: Radius.elliptical(-2.0, -3.0)),
);
expect(
const BorderRadiusDirectional.only(topEnd: Radius.elliptical(1.0, 2.0)).add(const BorderRadiusDirectional.only(topStart: Radius.elliptical(3.0, 5.0))),
const BorderRadiusDirectional.only(topStart: Radius.elliptical(3.0, 5.0), topEnd: Radius.elliptical(1.0, 2.0)),
);
expect(
const BorderRadiusDirectional.only(topStart: Radius.elliptical(1.0, 2.0)) - const BorderRadiusDirectional.only(topStart: Radius.elliptical(3.0, 5.0)),
const BorderRadiusDirectional.only(topStart: Radius.elliptical(-2.0, -3.0)),
);
expect(
const BorderRadiusDirectional.only(topEnd: Radius.elliptical(1.0, 2.0)) + const BorderRadiusDirectional.only(topStart: Radius.elliptical(3.0, 5.0)),
const BorderRadiusDirectional.only(topStart: Radius.elliptical(3.0, 5.0), topEnd: Radius.elliptical(1.0, 2.0)),
);
expect(
-const BorderRadiusDirectional.only(topStart: Radius.elliptical(1.0, 2.0)),
const BorderRadiusDirectional.only(topStart: Radius.elliptical(-1.0, -2.0)),
);
expect(
const BorderRadiusDirectional.only(
topStart: radius1,
topEnd: radius2,
bottomStart: radius2,
bottomEnd: radius1,
) * 0.0,
BorderRadiusDirectional.zero,
);
expect(
BorderRadiusDirectional.circular(15.0) / 10.0,
BorderRadiusDirectional.circular(1.5),
);
expect(
BorderRadiusDirectional.circular(15.0) ~/ 10.0,
BorderRadiusDirectional.circular(1.0),
);
expect(
BorderRadiusDirectional.circular(15.0) % 10.0,
BorderRadiusDirectional.circular(5.0),
);
});
test('BorderRadiusDirectional.lerp() invariants', () {
final BorderRadiusDirectional a = BorderRadiusDirectional.circular(10.0);
final BorderRadiusDirectional b = BorderRadiusDirectional.circular(20.0);
expect(BorderRadiusDirectional.lerp(a, b, 0.25), equals(a * 1.25));
expect(BorderRadiusDirectional.lerp(a, b, 0.25), equals(b * 0.625));
expect(BorderRadiusDirectional.lerp(a, b, 0.25), equals(a + BorderRadiusDirectional.circular(2.5)));
expect(BorderRadiusDirectional.lerp(a, b, 0.25), equals(b - BorderRadiusDirectional.circular(7.5)));
expect(BorderRadiusDirectional.lerp(null, null, 0.25), isNull);
expect(BorderRadiusDirectional.lerp(null, b, 0.25), equals(b * 0.25));
expect(BorderRadiusDirectional.lerp(a, null, 0.25), equals(a * 0.75));
});
test('BorderRadiusDirectional.lerp() crazy', () {
const BorderRadiusDirectional a = BorderRadiusDirectional.only(
topStart: Radius.elliptical(10.0, 20.0),
topEnd: Radius.elliptical(30.0, 40.0),
bottomStart: Radius.elliptical(50.0, 60.0),
);
const BorderRadiusDirectional b = BorderRadiusDirectional.only(
topEnd: Radius.elliptical(100.0, 110.0),
bottomStart: Radius.elliptical(120.0, 130.0),
bottomEnd: Radius.elliptical(140.0, 150.0),
);
const BorderRadiusDirectional c = BorderRadiusDirectional.only(
topStart: Radius.elliptical(5.0, 10.0), // 10,20 -> 0
topEnd: Radius.elliptical(65.0, 75.0), // 30,40 -> 100,110
bottomStart: Radius.elliptical(85.0, 95.0), // 50,60 -> 120,130
bottomEnd: Radius.elliptical(70.0, 75.0), // 0,0 -> 140,150
);
expect(BorderRadiusDirectional.lerp(a, b, 0.5), c);
});
test('BorderRadiusGeometry.lerp()', () {
const BorderRadius a = BorderRadius.only(
topLeft: Radius.elliptical(10.0, 20.0),
topRight: Radius.elliptical(30.0, 40.0),
bottomLeft: Radius.elliptical(50.0, 60.0),
);
const BorderRadiusDirectional b = BorderRadiusDirectional.only(
topEnd: Radius.elliptical(100.0, 110.0),
bottomStart: Radius.elliptical(120.0, 130.0),
bottomEnd: Radius.elliptical(140.0, 150.0),
);
const BorderRadius ltr = BorderRadius.only(
topLeft: Radius.elliptical(5.0, 10.0), // 10,20 -> 0
topRight: Radius.elliptical(65.0, 75.0), // 30,40 -> 100,110
bottomLeft: Radius.elliptical(85.0, 95.0), // 50,60 -> 120,130
bottomRight: Radius.elliptical(70.0, 75.0), // 0,0 -> 140,150
);
const BorderRadius rtl = BorderRadius.only(
topLeft: Radius.elliptical(55.0, 65.0), // 10,20 -> 100,110
topRight: Radius.elliptical(15.0, 20.0), // 30,40 -> 0,0
bottomLeft: Radius.elliptical(95.0, 105.0), // 50,60 -> 140,150
bottomRight: Radius.elliptical(60.0, 65.0), // 0,0 -> 120,130
);
expect(BorderRadiusGeometry.lerp(a, b, 0.5)!.resolve(TextDirection.ltr), ltr);
expect(BorderRadiusGeometry.lerp(a, b, 0.5)!.resolve(TextDirection.rtl), rtl);
expect(BorderRadiusGeometry.lerp(a, b, 0.0)!.resolve(TextDirection.ltr), a);
expect(BorderRadiusGeometry.lerp(a, b, 1.0)!.resolve(TextDirection.rtl), b.resolve(TextDirection.rtl));
});
test('BorderRadiusGeometry subtract', () {
const BorderRadius a = BorderRadius.only(
topLeft: Radius.elliptical(10.0, 20.0),
topRight: Radius.elliptical(30.0, 40.0),
bottomLeft: Radius.elliptical(50.0, 60.0),
);
const BorderRadiusDirectional b = BorderRadiusDirectional.only(
topEnd: Radius.elliptical(100.0, 110.0),
bottomStart: Radius.elliptical(120.0, 130.0),
bottomEnd: Radius.elliptical(140.0, 150.0),
);
expect(a.subtract(b).resolve(TextDirection.ltr), BorderRadius.only(
topLeft: const Radius.elliptical(10.0, 20.0) - Radius.zero,
topRight: const Radius.elliptical(30.0, 40.0) - const Radius.elliptical(100.0, 110.0),
bottomLeft: const Radius.elliptical(50.0, 60.0) - const Radius.elliptical(120.0, 130.0),
bottomRight: Radius.zero - const Radius.elliptical(140.0, 150.0),
));
expect(a.subtract(b).resolve(TextDirection.rtl), BorderRadius.only(
topLeft: const Radius.elliptical(10.0, 20.0) - const Radius.elliptical(100.0, 110.0),
topRight: const Radius.elliptical(30.0, 40.0) - Radius.zero,
bottomLeft: const Radius.elliptical(50.0, 60.0) - const Radius.elliptical(140.0, 150.0),
bottomRight: Radius.zero - const Radius.elliptical(120.0, 130.0),
));
});
test('BorderRadiusGeometry add', () {
const BorderRadius a = BorderRadius.only(
topLeft: Radius.elliptical(10.0, 20.0),
topRight: Radius.elliptical(30.0, 40.0),
bottomLeft: Radius.elliptical(50.0, 60.0),
);
const BorderRadiusDirectional b = BorderRadiusDirectional.only(
topEnd: Radius.elliptical(100.0, 110.0),
bottomStart: Radius.elliptical(120.0, 130.0),
bottomEnd: Radius.elliptical(140.0, 150.0),
);
expect(a.add(b).resolve(TextDirection.ltr), BorderRadius.only(
topLeft: const Radius.elliptical(10.0, 20.0) + Radius.zero,
topRight: const Radius.elliptical(30.0, 40.0) + const Radius.elliptical(100.0, 110.0),
bottomLeft: const Radius.elliptical(50.0, 60.0) + const Radius.elliptical(120.0, 130.0),
bottomRight: Radius.zero + const Radius.elliptical(140.0, 150.0),
));
expect(a.add(b).resolve(TextDirection.rtl), BorderRadius.only(
topLeft: const Radius.elliptical(10.0, 20.0) + const Radius.elliptical(100.0, 110.0),
topRight: const Radius.elliptical(30.0, 40.0) + Radius.zero,
bottomLeft: const Radius.elliptical(50.0, 60.0) + const Radius.elliptical(140.0, 150.0),
bottomRight: Radius.zero + const Radius.elliptical(120.0, 130.0),
));
});
test('BorderRadiusGeometry add and multiply', () {
const BorderRadius a = BorderRadius.only(
topLeft: Radius.elliptical(10.0, 20.0),
topRight: Radius.elliptical(30.0, 40.0),
bottomLeft: Radius.elliptical(50.0, 60.0),
);
const BorderRadiusDirectional b = BorderRadiusDirectional.only(
topEnd: Radius.elliptical(100.0, 110.0),
bottomStart: Radius.elliptical(120.0, 130.0),
bottomEnd: Radius.elliptical(140.0, 150.0),
);
expect((a.add(b) * 0.5).resolve(TextDirection.ltr), BorderRadius.only(
topLeft: (const Radius.elliptical(10.0, 20.0) + Radius.zero) / 2.0,
topRight: (const Radius.elliptical(30.0, 40.0) + const Radius.elliptical(100.0, 110.0)) / 2.0,
bottomLeft: (const Radius.elliptical(50.0, 60.0) + const Radius.elliptical(120.0, 130.0)) / 2.0,
bottomRight: (Radius.zero + const Radius.elliptical(140.0, 150.0)) / 2.0,
));
expect((a.add(b) * 0.5).resolve(TextDirection.rtl), BorderRadius.only(
topLeft: (const Radius.elliptical(10.0, 20.0) + const Radius.elliptical(100.0, 110.0)) / 2.0,
topRight: (const Radius.elliptical(30.0, 40.0) + Radius.zero) / 2.0,
bottomLeft: (const Radius.elliptical(50.0, 60.0) + const Radius.elliptical(140.0, 150.0)) / 2.0,
bottomRight: (Radius.zero + const Radius.elliptical(120.0, 130.0)) / 2.0,
));
});
test('BorderRadiusGeometry add and subtract', () {
const BorderRadius a = BorderRadius.only(
topLeft: Radius.elliptical(300.0, 500.0),
);
const BorderRadiusDirectional b = BorderRadiusDirectional.only(
topEnd: Radius.elliptical(30.0, 50.0),
);
const BorderRadius c = BorderRadius.only(
bottomLeft: Radius.elliptical(3.0, 5.0),
);
const BorderRadius ltr = BorderRadius.only(
topLeft: Radius.elliptical(300.0, 500.0), // tL + 0 - 0
topRight: Radius.elliptical(30.0, 50.0), // 0 + tE - 0
bottomLeft: Radius.elliptical(-3.0, -5.0), // 0 + 0 - 0
);
const BorderRadius rtl = BorderRadius.only(
topLeft: Radius.elliptical(330.0, 550.0), // 0 + 0 - 0
bottomLeft: Radius.elliptical(-3.0, -5.0), // 0 + 0 - 0
);
expect(a.add(b.subtract(c)).resolve(TextDirection.ltr), ltr);
expect(a.add(b.subtract(c)).resolve(TextDirection.rtl), rtl);
});
test('BorderRadiusGeometry add and subtract, more', () {
const BorderRadius a = BorderRadius.only(
topLeft: Radius.elliptical(300.0, 300.0),
topRight: Radius.elliptical(500.0, 500.0),
bottomLeft: Radius.elliptical(700.0, 700.0),
bottomRight: Radius.elliptical(900.0, 900.0),
);
const BorderRadiusDirectional b = BorderRadiusDirectional.only(
topStart: Radius.elliptical(30.0, 30.0),
topEnd: Radius.elliptical(50.0, 50.0),
bottomStart: Radius.elliptical(70.0, 70.0),
bottomEnd: Radius.elliptical(90.0, 90.0),
);
const BorderRadius c = BorderRadius.only(
topLeft: Radius.elliptical(3.0, 3.0),
topRight: Radius.elliptical(5.0, 5.0),
bottomLeft: Radius.elliptical(7.0, 7.0),
bottomRight: Radius.elliptical(9.0, 9.0),
);
const BorderRadius ltr = BorderRadius.only(
topLeft: Radius.elliptical(327.0, 327.0), // tL + tS - tL
topRight: Radius.elliptical(545.0, 545.0), // tR + tE - tR
bottomLeft: Radius.elliptical(763.0, 763.0), // bL + bS - bL
bottomRight: Radius.elliptical(981.0, 981.0), // bR + bE - bR
);
const BorderRadius rtl = BorderRadius.only(
topLeft: Radius.elliptical(347.0, 347.0), // tL + tE - tL
topRight: Radius.elliptical(525.0, 525.0), // tR + TS - tR
bottomLeft: Radius.elliptical(783.0, 783.0), // bL + bE + bL
bottomRight: Radius.elliptical(961.0, 961.0), // bR + bS - bR
);
expect(a.add(b.subtract(c)).resolve(TextDirection.ltr), ltr);
expect(a.add(b.subtract(c)).resolve(TextDirection.rtl), rtl);
});
test('BorderRadiusGeometry operators', () {
const BorderRadius a = BorderRadius.only(
topLeft: Radius.elliptical(10.0, 20.0),
topRight: Radius.elliptical(30.0, 40.0),
bottomLeft: Radius.elliptical(50.0, 60.0),
);
const BorderRadiusDirectional b = BorderRadiusDirectional.only(
topEnd: Radius.elliptical(100.0, 110.0),
bottomStart: Radius.elliptical(120.0, 130.0),
bottomEnd: Radius.elliptical(140.0, 150.0),
);
const BorderRadius ltr = BorderRadius.only(
topLeft: Radius.elliptical(5.0, 10.0), // 10,20 -> 0
topRight: Radius.elliptical(65.0, 75.0), // 30,40 -> 100,110
bottomLeft: Radius.elliptical(85.0, 95.0), // 50,60 -> 120,130
bottomRight: Radius.elliptical(70.0, 75.0), // 0,0 -> 140,150
);
const BorderRadius rtl = BorderRadius.only(
topLeft: Radius.elliptical(55.0, 65.0), // 10,20 -> 100,110
topRight: Radius.elliptical(15.0, 20.0), // 30,40 -> 0,0
bottomLeft: Radius.elliptical(95.0, 105.0), // 50,60 -> 140,150
bottomRight: Radius.elliptical(60.0, 65.0), // 0,0 -> 120,130
);
expect(a.add(b.subtract(a) * 0.5).resolve(TextDirection.ltr), ltr);
expect(a.add(b.subtract(a) * 0.5).resolve(TextDirection.rtl), rtl);
expect(a.add(b.subtract(a) * 0.0).resolve(TextDirection.ltr), a);
expect(a.add(b.subtract(a) * 1.0).resolve(TextDirection.rtl), b.resolve(TextDirection.rtl));
});
test('BorderRadius copyWith, merge, ==, hashCode basics', () {
const BorderRadius firstRadius = BorderRadius.all(Radius.circular(5.0));
final BorderRadius secondRadius = firstRadius.copyWith();
expect(firstRadius, secondRadius);
expect(firstRadius.hashCode, secondRadius.hashCode);
});
test('BorderRadius copyWith parameters', () {
const Radius radius = Radius.circular(10);
const BorderRadius borderRadius = BorderRadius.all(radius);
expect(borderRadius.copyWith(topLeft: Radius.zero).topLeft, Radius.zero);
expect(borderRadius.copyWith(topLeft: Radius.zero).copyWith(topLeft: radius), borderRadius);
expect(borderRadius.copyWith(topRight: Radius.zero).topRight, Radius.zero);
expect(borderRadius.copyWith(topRight: Radius.zero).copyWith(topRight: radius), borderRadius);
expect(borderRadius.copyWith(bottomLeft: Radius.zero).bottomLeft, Radius.zero);
expect(borderRadius.copyWith(bottomLeft: Radius.zero).copyWith(bottomLeft: radius), borderRadius);
expect(borderRadius.copyWith(bottomRight: Radius.zero).bottomRight, Radius.zero);
expect(borderRadius.copyWith(bottomRight: Radius.zero).copyWith(bottomRight: radius), borderRadius);
});
}