semantics_11_test.dart 2.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// 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/widgets.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';

import 'semantics_tester.dart';

void main() {
  testWidgets('markNeedsSemanticsUpdate() called on non-boundary with non-boundary parent', (WidgetTester tester) async {
    final SemanticsTester semantics = new SemanticsTester(tester);

    await tester.pumpWidget(
17
      new Semantics(
18 19
        container: true,
        onTap: dummyTapHandler,
20
        child: new Semantics(
21
          onTap: dummyTapHandler,
22
          child: new Semantics(
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 51 52 53 54 55 56
            onTap: dummyTapHandler,
            textDirection: TextDirection.ltr,
            label: 'foo',
          ),
        ),
      ),
    );

    expect(semantics, hasSemantics(new TestSemantics.root(
      children: <TestSemantics>[
        new TestSemantics.rootChild(
          id: 1,
          actions: SemanticsAction.tap.index,
          children: <TestSemantics>[
            new TestSemantics(
              id: 2,
              actions: SemanticsAction.tap.index,
              children: <TestSemantics>[
                new TestSemantics(
                  id: 3,
                  actions: SemanticsAction.tap.index,
                  label: 'foo',
                )
              ],
            ),
          ],
        )
      ],
    ), ignoreRect: true, ignoreTransform: true));

    // make a change causing call to markNeedsSemanticsUpdate()

    // This should not throw an assert.
    await tester.pumpWidget(
57
      new Semantics(
58 59
        container: true,
        onTap: dummyTapHandler,
60
        child: new Semantics(
61
          onTap: dummyTapHandler,
62
          child: new Semantics(
63 64
            onTap: dummyTapHandler,
            textDirection: TextDirection.ltr,
65
            label: 'bar', // <-- only change
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
          ),
        ),
      ),
    );

    expect(semantics, hasSemantics(new TestSemantics.root(
      children: <TestSemantics>[
        new TestSemantics.rootChild(
          id: 1,
          actions: SemanticsAction.tap.index,
          children: <TestSemantics>[
            new TestSemantics(
              id: 2,
              actions: SemanticsAction.tap.index,
              children: <TestSemantics>[
                new TestSemantics(
                  id: 3,
                  actions: SemanticsAction.tap.index,
                  label: 'bar',
                )
              ],
            ),
          ],
        )
      ],
    ), ignoreRect: true, ignoreTransform: true));

    semantics.dispose();
  });
}

void dummyTapHandler() { }