// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';

import 'package:stack_trace/stack_trace.dart';
import 'package:test_api/hooks.dart';

import 'expect.dart';
import 'future_matchers.dart';
import 'util/placeholder.dart';
import 'util/pretty_print.dart';

/// Returns a function that causes the test to fail if it's called.
///
/// This can safely be passed in place of any callback that takes ten or fewer
/// positional parameters. For example:
///
/// ```dart
/// // Asserts that the stream never emits an event.
/// stream.listen(neverCalled);
/// ```
///
/// This also ensures that the test doesn't complete until a call to
/// [pumpEventQueue] finishes, so that the callback has a chance to be called.
Null Function([
  Object?,
  Object?,
  Object?,
  Object?,
  Object?,
  Object?,
  Object?,
  Object?,
  Object?,
  Object?,
])
get neverCalled {
  // Make sure the test stays alive long enough to call the function if it's
  // going to.
  expect(pumpEventQueue(), completes);

  var zone = Zone.current;
  return ([
    a1 = placeholder,
    a2 = placeholder,
    a3 = placeholder,
    a4 = placeholder,
    a5 = placeholder,
    a6 = placeholder,
    a7 = placeholder,
    a8 = placeholder,
    a9 = placeholder,
    a10 = placeholder,
  ]) {
    var arguments =
        [
          a1,
          a2,
          a3,
          a4,
          a5,
          a6,
          a7,
          a8,
          a9,
          a10,
        ].where((argument) => argument != placeholder).toList();

    var argsText =
        arguments.isEmpty
            ? ' no arguments.'
            : ':\n${bullet(arguments.map(prettyPrint))}';
    zone.handleUncaughtError(
      TestFailure(
        'Callback should never have been called, but it was called with'
        '$argsText',
      ),
      zone.run(Chain.current),
    );
    return null;
  };
}
