# Copyright (c) 2013, 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.

[ $compiler == dart2analyzer ]
# invalid argument for constant constructor
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: fail

# TBD: should we check that argument for dynamic parameter of constant constructor is not compatible with operation that is performed with it?
Language/12_Expressions/01_Constants_A16_t03: fail

# TBF: infinite look: class A {const A();final m = const A();}
Language/12_Expressions/01_Constants_A17_t03: fail

# analyzer issue https://code.google.com/p/dart/issues/detail?id=11534
Language/15_Types/4_Interface_Types_A11_t01: Skip
Language/15_Types/4_Interface_Types_A11_t02: Skip

# TBF: "class B1 = A with M1;", typedef cannot be used for mixins
Language/09_Mixins/1_Mixin_Application_A01_t01: Fail

# TBF: It is a compile-time error if the key of an entry in a constant map literal is an instance of a class that implements the operator == unless the key is a string or integer.
Language/12_Expressions/07_Maps_A13_t01: Fail

# TBF: malformed or malbounded type in "conts" is static warning
Language/12_Expressions/12_Instance_Creation_A01_t08: Fail

# TBF: typedef self reference
Language/15_Types/3_Type_Declarations/1_Typedef_A07_t08: Fail
Language/15_Types/3_Type_Declarations/1_Typedef_A07_t09: Fail



# co19 issue #442, undefined name "Expect"
Language/15_Types/4_Interface_Types_A08_t03: fail, OK

# co19 issue #455, undeclared identifier is static warning
Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t10: fail, OK
Language/13_Statements/04_Local_Function_Declaration_A02_t02: fail, OK
Language/14_Libraries_and_Scripts/1_Imports_A02_t12: fail, OK
Language/14_Libraries_and_Scripts/1_Imports_A02_t15: fail, OK

# co19 issue #513, rules for finals were loosened, contradiction in spec was fixed
Language/07_Classes/6_Constructors/1_Generative_Constructors_A21_t01: fail, OK

# co19 issue #515, it is a compile-time error if there is more than one entity with the same name declared in the same scope
Language/07_Classes/3_Setters_A08_t03: fail, OK

# co19 issue #593: Conditional expressions are now allowed as constant expressions
Language/12_Expressions/01_Constants_A15_t16: fail, OK

# co19 issue #438, Static variables are initialized lazily, need not be constants
Language/12_Expressions/01_Constants_A16_t01: fail, OK
Language/12_Expressions/01_Constants_A16_t02: fail, OK

# co19 issue #420, "throw" requires expression, "rethrow" should be used instead
Language/12_Expressions/08_Throw_A05_t01: fail, OK
Language/12_Expressions/08_Throw_A05_t02: fail, OK
Language/12_Expressions/08_Throw_A05_t03: fail, OK

# co19 issue #454 (wrongly closed)
Language/12_Expressions/12_Instance_Creation/1_New_A01_t04: fail, OK

# co19 issue #528, Const: wrong number of type arguments
Language/12_Expressions/12_Instance_Creation_A01_t02: fail, OK
Language/12_Expressions/12_Instance_Creation_A01_t05: fail, OK
Language/12_Expressions/12_Instance_Creation_A01_t06: fail, OK

# co19 issue #433 (wrongly closed), missing @static-warning annotation
Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t07: fail, OK

# co19 issue #541: tests contain unqualified reference to static members defined in superclass
Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t07: fail, OK
Language/12_Expressions/30_Identifier_Reference_A14_t03: fail, OK

# co19 issue #543: invocation of a non-function
Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t02: fail, OK

# co19 issue #564: URI can be any number adjacent string literals
Language/14_Libraries_and_Scripts/5_URIs_A01_t24: fail, OK
Language/14_Libraries_and_Scripts/5_URIs_A01_t25: fail, OK

# co19 issue #609, return type of "factory M" is M, so we need static warning for "return;".
Language/13_Statements/11_Return_A07_t01: fail, OK

# co19 issue #613: @static-warning missing, only runtime behavior is tested
Language/12_Expressions/13_Property_Extraction_A02_t02: Fail, OK
Language/12_Expressions/13_Property_Extraction_A04_t02: Fail, OK
Language/12_Expressions/13_Property_Extraction_A04_t03: Fail, OK
Language/12_Expressions/17_Getter_Invocation_A07_t01: Fail, OK
Language/12_Expressions/17_Getter_Invocation_A07_t02: Fail, OK
Language/12_Expressions/18_Assignment_A01_t07: Fail, OK
Language/12_Expressions/18_Assignment_A04_t09: Fail, OK
LibTest/core/Invocation/isAccessor_A01_t01: Fail, OK
LibTest/core/Invocation/isAccessor_A01_t02: Fail, OK
LibTest/core/Invocation/isGetter_A01_t01: Fail, OK
LibTest/core/Invocation/isGetter_A01_t02: Fail, OK
LibTest/core/Invocation/isMethod_A01_t01: Fail, OK
LibTest/core/Invocation/isMethod_A01_t02: Fail, OK
LibTest/core/Invocation/isSetter_A01_t01: Fail, OK
LibTest/core/Invocation/isSetter_A01_t02: Fail, OK
LibTest/core/Invocation/memberName_A01_t01: Fail, OK
LibTest/core/Invocation/namedArguments_A01_t01: Fail, OK
LibTest/core/Invocation/positionalArguments_A01_t01: Fail, OK
LibTest/core/Symbol/Symbol_A01_t04: Fail, OK

# co19 issue #614: abstract class
Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A03_t03: Fail, OK
Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A03_t04: Fail, OK
Language/12_Expressions/16_Getter_Lookup_A02_t05: Fail, OK
Language/12_Expressions/16_Getter_Lookup_A02_t06: Fail, OK

# co19 issue #615: Expect import missing
Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A03_t03: Fail, OK
LibTest/collection/LinkedList/LinkedList_A01_t01: Fail, OK

# co19 issue #616: X required argument(s) expected, but Y found
Language/12_Expressions/15_Method_Invocation/1_Ordinary_Invocation_A04_t04: Fail, OK
Language/12_Expressions/15_Method_Invocation/4_Super_Invocation_A02_t05: Fail, OK

# co19 issue #617: "hasNext" is not a function; "Expec"
LibTest/collection/HasNextIterator/HasNextIterator_A01_t01: Fail, OK

# co19 issue #618: Just a mess - mix of Map and Set
LibTest/collection/LinkedHashSet/LinkedHashSet.from_A01_t01: Fail, OK
LibTest/collection/LinkedHashSet/LinkedHashSet_class_A01_t01: Fail, OK
LibTest/collection/LinkedList/first_A01_t02: Fail, OK

# co19 issue #619: 1 required argument(s) expected, but 0 found
LibTest/collection/LinkedList/reduce_A01_t01: Fail, OK

# co19 issue #620: The name 'NoSuchMethoError' is not a type and cannot be used in an on-catch clause
LibTest/core/RuneIterator/currentAsString_A01_t02: Fail, OK
LibTest/core/RuneIterator/current_A01_t02: Fail, OK
LibTest/core/Runes/length_A01_t02: Fail, OK

# co19 issue #621: Undefined name 'runes'
LibTest/core/Runes/isEmpty_A01_t02: Fail, OK
LibTest/core/Runes/isNotEmpty_A01_t02: Fail, OK

# co19 issue #622: Undefined class 'Int16List.fromList'
LibTest/core/Runes/lastWhere_A02_t01: Fail, OK

# co19 issue #623: main() { {}; } is block and empty statement, not a map
Language/13_Statements/02_Expression_Statements_A01_t13: Fail, OK
