// 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);
}
