// Copyright (c) 2016, 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.md file.

import 'package:expect/expect.dart';

String log;
init() { log = ''; }
logit(msg) { return log = '$log$msg'; }

class Base {
  var b;
  Base.arg0() : b = logit('b') {
    logit('B');
  }
  Base.arg1(a) : b = logit('b') {
    logit('B');
  }
  Base.arg2(a, b) : b = logit('b') {
    logit('B');
  }
}

class Sub extends Base {
  var x;
  var s;
  Sub.arg0() : x = logit('x'), super.arg0(), s = logit('s') {
    logit('S');
  }
  Sub.arg1(a) : x = logit('x'), super.arg1(logit('1')), s = logit('s') {
    logit('S');
  }
  Sub.arg2(a, b) : x = logit('x'), super.arg2(logit('1'), logit('2')), s = logit('s') {
    logit('S');
  }
}

test(fun(), String result) {
  init();
  fun();
  Expect.isTrue(log == result);
}

main() {
  test(() => new Sub.arg0(), 'xsbBS');
  test(() => new Sub.arg1(1), 'x1sbBS');
  test(() => new Sub.arg2(1, 2), 'x12sbBS');
}
