// Copyright 2018 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 '../widgets/semantics_tester.dart';

void main() {
  testWidgets('Traversal order handles touching elements', (WidgetTester tester) async {
    final SemanticsTester semantics = SemanticsTester(tester);
    await tester.pumpWidget(
      MaterialApp(
        home: Column(
          children: List<Widget>.generate(3, (int column) {
            return Row(children: List<Widget>.generate(3, (int row) {
              return Semantics(
                child: SizedBox(
                  width: 50.0,
                  height: 50.0,
                  child: Text('$column - $row'),
                ),
              );
          }));
        }),
      ),
    ));

    final TestSemantics expected = TestSemantics.root(
      children: <TestSemantics>[
        TestSemantics(
          id: 1,
          textDirection: TextDirection.ltr,
          children: <TestSemantics>[
            TestSemantics(
              id: 2,
              flags: <SemanticsFlag>[SemanticsFlag.scopesRoute],
              children: <TestSemantics>[
                TestSemantics(
                  id: 3,
                  label: '0 - 0',
                  textDirection: TextDirection.ltr,
                ),
                TestSemantics(
                  id: 4,
                  label: '0 - 1',
                  textDirection: TextDirection.ltr,
                ),
                TestSemantics(
                  id: 5,
                  label: '0 - 2',
                  textDirection: TextDirection.ltr,
                ),
                TestSemantics(
                  id: 6,
                  label: '1 - 0',
                  textDirection: TextDirection.ltr,
                ),
                TestSemantics(
                  id: 7,
                  label: '1 - 1',
                  textDirection: TextDirection.ltr,
                ),
                TestSemantics(
                  id: 8,
                  label: '1 - 2',
                  textDirection: TextDirection.ltr,
                ),
                TestSemantics(
                  id: 9,
                  label: '2 - 0',
                  textDirection: TextDirection.ltr,
                ),
                TestSemantics(
                  id: 10,
                  label: '2 - 1',
                  textDirection: TextDirection.ltr,
                ),
                TestSemantics(
                  id: 11,
                  label: '2 - 2',
                  textDirection: TextDirection.ltr,
                ),
              ],
            ),
          ],
        ),
      ],
    );
    expect(semantics, hasSemantics(expected, ignoreRect: true, ignoreTransform: true));
    semantics.dispose();
  });
}
