// 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' "),
        ]));
  });
}
