// Copyright (c) 2012, 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:matcher/matcher.dart';
import 'package:test/test.dart' show test;

import 'test_utils.dart';

class _BadCustomMatcher extends CustomMatcher {
  _BadCustomMatcher() : super("feature", "description", {1: "a"});
  @override
  Object featureValueOf(actual) => throw Exception("bang");
}

class _HasPrice extends CustomMatcher {
  _HasPrice(matcher) : super("Widget with a price that is", "price", matcher);
  @override
  Object featureValueOf(actual) => (actual as Widget).price;
}

void main() {
  test("Feature Matcher", () {
    var w = Widget();
    w.price = 10;
    shouldPass(w, _HasPrice(10));
    shouldPass(w, _HasPrice(greaterThan(0)));
    shouldFail(
        w,
        _HasPrice(greaterThan(10)),
        "Expected: Widget with a price that is a value greater than <10> "
        "Actual: <Instance of 'Widget'> "
        "Which: has price with value <10> which is not "
        "a value greater than <10>");
  });

  test("Custom Matcher Exception", () {
    shouldFail(
        "a",
        _BadCustomMatcher(),
        allOf([
          contains("Expected: feature {1: 'a'} "),
          contains("Actual: 'a' "),
          contains("Which: threw 'Exception: bang' "),
        ]));
  });
}
