media_query_test.dart 9.54 KB
Newer Older
1 2 3 4
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5
import 'dart:ui' show Brightness;
6 7 8 9
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.dart';

void main() {
10 11 12
  testWidgets('MediaQuery does not have a default', (WidgetTester tester) async {
    bool tested = false;
    await tester.pumpWidget(
13
      Builder(
14 15 16
        builder: (BuildContext context) {
          tested = true;
          MediaQuery.of(context); // should throw
17
          return Container();
18 19 20 21 22 23
        }
      )
    );
    expect(tested, isTrue);
    expect(tester.takeException(), isFlutterError);
  });
24

25 26
  testWidgets('MediaQuery defaults to null', (WidgetTester tester) async {
    bool tested = false;
27
    await tester.pumpWidget(
28
      Builder(
29
        builder: (BuildContext context) {
30 31 32
          final MediaQueryData data = MediaQuery.of(context, nullOk: true);
          expect(data, isNull);
          tested = true;
33
          return Container();
34 35 36
        }
      )
    );
37 38
    expect(tested, isTrue);
  });
39

40
  testWidgets('MediaQueryData is sane', (WidgetTester tester) async {
41
    final MediaQueryData data = MediaQueryData.fromWindow(WidgetsBinding.instance.window);
42 43
    expect(data, hasOneLineDescription);
    expect(data.hashCode, equals(data.copyWith().hashCode));
44
    expect(data.size, equals(WidgetsBinding.instance.window.physicalSize / WidgetsBinding.instance.window.devicePixelRatio));
45 46 47
    expect(data.accessibleNavigation, false);
    expect(data.invertColors, false);
    expect(data.disableAnimations, false);
48
    expect(data.boldText, false);
49
    expect(data.platformBrightness, Brightness.light);
50
  });
51 52

  testWidgets('MediaQueryData.copyWith defaults to source', (WidgetTester tester) async {
53
    final MediaQueryData data = MediaQueryData.fromWindow(WidgetsBinding.instance.window);
54 55 56 57 58 59
    final MediaQueryData copied = data.copyWith();
    expect(copied.size, data.size);
    expect(copied.devicePixelRatio, data.devicePixelRatio);
    expect(copied.textScaleFactor, data.textScaleFactor);
    expect(copied.padding, data.padding);
    expect(copied.viewInsets, data.viewInsets);
60
    expect(copied.alwaysUse24HourFormat, data.alwaysUse24HourFormat);
61 62 63
    expect(copied.accessibleNavigation, data.accessibleNavigation);
    expect(copied.invertColors, data.invertColors);
    expect(copied.disableAnimations, data.disableAnimations);
64
    expect(copied.boldText, data.boldText);
65
    expect(copied.platformBrightness, data.platformBrightness);
66 67 68
  });

  testWidgets('MediaQuery.copyWith copies specified values', (WidgetTester tester) async {
69
    final MediaQueryData data = MediaQueryData.fromWindow(WidgetsBinding.instance.window);
70 71 72 73 74 75
    final MediaQueryData copied = data.copyWith(
      size: const Size(3.14, 2.72),
      devicePixelRatio: 1.41,
      textScaleFactor: 1.62,
      padding: const EdgeInsets.all(9.10938),
      viewInsets: const EdgeInsets.all(1.67262),
76
      alwaysUse24HourFormat: true,
77 78 79
      accessibleNavigation: true,
      invertColors: true,
      disableAnimations: true,
80
      boldText: true,
81
      platformBrightness: Brightness.dark,
82 83 84 85 86 87
    );
    expect(copied.size, const Size(3.14, 2.72));
    expect(copied.devicePixelRatio, 1.41);
    expect(copied.textScaleFactor, 1.62);
    expect(copied.padding, const EdgeInsets.all(9.10938));
    expect(copied.viewInsets, const EdgeInsets.all(1.67262));
88
    expect(copied.alwaysUse24HourFormat, true);
89 90 91
    expect(copied.accessibleNavigation, true);
    expect(copied.invertColors, true);
    expect(copied.disableAnimations, true);
92
    expect(copied.boldText, true);
93
    expect(copied.platformBrightness, Brightness.dark);
94
  });
95

96
 testWidgets('MediaQuery.removePadding removes specified padding', (WidgetTester tester) async {
97
   const Size size = Size(2.0, 4.0);
98 99
   const double devicePixelRatio = 2.0;
   const double textScaleFactor = 1.2;
100 101
   const EdgeInsets padding = EdgeInsets.only(top: 1.0, right: 2.0, left: 3.0, bottom: 4.0);
   const EdgeInsets viewInsets = EdgeInsets.only(top: 5.0, right: 6.0, left: 7.0, bottom: 8.0);
102

103 104
   MediaQueryData unpadded;
   await tester.pumpWidget(
105
     MediaQuery(
106 107 108 109 110 111 112
       data: const MediaQueryData(
         size: size,
         devicePixelRatio: devicePixelRatio,
         textScaleFactor: textScaleFactor,
         padding: padding,
         viewInsets: viewInsets,
         alwaysUse24HourFormat: true,
113 114 115
         accessibleNavigation: true,
         invertColors: true,
         disableAnimations: true,
116
         boldText: true,
117
       ),
118
       child: Builder(
119
         builder: (BuildContext context) {
120
           return MediaQuery.removePadding(
121 122 123 124 125
             context: context,
             removeLeft: true,
             removeTop: true,
             removeRight: true,
             removeBottom: true,
126
             child: Builder(
127 128
               builder: (BuildContext context) {
                 unpadded = MediaQuery.of(context);
129
                 return Container();
130 131 132 133 134 135 136
               }
             ),
           );
         },
       ),
     )
   );
137

138 139 140 141 142 143
   expect(unpadded.size, size);
   expect(unpadded.devicePixelRatio, devicePixelRatio);
   expect(unpadded.textScaleFactor, textScaleFactor);
   expect(unpadded.padding, EdgeInsets.zero);
   expect(unpadded.viewInsets, viewInsets);
   expect(unpadded.alwaysUse24HourFormat, true);
144 145 146
   expect(unpadded.accessibleNavigation, true);
   expect(unpadded.invertColors, true);
   expect(unpadded.disableAnimations, true);
147
   expect(unpadded.boldText, true);
148
  });
149 150

  testWidgets('MediaQuery.removeViewInsets removes specified viewInsets', (WidgetTester tester) async {
151
    const Size size = Size(2.0, 4.0);
152 153
    const double devicePixelRatio = 2.0;
    const double textScaleFactor = 1.2;
154 155
    const EdgeInsets padding = EdgeInsets.only(top: 5.0, right: 6.0, left: 7.0, bottom: 8.0);
    const EdgeInsets viewInsets = EdgeInsets.only(top: 1.0, right: 2.0, left: 3.0, bottom: 4.0);
156 157 158

    MediaQueryData unpadded;
    await tester.pumpWidget(
159
      MediaQuery(
160 161 162 163 164 165 166
        data: const MediaQueryData(
          size: size,
          devicePixelRatio: devicePixelRatio,
          textScaleFactor: textScaleFactor,
          padding: padding,
          viewInsets: viewInsets,
          alwaysUse24HourFormat: true,
167 168 169
          accessibleNavigation: true,
          invertColors: true,
          disableAnimations: true,
170
          boldText: true,
171
        ),
172
        child: Builder(
173
          builder: (BuildContext context) {
174
            return MediaQuery.removeViewInsets(
175 176 177 178 179
              context: context,
              removeLeft: true,
              removeTop: true,
              removeRight: true,
              removeBottom: true,
180
              child: Builder(
181 182
                builder: (BuildContext context) {
                  unpadded = MediaQuery.of(context);
183
                  return Container();
184 185 186 187 188 189 190 191 192 193 194 195 196 197
                }
              ),
            );
          },
        ),
      )
    );

    expect(unpadded.size, size);
    expect(unpadded.devicePixelRatio, devicePixelRatio);
    expect(unpadded.textScaleFactor, textScaleFactor);
    expect(unpadded.padding, padding);
    expect(unpadded.viewInsets, EdgeInsets.zero);
    expect(unpadded.alwaysUse24HourFormat, true);
198 199 200
    expect(unpadded.accessibleNavigation, true);
    expect(unpadded.invertColors, true);
    expect(unpadded.disableAnimations, true);
201
    expect(unpadded.boldText, true);
202
  });
203 204 205 206 207 208

 testWidgets('MediaQuery.textScaleFactorOf', (WidgetTester tester) async {
   double outsideTextScaleFactor;
   double insideTextScaleFactor;

   await tester.pumpWidget(
209
     Builder(
210 211
       builder: (BuildContext context) {
         outsideTextScaleFactor = MediaQuery.textScaleFactorOf(context);
212
         return MediaQuery(
213 214 215
           data: const MediaQueryData(
             textScaleFactor: 4.0,
           ),
216
           child: Builder(
217 218
             builder: (BuildContext context) {
               insideTextScaleFactor = MediaQuery.textScaleFactorOf(context);
219
               return Container();
220 221 222 223 224 225 226 227 228 229
             },
           ),
         );
       },
     ),
   );

   expect(outsideTextScaleFactor, 1.0);
   expect(insideTextScaleFactor, 4.0);
 });
230

231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257
  testWidgets('MediaQuery.platformBrightnessOf', (WidgetTester tester) async {
    Brightness outsideBrightness;
    Brightness insideBrightness;

    await tester.pumpWidget(
      Builder(
        builder: (BuildContext context) {
          outsideBrightness = MediaQuery.platformBrightnessOf(context);
          return MediaQuery(
            data: const MediaQueryData(
              platformBrightness: Brightness.dark,
            ),
            child: Builder(
              builder: (BuildContext context) {
                insideBrightness = MediaQuery.platformBrightnessOf(context);
                return Container();
              },
            ),
          );
        },
      ),
    );

    expect(outsideBrightness, Brightness.light);
    expect(insideBrightness, Brightness.dark);
  });

258 259 260 261 262
  testWidgets('MediaQuery.boldTextOverride', (WidgetTester tester) async {
    bool outsideBoldTextOverride;
    bool insideBoldTextOverride;

    await tester.pumpWidget(
263
      Builder(
264 265
        builder: (BuildContext context) {
          outsideBoldTextOverride = MediaQuery.boldTextOverride(context);
266
          return MediaQuery(
267 268 269
            data: const MediaQueryData(
              boldText: true,
            ),
270
            child: Builder(
271 272
              builder: (BuildContext context) {
                insideBoldTextOverride = MediaQuery.boldTextOverride(context);
273
                return Container();
274 275 276 277 278 279 280 281 282 283
              },
            ),
          );
        },
      ),
    );

    expect(outsideBoldTextOverride, false);
    expect(insideBoldTextOverride, true);
  });
284
}