// Copyright 2014 The Flutter 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_api_samples/widgets/sliver_fill/sliver_fill_remaining.1.dart'
    as example;
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('Shows all elements', (WidgetTester tester) async {
    await tester.pumpWidget(const example.SliverFillRemainingExampleApp());
    expect(find.text('SliverFillRemaining Sample'), findsOneWidget);
    expect(find.byType(CustomScrollView), findsOneWidget);
    expect(
      find.byWidgetPredicate(
        (Widget widget) =>
            (widget is Container) && widget.color == Colors.amber[200],
      ),
      findsNWidgets(2),
    );
    expect(
      find.byWidgetPredicate(
        (Widget widget) =>
            (widget is Container) && widget.color == Colors.blue[200],
      ),
      findsOneWidget,
    );
    expect(
      find.byWidgetPredicate(
        (Widget widget) =>
            (widget is Container) && widget.color == Colors.orange[300],
      ),
      findsOneWidget,
    );
    expect(find.byType(SliverFixedExtentList), findsOneWidget);
    expect(find.byType(SliverFillRemaining), findsOneWidget);
    expect(find.byType(FlutterLogo), findsOneWidget);
  });

  testWidgets('Fills up all available space', (WidgetTester tester) async {
    await tester.pumpWidget(const example.SliverFillRemainingExampleApp());

    final double listSpace = tester
        .getSize(find.byType(CustomScrollView))
        .height;
    double contentHeight = 0.0;
    for (final Widget widget in tester.widgetList(
      find.byWidgetPredicate(
        (Widget widget) =>
            (widget is Container) &&
            <Color>[
              Colors.orange[300]!,
              Colors.blue[200]!,
              Colors.amber[200]!,
            ].contains(widget.color),
      ),
    )) {
      contentHeight += tester.getSize(find.byWidget(widget)).height;
    }
    expectLater(contentHeight, equals(listSpace));
  });
}
