// Copyright 2015 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/widgets.dart';

void main() {
  testWidgets('setState() overbuild test', (WidgetTester tester) async {
    final List<String> log = <String>[];
    final Builder inner = Builder(
      builder: (BuildContext context) {
        log.add('inner');
        return const Text('inner', textDirection: TextDirection.ltr);
      }
    );
    int value = 0;
    await tester.pumpWidget(Builder(
      builder: (BuildContext context) {
        log.add('outer');
        return StatefulBuilder(
          builder: (BuildContext context, StateSetter setState) {
            log.add('stateful');
            return GestureDetector(
              onTap: () {
                setState(() {
                  value += 1;
                });
              },
              child: Builder(
                builder: (BuildContext context) {
                  log.add('middle $value');
                  return inner;
                }
              ),
            );
          }
        );
      }
    ));
    log.add('---');
    await tester.tap(find.text('inner'));
    await tester.pump();
    log.add('---');
    expect(log, equals(<String>[
      'outer',
      'stateful',
      'middle 0',
      'inner',
      '---',
      'stateful',
      'middle 1',
      '---',
    ]));
  });
}
