// 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.

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

import 'semantics_tester.dart';

void main() {
  testWidgets('Semantics 7 - Merging', (WidgetTester tester) async {
    final SemanticsTester semantics = SemanticsTester(tester);

    String label;

    label = '1';
    await tester.pumpWidget(
      Directionality(
        textDirection: TextDirection.ltr,
        child: Stack(
          fit: StackFit.expand,
          children: <Widget>[
            MergeSemantics(
              child: Semantics(
                checked: true,
                container: true,
                child: Semantics(
                  container: true,
                  label: label,
                ),
              ),
            ),
            MergeSemantics(
              child: Stack(
                fit: StackFit.expand,
                children: <Widget>[
                  Semantics(
                    checked: true,
                  ),
                  Semantics(
                    label: label,
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );

    expect(semantics, hasSemantics(
      TestSemantics.root(
        children: <TestSemantics>[
          TestSemantics.rootChild(
            id: 1,
            flags: SemanticsFlag.hasCheckedState.index | SemanticsFlag.isChecked.index,
            label: label,
            rect: TestSemantics.fullScreen,
          ),
          // IDs 2 and 3 are used up by the nodes that get merged in
          TestSemantics.rootChild(
            id: 4,
            flags: SemanticsFlag.hasCheckedState.index | SemanticsFlag.isChecked.index,
            label: label,
            rect: TestSemantics.fullScreen,
          ),
          // IDs 5 and 6 are used up by the nodes that get merged in
        ],
      )
    ));

    label = '2';
    await tester.pumpWidget(
      Directionality(
        textDirection: TextDirection.ltr,
        child: Stack(
          fit: StackFit.expand,
          children: <Widget>[
            MergeSemantics(
              child: Semantics(
                checked: true,
                container: true,
                child: Semantics(
                  container: true,
                  label: label,
                ),
              ),
            ),
            MergeSemantics(
              child: Stack(
                fit: StackFit.expand,
                children: <Widget>[
                  Semantics(
                    checked: true,
                  ),
                  Semantics(
                    label: label,
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );

    expect(semantics, hasSemantics(
      TestSemantics.root(
        children: <TestSemantics>[
          TestSemantics.rootChild(
            id: 1,
            flags: SemanticsFlag.hasCheckedState.index | SemanticsFlag.isChecked.index,
            label: label,
            rect: TestSemantics.fullScreen,
          ),
          // IDs 2 and 3 are used up by the nodes that get merged in
          TestSemantics.rootChild(
            id: 4,
            flags: SemanticsFlag.hasCheckedState.index | SemanticsFlag.isChecked.index,
            label: label,
            rect: TestSemantics.fullScreen,
          ),
          // IDs 5 and 6 are used up by the nodes that get merged in
        ],
      )
    ));

    semantics.dispose();
  });
}
