semantics_6_test.dart 2.09 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4 5 6 7 8 9 10 11 12 13
// 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/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';

import 'semantics_tester.dart';

void main() {
  testWidgets('can change semantics in a branch blocked by BlockSemantics', (WidgetTester tester) async {
14
    final SemanticsTester semantics = SemanticsTester(tester);
15

16
    final TestSemantics expectedSemantics = TestSemantics.root(
17
      children: <TestSemantics>[
18
        TestSemantics.rootChild(
19 20 21 22
          id: 1,
          label: 'hello',
          textDirection: TextDirection.ltr,
          rect: TestSemantics.fullScreen,
23
        ),
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
      ],
    );

    await tester.pumpWidget(buildWidget(
      blockedText: 'one',
    ));

    expect(semantics, hasSemantics(expectedSemantics));

    // The purpose of the test is to ensure that this change does not throw.
    await tester.pumpWidget(buildWidget(
        blockedText: 'two',
    ));

    expect(semantics, hasSemantics(expectedSemantics));

    // Ensure that the previously blocked semantics end up in the tree correctly when unblocked.
    await tester.pumpWidget(buildWidget(
      blockedText: 'two',
      blocking: false,
    ));
    expect(semantics, includesNodeWith(label: 'two', textDirection: TextDirection.ltr));

    semantics.dispose();
  });
}

51
Widget buildWidget({ required String blockedText, bool blocking = true }) {
52
  assert(blockedText != null);
53
  return Directionality(
54
    textDirection: TextDirection.ltr,
55
    child: Stack(
56 57
        fit: StackFit.expand,
        children: <Widget>[
58
          Semantics(
59
            container: true,
60
            child: ListView(
61
              children: <Widget>[
62
                Text(blockedText),
63 64 65
              ],
            ),
          ),
66
          BlockSemantics(
67
            blocking: blocking,
68
            child: Semantics(
69 70 71 72
              label: 'hello',
              container: true,
            ),
          ),
73
        ],
74 75 76
    ),
  );
}