|  | // 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"; | 
|  |  | 
|  | // Test for F-Bounded Quantification. | 
|  |  | 
|  | class FBound<F extends FBound<F>> {} | 
|  |  | 
|  | class Bar extends FBound<Bar> {} | 
|  |  | 
|  | class SubBar extends Bar {} | 
|  |  | 
|  | class Baz<T> extends FBound<Baz<T>> {} | 
|  |  | 
|  | class SubBaz<T> extends Baz<T> {} | 
|  |  | 
|  |  | 
|  | isCheckedMode() { | 
|  | try { | 
|  | var i = 1; | 
|  | String s = i; | 
|  | return false; | 
|  | } catch (e) { | 
|  | return true; | 
|  | } | 
|  | } | 
|  |  | 
|  | main() { | 
|  | FBound<Bar> fb = new FBound<Bar>(); | 
|  | { | 
|  | bool got_type_error = false; | 
|  | try { | 
|  | FBound<SubBar> fsb = new FBound<SubBar>();  /// 01: static type warning | 
|  | } on TypeError catch (error) { | 
|  | got_type_error = true; | 
|  | } | 
|  | // Type error in checked mode only. | 
|  | Expect.isTrue(got_type_error == isCheckedMode());  /// 01: continued | 
|  | } | 
|  | FBound<Baz<Bar>> fbb = new FBound<Baz<Bar>>(); | 
|  | { | 
|  | bool got_type_error = false; | 
|  | try { | 
|  | FBound<SubBaz<Bar>> fsb = new FBound<SubBaz<Bar>>();  /// 02: static type warning | 
|  | } on TypeError catch (error) { | 
|  | got_type_error = true; | 
|  | } | 
|  | // Type error in checked mode only. | 
|  | Expect.isTrue(got_type_error == isCheckedMode());  /// 02: continued | 
|  | } | 
|  | } |