// Copyright (c) 2011, 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:expect/expect.dart";

// Dart test program for testing named parameters with zero passed as an
// argument.

class TestClass {
  TestClass();

  num method([num value = 100]) => value;
  num method2({num value = 100}) => value;

  static num staticMethod([num value = 200]) => value;
  static num staticMethod2({num value = 200}) => value;
}

num globalMethod([num value = 300]) => value;
num globalMethod2({num value = 300}) => value;

main() {
  var obj = new TestClass();

  Expect.equals(100, obj.method());
  Expect.equals(100, obj.method2());
  Expect.equals(7, obj.method(7));
  Expect.equals(7, obj.method2(value: 7));
  Expect.equals(0, obj.method(0));
  Expect.equals(0, obj.method2(value: 0));

  Expect.equals(200, TestClass.staticMethod());
  Expect.equals(200, TestClass.staticMethod2());
  Expect.equals(7, TestClass.staticMethod(7));
  Expect.equals(7, TestClass.staticMethod2(value: 7));
  Expect.equals(0, TestClass.staticMethod(0));
  Expect.equals(0, TestClass.staticMethod2(value: 0));

  Expect.equals(300, globalMethod());
  Expect.equals(300, globalMethod2());
  Expect.equals(7, globalMethod(7));
  Expect.equals(7, globalMethod2(value: 7));
  Expect.equals(0, globalMethod(0));
  Expect.equals(0, globalMethod2(value: 0));
}
