// 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:flutter_test/flutter_test.dart';

void main() {
  test('stack manipulation: reportExpectCall', () {
    try {
      expect(false, isTrue);
      fail('unexpectedly did not throw');
    } catch (e, stack) {
      final List<DiagnosticsNode> information = <DiagnosticsNode>[];
      expect(reportExpectCall(stack, information), 4);
      final TextTreeRenderer renderer = TextTreeRenderer();
      final List<String> lines = information.map((DiagnosticsNode node) => renderer.render(node).trimRight()).join('\n').split('\n');
      expect(lines[0], 'This was caught by the test expectation on the following line:');
      expect(lines[1], matches(r'^  .*stack_manipulation_test.dart line [0-9]+$'));
    }

    final List<DiagnosticsNode> information = <DiagnosticsNode>[];
    expect(reportExpectCall(StackTrace.current, information), 0);
    expect(information, isEmpty);
  });
}
