// Copyright (c) 2015, 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.

library test.delegate_library;

import 'dart:mirrors';

import 'package:expect/expect.dart';

method(a, b, c) => "$a-$b-$c";
methodWithNamed(a, {b:'B', c}) => "$a-$b-$c";
methodWithOpt(a, [b, c='C']) => "$a-$b-$c";
get getter => 'g';
set setter(x) {
  field = x*2;
  return 'unobservable value';
}
var field;


class Proxy {
  var targetMirror;
  Proxy(this.targetMirror);
  noSuchMethod(invocation) => targetMirror.delegate(invocation);
}

main() {
  var proxy = new Proxy(reflectClass(Proxy).owner);
  var result;

  Expect.equals('X-Y-Z', proxy.method('X', 'Y', 'Z'));

  Expect.equals('X-B-null', proxy.methodWithNamed('X'));
  Expect.equals('X-Y-null', proxy.methodWithNamed('X', b: 'Y'));
  Expect.equals('X-Y-Z', proxy.methodWithNamed('X', b: 'Y', c: 'Z'));

  Expect.equals('X-null-C', proxy.methodWithOpt('X'));
  Expect.equals('X-Y-C', proxy.methodWithOpt('X', 'Y'));
  Expect.equals('X-Y-Z', proxy.methodWithOpt('X', 'Y', 'Z'));

  Expect.equals('g', proxy.getter);

  Expect.equals(5, proxy.setter = 5);
  Expect.equals(10, proxy.field);

  Expect.equals(5, proxy.field = 5);
  Expect.equals(5, proxy.field);
}
