| // 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/material.dart'; |
| import 'package:flutter/widgets.dart'; |
| import 'package:flutter_localizations/flutter_localizations.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| void main() { |
| testWidgets('Text baseline with CJK locale', (WidgetTester tester) async { |
| // This test in combination with 'Text baseline with EN locale' verify the baselines |
| // used to align text with ideographic baselines are reasonable. We are currently |
| // using the alphabetic baseline to lay out as the ideographic baseline is not yet |
| // properly implemented. When the ideographic baseline is better defined and implemented, |
| // the values of this test should change very slightly. See the issue this is based off |
| // of: https://github.com/flutter/flutter/issues/25782. |
| final Key targetKey = UniqueKey(); |
| await tester.pumpWidget( |
| MaterialApp( |
| routes: <String, WidgetBuilder>{ |
| '/next': (BuildContext context) { |
| return const Text('Next'); |
| }, |
| }, |
| localizationsDelegates: const <LocalizationsDelegate<dynamic>>[ |
| GlobalMaterialLocalizations.delegate, |
| ], |
| supportedLocales: const <Locale>[ |
| Locale('en', 'US'), |
| Locale('es', 'ES'), |
| Locale('zh', 'CN'), |
| ], |
| locale: const Locale('zh', 'CN'), |
| home: Material( |
| child: Center( |
| child: Builder( |
| key: targetKey, |
| builder: (BuildContext context) { |
| return PopupMenuButton<int>( |
| onSelected: (int value) { |
| Navigator.pushNamed(context, '/next'); |
| }, |
| itemBuilder: (BuildContext context) { |
| return <PopupMenuItem<int>>[ |
| const PopupMenuItem<int>( |
| value: 1, |
| child: Text( |
| 'hello, world', |
| style: TextStyle(color: Colors.blue), |
| ), |
| ), |
| const PopupMenuItem<int>( |
| value: 2, |
| child: Text( |
| '你好,世界', |
| style: TextStyle(color: Colors.blue), |
| ), |
| ), |
| ]; |
| }, |
| ); |
| }, |
| ), |
| ), |
| ), |
| ), |
| ); |
| |
| await tester.tap(find.byKey(targetKey)); |
| await tester.pumpAndSettle(); |
| |
| expect(find.text('hello, world'), findsOneWidget); |
| expect(find.text('你好,世界'), findsOneWidget); |
| |
| Offset topLeft = tester.getTopLeft(find.text('hello, world')); |
| Offset topRight = tester.getTopRight(find.text('hello, world')); |
| Offset bottomLeft = tester.getBottomLeft(find.text('hello, world')); |
| Offset bottomRight = tester.getBottomRight(find.text('hello, world')); |
| |
| expect(topLeft, const Offset(392.0, 299.5)); |
| expect(topRight, const Offset(596.0, 299.5)); |
| expect(bottomLeft, const Offset(392.0, 316.5)); |
| expect(bottomRight, const Offset(596.0, 316.5)); |
| |
| topLeft = tester.getTopLeft(find.text('你好,世界')); |
| topRight = tester.getTopRight(find.text('你好,世界')); |
| bottomLeft = tester.getBottomLeft(find.text('你好,世界')); |
| bottomRight = tester.getBottomRight(find.text('你好,世界')); |
| |
| expect(topLeft, const Offset(392.0, 347.5)); |
| expect(topRight, const Offset(477.0, 347.5)); |
| expect(bottomLeft, const Offset(392.0, 364.5)); |
| expect(bottomRight, const Offset(477.0, 364.5)); |
| }); |
| |
| testWidgets('Text baseline with EN locale', (WidgetTester tester) async { |
| // This test in combination with 'Text baseline with CJK locale' verify the baselines |
| // used to align text with ideographic baselines are reasonable. We are currently |
| // using the alphabetic baseline to lay out as the ideographic baseline is not yet |
| // properly implemented. When the ideographic baseline is better defined and implemented, |
| // the values of this test should change very slightly. See the issue this is based off |
| // of: https://github.com/flutter/flutter/issues/25782. |
| final Key targetKey = UniqueKey(); |
| await tester.pumpWidget( |
| MaterialApp( |
| routes: <String, WidgetBuilder>{ |
| '/next': (BuildContext context) { |
| return const Text('Next'); |
| }, |
| }, |
| localizationsDelegates: const <LocalizationsDelegate<dynamic>>[ |
| GlobalMaterialLocalizations.delegate, |
| ], |
| supportedLocales: const <Locale>[ |
| Locale('en', 'US'), |
| Locale('es', 'ES'), |
| Locale('zh', 'CN'), |
| ], |
| locale: const Locale('en', 'US'), |
| home: Material( |
| child: Center( |
| child: Builder( |
| key: targetKey, |
| builder: (BuildContext context) { |
| return PopupMenuButton<int>( |
| onSelected: (int value) { |
| Navigator.pushNamed(context, '/next'); |
| }, |
| itemBuilder: (BuildContext context) { |
| return <PopupMenuItem<int>>[ |
| const PopupMenuItem<int>( |
| value: 1, |
| child: Text( |
| 'hello, world', |
| style: TextStyle(color: Colors.blue), |
| ), |
| ), |
| const PopupMenuItem<int>( |
| value: 2, |
| child: Text( |
| '你好,世界', |
| style: TextStyle(color: Colors.blue), |
| ), |
| ), |
| ]; |
| }, |
| ); |
| }, |
| ), |
| ), |
| ), |
| ), |
| ); |
| |
| await tester.tap(find.byKey(targetKey)); |
| await tester.pumpAndSettle(); |
| |
| expect(find.text('hello, world'), findsOneWidget); |
| expect(find.text('你好,世界'), findsOneWidget); |
| |
| Offset topLeft = tester.getTopLeft(find.text('hello, world')); |
| Offset topRight = tester.getTopRight(find.text('hello, world')); |
| Offset bottomLeft = tester.getBottomLeft(find.text('hello, world')); |
| Offset bottomRight = tester.getBottomRight(find.text('hello, world')); |
| |
| expect(topLeft, const Offset(392.0, 300.0)); |
| expect(topRight, const Offset(584.0, 300.0)); |
| expect(bottomLeft, const Offset(392.0, 316)); |
| expect(bottomRight, const Offset(584.0, 316)); |
| |
| topLeft = tester.getTopLeft(find.text('你好,世界')); |
| topRight = tester.getTopRight(find.text('你好,世界')); |
| bottomLeft = tester.getBottomLeft(find.text('你好,世界')); |
| bottomRight = tester.getBottomRight(find.text('你好,世界')); |
| |
| expect(topLeft, const Offset(392.0, 348.0)); |
| expect(topRight, const Offset(472.0, 348.0)); |
| expect(bottomLeft, const Offset(392.0, 364.0)); |
| expect(bottomRight, const Offset(472.0, 364.0)); |
| }); |
| } |