| // 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_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: GlobalMaterialLocalizations.delegates, | 
 |         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: GlobalMaterialLocalizations.delegates, | 
 |         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)); | 
 |   }); | 
 | } |