// 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_test/flutter_test.dart';
import 'package:flutter/material.dart';

void main() {
  testWidgets('Back during pushReplacement', (WidgetTester tester) async {
    await tester.pumpWidget(MaterialApp(
      home: const Material(child: Text('home')),
      routes: <String, WidgetBuilder>{
        '/a': (BuildContext context) => const Material(child: Text('a')),
        '/b': (BuildContext context) => const Material(child: Text('b')),
      },
    ));

    final NavigatorState navigator = tester.state(find.byType(Navigator));
    navigator.pushNamed('/a');
    await tester.pumpAndSettle();

    expect(find.text('a'), findsOneWidget);
    expect(find.text('home'), findsNothing);

    navigator.pushReplacementNamed('/b');
    await tester.pump();
    await tester.pump(const Duration(milliseconds: 10));

    expect(find.text('a'), findsOneWidget);
    expect(find.text('b'), findsOneWidget);
    expect(find.text('home'), findsNothing);

    navigator.pop();

    await tester.pumpAndSettle();

    expect(find.text('a'), findsNothing);
    expect(find.text('b'), findsNothing);
    expect(find.text('home'), findsOneWidget);
  });

  testWidgets('pushAndRemoveUntil', (WidgetTester tester) async {
    await tester.pumpWidget(MaterialApp(
      home: const Material(child: Text('home')),
      routes: <String, WidgetBuilder>{
        '/a': (BuildContext context) => const Material(child: Text('a')),
        '/b': (BuildContext context) => const Material(child: Text('b')),
      },
    ));

    final NavigatorState navigator = tester.state(find.byType(Navigator));
    navigator.pushNamed('/a');
    await tester.pumpAndSettle();

    expect(find.text('home', skipOffstage: false), findsOneWidget);
    expect(find.text('a', skipOffstage: false), findsOneWidget);
    expect(find.text('b', skipOffstage: false), findsNothing);

    navigator.pushNamedAndRemoveUntil('/b', (Route<dynamic> route) => false);
    await tester.pumpAndSettle();

    expect(find.text('home', skipOffstage: false), findsNothing);
    expect(find.text('a', skipOffstage: false), findsNothing);
    expect(find.text('b', skipOffstage: false), findsOneWidget);

    navigator.pushNamed('/');
    await tester.pumpAndSettle();

    expect(find.text('home', skipOffstage: false), findsOneWidget);
    expect(find.text('a', skipOffstage: false), findsNothing);
    expect(find.text('b', skipOffstage: false), findsOneWidget);

    navigator.pushNamedAndRemoveUntil('/a', ModalRoute.withName('/b'));
    await tester.pumpAndSettle();

    expect(find.text('home', skipOffstage: false), findsNothing);
    expect(find.text('a', skipOffstage: false), findsOneWidget);
    expect(find.text('b', skipOffstage: false), findsOneWidget);
  });
}
