blob: 26e573eefd707671ad2fb7d4912270522a54bdea [file] [log] [blame]
// Copyright 2013 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:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/ui.dart' as ui;
import '../common/test_initialization.dart';
void main() {
internalBootstrapBrowserTest(() => testMain);
}
Future<void> testMain() async {
setUpUnitTests(
emulateTesterEnvironment: false,
setUpTestViewDimensions: false,
);
test('blanks are equal to each other', () {
final ui.ParagraphStyle a = ui.ParagraphStyle();
final ui.ParagraphStyle b = ui.ParagraphStyle();
expect(a, b);
expect(a.hashCode, b.hashCode);
});
test('each property individually equal', () {
for (final String property in _populatorsA.keys) {
final _ParagraphStylePropertyPopulator populator = _populatorsA[property]!;
final _TestParagraphStyleBuilder aBuilder = _TestParagraphStyleBuilder();
populator(aBuilder);
final ui.ParagraphStyle a = aBuilder.build();
final _TestParagraphStyleBuilder bBuilder = _TestParagraphStyleBuilder();
populator(bBuilder);
final ui.ParagraphStyle b = bBuilder.build();
expect(reason: '$property property is equal', a, b);
expect(reason: '$property hashCode is equal', a.hashCode, b.hashCode);
}
});
test('each property individually not equal', () {
for (final String property in _populatorsA.keys) {
final _ParagraphStylePropertyPopulator populatorA = _populatorsA[property]!;
final _TestParagraphStyleBuilder aBuilder = _TestParagraphStyleBuilder();
populatorA(aBuilder);
final ui.ParagraphStyle a = aBuilder.build();
final _ParagraphStylePropertyPopulator populatorB = _populatorsB[property]!;
final _TestParagraphStyleBuilder bBuilder = _TestParagraphStyleBuilder();
populatorB(bBuilder);
final ui.ParagraphStyle b = bBuilder.build();
expect(reason: '$property property is not equal', a, isNot(b));
expect(reason: '$property hashCode is not equal', a.hashCode, isNot(b.hashCode));
}
});
test('all properties altogether equal', () {
final _TestParagraphStyleBuilder aBuilder = _TestParagraphStyleBuilder();
final _TestParagraphStyleBuilder bBuilder = _TestParagraphStyleBuilder();
for (final String property in _populatorsA.keys) {
final _ParagraphStylePropertyPopulator populator = _populatorsA[property]!;
populator(aBuilder);
populator(bBuilder);
}
final ui.ParagraphStyle a = aBuilder.build();
final ui.ParagraphStyle b = bBuilder.build();
expect(a, b);
expect(a.hashCode, b.hashCode);
});
test('all properties altogether not equal', () {
final _TestParagraphStyleBuilder aBuilder = _TestParagraphStyleBuilder();
final _TestParagraphStyleBuilder bBuilder = _TestParagraphStyleBuilder();
for (final String property in _populatorsA.keys) {
final _ParagraphStylePropertyPopulator populatorA = _populatorsA[property]!;
populatorA(aBuilder);
final _ParagraphStylePropertyPopulator populatorB = _populatorsB[property]!;
populatorB(bBuilder);
}
final ui.ParagraphStyle a = aBuilder.build();
final ui.ParagraphStyle b = bBuilder.build();
expect(a, isNot(b));
expect(a.hashCode, isNot(b.hashCode));
});
}
typedef _ParagraphStylePropertyPopulator = void Function(_TestParagraphStyleBuilder builder);
final Map<String, _ParagraphStylePropertyPopulator> _populatorsA = <String, _ParagraphStylePropertyPopulator>{
'textAlign': (_TestParagraphStyleBuilder builder) { builder.textAlign = ui.TextAlign.left; },
'textDirection': (_TestParagraphStyleBuilder builder) { builder.textDirection = ui.TextDirection.rtl; },
'fontWeight': (_TestParagraphStyleBuilder builder) { builder.fontWeight = ui.FontWeight.w400; },
'fontStyle': (_TestParagraphStyleBuilder builder) { builder.fontStyle = ui.FontStyle.normal; },
'maxLines': (_TestParagraphStyleBuilder builder) { builder.maxLines = 1; },
'fontFamily': (_TestParagraphStyleBuilder builder) { builder.fontFamily = 'Arial'; },
'fontSize': (_TestParagraphStyleBuilder builder) { builder.fontSize = 12; },
'height': (_TestParagraphStyleBuilder builder) { builder.height = 13; },
'textHeightBehavior': (_TestParagraphStyleBuilder builder) { builder.textHeightBehavior = const ui.TextHeightBehavior(); },
'strutStyle': (_TestParagraphStyleBuilder builder) { builder.strutStyle = ui.StrutStyle(fontFamily: 'Times New Roman'); },
'ellipsis': (_TestParagraphStyleBuilder builder) { builder.ellipsis = '...'; },
'locale': (_TestParagraphStyleBuilder builder) { builder.locale = const ui.Locale('en', 'US'); },
};
final Map<String, _ParagraphStylePropertyPopulator> _populatorsB = <String, _ParagraphStylePropertyPopulator>{
'textAlign': (_TestParagraphStyleBuilder builder) { builder.textAlign = ui.TextAlign.right; },
'textDirection': (_TestParagraphStyleBuilder builder) { builder.textDirection = ui.TextDirection.ltr; },
'fontWeight': (_TestParagraphStyleBuilder builder) { builder.fontWeight = ui.FontWeight.w600; },
'fontStyle': (_TestParagraphStyleBuilder builder) { builder.fontStyle = ui.FontStyle.italic; },
'maxLines': (_TestParagraphStyleBuilder builder) { builder.maxLines = 2; },
'fontFamily': (_TestParagraphStyleBuilder builder) { builder.fontFamily = 'Noto'; },
'fontSize': (_TestParagraphStyleBuilder builder) { builder.fontSize = 12.1; },
'height': (_TestParagraphStyleBuilder builder) { builder.height = 13.1; },
'textHeightBehavior': (_TestParagraphStyleBuilder builder) { builder.textHeightBehavior = const ui.TextHeightBehavior(applyHeightToFirstAscent: false); },
'strutStyle': (_TestParagraphStyleBuilder builder) { builder.strutStyle = ui.StrutStyle(fontFamily: 'sans-serif'); },
'ellipsis': (_TestParagraphStyleBuilder builder) { builder.ellipsis = '___'; },
'locale': (_TestParagraphStyleBuilder builder) { builder.locale = const ui.Locale('fr', 'CA'); },
};
class _TestParagraphStyleBuilder {
ui.TextAlign? textAlign;
ui.TextDirection? textDirection;
ui.FontWeight? fontWeight;
ui.FontStyle? fontStyle;
int? maxLines;
String? fontFamily;
double? fontSize;
double? height;
ui.TextHeightBehavior? textHeightBehavior;
ui.StrutStyle? strutStyle;
String? ellipsis;
ui.Locale? locale;
ui.ParagraphStyle build() {
return ui.ParagraphStyle(
textAlign: textAlign,
textDirection: textDirection,
fontWeight: fontWeight,
fontStyle: fontStyle,
maxLines: maxLines,
fontFamily: fontFamily,
fontSize: fontSize,
height: height,
textHeightBehavior: textHeightBehavior,
strutStyle: strutStyle,
ellipsis: ellipsis,
locale: locale,
);
}
}