// 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/foundation.dart';
import 'package:fake_async/fake_async.dart';
import 'package:flutter_test/flutter_test.dart';

import 'capture_output.dart';

String? foo;

void main() {
  test('debugPrint', () {
    expect(
      captureOutput(() { debugPrintSynchronously('Hello, world'); }),
      equals(<String>['Hello, world']),
    );

    expect(
      captureOutput(() { debugPrintSynchronously('Hello, world', wrapWidth: 10); }),
      equals(<String>['Hello,\nworld']),
    );

    for (int i = 0; i < 14; ++i) {
      expect(
        captureOutput(() { debugPrintSynchronously('Hello,   world', wrapWidth: i); }),
        equals(<String>['Hello,\nworld']),
      );
    }

    expect(
      captureOutput(() { debugPrintThrottled('Hello, world'); }),
      equals(<String>['Hello, world']),
    );

    expect(
      captureOutput(() { debugPrintThrottled('Hello, world', wrapWidth: 10); }),
      equals(<String>['Hello,', 'world']),
    );
  });

  test('debugPrint throttling', () {
    FakeAsync().run((FakeAsync async) {
      List<String> log = captureOutput(() {
        debugPrintThrottled('A' * (22 * 1024) + '\nB');
      });
      expect(log.length, 1);
      async.elapse(const Duration(seconds: 2));
      expect(log.length, 2);

      log = captureOutput(() {
        debugPrintThrottled('C' * (22 * 1024));
        debugPrintThrottled('D');
      });

      expect(log.length, 1);
      async.elapse(const Duration(seconds: 2));
      expect(log.length, 2);
    });
  });

  test('debugPrint can print null', () {
    expect(
      captureOutput(() { debugPrintThrottled(null); }),
      equals(<String>['null']),
    );

    expect(
      captureOutput(() { debugPrintThrottled(null, wrapWidth: 80); }),
      equals(<String>['null']),
    );
  });
}
