// Copyright (c) 2021, 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 'package:test/test.dart' as test_package;

class CheckTarget<T> {
  final T value;
  final int _depth;

  /// The function that return the description of the value, and of the
  /// chain how we arrived to this value.
  final String Function() _describe;

  CheckTarget(this.value, this._depth, this._describe);

  String get _indent => '  ' * (_depth + 1);

  Never fail(String message) {
    test_package.fail('${_describe()}\n$_indent$message');
  }

  /// Chains to the given [value]; if a subsequent check fails, [describe]
  /// will be invoked to describe the [value].
  CheckTarget<U> nest<U>(
    U value,
    String Function(U value) describe,
  ) {
    return CheckTarget(value, _depth + 1, () {
      return '${_describe()}\n$_indent${describe(value)}';
    });
  }

  String valueStr(value) {
    if (value is String) {
      return "'$value'";
    }
    return '$value';
  }

  /// Use this if multiple checks are required on the value.
  void which(void Function(CheckTarget<T> e) checker) {
    checker(this);
  }
}
