// Copyright 2016 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_test/flutter_test.dart';

void main() {
  testWidgets('ButtonBar default control smoketest', (WidgetTester tester) async {
    await tester.pumpWidget(
      const Directionality(
        textDirection: TextDirection.ltr,
        child: ButtonBar(),
      ),
    );
  });

  testWidgets('ButtonBar has a min height of 52 when using ButtonBarLayoutBehavior.constrained', (WidgetTester tester) async {
    await tester.pumpWidget(
      SingleChildScrollView(
        child: ListBody(
          children: <Widget>[
            ButtonTheme.bar(
              layoutBehavior: ButtonBarLayoutBehavior.constrained,
              child: const Directionality(
                textDirection: TextDirection.ltr,
                child: ButtonBar(
                  children: <Widget>[
                    SizedBox(width: 10.0, height: 10.0),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );

    final Finder buttonBar = find.byType(ButtonBar);
    expect(tester.getBottomRight(buttonBar).dy - tester.getTopRight(buttonBar).dy, 52.0);
  });

  testWidgets('ButtonBar has padding applied when using ButtonBarLayoutBehavior.padded', (WidgetTester tester) async {
    await tester.pumpWidget(
      SingleChildScrollView(
        child: ListBody(
          children: <Widget>[
            ButtonTheme.bar(
              layoutBehavior: ButtonBarLayoutBehavior.padded,
              child: const Directionality(
                textDirection: TextDirection.ltr,
                child: ButtonBar(
                  children: <Widget>[
                    SizedBox(width: 10.0, height: 10.0),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );

    final Finder buttonBar = find.byType(ButtonBar);
    expect(tester.getBottomRight(buttonBar).dy - tester.getTopRight(buttonBar).dy, 26.0);
  });

  testWidgets('ButtonBar FlatButton inherits Theme accentColor', (WidgetTester tester) async {
    // Regression test for https://github.com/flutter/flutter/issues/22789

    await tester.pumpWidget(
      MaterialApp(
        theme: ThemeData(accentColor: const Color(1)),
        home: Builder(
          builder: (BuildContext context) {
            return Center(
              child: ButtonTheme.bar(
                child: ButtonBar(
                  children: <Widget>[
                    FlatButton(
                      child: const Text('button'),
                      onPressed: () {
                        showDialog<void>(
                          context: context,
                          builder: (BuildContext context) {
                            return AlertDialog( // puts its actions in a ButtonBar
                              actions: <Widget>[
                                FlatButton(
                                  onPressed: () { },
                                  child: const Text('enabled'),
                                ),
                              ],
                            );
                          },
                        );
                      },
                    ),
                  ],
                ),
              ),
            );
          },
        ),
      ),
    );

    expect(tester.widget<RawMaterialButton>(find.byType(RawMaterialButton)).textStyle.color, const Color(1));

    // Show the dialog
    await tester.tap(find.text('button'));
    await tester.pumpAndSettle();

    final Finder dialogButton = find.ancestor(
      of: find.text('enabled'),
      matching: find.byType(RawMaterialButton),
    );
    expect(tester.widget<RawMaterialButton>(dialogButton).textStyle.color, const Color(1));
  });
}