// 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:expect/expect.dart";

// Make sure we can assert(const Foo() != null) in const initializers.
class Color {
  const Color(this.value);
  final int value;
}

class ColorHaver {
  const ColorHaver({this.color = const Color(0xFF000000)})
      : assert(color != null);
  final Color color;
}

const c = const ColorHaver(color: const Color(0xFF00FF00));

enum Enum {
  a,
  b,
}

class EnumHaver {
  const EnumHaver({this.myEnum = Enum.a}) : assert(myEnum != null);
  final Enum myEnum;
}

const e = const EnumHaver(myEnum: Enum.b);

main() {
  Expect.equals(c.value, 0xFF00FF00);
  Expect.equals(e.myEnum, Enum.b);
}
