semantics_6_test.dart 2.13 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// Copyright 2017 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.

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:meta/meta.dart';

import 'semantics_tester.dart';

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

17
    final TestSemantics expectedSemantics = TestSemantics.root(
18
      children: <TestSemantics>[
19
        TestSemantics.rootChild(
20 21 22 23
          id: 1,
          label: 'hello',
          textDirection: TextDirection.ltr,
          rect: TestSemantics.fullScreen,
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 51
      ],
    );

    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();
  });
}

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