| // 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"; |
| |
| class BaseClass { |
| var foo; |
| BaseClass() { |
| foo = 0; |
| } |
| toString() => "BaseClass"; |
| } |
| |
| /** |
| * This class declaration causes an intentional type warning as it |
| * isn't marked abstract. It is abstract because it doesn't |
| * "implement" the field foo. |
| */ |
| class ImplementsClass implements BaseClass { |
| ImplementsClass() {} |
| } |
| |
| abstract class ExtendsClass implements BaseClass {} |
| |
| /** |
| * This class declaration causes an intentional type warning as it |
| * isn't marked abstract. It is abstract because it doesn't |
| * "implement" the field foo. |
| */ |
| class ImplementsExtendsClass implements ExtendsClass { |
| ImplementsExtendsClass() {} |
| } |
| |
| main() { |
| ImplementsClass c1 = new ImplementsClass(); |
| ImplementsExtendsClass c2 = new ImplementsExtendsClass(); |
| try { |
| c1.foo; |
| Expect.fail('expected a NoSuchMethodError'); |
| } on NoSuchMethodError catch (ex) { |
| // Expected error. |
| } |
| try { |
| c2.foo; |
| Expect.fail('expected a NoSuchMethodError'); |
| } on NoSuchMethodError catch (ex) { |
| // Expected error. |
| } |
| Expect.equals(true, c1 is BaseClass); |
| Expect.equals(true, c1 is! ExtendsClass); |
| Expect.equals(true, c2 is BaseClass); |
| Expect.equals(true, c2 is ExtendsClass); |
| Expect.equals(true, c2 is! ImplementsClass); |
| Expect.equals("BaseClass", "${new BaseClass()}"); |
| |
| // Verify we don't inherit toString from BaseClass |
| Expect.notEquals("BaseClass", "${c1}"); |
| Expect.notEquals("BaseClass", "${c2}"); |
| } |