// 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 'dart:ui';

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('Simple tree is simple', (WidgetTester tester) async {
    final SemanticsTester semantics = SemanticsTester(tester);

    await tester.pumpWidget(
      const Center(
          child: Text('Hello!', textDirection: TextDirection.ltr)
      ),
    );

    expect(semantics, hasSemantics(TestSemantics.root(
      children: <TestSemantics>[
        TestSemantics.rootChild(
          id: 1,
          label: 'Hello!',
          textDirection: TextDirection.ltr,
          rect: Rect.fromLTRB(0.0, 0.0, 84.0, 14.0),
          transform: Matrix4.translationValues(358.0, 293.0, 0.0),
        )
      ],
    )));

    semantics.dispose();
  });

  testWidgets('Simple tree is simple - material', (WidgetTester tester) async {
    final SemanticsTester semantics = SemanticsTester(tester);

    // Not using Text widget because of https://github.com/flutter/flutter/issues/12357.
    await tester.pumpWidget(MaterialApp(
      home: Center(
        child: Semantics(
          label: 'Hello!',
          child: Container(
            width: 10.0,
            height: 10.0,
          ),
        ),
      ),
    ));

    expect(semantics, hasSemantics(TestSemantics.root(
      children: <TestSemantics>[
        TestSemantics.rootChild(
          id: 2,
          rect: Rect.fromLTWH(0.0, 0.0, 800.0, 600.0),
          children: <TestSemantics>[
            TestSemantics(
              id: 3,
              rect: Rect.fromLTWH(0.0, 0.0, 800.0, 600.0),
              flags: <SemanticsFlag>[SemanticsFlag.scopesRoute],
              children: <TestSemantics>[
                TestSemantics(
                  id: 4,
                  label: 'Hello!',
                  textDirection: TextDirection.ltr,
                  rect: Rect.fromLTRB(0.0, 0.0, 10.0, 10.0),
                  transform: Matrix4.translationValues(395.0, 295.0, 0.0),
                )
              ],
            ),
          ],
        ),
      ],
    )));

    semantics.dispose();
  });
}
