localized_fonts_test.dart 5.27 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6 7 8
// This file is run as part of a reduced test set in CI on Mac and Windows
// machines.
@Tags(<String>['reduced-test-set'])

9 10 11 12 13 14 15 16 17 18 19 20
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

// TODO(hansmuller): when https://github.com/flutter/flutter/issues/17700
// is fixed, these tests should be updated to use a real font (not Ahem).

void main() {
  testWidgets(
    'RichText TextSpan styles with different locales',
    (WidgetTester tester) async {

      await tester.pumpWidget(
21
        MaterialApp(
22
          supportedLocales: const <Locale>[
23 24 25
            Locale('en', 'US'),
            Locale('ja'),
            Locale('zh'),
26
          ],
27
          home: Builder(
28 29
            builder: (BuildContext context) {
              const String character = '骨';
30
              final TextStyle style = Theme.of(context).textTheme.headline2!;
31 32
              return Scaffold(
                body: Container(
33 34
                  padding: const EdgeInsets.all(48.0),
                  alignment: Alignment.center,
35
                  child: RepaintBoundary(
36 37
                    // Expected result can be seen here:
                    // https://user-images.githubusercontent.com/1377460/40503473-faad6f34-5f42-11e8-972b-d83b727c9d0e.png
38 39
                    child: RichText(
                      text: TextSpan(
40
                        children: <TextSpan>[
41 42
                          TextSpan(text: character, style: style.copyWith(locale: const Locale('ja'))),
                          TextSpan(text: character, style: style.copyWith(locale: const Locale('zh'))),
43 44 45 46 47 48 49 50
                        ],
                      ),
                    ),
                  ),
                ),
              );
            },
          ),
51
        ),
52 53 54 55
      );

      await expectLater(
        find.byType(RichText),
56
        matchesGoldenFile('localized_fonts.rich_text.styled_text_span.png'),
57
      );
58 59
    },
  );
60 61 62 63 64

  testWidgets(
    'Text with locale-specific glyphs, ambient locale',
    (WidgetTester tester) async {
      await tester.pumpWidget(
65
        MaterialApp(
66
          supportedLocales: const <Locale>[
67 68 69
            Locale('en', 'US'),
            Locale('ja'),
            Locale('zh'),
70
          ],
71
          home: Builder(
72 73
            builder: (BuildContext context) {
              const String character = '骨';
74
              final TextStyle style = Theme.of(context).textTheme.headline2!;
75 76
              return Scaffold(
                body: Container(
77 78
                  padding: const EdgeInsets.all(48.0),
                  alignment: Alignment.center,
79
                  child: RepaintBoundary(
80 81
                    // Expected result can be seen here:
                    // https://user-images.githubusercontent.com/1377460/40503473-faad6f34-5f42-11e8-972b-d83b727c9d0e.png
82
                    child: Row(
83 84
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: <Widget>[
85
                        Localizations.override(
86 87
                          context: context,
                          locale: const Locale('ja'),
88
                          child: Text(character, style: style),
89
                        ),
90
                        Localizations.override(
91 92
                          context: context,
                          locale: const Locale('zh'),
93
                          child: Text(character, style: style),
94 95 96 97 98 99 100 101
                        ),
                      ],
                    ),
                  ),
                ),
              );
            },
          ),
102
        ),
103 104 105 106
      );

      await expectLater(
        find.byType(Row),
107
        matchesGoldenFile('localized_fonts.text_ambient_locale.chars.png'),
108
      );
109 110
    },
  );
111 112 113 114 115

  testWidgets(
    'Text with locale-specific glyphs, explicit locale',
    (WidgetTester tester) async {
      await tester.pumpWidget(
116
        MaterialApp(
117
          supportedLocales: const <Locale>[
118 119 120
            Locale('en', 'US'),
            Locale('ja'),
            Locale('zh'),
121
          ],
122
          home: Builder(
123 124
            builder: (BuildContext context) {
              const String character = '骨';
125
              final TextStyle style = Theme.of(context).textTheme.headline2!;
126 127
              return Scaffold(
                body: Container(
128 129
                  padding: const EdgeInsets.all(48.0),
                  alignment: Alignment.center,
130
                  child: RepaintBoundary(
131 132
                    // Expected result can be seen here:
                    // https://user-images.githubusercontent.com/1377460/40503473-faad6f34-5f42-11e8-972b-d83b727c9d0e.png
133
                    child: Row(
134 135
                      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                      children: <Widget>[
136
                        Text(character, style: style, locale: const Locale('ja')),
137
                        Text(character, style: style, locale: const Locale('zh')),
138 139 140 141 142 143 144
                      ],
                    ),
                  ),
                ),
              );
            },
          ),
145
        ),
146 147 148 149
      );

      await expectLater(
        find.byType(Row),
150
        matchesGoldenFile('localized_fonts.text_explicit_locale.chars.png'),
151
      );
152 153
    },
  );
154 155

}