// 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.0.dart'
    as example;
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('shows how SliverFillRemaining takes up remaining space', (
    WidgetTester tester,
  ) async {
    await tester.pumpWidget(const example.SliverFillRemainingExampleApp());
    expect(find.text('SliverFillRemaining Sample'), findsOneWidget);
    expect(find.byType(CustomScrollView), findsOneWidget);

    expect(
      find.descendant(
        of: find.byType(SliverToBoxAdapter),
        matching: find.byType(Container),
      ),
      findsOneWidget,
    );
    final Container upperContainer = tester.widget(
      find.descendant(
        of: find.byType(SliverToBoxAdapter),
        matching: find.byType(Container),
      ),
    );
    expect(upperContainer.color, Colors.amber[300]);

    expect(find.byType(SliverFillRemaining), findsOneWidget);
    expect(
      find.descendant(
        of: find.byType(SliverFillRemaining),
        matching: find.byType(Container),
      ),
      findsOneWidget,
    );
    expect(find.byIcon(Icons.sentiment_very_satisfied), findsOneWidget);
    final Icon lowerIcon = tester.widget(
      find.descendant(
        of: find.byType(SliverFillRemaining),
        matching: find.byType(Icon),
      ),
    );
    expect(lowerIcon.color, Colors.blue[900]);

    final double total = tester.getSize(find.byType(CustomScrollView)).height;
    final double upperHeight = tester
        .getSize(
          find.descendant(
            of: find.byType(SliverToBoxAdapter),
            matching: find.byType(Container),
          ),
        )
        .height;
    final double lowerHeight = tester
        .getSize(
          find.descendant(
            of: find.byType(SliverFillRemaining),
            matching: find.byType(Icon),
          ),
        )
        .height;
    expect(upperHeight + lowerHeight, equals(total));
  });
}
