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

void main() {
  testWidgets('Can off/on stage Flutter logo widget', (WidgetTester tester) async {
    await tester.pumpWidget(
      const example.OffstageApp(),
    );

    // The Flutter logo is off stage and not visible.
    expect(find.text('Flutter logo is offstage: true'), findsOneWidget);

    // Tap to get the Flutter logo size.
    await tester.tap(find.text('Get Flutter Logo size'));
    await tester.pumpAndSettle();

    expect(find.text('Flutter Logo size is Size(150.0, 150.0)'), findsOneWidget);

    // Tap to toggle the offstage value.
    await tester.tap(find.text('Toggle Offstage Value'));
    await tester.pumpAndSettle();

    // The Flutter logo is on stage and visible.
    expect(find.text('Flutter logo is offstage: false'), findsOneWidget);
  });
}
