| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library engine.static_warning_code_test; | 5 library engine.static_warning_code_test; |
| 6 | 6 |
| 7 import 'package:analyzer/src/generated/java_junit.dart'; | 7 import 'package:analyzer/src/generated/java_junit.dart'; |
| 8 import 'package:analyzer/src/generated/source_io.dart'; | 8 import 'package:analyzer/src/generated/source_io.dart'; |
| 9 import 'package:analyzer/src/generated/error.dart'; | 9 import 'package:analyzer/src/generated/error.dart'; |
| 10 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode; | 10 import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode; |
| 11 import 'package:unittest/unittest.dart' as _ut; | 11 import 'package:unittest/unittest.dart' as _ut; |
| 12 import 'resolver_test.dart'; | 12 import 'resolver_test.dart'; |
| 13 import 'test_support.dart'; | 13 import 'test_support.dart'; |
| 14 import '../reflective_tests.dart'; | 14 import '../reflective_tests.dart'; |
| 15 | 15 |
| 16 | 16 |
| 17 class StaticWarningCodeTest extends ResolverTestCase { | 17 class StaticWarningCodeTest extends ResolverTestCase { |
| 18 void fail_undefinedGetter() { | 18 void fail_undefinedGetter() { |
| 19 Source source = addSource(EngineTestCase.createSource([])); | 19 Source source = addSource(r''' |
| 20 '''); |
| 20 resolve(source); | 21 resolve(source); |
| 21 assertErrors(source, [StaticWarningCode.UNDEFINED_GETTER]); | 22 assertErrors(source, [StaticWarningCode.UNDEFINED_GETTER]); |
| 22 verify([source]); | 23 verify([source]); |
| 23 } | 24 } |
| 24 | 25 |
| 25 void fail_undefinedIdentifier_commentReference() { | 26 void fail_undefinedIdentifier_commentReference() { |
| 26 Source source = addSource(EngineTestCase.createSource(["/** [m] xxx [new B.c
] */", "class A {", "}"])); | 27 Source source = addSource(r''' |
| 28 /** [m] xxx [new B.c] */ |
| 29 class A { |
| 30 }'''); |
| 27 resolve(source); | 31 resolve(source); |
| 28 assertErrors(source, [ | 32 assertErrors(source, [ |
| 29 StaticWarningCode.UNDEFINED_IDENTIFIER, | 33 StaticWarningCode.UNDEFINED_IDENTIFIER, |
| 30 StaticWarningCode.UNDEFINED_IDENTIFIER]); | 34 StaticWarningCode.UNDEFINED_IDENTIFIER]); |
| 31 } | 35 } |
| 32 | 36 |
| 33 void fail_undefinedSetter() { | 37 void fail_undefinedSetter() { |
| 34 Source source = addSource(EngineTestCase.createSource(["class C {}", "f(var
p) {", " C.m = 0;", "}"])); | 38 Source source = addSource(r''' |
| 39 class C {} |
| 40 f(var p) { |
| 41 C.m = 0; |
| 42 }'''); |
| 35 resolve(source); | 43 resolve(source); |
| 36 assertErrors(source, [StaticWarningCode.UNDEFINED_SETTER]); | 44 assertErrors(source, [StaticWarningCode.UNDEFINED_SETTER]); |
| 37 verify([source]); | 45 verify([source]); |
| 38 } | 46 } |
| 39 | 47 |
| 40 void test_ambiguousImport_as() { | 48 void test_ambiguousImport_as() { |
| 41 Source source = addSource(EngineTestCase.createSource([ | 49 Source source = addSource(r''' |
| 42 "import 'lib1.dart';", | 50 import 'lib1.dart'; |
| 43 "import 'lib2.dart';", | 51 import 'lib2.dart'; |
| 44 "f(p) {p as N;}"])); | 52 f(p) {p as N;}'''); |
| 45 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 53 addNamedSource("/lib1.dart", r''' |
| 46 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 54 library lib1; |
| 55 class N {}'''); |
| 56 addNamedSource("/lib2.dart", r''' |
| 57 library lib2; |
| 58 class N {}'''); |
| 47 resolve(source); | 59 resolve(source); |
| 48 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); | 60 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 49 } | 61 } |
| 50 | 62 |
| 51 void test_ambiguousImport_extends() { | 63 void test_ambiguousImport_extends() { |
| 52 Source source = addSource(EngineTestCase.createSource([ | 64 Source source = addSource(r''' |
| 53 "import 'lib1.dart';", | 65 import 'lib1.dart'; |
| 54 "import 'lib2.dart';", | 66 import 'lib2.dart'; |
| 55 "class A extends N {}"])); | 67 class A extends N {}'''); |
| 56 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 68 addNamedSource("/lib1.dart", r''' |
| 57 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 69 library lib1; |
| 70 class N {}'''); |
| 71 addNamedSource("/lib2.dart", r''' |
| 72 library lib2; |
| 73 class N {}'''); |
| 58 resolve(source); | 74 resolve(source); |
| 59 assertErrors(source, [ | 75 assertErrors(source, [ |
| 60 StaticWarningCode.AMBIGUOUS_IMPORT, | 76 StaticWarningCode.AMBIGUOUS_IMPORT, |
| 61 CompileTimeErrorCode.EXTENDS_NON_CLASS]); | 77 CompileTimeErrorCode.EXTENDS_NON_CLASS]); |
| 62 } | 78 } |
| 63 | 79 |
| 64 void test_ambiguousImport_implements() { | 80 void test_ambiguousImport_implements() { |
| 65 Source source = addSource(EngineTestCase.createSource([ | 81 Source source = addSource(r''' |
| 66 "import 'lib1.dart';", | 82 import 'lib1.dart'; |
| 67 "import 'lib2.dart';", | 83 import 'lib2.dart'; |
| 68 "class A implements N {}"])); | 84 class A implements N {}'''); |
| 69 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 85 addNamedSource("/lib1.dart", r''' |
| 70 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 86 library lib1; |
| 87 class N {}'''); |
| 88 addNamedSource("/lib2.dart", r''' |
| 89 library lib2; |
| 90 class N {}'''); |
| 71 resolve(source); | 91 resolve(source); |
| 72 assertErrors(source, [ | 92 assertErrors(source, [ |
| 73 StaticWarningCode.AMBIGUOUS_IMPORT, | 93 StaticWarningCode.AMBIGUOUS_IMPORT, |
| 74 CompileTimeErrorCode.IMPLEMENTS_NON_CLASS]); | 94 CompileTimeErrorCode.IMPLEMENTS_NON_CLASS]); |
| 75 } | 95 } |
| 76 | 96 |
| 77 void test_ambiguousImport_inPart() { | 97 void test_ambiguousImport_inPart() { |
| 78 Source source = addSource(EngineTestCase.createSource([ | 98 Source source = addSource(r''' |
| 79 "library lib;", | 99 library lib; |
| 80 "import 'lib1.dart';", | 100 import 'lib1.dart'; |
| 81 "import 'lib2.dart';", | 101 import 'lib2.dart'; |
| 82 "part 'part.dart';"])); | 102 part 'part.dart';'''); |
| 83 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 103 addNamedSource("/lib1.dart", r''' |
| 84 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 104 library lib1; |
| 85 Source partSource = addNamedSource("/part.dart", EngineTestCase.createSource
(["part of lib;", "class A extends N {}"])); | 105 class N {}'''); |
| 106 addNamedSource("/lib2.dart", r''' |
| 107 library lib2; |
| 108 class N {}'''); |
| 109 Source partSource = addNamedSource("/part.dart", r''' |
| 110 part of lib; |
| 111 class A extends N {}'''); |
| 86 resolve(source); | 112 resolve(source); |
| 87 assertErrors(partSource, [ | 113 assertErrors(partSource, [ |
| 88 StaticWarningCode.AMBIGUOUS_IMPORT, | 114 StaticWarningCode.AMBIGUOUS_IMPORT, |
| 89 CompileTimeErrorCode.EXTENDS_NON_CLASS]); | 115 CompileTimeErrorCode.EXTENDS_NON_CLASS]); |
| 90 } | 116 } |
| 91 | 117 |
| 92 void test_ambiguousImport_instanceCreation() { | 118 void test_ambiguousImport_instanceCreation() { |
| 93 Source source = addSource(EngineTestCase.createSource([ | 119 Source source = addSource(r''' |
| 94 "library L;", | 120 library L; |
| 95 "import 'lib1.dart';", | 121 import 'lib1.dart'; |
| 96 "import 'lib2.dart';", | 122 import 'lib2.dart'; |
| 97 "f() {new N();}"])); | 123 f() {new N();}'''); |
| 98 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 124 addNamedSource("/lib1.dart", r''' |
| 99 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 125 library lib1; |
| 126 class N {}'''); |
| 127 addNamedSource("/lib2.dart", r''' |
| 128 library lib2; |
| 129 class N {}'''); |
| 100 resolve(source); | 130 resolve(source); |
| 101 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); | 131 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 102 } | 132 } |
| 103 | 133 |
| 104 void test_ambiguousImport_is() { | 134 void test_ambiguousImport_is() { |
| 105 Source source = addSource(EngineTestCase.createSource([ | 135 Source source = addSource(r''' |
| 106 "import 'lib1.dart';", | 136 import 'lib1.dart'; |
| 107 "import 'lib2.dart';", | 137 import 'lib2.dart'; |
| 108 "f(p) {p is N;}"])); | 138 f(p) {p is N;}'''); |
| 109 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 139 addNamedSource("/lib1.dart", r''' |
| 110 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 140 library lib1; |
| 141 class N {}'''); |
| 142 addNamedSource("/lib2.dart", r''' |
| 143 library lib2; |
| 144 class N {}'''); |
| 111 resolve(source); | 145 resolve(source); |
| 112 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); | 146 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 113 } | 147 } |
| 114 | 148 |
| 115 void test_ambiguousImport_qualifier() { | 149 void test_ambiguousImport_qualifier() { |
| 116 Source source = addSource(EngineTestCase.createSource([ | 150 Source source = addSource(r''' |
| 117 "import 'lib1.dart';", | 151 import 'lib1.dart'; |
| 118 "import 'lib2.dart';", | 152 import 'lib2.dart'; |
| 119 "g() { N.FOO; }"])); | 153 g() { N.FOO; }'''); |
| 120 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 154 addNamedSource("/lib1.dart", r''' |
| 121 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 155 library lib1; |
| 156 class N {}'''); |
| 157 addNamedSource("/lib2.dart", r''' |
| 158 library lib2; |
| 159 class N {}'''); |
| 122 resolve(source); | 160 resolve(source); |
| 123 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); | 161 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 124 } | 162 } |
| 125 | 163 |
| 126 void test_ambiguousImport_typeAnnotation() { | 164 void test_ambiguousImport_typeAnnotation() { |
| 127 Source source = addSource(EngineTestCase.createSource([ | 165 Source source = addSource(r''' |
| 128 "import 'lib1.dart';", | 166 import 'lib1.dart'; |
| 129 "import 'lib2.dart';", | 167 import 'lib2.dart'; |
| 130 "typedef N FT(N p);", | 168 typedef N FT(N p); |
| 131 "N f(N p) {", | 169 N f(N p) { |
| 132 " N v;", | 170 N v; |
| 133 " return null;", | 171 return null; |
| 134 "}", | 172 } |
| 135 "class A {", | 173 class A { |
| 136 " N m() { return null; }", | 174 N m() { return null; } |
| 137 "}", | 175 } |
| 138 "class B<T extends N> {}"])); | 176 class B<T extends N> {}'''); |
| 139 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 177 addNamedSource("/lib1.dart", r''' |
| 140 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 178 library lib1; |
| 179 class N {}'''); |
| 180 addNamedSource("/lib2.dart", r''' |
| 181 library lib2; |
| 182 class N {}'''); |
| 141 resolve(source); | 183 resolve(source); |
| 142 assertErrors(source, [ | 184 assertErrors(source, [ |
| 143 StaticWarningCode.AMBIGUOUS_IMPORT, | 185 StaticWarningCode.AMBIGUOUS_IMPORT, |
| 144 StaticWarningCode.AMBIGUOUS_IMPORT, | 186 StaticWarningCode.AMBIGUOUS_IMPORT, |
| 145 StaticWarningCode.AMBIGUOUS_IMPORT, | 187 StaticWarningCode.AMBIGUOUS_IMPORT, |
| 146 StaticWarningCode.AMBIGUOUS_IMPORT, | 188 StaticWarningCode.AMBIGUOUS_IMPORT, |
| 147 StaticWarningCode.AMBIGUOUS_IMPORT, | 189 StaticWarningCode.AMBIGUOUS_IMPORT, |
| 148 StaticWarningCode.AMBIGUOUS_IMPORT, | 190 StaticWarningCode.AMBIGUOUS_IMPORT, |
| 149 StaticWarningCode.AMBIGUOUS_IMPORT]); | 191 StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 150 } | 192 } |
| 151 | 193 |
| 152 void test_ambiguousImport_typeArgument_annotation() { | 194 void test_ambiguousImport_typeArgument_annotation() { |
| 153 Source source = addSource(EngineTestCase.createSource([ | 195 Source source = addSource(r''' |
| 154 "import 'lib1.dart';", | 196 import 'lib1.dart'; |
| 155 "import 'lib2.dart';", | 197 import 'lib2.dart'; |
| 156 "class A<T> {}", | 198 class A<T> {} |
| 157 "A<N> f() { return null; }"])); | 199 A<N> f() { return null; }'''); |
| 158 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 200 addNamedSource("/lib1.dart", r''' |
| 159 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 201 library lib1; |
| 202 class N {}'''); |
| 203 addNamedSource("/lib2.dart", r''' |
| 204 library lib2; |
| 205 class N {}'''); |
| 160 resolve(source); | 206 resolve(source); |
| 161 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); | 207 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 162 } | 208 } |
| 163 | 209 |
| 164 void test_ambiguousImport_typeArgument_instanceCreation() { | 210 void test_ambiguousImport_typeArgument_instanceCreation() { |
| 165 Source source = addSource(EngineTestCase.createSource([ | 211 Source source = addSource(r''' |
| 166 "import 'lib1.dart';", | 212 import 'lib1.dart'; |
| 167 "import 'lib2.dart';", | 213 import 'lib2.dart'; |
| 168 "class A<T> {}", | 214 class A<T> {} |
| 169 "f() {new A<N>();}"])); | 215 f() {new A<N>();}'''); |
| 170 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
class N {}"])); | 216 addNamedSource("/lib1.dart", r''' |
| 171 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class N {}"])); | 217 library lib1; |
| 218 class N {}'''); |
| 219 addNamedSource("/lib2.dart", r''' |
| 220 library lib2; |
| 221 class N {}'''); |
| 172 resolve(source); | 222 resolve(source); |
| 173 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); | 223 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 174 } | 224 } |
| 175 | 225 |
| 176 void test_ambiguousImport_varRead() { | 226 void test_ambiguousImport_varRead() { |
| 177 Source source = addSource(EngineTestCase.createSource([ | 227 Source source = addSource(r''' |
| 178 "import 'lib1.dart';", | 228 import 'lib1.dart'; |
| 179 "import 'lib2.dart';", | 229 import 'lib2.dart'; |
| 180 "f() { g(v); }", | 230 f() { g(v); } |
| 181 "g(p) {}"])); | 231 g(p) {}'''); |
| 182 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
var v;"])); | 232 addNamedSource("/lib1.dart", r''' |
| 183 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
var v;"])); | 233 library lib1; |
| 234 var v;'''); |
| 235 addNamedSource("/lib2.dart", r''' |
| 236 library lib2; |
| 237 var v;'''); |
| 184 resolve(source); | 238 resolve(source); |
| 185 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); | 239 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 186 } | 240 } |
| 187 | 241 |
| 188 void test_ambiguousImport_varWrite() { | 242 void test_ambiguousImport_varWrite() { |
| 189 Source source = addSource(EngineTestCase.createSource([ | 243 Source source = addSource(r''' |
| 190 "import 'lib1.dart';", | 244 import 'lib1.dart'; |
| 191 "import 'lib2.dart';", | 245 import 'lib2.dart'; |
| 192 "f() { v = 0; }"])); | 246 f() { v = 0; }'''); |
| 193 addNamedSource("/lib1.dart", EngineTestCase.createSource(["library lib1;", "
var v;"])); | 247 addNamedSource("/lib1.dart", r''' |
| 194 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
var v;"])); | 248 library lib1; |
| 249 var v;'''); |
| 250 addNamedSource("/lib2.dart", r''' |
| 251 library lib2; |
| 252 var v;'''); |
| 195 resolve(source); | 253 resolve(source); |
| 196 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); | 254 assertErrors(source, [StaticWarningCode.AMBIGUOUS_IMPORT]); |
| 197 } | 255 } |
| 198 | 256 |
| 199 void test_argumentTypeNotAssignable_ambiguousClassName() { | 257 void test_argumentTypeNotAssignable_ambiguousClassName() { |
| 200 // See dartbug.com/19624 | 258 // See dartbug.com/19624 |
| 201 Source source = addNamedSource("/lib1.dart", EngineTestCase.createSource([ | 259 Source source = addNamedSource("/lib1.dart", r''' |
| 202 "library lib1;", | 260 library lib1; |
| 203 "import 'lib2.dart';", | 261 import 'lib2.dart'; |
| 204 "class _A {}", | 262 class _A {} |
| 205 "f() {", | 263 f() { |
| 206 " g((_A a) {});", | 264 g((_A a) {}); |
| 207 "}"])); | 265 }'''); |
| 208 addNamedSource("/lib2.dart", EngineTestCase.createSource(["library lib2;", "
class _A {}", "g(h(_A a)) {}"])); | 266 addNamedSource("/lib2.dart", r''' |
| 267 library lib2; |
| 268 class _A {} |
| 269 g(h(_A a)) {}'''); |
| 209 resolve(source); | 270 resolve(source); |
| 210 // The name _A is private to the library it's defined in, so this is a type
mismatch. | 271 // The name _A is private to the library it's defined in, so this is a type
mismatch. |
| 211 // Furthermore, the error message should mention both _A and the filenames | 272 // Furthermore, the error message should mention both _A and the filenames |
| 212 // so the user can figure out what's going on. | 273 // so the user can figure out what's going on. |
| 213 List<AnalysisError> errors = analysisContext2.computeErrors(source); | 274 List<AnalysisError> errors = analysisContext2.computeErrors(source); |
| 214 EngineTestCase.assertLength(1, errors); | 275 EngineTestCase.assertLength(1, errors); |
| 215 AnalysisError error = errors[0]; | 276 AnalysisError error = errors[0]; |
| 216 JUnitTestCase.assertEquals(error.errorCode, StaticWarningCode.ARGUMENT_TYPE_
NOT_ASSIGNABLE); | 277 JUnitTestCase.assertEquals(error.errorCode, StaticWarningCode.ARGUMENT_TYPE_
NOT_ASSIGNABLE); |
| 217 String message = error.message; | 278 String message = error.message; |
| 218 JUnitTestCase.assertTrue(message.indexOf("_A") != -1); | 279 JUnitTestCase.assertTrue(message.indexOf("_A") != -1); |
| 219 JUnitTestCase.assertTrue(message.indexOf("lib1.dart") != -1); | 280 JUnitTestCase.assertTrue(message.indexOf("lib1.dart") != -1); |
| 220 JUnitTestCase.assertTrue(message.indexOf("lib2.dart") != -1); | 281 JUnitTestCase.assertTrue(message.indexOf("lib2.dart") != -1); |
| 221 } | 282 } |
| 222 | 283 |
| 223 void test_argumentTypeNotAssignable_annotation_namedConstructor() { | 284 void test_argumentTypeNotAssignable_annotation_namedConstructor() { |
| 224 Source source = addSource(EngineTestCase.createSource([ | 285 Source source = addSource(r''' |
| 225 "class A {", | 286 class A { |
| 226 " const A.fromInt(int p);", | 287 const A.fromInt(int p); |
| 227 "}", | 288 } |
| 228 "@A.fromInt('0')", | 289 @A.fromInt('0') |
| 229 "main() {", | 290 main() { |
| 230 "}"])); | 291 }'''); |
| 231 resolve(source); | 292 resolve(source); |
| 232 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 293 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 233 verify([source]); | 294 verify([source]); |
| 234 } | 295 } |
| 235 | 296 |
| 236 void test_argumentTypeNotAssignable_annotation_unnamedConstructor() { | 297 void test_argumentTypeNotAssignable_annotation_unnamedConstructor() { |
| 237 Source source = addSource(EngineTestCase.createSource([ | 298 Source source = addSource(r''' |
| 238 "class A {", | 299 class A { |
| 239 " const A(int p);", | 300 const A(int p); |
| 240 "}", | 301 } |
| 241 "@A('0')", | 302 @A('0') |
| 242 "main() {", | 303 main() { |
| 243 "}"])); | 304 }'''); |
| 244 resolve(source); | 305 resolve(source); |
| 245 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 306 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 246 verify([source]); | 307 verify([source]); |
| 247 } | 308 } |
| 248 | 309 |
| 249 void test_argumentTypeNotAssignable_binary() { | 310 void test_argumentTypeNotAssignable_binary() { |
| 250 Source source = addSource(EngineTestCase.createSource([ | 311 Source source = addSource(r''' |
| 251 "class A {", | 312 class A { |
| 252 " operator +(int p) {}", | 313 operator +(int p) {} |
| 253 "}", | 314 } |
| 254 "f(A a) {", | 315 f(A a) { |
| 255 " a + '0';", | 316 a + '0'; |
| 256 "}"])); | 317 }'''); |
| 257 resolve(source); | 318 resolve(source); |
| 258 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 319 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 259 verify([source]); | 320 verify([source]); |
| 260 } | 321 } |
| 261 | 322 |
| 262 void test_argumentTypeNotAssignable_cascadeSecond() { | 323 void test_argumentTypeNotAssignable_cascadeSecond() { |
| 263 Source source = addSource(EngineTestCase.createSource([ | 324 Source source = addSource(r''' |
| 264 "// filler filler filler filler filler filler filler filler filler fille
r", | 325 // filler filler filler filler filler filler filler filler filler filler |
| 265 "class A {", | 326 class A { |
| 266 " B ma() { return new B(); }", | 327 B ma() { return new B(); } |
| 267 "}", | 328 } |
| 268 "class B {", | 329 class B { |
| 269 " mb(String p) {}", | 330 mb(String p) {} |
| 270 "}", | 331 } |
| 271 "", | 332 |
| 272 "main() {", | 333 main() { |
| 273 " A a = new A();", | 334 A a = new A(); |
| 274 " a.. ma().mb(0);", | 335 a.. ma().mb(0); |
| 275 "}"])); | 336 }'''); |
| 276 resolve(source); | 337 resolve(source); |
| 277 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 338 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 278 verify([source]); | 339 verify([source]); |
| 279 } | 340 } |
| 280 | 341 |
| 281 void test_argumentTypeNotAssignable_const() { | 342 void test_argumentTypeNotAssignable_const() { |
| 282 Source source = addSource(EngineTestCase.createSource([ | 343 Source source = addSource(r''' |
| 283 "class A {", | 344 class A { |
| 284 " const A(String p);", | 345 const A(String p); |
| 285 "}", | 346 } |
| 286 "main() {", | 347 main() { |
| 287 " const A(42);", | 348 const A(42); |
| 288 "}"])); | 349 }'''); |
| 289 resolve(source); | 350 resolve(source); |
| 290 assertErrors(source, [ | 351 assertErrors(source, [ |
| 291 StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, | 352 StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, |
| 292 CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]); | 353 CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH]); |
| 293 verify([source]); | 354 verify([source]); |
| 294 } | 355 } |
| 295 | 356 |
| 296 void test_argumentTypeNotAssignable_const_super() { | 357 void test_argumentTypeNotAssignable_const_super() { |
| 297 Source source = addSource(EngineTestCase.createSource([ | 358 Source source = addSource(r''' |
| 298 "class A {", | 359 class A { |
| 299 " const A(String p);", | 360 const A(String p); |
| 300 "}", | 361 } |
| 301 "class B extends A {", | 362 class B extends A { |
| 302 " const B() : super(42);", | 363 const B() : super(42); |
| 303 "}"])); | 364 }'''); |
| 304 resolve(source); | 365 resolve(source); |
| 305 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 366 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 306 verify([source]); | 367 verify([source]); |
| 307 } | 368 } |
| 308 | 369 |
| 309 void test_argumentTypeNotAssignable_functionExpressionInvocation_required() { | 370 void test_argumentTypeNotAssignable_functionExpressionInvocation_required() { |
| 310 Source source = addSource(EngineTestCase.createSource(["main() {", " (int x
) {} ('');", "}"])); | 371 Source source = addSource(r''' |
| 372 main() { |
| 373 (int x) {} (''); |
| 374 }'''); |
| 311 resolve(source); | 375 resolve(source); |
| 312 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 376 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 313 verify([source]); | 377 verify([source]); |
| 314 } | 378 } |
| 315 | 379 |
| 316 void test_argumentTypeNotAssignable_index() { | 380 void test_argumentTypeNotAssignable_index() { |
| 317 Source source = addSource(EngineTestCase.createSource([ | 381 Source source = addSource(r''' |
| 318 "class A {", | 382 class A { |
| 319 " operator [](int index) {}", | 383 operator [](int index) {} |
| 320 "}", | 384 } |
| 321 "f(A a) {", | 385 f(A a) { |
| 322 " a['0'];", | 386 a['0']; |
| 323 "}"])); | 387 }'''); |
| 324 resolve(source); | 388 resolve(source); |
| 325 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 389 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 326 verify([source]); | 390 verify([source]); |
| 327 } | 391 } |
| 328 | 392 |
| 329 void test_argumentTypeNotAssignable_invocation_callParameter() { | 393 void test_argumentTypeNotAssignable_invocation_callParameter() { |
| 330 Source source = addSource(EngineTestCase.createSource([ | 394 Source source = addSource(r''' |
| 331 "class A {", | 395 class A { |
| 332 " call(int p) {}", | 396 call(int p) {} |
| 333 "}", | 397 } |
| 334 "f(A a) {", | 398 f(A a) { |
| 335 " a('0');", | 399 a('0'); |
| 336 "}"])); | 400 }'''); |
| 337 resolve(source); | 401 resolve(source); |
| 338 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 402 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 339 verify([source]); | 403 verify([source]); |
| 340 } | 404 } |
| 341 | 405 |
| 342 void test_argumentTypeNotAssignable_invocation_callVariable() { | 406 void test_argumentTypeNotAssignable_invocation_callVariable() { |
| 343 Source source = addSource(EngineTestCase.createSource([ | 407 Source source = addSource(r''' |
| 344 "class A {", | 408 class A { |
| 345 " call(int p) {}", | 409 call(int p) {} |
| 346 "}", | 410 } |
| 347 "main() {", | 411 main() { |
| 348 " A a = new A();", | 412 A a = new A(); |
| 349 " a('0');", | 413 a('0'); |
| 350 "}"])); | 414 }'''); |
| 351 resolve(source); | 415 resolve(source); |
| 352 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 416 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 353 verify([source]); | 417 verify([source]); |
| 354 } | 418 } |
| 355 | 419 |
| 356 void test_argumentTypeNotAssignable_invocation_functionParameter() { | 420 void test_argumentTypeNotAssignable_invocation_functionParameter() { |
| 357 Source source = addSource(EngineTestCase.createSource(["a(b(int p)) {", " b
('0');", "}"])); | 421 Source source = addSource(r''' |
| 422 a(b(int p)) { |
| 423 b('0'); |
| 424 }'''); |
| 358 resolve(source); | 425 resolve(source); |
| 359 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 426 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 360 verify([source]); | 427 verify([source]); |
| 361 } | 428 } |
| 362 | 429 |
| 363 void test_argumentTypeNotAssignable_invocation_functionParameter_generic() { | 430 void test_argumentTypeNotAssignable_invocation_functionParameter_generic() { |
| 364 Source source = addSource(EngineTestCase.createSource([ | 431 Source source = addSource(r''' |
| 365 "class A<K, V> {", | 432 class A<K, V> { |
| 366 " m(f(K k), V v) {", | 433 m(f(K k), V v) { |
| 367 " f(v);", | 434 f(v); |
| 368 " }", | 435 } |
| 369 "}"])); | 436 }'''); |
| 370 resolve(source); | 437 resolve(source); |
| 371 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 438 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 372 verify([source]); | 439 verify([source]); |
| 373 } | 440 } |
| 374 | 441 |
| 375 void test_argumentTypeNotAssignable_invocation_functionTypes_optional() { | 442 void test_argumentTypeNotAssignable_invocation_functionTypes_optional() { |
| 376 Source source = addSource(EngineTestCase.createSource([ | 443 Source source = addSource(r''' |
| 377 "void acceptFunNumOptBool(void funNumOptBool([bool b])) {}", | 444 void acceptFunNumOptBool(void funNumOptBool([bool b])) {} |
| 378 "void funNumBool(bool b) {}", | 445 void funNumBool(bool b) {} |
| 379 "main() {", | 446 main() { |
| 380 " acceptFunNumOptBool(funNumBool);", | 447 acceptFunNumOptBool(funNumBool); |
| 381 "}"])); | 448 }'''); |
| 382 resolve(source); | 449 resolve(source); |
| 383 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 450 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 384 verify([source]); | 451 verify([source]); |
| 385 } | 452 } |
| 386 | 453 |
| 387 void test_argumentTypeNotAssignable_invocation_generic() { | 454 void test_argumentTypeNotAssignable_invocation_generic() { |
| 388 Source source = addSource(EngineTestCase.createSource([ | 455 Source source = addSource(r''' |
| 389 "class A<T> {", | 456 class A<T> { |
| 390 " m(T t) {}", | 457 m(T t) {} |
| 391 "}", | 458 } |
| 392 "f(A<String> a) {", | 459 f(A<String> a) { |
| 393 " a.m(1);", | 460 a.m(1); |
| 394 "}"])); | 461 }'''); |
| 395 resolve(source); | 462 resolve(source); |
| 396 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 463 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 397 verify([source]); | 464 verify([source]); |
| 398 } | 465 } |
| 399 | 466 |
| 400 void test_argumentTypeNotAssignable_invocation_named() { | 467 void test_argumentTypeNotAssignable_invocation_named() { |
| 401 Source source = addSource(EngineTestCase.createSource(["f({String p}) {}", "
main() {", " f(p: 42);", "}"])); | 468 Source source = addSource(r''' |
| 469 f({String p}) {} |
| 470 main() { |
| 471 f(p: 42); |
| 472 }'''); |
| 402 resolve(source); | 473 resolve(source); |
| 403 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 474 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 404 verify([source]); | 475 verify([source]); |
| 405 } | 476 } |
| 406 | 477 |
| 407 void test_argumentTypeNotAssignable_invocation_optional() { | 478 void test_argumentTypeNotAssignable_invocation_optional() { |
| 408 Source source = addSource(EngineTestCase.createSource(["f([String p]) {}", "
main() {", " f(42);", "}"])); | 479 Source source = addSource(r''' |
| 480 f([String p]) {} |
| 481 main() { |
| 482 f(42); |
| 483 }'''); |
| 409 resolve(source); | 484 resolve(source); |
| 410 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 485 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 411 verify([source]); | 486 verify([source]); |
| 412 } | 487 } |
| 413 | 488 |
| 414 void test_argumentTypeNotAssignable_invocation_required() { | 489 void test_argumentTypeNotAssignable_invocation_required() { |
| 415 Source source = addSource(EngineTestCase.createSource(["f(String p) {}", "ma
in() {", " f(42);", "}"])); | 490 Source source = addSource(r''' |
| 491 f(String p) {} |
| 492 main() { |
| 493 f(42); |
| 494 }'''); |
| 416 resolve(source); | 495 resolve(source); |
| 417 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 496 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 418 verify([source]); | 497 verify([source]); |
| 419 } | 498 } |
| 420 | 499 |
| 421 void test_argumentTypeNotAssignable_invocation_typedef_generic() { | 500 void test_argumentTypeNotAssignable_invocation_typedef_generic() { |
| 422 Source source = addSource(EngineTestCase.createSource(["typedef A<T>(T p);",
"f(A<int> a) {", " a('1');", "}"])); | 501 Source source = addSource(r''' |
| 502 typedef A<T>(T p); |
| 503 f(A<int> a) { |
| 504 a('1'); |
| 505 }'''); |
| 423 resolve(source); | 506 resolve(source); |
| 424 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 507 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 425 verify([source]); | 508 verify([source]); |
| 426 } | 509 } |
| 427 | 510 |
| 428 void test_argumentTypeNotAssignable_invocation_typedef_local() { | 511 void test_argumentTypeNotAssignable_invocation_typedef_local() { |
| 429 Source source = addSource(EngineTestCase.createSource([ | 512 Source source = addSource(r''' |
| 430 "typedef A(int p);", | 513 typedef A(int p); |
| 431 "A getA() => null;", | 514 A getA() => null; |
| 432 "main() {", | 515 main() { |
| 433 " A a = getA();", | 516 A a = getA(); |
| 434 " a('1');", | 517 a('1'); |
| 435 "}"])); | 518 }'''); |
| 436 resolve(source); | 519 resolve(source); |
| 437 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 520 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 438 verify([source]); | 521 verify([source]); |
| 439 } | 522 } |
| 440 | 523 |
| 441 void test_argumentTypeNotAssignable_invocation_typedef_parameter() { | 524 void test_argumentTypeNotAssignable_invocation_typedef_parameter() { |
| 442 Source source = addSource(EngineTestCase.createSource(["typedef A(int p);",
"f(A a) {", " a('1');", "}"])); | 525 Source source = addSource(r''' |
| 526 typedef A(int p); |
| 527 f(A a) { |
| 528 a('1'); |
| 529 }'''); |
| 443 resolve(source); | 530 resolve(source); |
| 444 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 531 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 445 verify([source]); | 532 verify([source]); |
| 446 } | 533 } |
| 447 | 534 |
| 448 void test_argumentTypeNotAssignable_new_generic() { | 535 void test_argumentTypeNotAssignable_new_generic() { |
| 449 Source source = addSource(EngineTestCase.createSource([ | 536 Source source = addSource(r''' |
| 450 "class A<T> {", | 537 class A<T> { |
| 451 " A(T p) {}", | 538 A(T p) {} |
| 452 "}", | 539 } |
| 453 "main() {", | 540 main() { |
| 454 " new A<String>(42);", | 541 new A<String>(42); |
| 455 "}"])); | 542 }'''); |
| 456 resolve(source); | 543 resolve(source); |
| 457 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 544 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 458 verify([source]); | 545 verify([source]); |
| 459 } | 546 } |
| 460 | 547 |
| 461 void test_argumentTypeNotAssignable_new_optional() { | 548 void test_argumentTypeNotAssignable_new_optional() { |
| 462 Source source = addSource(EngineTestCase.createSource([ | 549 Source source = addSource(r''' |
| 463 "class A {", | 550 class A { |
| 464 " A([String p]) {}", | 551 A([String p]) {} |
| 465 "}", | 552 } |
| 466 "main() {", | 553 main() { |
| 467 " new A(42);", | 554 new A(42); |
| 468 "}"])); | 555 }'''); |
| 469 resolve(source); | 556 resolve(source); |
| 470 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 557 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 471 verify([source]); | 558 verify([source]); |
| 472 } | 559 } |
| 473 | 560 |
| 474 void test_argumentTypeNotAssignable_new_required() { | 561 void test_argumentTypeNotAssignable_new_required() { |
| 475 Source source = addSource(EngineTestCase.createSource([ | 562 Source source = addSource(r''' |
| 476 "class A {", | 563 class A { |
| 477 " A(String p) {}", | 564 A(String p) {} |
| 478 "}", | 565 } |
| 479 "main() {", | 566 main() { |
| 480 " new A(42);", | 567 new A(42); |
| 481 "}"])); | 568 }'''); |
| 482 resolve(source); | 569 resolve(source); |
| 483 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 570 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 484 verify([source]); | 571 verify([source]); |
| 485 } | 572 } |
| 486 | 573 |
| 487 void test_assignmentToConst_instanceVariable() { | 574 void test_assignmentToConst_instanceVariable() { |
| 488 Source source = addSource(EngineTestCase.createSource([ | 575 Source source = addSource(r''' |
| 489 "class A {", | 576 class A { |
| 490 " static const v = 0;", | 577 static const v = 0; |
| 491 "}", | 578 } |
| 492 "f() {", | 579 f() { |
| 493 " A.v = 1;", | 580 A.v = 1; |
| 494 "}"])); | 581 }'''); |
| 495 resolve(source); | 582 resolve(source); |
| 496 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]); | 583 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]); |
| 497 verify([source]); | 584 verify([source]); |
| 498 } | 585 } |
| 499 | 586 |
| 500 void test_assignmentToConst_instanceVariable_plusEq() { | 587 void test_assignmentToConst_instanceVariable_plusEq() { |
| 501 Source source = addSource(EngineTestCase.createSource([ | 588 Source source = addSource(r''' |
| 502 "class A {", | 589 class A { |
| 503 " static const v = 0;", | 590 static const v = 0; |
| 504 "}", | 591 } |
| 505 "f() {", | 592 f() { |
| 506 " A.v += 1;", | 593 A.v += 1; |
| 507 "}"])); | 594 }'''); |
| 508 resolve(source); | 595 resolve(source); |
| 509 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]); | 596 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]); |
| 510 verify([source]); | 597 verify([source]); |
| 511 } | 598 } |
| 512 | 599 |
| 513 void test_assignmentToConst_localVariable() { | 600 void test_assignmentToConst_localVariable() { |
| 514 Source source = addSource(EngineTestCase.createSource(["f() {", " const x =
0;", " x = 1;", "}"])); | 601 Source source = addSource(r''' |
| 602 f() { |
| 603 const x = 0; |
| 604 x = 1; |
| 605 }'''); |
| 515 resolve(source); | 606 resolve(source); |
| 516 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]); | 607 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]); |
| 517 verify([source]); | 608 verify([source]); |
| 518 } | 609 } |
| 519 | 610 |
| 520 void test_assignmentToConst_localVariable_plusEq() { | 611 void test_assignmentToConst_localVariable_plusEq() { |
| 521 Source source = addSource(EngineTestCase.createSource(["f() {", " const x =
0;", " x += 1;", "}"])); | 612 Source source = addSource(r''' |
| 613 f() { |
| 614 const x = 0; |
| 615 x += 1; |
| 616 }'''); |
| 522 resolve(source); | 617 resolve(source); |
| 523 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]); | 618 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_CONST]); |
| 524 verify([source]); | 619 verify([source]); |
| 525 } | 620 } |
| 526 | 621 |
| 527 void test_assignmentToFinal_instanceVariable() { | 622 void test_assignmentToFinal_instanceVariable() { |
| 528 Source source = addSource(EngineTestCase.createSource([ | 623 Source source = addSource(r''' |
| 529 "class A {", | 624 class A { |
| 530 " final v = 0;", | 625 final v = 0; |
| 531 "}", | 626 } |
| 532 "f() {", | 627 f() { |
| 533 " A a = new A();", | 628 A a = new A(); |
| 534 " a.v = 1;", | 629 a.v = 1; |
| 535 "}"])); | 630 }'''); |
| 536 resolve(source); | 631 resolve(source); |
| 537 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 632 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 538 verify([source]); | 633 verify([source]); |
| 539 } | 634 } |
| 540 | 635 |
| 541 void test_assignmentToFinal_instanceVariable_plusEq() { | 636 void test_assignmentToFinal_instanceVariable_plusEq() { |
| 542 Source source = addSource(EngineTestCase.createSource([ | 637 Source source = addSource(r''' |
| 543 "class A {", | 638 class A { |
| 544 " final v = 0;", | 639 final v = 0; |
| 545 "}", | 640 } |
| 546 "f() {", | 641 f() { |
| 547 " A a = new A();", | 642 A a = new A(); |
| 548 " a.v += 1;", | 643 a.v += 1; |
| 549 "}"])); | 644 }'''); |
| 550 resolve(source); | 645 resolve(source); |
| 551 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 646 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 552 verify([source]); | 647 verify([source]); |
| 553 } | 648 } |
| 554 | 649 |
| 555 void test_assignmentToFinal_localVariable() { | 650 void test_assignmentToFinal_localVariable() { |
| 556 Source source = addSource(EngineTestCase.createSource(["f() {", " final x =
0;", " x = 1;", "}"])); | 651 Source source = addSource(r''' |
| 652 f() { |
| 653 final x = 0; |
| 654 x = 1; |
| 655 }'''); |
| 557 resolve(source); | 656 resolve(source); |
| 558 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 657 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 559 verify([source]); | 658 verify([source]); |
| 560 } | 659 } |
| 561 | 660 |
| 562 void test_assignmentToFinal_localVariable_plusEq() { | 661 void test_assignmentToFinal_localVariable_plusEq() { |
| 563 Source source = addSource(EngineTestCase.createSource(["f() {", " final x =
0;", " x += 1;", "}"])); | 662 Source source = addSource(r''' |
| 663 f() { |
| 664 final x = 0; |
| 665 x += 1; |
| 666 }'''); |
| 564 resolve(source); | 667 resolve(source); |
| 565 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 668 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 566 verify([source]); | 669 verify([source]); |
| 567 } | 670 } |
| 568 | 671 |
| 569 void test_assignmentToFinal_postfixMinusMinus() { | 672 void test_assignmentToFinal_postfixMinusMinus() { |
| 570 Source source = addSource(EngineTestCase.createSource(["f() {", " final x =
0;", " x--;", "}"])); | 673 Source source = addSource(r''' |
| 674 f() { |
| 675 final x = 0; |
| 676 x--; |
| 677 }'''); |
| 571 resolve(source); | 678 resolve(source); |
| 572 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 679 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 573 verify([source]); | 680 verify([source]); |
| 574 } | 681 } |
| 575 | 682 |
| 576 void test_assignmentToFinal_postfixPlusPlus() { | 683 void test_assignmentToFinal_postfixPlusPlus() { |
| 577 Source source = addSource(EngineTestCase.createSource(["f() {", " final x =
0;", " x++;", "}"])); | 684 Source source = addSource(r''' |
| 685 f() { |
| 686 final x = 0; |
| 687 x++; |
| 688 }'''); |
| 578 resolve(source); | 689 resolve(source); |
| 579 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 690 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 580 verify([source]); | 691 verify([source]); |
| 581 } | 692 } |
| 582 | 693 |
| 583 void test_assignmentToFinal_prefixMinusMinus() { | 694 void test_assignmentToFinal_prefixMinusMinus() { |
| 584 Source source = addSource(EngineTestCase.createSource(["f() {", " final x =
0;", " --x;", "}"])); | 695 Source source = addSource(r''' |
| 696 f() { |
| 697 final x = 0; |
| 698 --x; |
| 699 }'''); |
| 585 resolve(source); | 700 resolve(source); |
| 586 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 701 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 587 verify([source]); | 702 verify([source]); |
| 588 } | 703 } |
| 589 | 704 |
| 590 void test_assignmentToFinal_prefixPlusPlus() { | 705 void test_assignmentToFinal_prefixPlusPlus() { |
| 591 Source source = addSource(EngineTestCase.createSource(["f() {", " final x =
0;", " ++x;", "}"])); | 706 Source source = addSource(r''' |
| 707 f() { |
| 708 final x = 0; |
| 709 ++x; |
| 710 }'''); |
| 592 resolve(source); | 711 resolve(source); |
| 593 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 712 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 594 verify([source]); | 713 verify([source]); |
| 595 } | 714 } |
| 596 | 715 |
| 597 void test_assignmentToFinal_suffixMinusMinus() { | 716 void test_assignmentToFinal_suffixMinusMinus() { |
| 598 Source source = addSource(EngineTestCase.createSource(["f() {", " final x =
0;", " x--;", "}"])); | 717 Source source = addSource(r''' |
| 718 f() { |
| 719 final x = 0; |
| 720 x--; |
| 721 }'''); |
| 599 resolve(source); | 722 resolve(source); |
| 600 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 723 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 601 verify([source]); | 724 verify([source]); |
| 602 } | 725 } |
| 603 | 726 |
| 604 void test_assignmentToFinal_suffixPlusPlus() { | 727 void test_assignmentToFinal_suffixPlusPlus() { |
| 605 Source source = addSource(EngineTestCase.createSource(["f() {", " final x =
0;", " x++;", "}"])); | 728 Source source = addSource(r''' |
| 729 f() { |
| 730 final x = 0; |
| 731 x++; |
| 732 }'''); |
| 606 resolve(source); | 733 resolve(source); |
| 607 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 734 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 608 verify([source]); | 735 verify([source]); |
| 609 } | 736 } |
| 610 | 737 |
| 611 void test_assignmentToFinal_topLevelVariable() { | 738 void test_assignmentToFinal_topLevelVariable() { |
| 612 Source source = addSource(EngineTestCase.createSource(["final x = 0;", "f()
{ x = 1; }"])); | 739 Source source = addSource(r''' |
| 740 final x = 0; |
| 741 f() { x = 1; }'''); |
| 613 resolve(source); | 742 resolve(source); |
| 614 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); | 743 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL]); |
| 615 verify([source]); | 744 verify([source]); |
| 616 } | 745 } |
| 617 | 746 |
| 618 void test_assignmentToFinalNoSetter_prefixedIdentifier() { | 747 void test_assignmentToFinalNoSetter_prefixedIdentifier() { |
| 619 Source source = addSource(EngineTestCase.createSource([ | 748 Source source = addSource(r''' |
| 620 "class A {", | 749 class A { |
| 621 " int get x => 0;", | 750 int get x => 0; |
| 622 "}", | 751 } |
| 623 "main() {", | 752 main() { |
| 624 " A a = new A();", | 753 A a = new A(); |
| 625 " a.x = 0;", | 754 a.x = 0; |
| 626 "}"])); | 755 }'''); |
| 627 resolve(source); | 756 resolve(source); |
| 628 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]); | 757 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]); |
| 629 verify([source]); | 758 verify([source]); |
| 630 } | 759 } |
| 631 | 760 |
| 632 void test_assignmentToFinalNoSetter_propertyAccess() { | 761 void test_assignmentToFinalNoSetter_propertyAccess() { |
| 633 Source source = addSource(EngineTestCase.createSource([ | 762 Source source = addSource(r''' |
| 634 "class A {", | 763 class A { |
| 635 " int get x => 0;", | 764 int get x => 0; |
| 636 "}", | 765 } |
| 637 "class B {", | 766 class B { |
| 638 " static A a;", | 767 static A a; |
| 639 "}", | 768 } |
| 640 "main() {", | 769 main() { |
| 641 " B.a.x = 0;", | 770 B.a.x = 0; |
| 642 "}"])); | 771 }'''); |
| 643 resolve(source); | 772 resolve(source); |
| 644 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]); | 773 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER]); |
| 645 verify([source]); | 774 verify([source]); |
| 646 } | 775 } |
| 647 | 776 |
| 648 void test_assignmentToFunction() { | 777 void test_assignmentToFunction() { |
| 649 Source source = addSource(EngineTestCase.createSource(["f() {}", "main() {",
" f = null;", "}"])); | 778 Source source = addSource(r''' |
| 779 f() {} |
| 780 main() { |
| 781 f = null; |
| 782 }'''); |
| 650 resolve(source); | 783 resolve(source); |
| 651 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FUNCTION]); | 784 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_FUNCTION]); |
| 652 verify([source]); | 785 verify([source]); |
| 653 } | 786 } |
| 654 | 787 |
| 655 void test_assignmentToMethod() { | 788 void test_assignmentToMethod() { |
| 656 Source source = addSource(EngineTestCase.createSource([ | 789 Source source = addSource(r''' |
| 657 "class A {", | 790 class A { |
| 658 " m() {}", | 791 m() {} |
| 659 "}", | 792 } |
| 660 "f(A a) {", | 793 f(A a) { |
| 661 " a.m = () {};", | 794 a.m = () {}; |
| 662 "}"])); | 795 }'''); |
| 663 resolve(source); | 796 resolve(source); |
| 664 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_METHOD]); | 797 assertErrors(source, [StaticWarningCode.ASSIGNMENT_TO_METHOD]); |
| 665 verify([source]); | 798 verify([source]); |
| 666 } | 799 } |
| 667 | 800 |
| 668 void test_caseBlockNotTerminated() { | 801 void test_caseBlockNotTerminated() { |
| 669 Source source = addSource(EngineTestCase.createSource([ | 802 Source source = addSource(r''' |
| 670 "f(int p) {", | 803 f(int p) { |
| 671 " switch (p) {", | 804 switch (p) { |
| 672 " case 0:", | 805 case 0: |
| 673 " f(p);", | 806 f(p); |
| 674 " case 1:", | 807 case 1: |
| 675 " break;", | 808 break; |
| 676 " }", | 809 } |
| 677 "}"])); | 810 }'''); |
| 678 resolve(source); | 811 resolve(source); |
| 679 assertErrors(source, [StaticWarningCode.CASE_BLOCK_NOT_TERMINATED]); | 812 assertErrors(source, [StaticWarningCode.CASE_BLOCK_NOT_TERMINATED]); |
| 680 verify([source]); | 813 verify([source]); |
| 681 } | 814 } |
| 682 | 815 |
| 683 void test_castToNonType() { | 816 void test_castToNonType() { |
| 684 Source source = addSource(EngineTestCase.createSource(["var A = 0;", "f(Stri
ng s) { var x = s as A; }"])); | 817 Source source = addSource(r''' |
| 818 var A = 0; |
| 819 f(String s) { var x = s as A; }'''); |
| 685 resolve(source); | 820 resolve(source); |
| 686 assertErrors(source, [StaticWarningCode.CAST_TO_NON_TYPE]); | 821 assertErrors(source, [StaticWarningCode.CAST_TO_NON_TYPE]); |
| 687 verify([source]); | 822 verify([source]); |
| 688 } | 823 } |
| 689 | 824 |
| 690 void test_concreteClassWithAbstractMember() { | 825 void test_concreteClassWithAbstractMember() { |
| 691 Source source = addSource(EngineTestCase.createSource(["class A {", " m();"
, "}"])); | 826 Source source = addSource(r''' |
| 827 class A { |
| 828 m(); |
| 829 }'''); |
| 692 resolve(source); | 830 resolve(source); |
| 693 assertErrors(source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]
); | 831 assertErrors(source, [StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER]
); |
| 694 verify([source]); | 832 verify([source]); |
| 695 } | 833 } |
| 696 | 834 |
| 697 void test_conflictingDartImport() { | 835 void test_conflictingDartImport() { |
| 698 Source source = addSource(EngineTestCase.createSource([ | 836 Source source = addSource(r''' |
| 699 "import 'lib.dart';", | 837 import 'lib.dart'; |
| 700 "import 'dart:async';", | 838 import 'dart:async'; |
| 701 "Future f = null;", | 839 Future f = null; |
| 702 "Stream s;"])); | 840 Stream s;'''); |
| 703 addNamedSource("/lib.dart", EngineTestCase.createSource(["library lib;", "cl
ass Future {}"])); | 841 addNamedSource("/lib.dart", r''' |
| 842 library lib; |
| 843 class Future {}'''); |
| 704 resolve(source); | 844 resolve(source); |
| 705 assertErrors(source, [StaticWarningCode.CONFLICTING_DART_IMPORT]); | 845 assertErrors(source, [StaticWarningCode.CONFLICTING_DART_IMPORT]); |
| 706 } | 846 } |
| 707 | 847 |
| 708 void test_conflictingInstanceGetterAndSuperclassMember_declField_direct_setter
() { | 848 void test_conflictingInstanceGetterAndSuperclassMember_declField_direct_setter
() { |
| 709 Source source = addSource(EngineTestCase.createSource([ | 849 Source source = addSource(r''' |
| 710 "class A {", | 850 class A { |
| 711 " static set v(x) {}", | 851 static set v(x) {} |
| 712 "}", | 852 } |
| 713 "class B extends A {", | 853 class B extends A { |
| 714 " var v;", | 854 var v; |
| 715 "}"])); | 855 }'''); |
| 716 resolve(source); | 856 resolve(source); |
| 717 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); | 857 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); |
| 718 verify([source]); | 858 verify([source]); |
| 719 } | 859 } |
| 720 | 860 |
| 721 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_gette
r() { | 861 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_gette
r() { |
| 722 Source source = addSource(EngineTestCase.createSource([ | 862 Source source = addSource(r''' |
| 723 "class A {", | 863 class A { |
| 724 " static get v => 0;", | 864 static get v => 0; |
| 725 "}", | 865 } |
| 726 "class B extends A {", | 866 class B extends A { |
| 727 " get v => 0;", | 867 get v => 0; |
| 728 "}"])); | 868 }'''); |
| 729 resolve(source); | 869 resolve(source); |
| 730 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); | 870 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); |
| 731 verify([source]); | 871 verify([source]); |
| 732 } | 872 } |
| 733 | 873 |
| 734 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_metho
d() { | 874 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_metho
d() { |
| 735 Source source = addSource(EngineTestCase.createSource([ | 875 Source source = addSource(r''' |
| 736 "class A {", | 876 class A { |
| 737 " static v() {}", | 877 static v() {} |
| 738 "}", | 878 } |
| 739 "class B extends A {", | 879 class B extends A { |
| 740 " get v => 0;", | 880 get v => 0; |
| 741 "}"])); | 881 }'''); |
| 742 resolve(source); | 882 resolve(source); |
| 743 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); | 883 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); |
| 744 verify([source]); | 884 verify([source]); |
| 745 } | 885 } |
| 746 | 886 |
| 747 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_sette
r() { | 887 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_direct_sette
r() { |
| 748 Source source = addSource(EngineTestCase.createSource([ | 888 Source source = addSource(r''' |
| 749 "class A {", | 889 class A { |
| 750 " static set v(x) {}", | 890 static set v(x) {} |
| 751 "}", | 891 } |
| 752 "class B extends A {", | 892 class B extends A { |
| 753 " get v => 0;", | 893 get v => 0; |
| 754 "}"])); | 894 }'''); |
| 755 resolve(source); | 895 resolve(source); |
| 756 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); | 896 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); |
| 757 verify([source]); | 897 verify([source]); |
| 758 } | 898 } |
| 759 | 899 |
| 760 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_indirect() { | 900 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_indirect() { |
| 761 Source source = addSource(EngineTestCase.createSource([ | 901 Source source = addSource(r''' |
| 762 "class A {", | 902 class A { |
| 763 " static int v;", | 903 static int v; |
| 764 "}", | 904 } |
| 765 "class B extends A {}", | 905 class B extends A {} |
| 766 "class C extends B {", | 906 class C extends B { |
| 767 " get v => 0;", | 907 get v => 0; |
| 768 "}"])); | 908 }'''); |
| 769 resolve(source); | 909 resolve(source); |
| 770 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); | 910 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); |
| 771 verify([source]); | 911 verify([source]); |
| 772 } | 912 } |
| 773 | 913 |
| 774 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_mixin() { | 914 void test_conflictingInstanceGetterAndSuperclassMember_declGetter_mixin() { |
| 775 Source source = addSource(EngineTestCase.createSource([ | 915 Source source = addSource(r''' |
| 776 "class M {", | 916 class M { |
| 777 " static int v;", | 917 static int v; |
| 778 "}", | 918 } |
| 779 "class B extends Object with M {", | 919 class B extends Object with M { |
| 780 " get v => 0;", | 920 get v => 0; |
| 781 "}"])); | 921 }'''); |
| 782 resolve(source); | 922 resolve(source); |
| 783 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); | 923 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); |
| 784 verify([source]); | 924 verify([source]); |
| 785 } | 925 } |
| 786 | 926 |
| 787 void test_conflictingInstanceGetterAndSuperclassMember_direct_field() { | 927 void test_conflictingInstanceGetterAndSuperclassMember_direct_field() { |
| 788 Source source = addSource(EngineTestCase.createSource([ | 928 Source source = addSource(r''' |
| 789 "class A {", | 929 class A { |
| 790 " static int v;", | 930 static int v; |
| 791 "}", | 931 } |
| 792 "class B extends A {", | 932 class B extends A { |
| 793 " get v => 0;", | 933 get v => 0; |
| 794 "}"])); | 934 }'''); |
| 795 resolve(source); | 935 resolve(source); |
| 796 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); | 936 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPE
RCLASS_MEMBER]); |
| 797 verify([source]); | 937 verify([source]); |
| 798 } | 938 } |
| 799 | 939 |
| 800 void test_conflictingInstanceMethodSetter_sameClass() { | 940 void test_conflictingInstanceMethodSetter_sameClass() { |
| 801 Source source = addSource(EngineTestCase.createSource(["class A {", " set f
oo(a) {}", " foo() {}", "}"])); | 941 Source source = addSource(r''' |
| 942 class A { |
| 943 set foo(a) {} |
| 944 foo() {} |
| 945 }'''); |
| 802 resolve(source); | 946 resolve(source); |
| 803 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER])
; | 947 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER])
; |
| 804 verify([source]); | 948 verify([source]); |
| 805 } | 949 } |
| 806 | 950 |
| 807 void test_conflictingInstanceMethodSetter_setterInInterface() { | 951 void test_conflictingInstanceMethodSetter_setterInInterface() { |
| 808 Source source = addSource(EngineTestCase.createSource([ | 952 Source source = addSource(r''' |
| 809 "abstract class A {", | 953 abstract class A { |
| 810 " set foo(a);", | 954 set foo(a); |
| 811 "}", | 955 } |
| 812 "abstract class B implements A {", | 956 abstract class B implements A { |
| 813 " foo() {}", | 957 foo() {} |
| 814 "}"])); | 958 }'''); |
| 815 resolve(source); | 959 resolve(source); |
| 816 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER])
; | 960 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER])
; |
| 817 verify([source]); | 961 verify([source]); |
| 818 } | 962 } |
| 819 | 963 |
| 820 void test_conflictingInstanceMethodSetter_setterInSuper() { | 964 void test_conflictingInstanceMethodSetter_setterInSuper() { |
| 821 Source source = addSource(EngineTestCase.createSource([ | 965 Source source = addSource(r''' |
| 822 "class A {", | 966 class A { |
| 823 " set foo(a) {}", | 967 set foo(a) {} |
| 824 "}", | 968 } |
| 825 "class B extends A {", | 969 class B extends A { |
| 826 " foo() {}", | 970 foo() {} |
| 827 "}"])); | 971 }'''); |
| 828 resolve(source); | 972 resolve(source); |
| 829 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER])
; | 973 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER])
; |
| 830 verify([source]); | 974 verify([source]); |
| 831 } | 975 } |
| 832 | 976 |
| 833 void test_conflictingInstanceMethodSetter2() { | 977 void test_conflictingInstanceMethodSetter2() { |
| 834 Source source = addSource(EngineTestCase.createSource(["class A {", " foo()
{}", " set foo(a) {}", "}"])); | 978 Source source = addSource(r''' |
| 979 class A { |
| 980 foo() {} |
| 981 set foo(a) {} |
| 982 }'''); |
| 835 resolve(source); | 983 resolve(source); |
| 836 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2]
); | 984 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2]
); |
| 837 verify([source]); | 985 verify([source]); |
| 838 } | 986 } |
| 839 | 987 |
| 840 void test_conflictingInstanceSetterAndSuperclassMember() { | 988 void test_conflictingInstanceSetterAndSuperclassMember() { |
| 841 Source source = addSource(EngineTestCase.createSource([ | 989 Source source = addSource(r''' |
| 842 "class A {", | 990 class A { |
| 843 " static int v;", | 991 static int v; |
| 844 "}", | 992 } |
| 845 "class B extends A {", | 993 class B extends A { |
| 846 " set v(x) {}", | 994 set v(x) {} |
| 847 "}"])); | 995 }'''); |
| 848 resolve(source); | 996 resolve(source); |
| 849 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPE
RCLASS_MEMBER]); | 997 assertErrors(source, [StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPE
RCLASS_MEMBER]); |
| 850 verify([source]); | 998 verify([source]); |
| 851 } | 999 } |
| 852 | 1000 |
| 853 void test_conflictingStaticGetterAndInstanceSetter_mixin() { | 1001 void test_conflictingStaticGetterAndInstanceSetter_mixin() { |
| 854 Source source = addSource(EngineTestCase.createSource([ | 1002 Source source = addSource(r''' |
| 855 "class A {", | 1003 class A { |
| 856 " set x(int p) {}", | 1004 set x(int p) {} |
| 857 "}", | 1005 } |
| 858 "class B extends Object with A {", | 1006 class B extends Object with A { |
| 859 " static get x => 0;", | 1007 static get x => 0; |
| 860 "}"])); | 1008 }'''); |
| 861 resolve(source); | 1009 resolve(source); |
| 862 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTAN
CE_SETTER]); | 1010 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTAN
CE_SETTER]); |
| 863 verify([source]); | 1011 verify([source]); |
| 864 } | 1012 } |
| 865 | 1013 |
| 866 void test_conflictingStaticGetterAndInstanceSetter_superClass() { | 1014 void test_conflictingStaticGetterAndInstanceSetter_superClass() { |
| 867 Source source = addSource(EngineTestCase.createSource([ | 1015 Source source = addSource(r''' |
| 868 "class A {", | 1016 class A { |
| 869 " set x(int p) {}", | 1017 set x(int p) {} |
| 870 "}", | 1018 } |
| 871 "class B extends A {", | 1019 class B extends A { |
| 872 " static get x => 0;", | 1020 static get x => 0; |
| 873 "}"])); | 1021 }'''); |
| 874 resolve(source); | 1022 resolve(source); |
| 875 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTAN
CE_SETTER]); | 1023 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTAN
CE_SETTER]); |
| 876 verify([source]); | 1024 verify([source]); |
| 877 } | 1025 } |
| 878 | 1026 |
| 879 void test_conflictingStaticGetterAndInstanceSetter_thisClass() { | 1027 void test_conflictingStaticGetterAndInstanceSetter_thisClass() { |
| 880 Source source = addSource(EngineTestCase.createSource([ | 1028 Source source = addSource(r''' |
| 881 "class A {", | 1029 class A { |
| 882 " static get x => 0;", | 1030 static get x => 0; |
| 883 " set x(int p) {}", | 1031 set x(int p) {} |
| 884 "}"])); | 1032 }'''); |
| 885 resolve(source); | 1033 resolve(source); |
| 886 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTAN
CE_SETTER]); | 1034 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTAN
CE_SETTER]); |
| 887 verify([source]); | 1035 verify([source]); |
| 888 } | 1036 } |
| 889 | 1037 |
| 890 void test_conflictingStaticSetterAndInstanceMember_thisClass_getter() { | 1038 void test_conflictingStaticSetterAndInstanceMember_thisClass_getter() { |
| 891 Source source = addSource(EngineTestCase.createSource([ | 1039 Source source = addSource(r''' |
| 892 "class A {", | 1040 class A { |
| 893 " get x => 0;", | 1041 get x => 0; |
| 894 " static set x(int p) {}", | 1042 static set x(int p) {} |
| 895 "}"])); | 1043 }'''); |
| 896 resolve(source); | 1044 resolve(source); |
| 897 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTAN
CE_MEMBER]); | 1045 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTAN
CE_MEMBER]); |
| 898 verify([source]); | 1046 verify([source]); |
| 899 } | 1047 } |
| 900 | 1048 |
| 901 void test_conflictingStaticSetterAndInstanceMember_thisClass_method() { | 1049 void test_conflictingStaticSetterAndInstanceMember_thisClass_method() { |
| 902 Source source = addSource(EngineTestCase.createSource(["class A {", " x() {
}", " static set x(int p) {}", "}"])); | 1050 Source source = addSource(r''' |
| 1051 class A { |
| 1052 x() {} |
| 1053 static set x(int p) {} |
| 1054 }'''); |
| 903 resolve(source); | 1055 resolve(source); |
| 904 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTAN
CE_MEMBER]); | 1056 assertErrors(source, [StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTAN
CE_MEMBER]); |
| 905 verify([source]); | 1057 verify([source]); |
| 906 } | 1058 } |
| 907 | 1059 |
| 908 void test_constWithAbstractClass() { | 1060 void test_constWithAbstractClass() { |
| 909 Source source = addSource(EngineTestCase.createSource([ | 1061 Source source = addSource(r''' |
| 910 "abstract class A {", | 1062 abstract class A { |
| 911 " const A();", | 1063 const A(); |
| 912 "}", | 1064 } |
| 913 "void f() {", | 1065 void f() { |
| 914 " A a = const A();", | 1066 A a = const A(); |
| 915 "}"])); | 1067 }'''); |
| 916 resolve(source); | 1068 resolve(source); |
| 917 assertErrors(source, [StaticWarningCode.CONST_WITH_ABSTRACT_CLASS]); | 1069 assertErrors(source, [StaticWarningCode.CONST_WITH_ABSTRACT_CLASS]); |
| 918 verify([source]); | 1070 verify([source]); |
| 919 } | 1071 } |
| 920 | 1072 |
| 921 void test_equalKeysInMap() { | 1073 void test_equalKeysInMap() { |
| 922 Source source = addSource(EngineTestCase.createSource(["var m = {'a' : 0, 'b
' : 1, 'a' : 2};"])); | 1074 Source source = addSource("var m = {'a' : 0, 'b' : 1, 'a' : 2};"); |
| 923 resolve(source); | 1075 resolve(source); |
| 924 assertErrors(source, [StaticWarningCode.EQUAL_KEYS_IN_MAP]); | 1076 assertErrors(source, [StaticWarningCode.EQUAL_KEYS_IN_MAP]); |
| 925 verify([source]); | 1077 verify([source]); |
| 926 } | 1078 } |
| 927 | 1079 |
| 928 void test_equalKeysInMap_withEqualTypeParams() { | 1080 void test_equalKeysInMap_withEqualTypeParams() { |
| 929 Source source = addSource(EngineTestCase.createSource([ | 1081 Source source = addSource(r''' |
| 930 "class A<T> {", | 1082 class A<T> { |
| 931 " const A();", | 1083 const A(); |
| 932 "}", | 1084 } |
| 933 "var m = {const A<int>(): 0, const A<int>(): 1};"])); | 1085 var m = {const A<int>(): 0, const A<int>(): 1};'''); |
| 934 resolve(source); | 1086 resolve(source); |
| 935 assertErrors(source, [StaticWarningCode.EQUAL_KEYS_IN_MAP]); | 1087 assertErrors(source, [StaticWarningCode.EQUAL_KEYS_IN_MAP]); |
| 936 verify([source]); | 1088 verify([source]); |
| 937 } | 1089 } |
| 938 | 1090 |
| 939 void test_equalKeysInMap_withUnequalTypeParams() { | 1091 void test_equalKeysInMap_withUnequalTypeParams() { |
| 940 // No error should be produced because A<int> and A<num> are different types
. | 1092 // No error should be produced because A<int> and A<num> are different types
. |
| 941 Source source = addSource(EngineTestCase.createSource([ | 1093 Source source = addSource(r''' |
| 942 "class A<T> {", | 1094 class A<T> { |
| 943 " const A();", | 1095 const A(); |
| 944 "}", | 1096 } |
| 945 "var m = {const A<int>(): 0, const A<num>(): 1};"])); | 1097 var m = {const A<int>(): 0, const A<num>(): 1};'''); |
| 946 resolve(source); | 1098 resolve(source); |
| 947 assertNoErrors(source); | 1099 assertNoErrors(source); |
| 948 verify([source]); | 1100 verify([source]); |
| 949 } | 1101 } |
| 950 | 1102 |
| 951 void test_exportDuplicatedLibraryName() { | 1103 void test_exportDuplicatedLibraryName() { |
| 952 Source source = addSource(EngineTestCase.createSource([ | 1104 Source source = addSource(r''' |
| 953 "library test;", | 1105 library test; |
| 954 "export 'lib1.dart';", | 1106 export 'lib1.dart'; |
| 955 "export 'lib2.dart';"])); | 1107 export 'lib2.dart';'''); |
| 956 addNamedSource("/lib1.dart", "library lib;"); | 1108 addNamedSource("/lib1.dart", "library lib;"); |
| 957 addNamedSource("/lib2.dart", "library lib;"); | 1109 addNamedSource("/lib2.dart", "library lib;"); |
| 958 resolve(source); | 1110 resolve(source); |
| 959 assertErrors(source, [StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_NAME]); | 1111 assertErrors(source, [StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_NAME]); |
| 960 verify([source]); | 1112 verify([source]); |
| 961 } | 1113 } |
| 962 | 1114 |
| 963 void test_extraPositionalArguments() { | 1115 void test_extraPositionalArguments() { |
| 964 Source source = addSource(EngineTestCase.createSource(["f() {}", "main() {",
" f(0, 1, '2');", "}"])); | 1116 Source source = addSource(r''' |
| 1117 f() {} |
| 1118 main() { |
| 1119 f(0, 1, '2'); |
| 1120 }'''); |
| 965 resolve(source); | 1121 resolve(source); |
| 966 assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]); | 1122 assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]); |
| 967 verify([source]); | 1123 verify([source]); |
| 968 } | 1124 } |
| 969 | 1125 |
| 970 void test_extraPositionalArguments_functionExpression() { | 1126 void test_extraPositionalArguments_functionExpression() { |
| 971 Source source = addSource(EngineTestCase.createSource(["main() {", " (int x
) {} (0, 1);", "}"])); | 1127 Source source = addSource(r''' |
| 1128 main() { |
| 1129 (int x) {} (0, 1); |
| 1130 }'''); |
| 972 resolve(source); | 1131 resolve(source); |
| 973 assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]); | 1132 assertErrors(source, [StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS]); |
| 974 verify([source]); | 1133 verify([source]); |
| 975 } | 1134 } |
| 976 | 1135 |
| 977 void test_fieldInitializedInInitializerAndDeclaration_final() { | 1136 void test_fieldInitializedInInitializerAndDeclaration_final() { |
| 978 Source source = addSource(EngineTestCase.createSource([ | 1137 Source source = addSource(r''' |
| 979 "class A {", | 1138 class A { |
| 980 " final int x = 0;", | 1139 final int x = 0; |
| 981 " A() : x = 1 {}", | 1140 A() : x = 1 {} |
| 982 "}"])); | 1141 }'''); |
| 983 resolve(source); | 1142 resolve(source); |
| 984 assertErrors(source, [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND
_DECLARATION]); | 1143 assertErrors(source, [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND
_DECLARATION]); |
| 985 verify([source]); | 1144 verify([source]); |
| 986 } | 1145 } |
| 987 | 1146 |
| 988 void test_fieldInitializerNotAssignable() { | 1147 void test_fieldInitializerNotAssignable() { |
| 989 Source source = addSource(EngineTestCase.createSource(["class A {", " int x
;", " A() : x = '';", "}"])); | 1148 Source source = addSource(r''' |
| 1149 class A { |
| 1150 int x; |
| 1151 A() : x = ''; |
| 1152 }'''); |
| 990 resolve(source); | 1153 resolve(source); |
| 991 assertErrors(source, [StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE]); | 1154 assertErrors(source, [StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE]); |
| 992 verify([source]); | 1155 verify([source]); |
| 993 } | 1156 } |
| 994 | 1157 |
| 995 void test_fieldInitializingFormalNotAssignable() { | 1158 void test_fieldInitializingFormalNotAssignable() { |
| 996 Source source = addSource(EngineTestCase.createSource(["class A {", " int x
;", " A(String this.x) {}", "}"])); | 1159 Source source = addSource(r''' |
| 1160 class A { |
| 1161 int x; |
| 1162 A(String this.x) {} |
| 1163 }'''); |
| 997 resolve(source); | 1164 resolve(source); |
| 998 assertErrors(source, [StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGN
ABLE]); | 1165 assertErrors(source, [StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGN
ABLE]); |
| 999 verify([source]); | 1166 verify([source]); |
| 1000 } | 1167 } |
| 1001 | 1168 |
| 1002 /** | 1169 /** |
| 1003 * This test doesn't test the FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
code, but tests the | 1170 * This test doesn't test the FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
code, but tests the |
| 1004 * FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION code instead. It is provid
ed here to show | 1171 * FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION code instead. It is provid
ed here to show |
| 1005 * coverage over all of the permutations of initializers in constructor declar
ations. | 1172 * coverage over all of the permutations of initializers in constructor declar
ations. |
| 1006 * | 1173 * |
| 1007 * Note: FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION covers a subset of | 1174 * Note: FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION covers a subset of |
| 1008 * FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR, since it more specific, w
e use it instead of | 1175 * FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR, since it more specific, w
e use it instead of |
| 1009 * the broader code | 1176 * the broader code |
| 1010 */ | 1177 */ |
| 1011 void test_finalInitializedInDeclarationAndConstructor_initializers() { | 1178 void test_finalInitializedInDeclarationAndConstructor_initializers() { |
| 1012 Source source = addSource(EngineTestCase.createSource(["class A {", " final
x = 0;", " A() : x = 0 {}", "}"])); | 1179 Source source = addSource(r''' |
| 1180 class A { |
| 1181 final x = 0; |
| 1182 A() : x = 0 {} |
| 1183 }'''); |
| 1013 resolve(source); | 1184 resolve(source); |
| 1014 assertErrors(source, [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND
_DECLARATION]); | 1185 assertErrors(source, [StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND
_DECLARATION]); |
| 1015 verify([source]); | 1186 verify([source]); |
| 1016 } | 1187 } |
| 1017 | 1188 |
| 1018 void test_finalInitializedInDeclarationAndConstructor_initializingFormal() { | 1189 void test_finalInitializedInDeclarationAndConstructor_initializingFormal() { |
| 1019 Source source = addSource(EngineTestCase.createSource(["class A {", " final
x = 0;", " A(this.x) {}", "}"])); | 1190 Source source = addSource(r''' |
| 1191 class A { |
| 1192 final x = 0; |
| 1193 A(this.x) {} |
| 1194 }'''); |
| 1020 resolve(source); | 1195 resolve(source); |
| 1021 assertErrors(source, [StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND
_CONSTRUCTOR]); | 1196 assertErrors(source, [StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND
_CONSTRUCTOR]); |
| 1022 verify([source]); | 1197 verify([source]); |
| 1023 } | 1198 } |
| 1024 | 1199 |
| 1025 void test_finalNotInitialized_inConstructor() { | 1200 void test_finalNotInitialized_inConstructor() { |
| 1026 Source source = addSource(EngineTestCase.createSource(["class A {", " final
int x;", " A() {}", "}"])); | 1201 Source source = addSource(r''' |
| 1202 class A { |
| 1203 final int x; |
| 1204 A() {} |
| 1205 }'''); |
| 1027 resolve(source); | 1206 resolve(source); |
| 1028 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); | 1207 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); |
| 1029 verify([source]); | 1208 verify([source]); |
| 1030 } | 1209 } |
| 1031 | 1210 |
| 1032 void test_finalNotInitialized_instanceField_final() { | 1211 void test_finalNotInitialized_instanceField_final() { |
| 1033 Source source = addSource(EngineTestCase.createSource(["class A {", " final
F;", "}"])); | 1212 Source source = addSource(r''' |
| 1213 class A { |
| 1214 final F; |
| 1215 }'''); |
| 1034 resolve(source); | 1216 resolve(source); |
| 1035 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); | 1217 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); |
| 1036 verify([source]); | 1218 verify([source]); |
| 1037 } | 1219 } |
| 1038 | 1220 |
| 1039 void test_finalNotInitialized_instanceField_final_static() { | 1221 void test_finalNotInitialized_instanceField_final_static() { |
| 1040 Source source = addSource(EngineTestCase.createSource(["class A {", " stati
c final F;", "}"])); | 1222 Source source = addSource(r''' |
| 1223 class A { |
| 1224 static final F; |
| 1225 }'''); |
| 1041 resolve(source); | 1226 resolve(source); |
| 1042 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); | 1227 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); |
| 1043 verify([source]); | 1228 verify([source]); |
| 1044 } | 1229 } |
| 1045 | 1230 |
| 1046 void test_finalNotInitialized_library_final() { | 1231 void test_finalNotInitialized_library_final() { |
| 1047 Source source = addSource(EngineTestCase.createSource(["final F;"])); | 1232 Source source = addSource("final F;"); |
| 1048 resolve(source); | 1233 resolve(source); |
| 1049 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); | 1234 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); |
| 1050 verify([source]); | 1235 verify([source]); |
| 1051 } | 1236 } |
| 1052 | 1237 |
| 1053 void test_finalNotInitialized_local_final() { | 1238 void test_finalNotInitialized_local_final() { |
| 1054 Source source = addSource(EngineTestCase.createSource(["f() {", " final int
x;", "}"])); | 1239 Source source = addSource(r''' |
| 1240 f() { |
| 1241 final int x; |
| 1242 }'''); |
| 1055 resolve(source); | 1243 resolve(source); |
| 1056 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); | 1244 assertErrors(source, [StaticWarningCode.FINAL_NOT_INITIALIZED]); |
| 1057 verify([source]); | 1245 verify([source]); |
| 1058 } | 1246 } |
| 1059 | 1247 |
| 1060 void test_functionWithoutCall_direct() { | 1248 void test_functionWithoutCall_direct() { |
| 1061 Source source = addSource(EngineTestCase.createSource(["class A implements F
unction {", "}"])); | 1249 Source source = addSource(r''' |
| 1250 class A implements Function { |
| 1251 }'''); |
| 1062 resolve(source); | 1252 resolve(source); |
| 1063 assertErrors(source, [StaticWarningCode.FUNCTION_WITHOUT_CALL]); | 1253 assertErrors(source, [StaticWarningCode.FUNCTION_WITHOUT_CALL]); |
| 1064 verify([source]); | 1254 verify([source]); |
| 1065 } | 1255 } |
| 1066 | 1256 |
| 1067 void test_functionWithoutCall_indirect_extends() { | 1257 void test_functionWithoutCall_indirect_extends() { |
| 1068 Source source = addSource(EngineTestCase.createSource([ | 1258 Source source = addSource(r''' |
| 1069 "abstract class A implements Function {", | 1259 abstract class A implements Function { |
| 1070 "}", | 1260 } |
| 1071 "class B extends A {", | 1261 class B extends A { |
| 1072 "}"])); | 1262 }'''); |
| 1073 resolve(source); | 1263 resolve(source); |
| 1074 assertErrors(source, [StaticWarningCode.FUNCTION_WITHOUT_CALL]); | 1264 assertErrors(source, [StaticWarningCode.FUNCTION_WITHOUT_CALL]); |
| 1075 verify([source]); | 1265 verify([source]); |
| 1076 } | 1266 } |
| 1077 | 1267 |
| 1078 void test_functionWithoutCall_indirect_implements() { | 1268 void test_functionWithoutCall_indirect_implements() { |
| 1079 Source source = addSource(EngineTestCase.createSource([ | 1269 Source source = addSource(r''' |
| 1080 "abstract class A implements Function {", | 1270 abstract class A implements Function { |
| 1081 "}", | 1271 } |
| 1082 "class B implements A {", | 1272 class B implements A { |
| 1083 "}"])); | 1273 }'''); |
| 1084 resolve(source); | 1274 resolve(source); |
| 1085 assertErrors(source, [StaticWarningCode.FUNCTION_WITHOUT_CALL]); | 1275 assertErrors(source, [StaticWarningCode.FUNCTION_WITHOUT_CALL]); |
| 1086 verify([source]); | 1276 verify([source]); |
| 1087 } | 1277 } |
| 1088 | 1278 |
| 1089 void test_importDuplicatedLibraryName() { | 1279 void test_importDuplicatedLibraryName() { |
| 1090 Source source = addSource(EngineTestCase.createSource([ | 1280 Source source = addSource(r''' |
| 1091 "library test;", | 1281 library test; |
| 1092 "import 'lib1.dart';", | 1282 import 'lib1.dart'; |
| 1093 "import 'lib2.dart';"])); | 1283 import 'lib2.dart';'''); |
| 1094 addNamedSource("/lib1.dart", "library lib;"); | 1284 addNamedSource("/lib1.dart", "library lib;"); |
| 1095 addNamedSource("/lib2.dart", "library lib;"); | 1285 addNamedSource("/lib2.dart", "library lib;"); |
| 1096 resolve(source); | 1286 resolve(source); |
| 1097 assertErrors(source, [ | 1287 assertErrors(source, [ |
| 1098 StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAME, | 1288 StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAME, |
| 1099 HintCode.UNUSED_IMPORT, | 1289 HintCode.UNUSED_IMPORT, |
| 1100 HintCode.UNUSED_IMPORT]); | 1290 HintCode.UNUSED_IMPORT]); |
| 1101 verify([source]); | 1291 verify([source]); |
| 1102 } | 1292 } |
| 1103 | 1293 |
| 1104 void test_importOfNonLibrary() { | 1294 void test_importOfNonLibrary() { |
| 1105 resolveWithAndWithoutExperimental(<String> [ | 1295 resolveWithAndWithoutExperimental(<String> [ |
| 1106 EngineTestCase.createSource(["part of lib;", "class A {}"]), | 1296 r''' |
| 1107 EngineTestCase.createSource([ | 1297 part of lib; |
| 1108 "library lib;", | 1298 class A {}''', |
| 1109 "import 'lib1.dart' deferred as p;", | 1299 r''' |
| 1110 "var a = new p.A();"])], <ErrorCode> [ | 1300 library lib; |
| 1301 import 'lib1.dart' deferred as p; |
| 1302 var a = new p.A();'''], <ErrorCode> [ |
| 1111 CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, | 1303 CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, |
| 1112 ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <ErrorCode> [StaticWarn
ingCode.IMPORT_OF_NON_LIBRARY]); | 1304 ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <ErrorCode> [StaticWarn
ingCode.IMPORT_OF_NON_LIBRARY]); |
| 1113 } | 1305 } |
| 1114 | 1306 |
| 1115 void test_inconsistentMethodInheritanceGetterAndMethod() { | 1307 void test_inconsistentMethodInheritanceGetterAndMethod() { |
| 1116 Source source = addSource(EngineTestCase.createSource([ | 1308 Source source = addSource(r''' |
| 1117 "abstract class A {", | 1309 abstract class A { |
| 1118 " int x();", | 1310 int x(); |
| 1119 "}", | 1311 } |
| 1120 "abstract class B {", | 1312 abstract class B { |
| 1121 " int get x;", | 1313 int get x; |
| 1122 "}", | 1314 } |
| 1123 "class C implements A, B {", | 1315 class C implements A, B { |
| 1124 "}"])); | 1316 }'''); |
| 1125 resolve(source); | 1317 resolve(source); |
| 1126 assertErrors(source, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETT
ER_AND_METHOD]); | 1318 assertErrors(source, [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETT
ER_AND_METHOD]); |
| 1127 verify([source]); | 1319 verify([source]); |
| 1128 } | 1320 } |
| 1129 | 1321 |
| 1130 void test_instanceMethodNameCollidesWithSuperclassStatic_field() { | 1322 void test_instanceMethodNameCollidesWithSuperclassStatic_field() { |
| 1131 Source source = addSource(EngineTestCase.createSource([ | 1323 Source source = addSource(r''' |
| 1132 "class A {", | 1324 class A { |
| 1133 " static var n;", | 1325 static var n; |
| 1134 "}", | 1326 } |
| 1135 "class B extends A {", | 1327 class B extends A { |
| 1136 " void n() {}", | 1328 void n() {} |
| 1137 "}"])); | 1329 }'''); |
| 1138 resolve(source); | 1330 resolve(source); |
| 1139 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); | 1331 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); |
| 1140 verify([source]); | 1332 verify([source]); |
| 1141 } | 1333 } |
| 1142 | 1334 |
| 1143 void test_instanceMethodNameCollidesWithSuperclassStatic_field2() { | 1335 void test_instanceMethodNameCollidesWithSuperclassStatic_field2() { |
| 1144 Source source = addSource(EngineTestCase.createSource([ | 1336 Source source = addSource(r''' |
| 1145 "class A {", | 1337 class A { |
| 1146 " static var n;", | 1338 static var n; |
| 1147 "}", | 1339 } |
| 1148 "class B extends A {", | 1340 class B extends A { |
| 1149 "}", | 1341 } |
| 1150 "class C extends B {", | 1342 class C extends B { |
| 1151 " void n() {}", | 1343 void n() {} |
| 1152 "}"])); | 1344 }'''); |
| 1153 resolve(source); | 1345 resolve(source); |
| 1154 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); | 1346 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); |
| 1155 verify([source]); | 1347 verify([source]); |
| 1156 } | 1348 } |
| 1157 | 1349 |
| 1158 void test_instanceMethodNameCollidesWithSuperclassStatic_getter() { | 1350 void test_instanceMethodNameCollidesWithSuperclassStatic_getter() { |
| 1159 Source source = addSource(EngineTestCase.createSource([ | 1351 Source source = addSource(r''' |
| 1160 "class A {", | 1352 class A { |
| 1161 " static get n {return 0;}", | 1353 static get n {return 0;} |
| 1162 "}", | 1354 } |
| 1163 "class B extends A {", | 1355 class B extends A { |
| 1164 " void n() {}", | 1356 void n() {} |
| 1165 "}"])); | 1357 }'''); |
| 1166 resolve(source); | 1358 resolve(source); |
| 1167 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); | 1359 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); |
| 1168 verify([source]); | 1360 verify([source]); |
| 1169 } | 1361 } |
| 1170 | 1362 |
| 1171 void test_instanceMethodNameCollidesWithSuperclassStatic_getter2() { | 1363 void test_instanceMethodNameCollidesWithSuperclassStatic_getter2() { |
| 1172 Source source = addSource(EngineTestCase.createSource([ | 1364 Source source = addSource(r''' |
| 1173 "class A {", | 1365 class A { |
| 1174 " static get n {return 0;}", | 1366 static get n {return 0;} |
| 1175 "}", | 1367 } |
| 1176 "class B extends A {", | 1368 class B extends A { |
| 1177 "}", | 1369 } |
| 1178 "class C extends B {", | 1370 class C extends B { |
| 1179 " void n() {}", | 1371 void n() {} |
| 1180 "}"])); | 1372 }'''); |
| 1181 resolve(source); | 1373 resolve(source); |
| 1182 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); | 1374 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); |
| 1183 verify([source]); | 1375 verify([source]); |
| 1184 } | 1376 } |
| 1185 | 1377 |
| 1186 void test_instanceMethodNameCollidesWithSuperclassStatic_method() { | 1378 void test_instanceMethodNameCollidesWithSuperclassStatic_method() { |
| 1187 Source source = addSource(EngineTestCase.createSource([ | 1379 Source source = addSource(r''' |
| 1188 "class A {", | 1380 class A { |
| 1189 " static n () {}", | 1381 static n () {} |
| 1190 "}", | 1382 } |
| 1191 "class B extends A {", | 1383 class B extends A { |
| 1192 " void n() {}", | 1384 void n() {} |
| 1193 "}"])); | 1385 }'''); |
| 1194 resolve(source); | 1386 resolve(source); |
| 1195 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); | 1387 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); |
| 1196 verify([source]); | 1388 verify([source]); |
| 1197 } | 1389 } |
| 1198 | 1390 |
| 1199 void test_instanceMethodNameCollidesWithSuperclassStatic_method2() { | 1391 void test_instanceMethodNameCollidesWithSuperclassStatic_method2() { |
| 1200 Source source = addSource(EngineTestCase.createSource([ | 1392 Source source = addSource(r''' |
| 1201 "class A {", | 1393 class A { |
| 1202 " static n () {}", | 1394 static n () {} |
| 1203 "}", | 1395 } |
| 1204 "class B extends A {", | 1396 class B extends A { |
| 1205 "}", | 1397 } |
| 1206 "class C extends B {", | 1398 class C extends B { |
| 1207 " void n() {}", | 1399 void n() {} |
| 1208 "}"])); | 1400 }'''); |
| 1209 resolve(source); | 1401 resolve(source); |
| 1210 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); | 1402 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); |
| 1211 verify([source]); | 1403 verify([source]); |
| 1212 } | 1404 } |
| 1213 | 1405 |
| 1214 void test_instanceMethodNameCollidesWithSuperclassStatic_setter() { | 1406 void test_instanceMethodNameCollidesWithSuperclassStatic_setter() { |
| 1215 Source source = addSource(EngineTestCase.createSource([ | 1407 Source source = addSource(r''' |
| 1216 "class A {", | 1408 class A { |
| 1217 " static set n(int x) {}", | 1409 static set n(int x) {} |
| 1218 "}", | 1410 } |
| 1219 "class B extends A {", | 1411 class B extends A { |
| 1220 " void n() {}", | 1412 void n() {} |
| 1221 "}"])); | 1413 }'''); |
| 1222 resolve(source); | 1414 resolve(source); |
| 1223 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); | 1415 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); |
| 1224 verify([source]); | 1416 verify([source]); |
| 1225 } | 1417 } |
| 1226 | 1418 |
| 1227 void test_instanceMethodNameCollidesWithSuperclassStatic_setter2() { | 1419 void test_instanceMethodNameCollidesWithSuperclassStatic_setter2() { |
| 1228 Source source = addSource(EngineTestCase.createSource([ | 1420 Source source = addSource(r''' |
| 1229 "class A {", | 1421 class A { |
| 1230 " static set n(int x) {}", | 1422 static set n(int x) {} |
| 1231 "}", | 1423 } |
| 1232 "class B extends A {", | 1424 class B extends A { |
| 1233 "}", | 1425 } |
| 1234 "class C extends B {", | 1426 class C extends B { |
| 1235 " void n() {}", | 1427 void n() {} |
| 1236 "}"])); | 1428 }'''); |
| 1237 resolve(source); | 1429 resolve(source); |
| 1238 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); | 1430 assertErrors(source, [StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_S
UPERCLASS_STATIC]); |
| 1239 verify([source]); | 1431 verify([source]); |
| 1240 } | 1432 } |
| 1241 | 1433 |
| 1242 void test_invalidGetterOverrideReturnType() { | 1434 void test_invalidGetterOverrideReturnType() { |
| 1243 Source source = addSource(EngineTestCase.createSource([ | 1435 Source source = addSource(r''' |
| 1244 "class A {", | 1436 class A { |
| 1245 " int get g { return 0; }", | 1437 int get g { return 0; } |
| 1246 "}", | 1438 } |
| 1247 "class B extends A {", | 1439 class B extends A { |
| 1248 " String get g { return 'a'; }", | 1440 String get g { return 'a'; } |
| 1249 "}"])); | 1441 }'''); |
| 1250 resolve(source); | 1442 resolve(source); |
| 1251 assertErrors(source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]
); | 1443 assertErrors(source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]
); |
| 1252 verify([source]); | 1444 verify([source]); |
| 1253 } | 1445 } |
| 1254 | 1446 |
| 1255 void test_invalidGetterOverrideReturnType_implicit() { | 1447 void test_invalidGetterOverrideReturnType_implicit() { |
| 1256 Source source = addSource(EngineTestCase.createSource([ | 1448 Source source = addSource(r''' |
| 1257 "class A {", | 1449 class A { |
| 1258 " String f;", | 1450 String f; |
| 1259 "}", | 1451 } |
| 1260 "class B extends A {", | 1452 class B extends A { |
| 1261 " int f;", | 1453 int f; |
| 1262 "}"])); | 1454 }'''); |
| 1263 resolve(source); | 1455 resolve(source); |
| 1264 assertErrors(source, [ | 1456 assertErrors(source, [ |
| 1265 StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE, | 1457 StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE, |
| 1266 StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]); | 1458 StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE]); |
| 1267 verify([source]); | 1459 verify([source]); |
| 1268 } | 1460 } |
| 1269 | 1461 |
| 1270 void test_invalidGetterOverrideReturnType_twoInterfaces() { | 1462 void test_invalidGetterOverrideReturnType_twoInterfaces() { |
| 1271 // test from language/override_inheritance_field_test_11.dart | 1463 // test from language/override_inheritance_field_test_11.dart |
| 1272 Source source = addSource(EngineTestCase.createSource([ | 1464 Source source = addSource(r''' |
| 1273 "abstract class I {", | 1465 abstract class I { |
| 1274 " int get getter => null;", | 1466 int get getter => null; |
| 1275 "}", | 1467 } |
| 1276 "abstract class J {", | 1468 abstract class J { |
| 1277 " num get getter => null;", | 1469 num get getter => null; |
| 1278 "}", | 1470 } |
| 1279 "abstract class A implements I, J {}", | 1471 abstract class A implements I, J {} |
| 1280 "class B extends A {", | 1472 class B extends A { |
| 1281 " String get getter => null;", | 1473 String get getter => null; |
| 1282 "}"])); | 1474 }'''); |
| 1283 resolve(source); | 1475 resolve(source); |
| 1284 assertErrors(source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]
); | 1476 assertErrors(source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]
); |
| 1285 verify([source]); | 1477 verify([source]); |
| 1286 } | 1478 } |
| 1287 | 1479 |
| 1288 void test_invalidGetterOverrideReturnType_twoInterfaces_conflicting() { | 1480 void test_invalidGetterOverrideReturnType_twoInterfaces_conflicting() { |
| 1289 Source source = addSource(EngineTestCase.createSource([ | 1481 Source source = addSource(r''' |
| 1290 "abstract class I<U> {", | 1482 abstract class I<U> { |
| 1291 " U get g => null;", | 1483 U get g => null; |
| 1292 "}", | 1484 } |
| 1293 "abstract class J<V> {", | 1485 abstract class J<V> { |
| 1294 " V get g => null;", | 1486 V get g => null; |
| 1295 "}", | 1487 } |
| 1296 "class B implements I<int>, J<String> {", | 1488 class B implements I<int>, J<String> { |
| 1297 " double get g => null;", | 1489 double get g => null; |
| 1298 "}"])); | 1490 }'''); |
| 1299 resolve(source); | 1491 resolve(source); |
| 1300 assertErrors(source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]
); | 1492 assertErrors(source, [StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE]
); |
| 1301 verify([source]); | 1493 verify([source]); |
| 1302 } | 1494 } |
| 1303 | 1495 |
| 1304 void test_invalidMethodOverrideNamedParamType() { | 1496 void test_invalidMethodOverrideNamedParamType() { |
| 1305 Source source = addSource(EngineTestCase.createSource([ | 1497 Source source = addSource(r''' |
| 1306 "class A {", | 1498 class A { |
| 1307 " m({int a}) {}", | 1499 m({int a}) {} |
| 1308 "}", | 1500 } |
| 1309 "class B implements A {", | 1501 class B implements A { |
| 1310 " m({String a}) {}", | 1502 m({String a}) {} |
| 1311 "}"])); | 1503 }'''); |
| 1312 resolve(source); | 1504 resolve(source); |
| 1313 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NAMED_PARAM_
TYPE]); | 1505 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NAMED_PARAM_
TYPE]); |
| 1314 verify([source]); | 1506 verify([source]); |
| 1315 } | 1507 } |
| 1316 | 1508 |
| 1317 void test_invalidMethodOverrideNormalParamType_interface() { | 1509 void test_invalidMethodOverrideNormalParamType_interface() { |
| 1318 Source source = addSource(EngineTestCase.createSource([ | 1510 Source source = addSource(r''' |
| 1319 "class A {", | 1511 class A { |
| 1320 " m(int a) {}", | 1512 m(int a) {} |
| 1321 "}", | 1513 } |
| 1322 "class B implements A {", | 1514 class B implements A { |
| 1323 " m(String a) {}", | 1515 m(String a) {} |
| 1324 "}"])); | 1516 }'''); |
| 1325 resolve(source); | 1517 resolve(source); |
| 1326 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); | 1518 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); |
| 1327 verify([source]); | 1519 verify([source]); |
| 1328 } | 1520 } |
| 1329 | 1521 |
| 1330 void test_invalidMethodOverrideNormalParamType_superclass() { | 1522 void test_invalidMethodOverrideNormalParamType_superclass() { |
| 1331 Source source = addSource(EngineTestCase.createSource([ | 1523 Source source = addSource(r''' |
| 1332 "class A {", | 1524 class A { |
| 1333 " m(int a) {}", | 1525 m(int a) {} |
| 1334 "}", | 1526 } |
| 1335 "class B extends A {", | 1527 class B extends A { |
| 1336 " m(String a) {}", | 1528 m(String a) {} |
| 1337 "}"])); | 1529 }'''); |
| 1338 resolve(source); | 1530 resolve(source); |
| 1339 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); | 1531 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); |
| 1340 verify([source]); | 1532 verify([source]); |
| 1341 } | 1533 } |
| 1342 | 1534 |
| 1343 void test_invalidMethodOverrideNormalParamType_superclass_interface() { | 1535 void test_invalidMethodOverrideNormalParamType_superclass_interface() { |
| 1344 Source source = addSource(EngineTestCase.createSource([ | 1536 Source source = addSource(r''' |
| 1345 "abstract class I<U> {", | 1537 abstract class I<U> { |
| 1346 " m(U u) => null;", | 1538 m(U u) => null; |
| 1347 "}", | 1539 } |
| 1348 "abstract class J<V> {", | 1540 abstract class J<V> { |
| 1349 " m(V v) => null;", | 1541 m(V v) => null; |
| 1350 "}", | 1542 } |
| 1351 "class B extends I<int> implements J<String> {", | 1543 class B extends I<int> implements J<String> { |
| 1352 " m(double d) {}", | 1544 m(double d) {} |
| 1353 "}"])); | 1545 }'''); |
| 1354 resolve(source); | 1546 resolve(source); |
| 1355 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); | 1547 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); |
| 1356 verify([source]); | 1548 verify([source]); |
| 1357 } | 1549 } |
| 1358 | 1550 |
| 1359 void test_invalidMethodOverrideNormalParamType_twoInterfaces() { | 1551 void test_invalidMethodOverrideNormalParamType_twoInterfaces() { |
| 1360 Source source = addSource(EngineTestCase.createSource([ | 1552 Source source = addSource(r''' |
| 1361 "abstract class I {", | 1553 abstract class I { |
| 1362 " m(int n);", | 1554 m(int n); |
| 1363 "}", | 1555 } |
| 1364 "abstract class J {", | 1556 abstract class J { |
| 1365 " m(num n);", | 1557 m(num n); |
| 1366 "}", | 1558 } |
| 1367 "abstract class A implements I, J {}", | 1559 abstract class A implements I, J {} |
| 1368 "class B extends A {", | 1560 class B extends A { |
| 1369 " m(String n) {}", | 1561 m(String n) {} |
| 1370 "}"])); | 1562 }'''); |
| 1371 resolve(source); | 1563 resolve(source); |
| 1372 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); | 1564 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); |
| 1373 verify([source]); | 1565 verify([source]); |
| 1374 } | 1566 } |
| 1375 | 1567 |
| 1376 void test_invalidMethodOverrideNormalParamType_twoInterfaces_conflicting() { | 1568 void test_invalidMethodOverrideNormalParamType_twoInterfaces_conflicting() { |
| 1377 // language/override_inheritance_generic_test/08 | 1569 // language/override_inheritance_generic_test/08 |
| 1378 Source source = addSource(EngineTestCase.createSource([ | 1570 Source source = addSource(r''' |
| 1379 "abstract class I<U> {", | 1571 abstract class I<U> { |
| 1380 " m(U u) => null;", | 1572 m(U u) => null; |
| 1381 "}", | 1573 } |
| 1382 "abstract class J<V> {", | 1574 abstract class J<V> { |
| 1383 " m(V v) => null;", | 1575 m(V v) => null; |
| 1384 "}", | 1576 } |
| 1385 "class B implements I<int>, J<String> {", | 1577 class B implements I<int>, J<String> { |
| 1386 " m(double d) {}", | 1578 m(double d) {} |
| 1387 "}"])); | 1579 }'''); |
| 1388 resolve(source); | 1580 resolve(source); |
| 1389 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); | 1581 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM
_TYPE]); |
| 1390 verify([source]); | 1582 verify([source]); |
| 1391 } | 1583 } |
| 1392 | 1584 |
| 1393 void test_invalidMethodOverrideOptionalParamType() { | 1585 void test_invalidMethodOverrideOptionalParamType() { |
| 1394 Source source = addSource(EngineTestCase.createSource([ | 1586 Source source = addSource(r''' |
| 1395 "class A {", | 1587 class A { |
| 1396 " m([int a]) {}", | 1588 m([int a]) {} |
| 1397 "}", | 1589 } |
| 1398 "class B implements A {", | 1590 class B implements A { |
| 1399 " m([String a]) {}", | 1591 m([String a]) {} |
| 1400 "}"])); | 1592 }'''); |
| 1401 resolve(source); | 1593 resolve(source); |
| 1402 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PAR
AM_TYPE]); | 1594 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PAR
AM_TYPE]); |
| 1403 verify([source]); | 1595 verify([source]); |
| 1404 } | 1596 } |
| 1405 | 1597 |
| 1406 void test_invalidMethodOverrideOptionalParamType_twoInterfaces() { | 1598 void test_invalidMethodOverrideOptionalParamType_twoInterfaces() { |
| 1407 Source source = addSource(EngineTestCase.createSource([ | 1599 Source source = addSource(r''' |
| 1408 "abstract class I {", | 1600 abstract class I { |
| 1409 " m([int n]);", | 1601 m([int n]); |
| 1410 "}", | 1602 } |
| 1411 "abstract class J {", | 1603 abstract class J { |
| 1412 " m([num n]);", | 1604 m([num n]); |
| 1413 "}", | 1605 } |
| 1414 "abstract class A implements I, J {}", | 1606 abstract class A implements I, J {} |
| 1415 "class B extends A {", | 1607 class B extends A { |
| 1416 " m([String n]) {}", | 1608 m([String n]) {} |
| 1417 "}"])); | 1609 }'''); |
| 1418 resolve(source); | 1610 resolve(source); |
| 1419 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PAR
AM_TYPE]); | 1611 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PAR
AM_TYPE]); |
| 1420 verify([source]); | 1612 verify([source]); |
| 1421 } | 1613 } |
| 1422 | 1614 |
| 1423 void test_invalidMethodOverrideReturnType_interface() { | 1615 void test_invalidMethodOverrideReturnType_interface() { |
| 1424 Source source = addSource(EngineTestCase.createSource([ | 1616 Source source = addSource(r''' |
| 1425 "class A {", | 1617 class A { |
| 1426 " int m() { return 0; }", | 1618 int m() { return 0; } |
| 1427 "}", | 1619 } |
| 1428 "class B implements A {", | 1620 class B implements A { |
| 1429 " String m() { return 'a'; }", | 1621 String m() { return 'a'; } |
| 1430 "}"])); | 1622 }'''); |
| 1431 resolve(source); | 1623 resolve(source); |
| 1432 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); | 1624 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); |
| 1433 verify([source]); | 1625 verify([source]); |
| 1434 } | 1626 } |
| 1435 | 1627 |
| 1436 void test_invalidMethodOverrideReturnType_interface_grandparent() { | 1628 void test_invalidMethodOverrideReturnType_interface_grandparent() { |
| 1437 Source source = addSource(EngineTestCase.createSource([ | 1629 Source source = addSource(r''' |
| 1438 "abstract class A {", | 1630 abstract class A { |
| 1439 " int m();", | 1631 int m(); |
| 1440 "}", | 1632 } |
| 1441 "abstract class B implements A {", | 1633 abstract class B implements A { |
| 1442 "}", | 1634 } |
| 1443 "class C implements B {", | 1635 class C implements B { |
| 1444 " String m() { return 'a'; }", | 1636 String m() { return 'a'; } |
| 1445 "}"])); | 1637 }'''); |
| 1446 resolve(source); | 1638 resolve(source); |
| 1447 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); | 1639 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); |
| 1448 verify([source]); | 1640 verify([source]); |
| 1449 } | 1641 } |
| 1450 | 1642 |
| 1451 void test_invalidMethodOverrideReturnType_mixin() { | 1643 void test_invalidMethodOverrideReturnType_mixin() { |
| 1452 Source source = addSource(EngineTestCase.createSource([ | 1644 Source source = addSource(r''' |
| 1453 "class A {", | 1645 class A { |
| 1454 " int m() { return 0; }", | 1646 int m() { return 0; } |
| 1455 "}", | 1647 } |
| 1456 "class B extends Object with A {", | 1648 class B extends Object with A { |
| 1457 " String m() { return 'a'; }", | 1649 String m() { return 'a'; } |
| 1458 "}"])); | 1650 }'''); |
| 1459 resolve(source); | 1651 resolve(source); |
| 1460 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); | 1652 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); |
| 1461 verify([source]); | 1653 verify([source]); |
| 1462 } | 1654 } |
| 1463 | 1655 |
| 1464 void test_invalidMethodOverrideReturnType_superclass() { | 1656 void test_invalidMethodOverrideReturnType_superclass() { |
| 1465 Source source = addSource(EngineTestCase.createSource([ | 1657 Source source = addSource(r''' |
| 1466 "class A {", | 1658 class A { |
| 1467 " int m() { return 0; }", | 1659 int m() { return 0; } |
| 1468 "}", | 1660 } |
| 1469 "class B extends A {", | 1661 class B extends A { |
| 1470 " String m() { return 'a'; }", | 1662 String m() { return 'a'; } |
| 1471 "}"])); | 1663 }'''); |
| 1472 resolve(source); | 1664 resolve(source); |
| 1473 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); | 1665 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); |
| 1474 verify([source]); | 1666 verify([source]); |
| 1475 } | 1667 } |
| 1476 | 1668 |
| 1477 void test_invalidMethodOverrideReturnType_superclass_grandparent() { | 1669 void test_invalidMethodOverrideReturnType_superclass_grandparent() { |
| 1478 Source source = addSource(EngineTestCase.createSource([ | 1670 Source source = addSource(r''' |
| 1479 "class A {", | 1671 class A { |
| 1480 " int m() { return 0; }", | 1672 int m() { return 0; } |
| 1481 "}", | 1673 } |
| 1482 "class B extends A {", | 1674 class B extends A { |
| 1483 "}", | 1675 } |
| 1484 "class C extends B {", | 1676 class C extends B { |
| 1485 " String m() { return 'a'; }", | 1677 String m() { return 'a'; } |
| 1486 "}"])); | 1678 }'''); |
| 1487 resolve(source); | 1679 resolve(source); |
| 1488 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); | 1680 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); |
| 1489 verify([source]); | 1681 verify([source]); |
| 1490 } | 1682 } |
| 1491 | 1683 |
| 1492 void test_invalidMethodOverrideReturnType_twoInterfaces() { | 1684 void test_invalidMethodOverrideReturnType_twoInterfaces() { |
| 1493 Source source = addSource(EngineTestCase.createSource([ | 1685 Source source = addSource(r''' |
| 1494 "abstract class I {", | 1686 abstract class I { |
| 1495 " int m();", | 1687 int m(); |
| 1496 "}", | 1688 } |
| 1497 "abstract class J {", | 1689 abstract class J { |
| 1498 " num m();", | 1690 num m(); |
| 1499 "}", | 1691 } |
| 1500 "abstract class A implements I, J {}", | 1692 abstract class A implements I, J {} |
| 1501 "class B extends A {", | 1693 class B extends A { |
| 1502 " String m() => '';", | 1694 String m() => ''; |
| 1503 "}"])); | 1695 }'''); |
| 1504 resolve(source); | 1696 resolve(source); |
| 1505 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); | 1697 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); |
| 1506 verify([source]); | 1698 verify([source]); |
| 1507 } | 1699 } |
| 1508 | 1700 |
| 1509 void test_invalidMethodOverrideReturnType_void() { | 1701 void test_invalidMethodOverrideReturnType_void() { |
| 1510 Source source = addSource(EngineTestCase.createSource([ | 1702 Source source = addSource(r''' |
| 1511 "class A {", | 1703 class A { |
| 1512 " int m() { return 0; }", | 1704 int m() { return 0; } |
| 1513 "}", | 1705 } |
| 1514 "class B extends A {", | 1706 class B extends A { |
| 1515 " void m() {}", | 1707 void m() {} |
| 1516 "}"])); | 1708 }'''); |
| 1517 resolve(source); | 1709 resolve(source); |
| 1518 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); | 1710 assertErrors(source, [StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE]
); |
| 1519 verify([source]); | 1711 verify([source]); |
| 1520 } | 1712 } |
| 1521 | 1713 |
| 1522 void test_invalidOverrideDifferentDefaultValues_named() { | 1714 void test_invalidOverrideDifferentDefaultValues_named() { |
| 1523 Source source = addSource(EngineTestCase.createSource([ | 1715 Source source = addSource(r''' |
| 1524 "class A {", | 1716 class A { |
| 1525 " m({int p : 0}) {}", | 1717 m({int p : 0}) {} |
| 1526 "}", | 1718 } |
| 1527 "class B extends A {", | 1719 class B extends A { |
| 1528 " m({int p : 1}) {}", | 1720 m({int p : 1}) {} |
| 1529 "}"])); | 1721 }'''); |
| 1530 resolve(source); | 1722 resolve(source); |
| 1531 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_V
ALUES_NAMED]); | 1723 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_V
ALUES_NAMED]); |
| 1532 verify([source]); | 1724 verify([source]); |
| 1533 } | 1725 } |
| 1534 | 1726 |
| 1535 void test_invalidOverrideDifferentDefaultValues_positional() { | 1727 void test_invalidOverrideDifferentDefaultValues_positional() { |
| 1536 Source source = addSource(EngineTestCase.createSource([ | 1728 Source source = addSource(r''' |
| 1537 "class A {", | 1729 class A { |
| 1538 " m([int p = 0]) {}", | 1730 m([int p = 0]) {} |
| 1539 "}", | 1731 } |
| 1540 "class B extends A {", | 1732 class B extends A { |
| 1541 " m([int p = 1]) {}", | 1733 m([int p = 1]) {} |
| 1542 "}"])); | 1734 }'''); |
| 1543 resolve(source); | 1735 resolve(source); |
| 1544 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_V
ALUES_POSITIONAL]); | 1736 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_V
ALUES_POSITIONAL]); |
| 1545 verify([source]); | 1737 verify([source]); |
| 1546 } | 1738 } |
| 1547 | 1739 |
| 1548 void test_invalidOverrideNamed_fewerNamedParameters() { | 1740 void test_invalidOverrideNamed_fewerNamedParameters() { |
| 1549 Source source = addSource(EngineTestCase.createSource([ | 1741 Source source = addSource(r''' |
| 1550 "class A {", | 1742 class A { |
| 1551 " m({a, b}) {}", | 1743 m({a, b}) {} |
| 1552 "}", | 1744 } |
| 1553 "class B extends A {", | 1745 class B extends A { |
| 1554 " m({a}) {}", | 1746 m({a}) {} |
| 1555 "}"])); | 1747 }'''); |
| 1556 resolve(source); | 1748 resolve(source); |
| 1557 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_NAMED]); | 1749 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_NAMED]); |
| 1558 verify([source]); | 1750 verify([source]); |
| 1559 } | 1751 } |
| 1560 | 1752 |
| 1561 void test_invalidOverrideNamed_missingNamedParameter() { | 1753 void test_invalidOverrideNamed_missingNamedParameter() { |
| 1562 Source source = addSource(EngineTestCase.createSource([ | 1754 Source source = addSource(r''' |
| 1563 "class A {", | 1755 class A { |
| 1564 " m({a, b}) {}", | 1756 m({a, b}) {} |
| 1565 "}", | 1757 } |
| 1566 "class B extends A {", | 1758 class B extends A { |
| 1567 " m({a, c}) {}", | 1759 m({a, c}) {} |
| 1568 "}"])); | 1760 }'''); |
| 1569 resolve(source); | 1761 resolve(source); |
| 1570 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_NAMED]); | 1762 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_NAMED]); |
| 1571 verify([source]); | 1763 verify([source]); |
| 1572 } | 1764 } |
| 1573 | 1765 |
| 1574 void test_invalidOverridePositional_optional() { | 1766 void test_invalidOverridePositional_optional() { |
| 1575 Source source = addSource(EngineTestCase.createSource([ | 1767 Source source = addSource(r''' |
| 1576 "class A {", | 1768 class A { |
| 1577 " m([a, b]) {}", | 1769 m([a, b]) {} |
| 1578 "}", | 1770 } |
| 1579 "class B extends A {", | 1771 class B extends A { |
| 1580 " m([a]) {}", | 1772 m([a]) {} |
| 1581 "}"])); | 1773 }'''); |
| 1582 resolve(source); | 1774 resolve(source); |
| 1583 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]); | 1775 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]); |
| 1584 verify([source]); | 1776 verify([source]); |
| 1585 } | 1777 } |
| 1586 | 1778 |
| 1587 void test_invalidOverridePositional_optionalAndRequired() { | 1779 void test_invalidOverridePositional_optionalAndRequired() { |
| 1588 Source source = addSource(EngineTestCase.createSource([ | 1780 Source source = addSource(r''' |
| 1589 "class A {", | 1781 class A { |
| 1590 " m(a, b, [c, d]) {}", | 1782 m(a, b, [c, d]) {} |
| 1591 "}", | 1783 } |
| 1592 "class B extends A {", | 1784 class B extends A { |
| 1593 " m(a, b, [c]) {}", | 1785 m(a, b, [c]) {} |
| 1594 "}"])); | 1786 }'''); |
| 1595 resolve(source); | 1787 resolve(source); |
| 1596 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]); | 1788 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]); |
| 1597 verify([source]); | 1789 verify([source]); |
| 1598 } | 1790 } |
| 1599 | 1791 |
| 1600 void test_invalidOverridePositional_optionalAndRequired2() { | 1792 void test_invalidOverridePositional_optionalAndRequired2() { |
| 1601 Source source = addSource(EngineTestCase.createSource([ | 1793 Source source = addSource(r''' |
| 1602 "class A {", | 1794 class A { |
| 1603 " m(a, b, [c, d]) {}", | 1795 m(a, b, [c, d]) {} |
| 1604 "}", | 1796 } |
| 1605 "class B extends A {", | 1797 class B extends A { |
| 1606 " m(a, [c, d]) {}", | 1798 m(a, [c, d]) {} |
| 1607 "}"])); | 1799 }'''); |
| 1608 resolve(source); | 1800 resolve(source); |
| 1609 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]); | 1801 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_POSITIONAL]); |
| 1610 verify([source]); | 1802 verify([source]); |
| 1611 } | 1803 } |
| 1612 | 1804 |
| 1613 void test_invalidOverrideRequired() { | 1805 void test_invalidOverrideRequired() { |
| 1614 Source source = addSource(EngineTestCase.createSource([ | 1806 Source source = addSource(r''' |
| 1615 "class A {", | 1807 class A { |
| 1616 " m(a) {}", | 1808 m(a) {} |
| 1617 "}", | 1809 } |
| 1618 "class B extends A {", | 1810 class B extends A { |
| 1619 " m(a, b) {}", | 1811 m(a, b) {} |
| 1620 "}"])); | 1812 }'''); |
| 1621 resolve(source); | 1813 resolve(source); |
| 1622 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_REQUIRED]); | 1814 assertErrors(source, [StaticWarningCode.INVALID_OVERRIDE_REQUIRED]); |
| 1623 verify([source]); | 1815 verify([source]); |
| 1624 } | 1816 } |
| 1625 | 1817 |
| 1626 void test_invalidSetterOverrideNormalParamType() { | 1818 void test_invalidSetterOverrideNormalParamType() { |
| 1627 Source source = addSource(EngineTestCase.createSource([ | 1819 Source source = addSource(r''' |
| 1628 "class A {", | 1820 class A { |
| 1629 " void set s(int v) {}", | 1821 void set s(int v) {} |
| 1630 "}", | 1822 } |
| 1631 "class B extends A {", | 1823 class B extends A { |
| 1632 " void set s(String v) {}", | 1824 void set s(String v) {} |
| 1633 "}"])); | 1825 }'''); |
| 1634 resolve(source); | 1826 resolve(source); |
| 1635 assertErrors(source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM
_TYPE]); | 1827 assertErrors(source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM
_TYPE]); |
| 1636 verify([source]); | 1828 verify([source]); |
| 1637 } | 1829 } |
| 1638 | 1830 |
| 1639 void test_invalidSetterOverrideNormalParamType_superclass_interface() { | 1831 void test_invalidSetterOverrideNormalParamType_superclass_interface() { |
| 1640 Source source = addSource(EngineTestCase.createSource([ | 1832 Source source = addSource(r''' |
| 1641 "abstract class I {", | 1833 abstract class I { |
| 1642 " set setter14(int _) => null;", | 1834 set setter14(int _) => null; |
| 1643 "}", | 1835 } |
| 1644 "abstract class J {", | 1836 abstract class J { |
| 1645 " set setter14(num _) => null;", | 1837 set setter14(num _) => null; |
| 1646 "}", | 1838 } |
| 1647 "abstract class A extends I implements J {}", | 1839 abstract class A extends I implements J {} |
| 1648 "class B extends A {", | 1840 class B extends A { |
| 1649 " set setter14(String _) => null;", | 1841 set setter14(String _) => null; |
| 1650 "}"])); | 1842 }'''); |
| 1651 resolve(source); | 1843 resolve(source); |
| 1652 assertErrors(source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM
_TYPE]); | 1844 assertErrors(source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM
_TYPE]); |
| 1653 verify([source]); | 1845 verify([source]); |
| 1654 } | 1846 } |
| 1655 | 1847 |
| 1656 void test_invalidSetterOverrideNormalParamType_twoInterfaces() { | 1848 void test_invalidSetterOverrideNormalParamType_twoInterfaces() { |
| 1657 // test from language/override_inheritance_field_test_34.dart | 1849 // test from language/override_inheritance_field_test_34.dart |
| 1658 Source source = addSource(EngineTestCase.createSource([ | 1850 Source source = addSource(r''' |
| 1659 "abstract class I {", | 1851 abstract class I { |
| 1660 " set setter14(int _) => null;", | 1852 set setter14(int _) => null; |
| 1661 "}", | 1853 } |
| 1662 "abstract class J {", | 1854 abstract class J { |
| 1663 " set setter14(num _) => null;", | 1855 set setter14(num _) => null; |
| 1664 "}", | 1856 } |
| 1665 "abstract class A implements I, J {}", | 1857 abstract class A implements I, J {} |
| 1666 "class B extends A {", | 1858 class B extends A { |
| 1667 " set setter14(String _) => null;", | 1859 set setter14(String _) => null; |
| 1668 "}"])); | 1860 }'''); |
| 1669 resolve(source); | 1861 resolve(source); |
| 1670 assertErrors(source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM
_TYPE]); | 1862 assertErrors(source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM
_TYPE]); |
| 1671 verify([source]); | 1863 verify([source]); |
| 1672 } | 1864 } |
| 1673 | 1865 |
| 1674 void test_invalidSetterOverrideNormalParamType_twoInterfaces_conflicting() { | 1866 void test_invalidSetterOverrideNormalParamType_twoInterfaces_conflicting() { |
| 1675 Source source = addSource(EngineTestCase.createSource([ | 1867 Source source = addSource(r''' |
| 1676 "abstract class I<U> {", | 1868 abstract class I<U> { |
| 1677 " set s(U u) {}", | 1869 set s(U u) {} |
| 1678 "}", | 1870 } |
| 1679 "abstract class J<V> {", | 1871 abstract class J<V> { |
| 1680 " set s(V v) {}", | 1872 set s(V v) {} |
| 1681 "}", | 1873 } |
| 1682 "class B implements I<int>, J<String> {", | 1874 class B implements I<int>, J<String> { |
| 1683 " set s(double d) {}", | 1875 set s(double d) {} |
| 1684 "}"])); | 1876 }'''); |
| 1685 resolve(source); | 1877 resolve(source); |
| 1686 assertErrors(source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM
_TYPE]); | 1878 assertErrors(source, [StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM
_TYPE]); |
| 1687 verify([source]); | 1879 verify([source]); |
| 1688 } | 1880 } |
| 1689 | 1881 |
| 1690 void test_listElementTypeNotAssignable() { | 1882 void test_listElementTypeNotAssignable() { |
| 1691 Source source = addSource(EngineTestCase.createSource(["var v = <String> [42
];"])); | 1883 Source source = addSource("var v = <String> [42];"); |
| 1692 resolve(source); | 1884 resolve(source); |
| 1693 assertErrors(source, [StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE]); | 1885 assertErrors(source, [StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE]); |
| 1694 verify([source]); | 1886 verify([source]); |
| 1695 } | 1887 } |
| 1696 | 1888 |
| 1697 void test_mapKeyTypeNotAssignable() { | 1889 void test_mapKeyTypeNotAssignable() { |
| 1698 Source source = addSource(EngineTestCase.createSource(["var v = <String, int
> {1 : 2};"])); | 1890 Source source = addSource("var v = <String, int > {1 : 2};"); |
| 1699 resolve(source); | 1891 resolve(source); |
| 1700 assertErrors(source, [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE]); | 1892 assertErrors(source, [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE]); |
| 1701 verify([source]); | 1893 verify([source]); |
| 1702 } | 1894 } |
| 1703 | 1895 |
| 1704 void test_mapValueTypeNotAssignable() { | 1896 void test_mapValueTypeNotAssignable() { |
| 1705 Source source = addSource(EngineTestCase.createSource(["var v = <String, Str
ing> {'a' : 2};"])); | 1897 Source source = addSource("var v = <String, String> {'a' : 2};"); |
| 1706 resolve(source); | 1898 resolve(source); |
| 1707 assertErrors(source, [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE]); | 1899 assertErrors(source, [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE]); |
| 1708 verify([source]); | 1900 verify([source]); |
| 1709 } | 1901 } |
| 1710 | 1902 |
| 1711 void test_mismatchedAccessorTypes_class() { | 1903 void test_mismatchedAccessorTypes_class() { |
| 1712 Source source = addSource(EngineTestCase.createSource([ | 1904 Source source = addSource(r''' |
| 1713 "class A {", | 1905 class A { |
| 1714 " int get g { return 0; }", | 1906 int get g { return 0; } |
| 1715 " set g(String v) {}", | 1907 set g(String v) {} |
| 1716 "}"])); | 1908 }'''); |
| 1717 resolve(source); | 1909 resolve(source); |
| 1718 assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES])
; | 1910 assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES])
; |
| 1719 verify([source]); | 1911 verify([source]); |
| 1720 } | 1912 } |
| 1721 | 1913 |
| 1722 void test_mismatchedAccessorTypes_getterAndSuperSetter() { | 1914 void test_mismatchedAccessorTypes_getterAndSuperSetter() { |
| 1723 Source source = addSource(EngineTestCase.createSource([ | 1915 Source source = addSource(r''' |
| 1724 "class A {", | 1916 class A { |
| 1725 " int get g { return 0; }", | 1917 int get g { return 0; } |
| 1726 "}", | 1918 } |
| 1727 "class B extends A {", | 1919 class B extends A { |
| 1728 " set g(String v) {}", | 1920 set g(String v) {} |
| 1729 "}"])); | 1921 }'''); |
| 1730 resolve(source); | 1922 resolve(source); |
| 1731 assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_F
ROM_SUPERTYPE]); | 1923 assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_F
ROM_SUPERTYPE]); |
| 1732 verify([source]); | 1924 verify([source]); |
| 1733 } | 1925 } |
| 1734 | 1926 |
| 1735 void test_mismatchedAccessorTypes_setterAndSuperGetter() { | 1927 void test_mismatchedAccessorTypes_setterAndSuperGetter() { |
| 1736 Source source = addSource(EngineTestCase.createSource([ | 1928 Source source = addSource(r''' |
| 1737 "class A {", | 1929 class A { |
| 1738 " set g(int v) {}", | 1930 set g(int v) {} |
| 1739 "}", | 1931 } |
| 1740 "class B extends A {", | 1932 class B extends A { |
| 1741 " String get g { return ''; }", | 1933 String get g { return ''; } |
| 1742 "}"])); | 1934 }'''); |
| 1743 resolve(source); | 1935 resolve(source); |
| 1744 assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_F
ROM_SUPERTYPE]); | 1936 assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES_F
ROM_SUPERTYPE]); |
| 1745 verify([source]); | 1937 verify([source]); |
| 1746 } | 1938 } |
| 1747 | 1939 |
| 1748 void test_mismatchedAccessorTypes_topLevel() { | 1940 void test_mismatchedAccessorTypes_topLevel() { |
| 1749 Source source = addSource(EngineTestCase.createSource(["int get g { return 0
; }", "set g(String v) {}"])); | 1941 Source source = addSource(r''' |
| 1942 int get g { return 0; } |
| 1943 set g(String v) {}'''); |
| 1750 resolve(source); | 1944 resolve(source); |
| 1751 assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES])
; | 1945 assertErrors(source, [StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES])
; |
| 1752 verify([source]); | 1946 verify([source]); |
| 1753 } | 1947 } |
| 1754 | 1948 |
| 1755 void test_mixedReturnTypes_localFunction() { | 1949 void test_mixedReturnTypes_localFunction() { |
| 1756 Source source = addSource(EngineTestCase.createSource([ | 1950 Source source = addSource(r''' |
| 1757 "class C {", | 1951 class C { |
| 1758 " m(int x) {", | 1952 m(int x) { |
| 1759 " return (int y) {", | 1953 return (int y) { |
| 1760 " if (y < 0) {", | 1954 if (y < 0) { |
| 1761 " return;", | 1955 return; |
| 1762 " }", | 1956 } |
| 1763 " return 0;", | 1957 return 0; |
| 1764 " };", | 1958 }; |
| 1765 " }", | 1959 } |
| 1766 "}"])); | 1960 }'''); |
| 1767 resolve(source); | 1961 resolve(source); |
| 1768 assertErrors(source, [ | 1962 assertErrors(source, [ |
| 1769 StaticWarningCode.MIXED_RETURN_TYPES, | 1963 StaticWarningCode.MIXED_RETURN_TYPES, |
| 1770 StaticWarningCode.MIXED_RETURN_TYPES]); | 1964 StaticWarningCode.MIXED_RETURN_TYPES]); |
| 1771 verify([source]); | 1965 verify([source]); |
| 1772 } | 1966 } |
| 1773 | 1967 |
| 1774 void test_mixedReturnTypes_method() { | 1968 void test_mixedReturnTypes_method() { |
| 1775 Source source = addSource(EngineTestCase.createSource([ | 1969 Source source = addSource(r''' |
| 1776 "class C {", | 1970 class C { |
| 1777 " m(int x) {", | 1971 m(int x) { |
| 1778 " if (x < 0) {", | 1972 if (x < 0) { |
| 1779 " return;", | 1973 return; |
| 1780 " }", | 1974 } |
| 1781 " return 0;", | 1975 return 0; |
| 1782 " }", | 1976 } |
| 1783 "}"])); | 1977 }'''); |
| 1784 resolve(source); | 1978 resolve(source); |
| 1785 assertErrors(source, [ | 1979 assertErrors(source, [ |
| 1786 StaticWarningCode.MIXED_RETURN_TYPES, | 1980 StaticWarningCode.MIXED_RETURN_TYPES, |
| 1787 StaticWarningCode.MIXED_RETURN_TYPES]); | 1981 StaticWarningCode.MIXED_RETURN_TYPES]); |
| 1788 verify([source]); | 1982 verify([source]); |
| 1789 } | 1983 } |
| 1790 | 1984 |
| 1791 void test_mixedReturnTypes_topLevelFunction() { | 1985 void test_mixedReturnTypes_topLevelFunction() { |
| 1792 Source source = addSource(EngineTestCase.createSource([ | 1986 Source source = addSource(r''' |
| 1793 "f(int x) {", | 1987 f(int x) { |
| 1794 " if (x < 0) {", | 1988 if (x < 0) { |
| 1795 " return;", | 1989 return; |
| 1796 " }", | 1990 } |
| 1797 " return 0;", | 1991 return 0; |
| 1798 "}"])); | 1992 }'''); |
| 1799 resolve(source); | 1993 resolve(source); |
| 1800 assertErrors(source, [ | 1994 assertErrors(source, [ |
| 1801 StaticWarningCode.MIXED_RETURN_TYPES, | 1995 StaticWarningCode.MIXED_RETURN_TYPES, |
| 1802 StaticWarningCode.MIXED_RETURN_TYPES]); | 1996 StaticWarningCode.MIXED_RETURN_TYPES]); |
| 1803 verify([source]); | 1997 verify([source]); |
| 1804 } | 1998 } |
| 1805 | 1999 |
| 1806 void test_newWithAbstractClass() { | 2000 void test_newWithAbstractClass() { |
| 1807 Source source = addSource(EngineTestCase.createSource([ | 2001 Source source = addSource(r''' |
| 1808 "abstract class A {}", | 2002 abstract class A {} |
| 1809 "void f() {", | 2003 void f() { |
| 1810 " A a = new A();", | 2004 A a = new A(); |
| 1811 "}"])); | 2005 }'''); |
| 1812 resolve(source); | 2006 resolve(source); |
| 1813 assertErrors(source, [StaticWarningCode.NEW_WITH_ABSTRACT_CLASS]); | 2007 assertErrors(source, [StaticWarningCode.NEW_WITH_ABSTRACT_CLASS]); |
| 1814 verify([source]); | 2008 verify([source]); |
| 1815 } | 2009 } |
| 1816 | 2010 |
| 1817 void test_newWithInvalidTypeParameters() { | 2011 void test_newWithInvalidTypeParameters() { |
| 1818 Source source = addSource(EngineTestCase.createSource(["class A {}", "f() {
return new A<A>(); }"])); | 2012 Source source = addSource(r''' |
| 2013 class A {} |
| 2014 f() { return new A<A>(); }'''); |
| 1819 resolve(source); | 2015 resolve(source); |
| 1820 assertErrors(source, [StaticWarningCode.NEW_WITH_INVALID_TYPE_PARAMETERS]); | 2016 assertErrors(source, [StaticWarningCode.NEW_WITH_INVALID_TYPE_PARAMETERS]); |
| 1821 verify([source]); | 2017 verify([source]); |
| 1822 } | 2018 } |
| 1823 | 2019 |
| 1824 void test_newWithInvalidTypeParameters_tooFew() { | 2020 void test_newWithInvalidTypeParameters_tooFew() { |
| 1825 Source source = addSource(EngineTestCase.createSource([ | 2021 Source source = addSource(r''' |
| 1826 "class A {}", | 2022 class A {} |
| 1827 "class C<K, V> {}", | 2023 class C<K, V> {} |
| 1828 "f(p) {", | 2024 f(p) { |
| 1829 " return new C<A>();", | 2025 return new C<A>(); |
| 1830 "}"])); | 2026 }'''); |
| 1831 resolve(source); | 2027 resolve(source); |
| 1832 assertErrors(source, [StaticWarningCode.NEW_WITH_INVALID_TYPE_PARAMETERS]); | 2028 assertErrors(source, [StaticWarningCode.NEW_WITH_INVALID_TYPE_PARAMETERS]); |
| 1833 verify([source]); | 2029 verify([source]); |
| 1834 } | 2030 } |
| 1835 | 2031 |
| 1836 void test_newWithInvalidTypeParameters_tooMany() { | 2032 void test_newWithInvalidTypeParameters_tooMany() { |
| 1837 Source source = addSource(EngineTestCase.createSource([ | 2033 Source source = addSource(r''' |
| 1838 "class A {}", | 2034 class A {} |
| 1839 "class C<E> {}", | 2035 class C<E> {} |
| 1840 "f(p) {", | 2036 f(p) { |
| 1841 " return new C<A, A>();", | 2037 return new C<A, A>(); |
| 1842 "}"])); | 2038 }'''); |
| 1843 resolve(source); | 2039 resolve(source); |
| 1844 assertErrors(source, [StaticWarningCode.NEW_WITH_INVALID_TYPE_PARAMETERS]); | 2040 assertErrors(source, [StaticWarningCode.NEW_WITH_INVALID_TYPE_PARAMETERS]); |
| 1845 verify([source]); | 2041 verify([source]); |
| 1846 } | 2042 } |
| 1847 | 2043 |
| 1848 void test_newWithNonType() { | 2044 void test_newWithNonType() { |
| 1849 Source source = addSource(EngineTestCase.createSource(["var A = 0;", "void f
() {", " var a = new A();", "}"])); | 2045 Source source = addSource(r''' |
| 2046 var A = 0; |
| 2047 void f() { |
| 2048 var a = new A(); |
| 2049 }'''); |
| 1850 resolve(source); | 2050 resolve(source); |
| 1851 assertErrors(source, [StaticWarningCode.NEW_WITH_NON_TYPE]); | 2051 assertErrors(source, [StaticWarningCode.NEW_WITH_NON_TYPE]); |
| 1852 verify([source]); | 2052 verify([source]); |
| 1853 } | 2053 } |
| 1854 | 2054 |
| 1855 void test_newWithNonType_fromLibrary() { | 2055 void test_newWithNonType_fromLibrary() { |
| 1856 Source source1 = addNamedSource("lib.dart", "class B {}"); | 2056 Source source1 = addNamedSource("lib.dart", "class B {}"); |
| 1857 Source source2 = addNamedSource("lib2.dart", EngineTestCase.createSource([ | 2057 Source source2 = addNamedSource("lib2.dart", r''' |
| 1858 "import 'lib.dart' as lib;", | 2058 import 'lib.dart' as lib; |
| 1859 "void f() {", | 2059 void f() { |
| 1860 " var a = new lib.A();", | 2060 var a = new lib.A(); |
| 1861 "}", | 2061 } |
| 1862 "lib.B b;"])); | 2062 lib.B b;'''); |
| 1863 resolve(source1); | 2063 resolve(source1); |
| 1864 resolve(source2); | 2064 resolve(source2); |
| 1865 assertErrors(source2, [StaticWarningCode.NEW_WITH_NON_TYPE]); | 2065 assertErrors(source2, [StaticWarningCode.NEW_WITH_NON_TYPE]); |
| 1866 verify([source1]); | 2066 verify([source1]); |
| 1867 } | 2067 } |
| 1868 | 2068 |
| 1869 void test_newWithUndefinedConstructor() { | 2069 void test_newWithUndefinedConstructor() { |
| 1870 Source source = addSource(EngineTestCase.createSource([ | 2070 Source source = addSource(r''' |
| 1871 "class A {", | 2071 class A { |
| 1872 " A() {}", | 2072 A() {} |
| 1873 "}", | 2073 } |
| 1874 "f() {", | 2074 f() { |
| 1875 " new A.name();", | 2075 new A.name(); |
| 1876 "}"])); | 2076 }'''); |
| 1877 resolve(source); | 2077 resolve(source); |
| 1878 assertErrors(source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR]); | 2078 assertErrors(source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR]); |
| 1879 // no verify(), 'name' is not resolved | 2079 // no verify(), 'name' is not resolved |
| 1880 } | 2080 } |
| 1881 | 2081 |
| 1882 void test_newWithUndefinedConstructorDefault() { | 2082 void test_newWithUndefinedConstructorDefault() { |
| 1883 Source source = addSource(EngineTestCase.createSource([ | 2083 Source source = addSource(r''' |
| 1884 "class A {", | 2084 class A { |
| 1885 " A.name() {}", | 2085 A.name() {} |
| 1886 "}", | 2086 } |
| 1887 "f() {", | 2087 f() { |
| 1888 " new A();", | 2088 new A(); |
| 1889 "}"])); | 2089 }'''); |
| 1890 resolve(source); | 2090 resolve(source); |
| 1891 assertErrors(source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAU
LT]); | 2091 assertErrors(source, [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAU
LT]); |
| 1892 verify([source]); | 2092 verify([source]); |
| 1893 } | 2093 } |
| 1894 | 2094 |
| 1895 void test_nonAbstractClassInheritsAbstractMemberFivePlus() { | 2095 void test_nonAbstractClassInheritsAbstractMemberFivePlus() { |
| 1896 Source source = addSource(EngineTestCase.createSource([ | 2096 Source source = addSource(r''' |
| 1897 "abstract class A {", | 2097 abstract class A { |
| 1898 " m();", | 2098 m(); |
| 1899 " n();", | 2099 n(); |
| 1900 " o();", | 2100 o(); |
| 1901 " p();", | 2101 p(); |
| 1902 " q();", | 2102 q(); |
| 1903 "}", | 2103 } |
| 1904 "class C extends A {", | 2104 class C extends A { |
| 1905 "}"])); | 2105 }'''); |
| 1906 resolve(source); | 2106 resolve(source); |
| 1907 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_FIVE_PLUS]); | 2107 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_FIVE_PLUS]); |
| 1908 verify([source]); | 2108 verify([source]); |
| 1909 } | 2109 } |
| 1910 | 2110 |
| 1911 void test_nonAbstractClassInheritsAbstractMemberFour() { | 2111 void test_nonAbstractClassInheritsAbstractMemberFour() { |
| 1912 Source source = addSource(EngineTestCase.createSource([ | 2112 Source source = addSource(r''' |
| 1913 "abstract class A {", | 2113 abstract class A { |
| 1914 " m();", | 2114 m(); |
| 1915 " n();", | 2115 n(); |
| 1916 " o();", | 2116 o(); |
| 1917 " p();", | 2117 p(); |
| 1918 "}", | 2118 } |
| 1919 "class C extends A {", | 2119 class C extends A { |
| 1920 "}"])); | 2120 }'''); |
| 1921 resolve(source); | 2121 resolve(source); |
| 1922 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_FOUR]); | 2122 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_FOUR]); |
| 1923 verify([source]); | 2123 verify([source]); |
| 1924 } | 2124 } |
| 1925 | 2125 |
| 1926 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface()
{ | 2126 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_interface()
{ |
| 1927 // 15979 | 2127 // 15979 |
| 1928 Source source = addSource(EngineTestCase.createSource([ | 2128 Source source = addSource(r''' |
| 1929 "abstract class M {}", | 2129 abstract class M {} |
| 1930 "abstract class A {}", | 2130 abstract class A {} |
| 1931 "abstract class I {", | 2131 abstract class I { |
| 1932 " m();", | 2132 m(); |
| 1933 "}", | 2133 } |
| 1934 "class B = A with M implements I;"])); | 2134 class B = A with M implements I;'''); |
| 1935 resolve(source); | 2135 resolve(source); |
| 1936 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2136 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 1937 verify([source]); | 2137 verify([source]); |
| 1938 } | 2138 } |
| 1939 | 2139 |
| 1940 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_mixin() { | 2140 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_mixin() { |
| 1941 // 15979 | 2141 // 15979 |
| 1942 Source source = addSource(EngineTestCase.createSource([ | 2142 Source source = addSource(r''' |
| 1943 "abstract class M {", | 2143 abstract class M { |
| 1944 " m();", | 2144 m(); |
| 1945 "}", | 2145 } |
| 1946 "abstract class A {}", | 2146 abstract class A {} |
| 1947 "class B = A with M;"])); | 2147 class B = A with M;'''); |
| 1948 resolve(source); | 2148 resolve(source); |
| 1949 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2149 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 1950 verify([source]); | 2150 verify([source]); |
| 1951 } | 2151 } |
| 1952 | 2152 |
| 1953 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass(
) { | 2153 void test_nonAbstractClassInheritsAbstractMemberOne_classTypeAlias_superclass(
) { |
| 1954 // 15979 | 2154 // 15979 |
| 1955 Source source = addSource(EngineTestCase.createSource([ | 2155 Source source = addSource(r''' |
| 1956 "class M {}", | 2156 class M {} |
| 1957 "abstract class A {", | 2157 abstract class A { |
| 1958 " m();", | 2158 m(); |
| 1959 "}", | 2159 } |
| 1960 "class B = A with M;"])); | 2160 class B = A with M;'''); |
| 1961 resolve(source); | 2161 resolve(source); |
| 1962 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2162 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 1963 verify([source]); | 2163 verify([source]); |
| 1964 } | 2164 } |
| 1965 | 2165 |
| 1966 void test_nonAbstractClassInheritsAbstractMemberOne_ensureCorrectFunctionSubty
peIsUsedInImplementation() { | 2166 void test_nonAbstractClassInheritsAbstractMemberOne_ensureCorrectFunctionSubty
peIsUsedInImplementation() { |
| 1967 // 15028 | 2167 // 15028 |
| 1968 Source source = addSource(EngineTestCase.createSource([ | 2168 Source source = addSource(r''' |
| 1969 "class C {", | 2169 class C { |
| 1970 " foo(int x) => x;", | 2170 foo(int x) => x; |
| 1971 "}", | 2171 } |
| 1972 "abstract class D {", | 2172 abstract class D { |
| 1973 " foo(x, [y]);", | 2173 foo(x, [y]); |
| 1974 "}", | 2174 } |
| 1975 "class E extends C implements D {}"])); | 2175 class E extends C implements D {}'''); |
| 1976 resolve(source); | 2176 resolve(source); |
| 1977 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2177 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 1978 verify([source]); | 2178 verify([source]); |
| 1979 } | 2179 } |
| 1980 | 2180 |
| 1981 void test_nonAbstractClassInheritsAbstractMemberOne_getter_fromInterface() { | 2181 void test_nonAbstractClassInheritsAbstractMemberOne_getter_fromInterface() { |
| 1982 Source source = addSource(EngineTestCase.createSource([ | 2182 Source source = addSource(r''' |
| 1983 "class I {", | 2183 class I { |
| 1984 " int get g {return 1;}", | 2184 int get g {return 1;} |
| 1985 "}", | 2185 } |
| 1986 "class C implements I {", | 2186 class C implements I { |
| 1987 "}"])); | 2187 }'''); |
| 1988 resolve(source); | 2188 resolve(source); |
| 1989 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2189 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 1990 verify([source]); | 2190 verify([source]); |
| 1991 } | 2191 } |
| 1992 | 2192 |
| 1993 void test_nonAbstractClassInheritsAbstractMemberOne_getter_fromSuperclass() { | 2193 void test_nonAbstractClassInheritsAbstractMemberOne_getter_fromSuperclass() { |
| 1994 Source source = addSource(EngineTestCase.createSource([ | 2194 Source source = addSource(r''' |
| 1995 "abstract class A {", | 2195 abstract class A { |
| 1996 " int get g;", | 2196 int get g; |
| 1997 "}", | 2197 } |
| 1998 "class C extends A {", | 2198 class C extends A { |
| 1999 "}"])); | 2199 }'''); |
| 2000 resolve(source); | 2200 resolve(source); |
| 2001 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2201 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2002 verify([source]); | 2202 verify([source]); |
| 2003 } | 2203 } |
| 2004 | 2204 |
| 2005 void test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface() { | 2205 void test_nonAbstractClassInheritsAbstractMemberOne_method_fromInterface() { |
| 2006 Source source = addSource(EngineTestCase.createSource([ | 2206 Source source = addSource(r''' |
| 2007 "class I {", | 2207 class I { |
| 2008 " m(p) {}", | 2208 m(p) {} |
| 2009 "}", | 2209 } |
| 2010 "class C implements I {", | 2210 class C implements I { |
| 2011 "}"])); | 2211 }'''); |
| 2012 resolve(source); | 2212 resolve(source); |
| 2013 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2213 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2014 verify([source]); | 2214 verify([source]); |
| 2015 } | 2215 } |
| 2016 | 2216 |
| 2017 void test_nonAbstractClassInheritsAbstractMemberOne_method_fromSuperclass() { | 2217 void test_nonAbstractClassInheritsAbstractMemberOne_method_fromSuperclass() { |
| 2018 Source source = addSource(EngineTestCase.createSource([ | 2218 Source source = addSource(r''' |
| 2019 "abstract class A {", | 2219 abstract class A { |
| 2020 " m(p);", | 2220 m(p); |
| 2021 "}", | 2221 } |
| 2022 "class C extends A {", | 2222 class C extends A { |
| 2023 "}"])); | 2223 }'''); |
| 2024 resolve(source); | 2224 resolve(source); |
| 2025 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2225 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2026 verify([source]); | 2226 verify([source]); |
| 2027 } | 2227 } |
| 2028 | 2228 |
| 2029 void test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount(
) { | 2229 void test_nonAbstractClassInheritsAbstractMemberOne_method_optionalParamCount(
) { |
| 2030 // 7640 | 2230 // 7640 |
| 2031 Source source = addSource(EngineTestCase.createSource([ | 2231 Source source = addSource(r''' |
| 2032 "abstract class A {", | 2232 abstract class A { |
| 2033 " int x(int a);", | 2233 int x(int a); |
| 2034 "}", | 2234 } |
| 2035 "abstract class B {", | 2235 abstract class B { |
| 2036 " int x(int a, [int b]);", | 2236 int x(int a, [int b]); |
| 2037 "}", | 2237 } |
| 2038 "class C implements A, B {", | 2238 class C implements A, B { |
| 2039 "}"])); | 2239 }'''); |
| 2040 resolve(source); | 2240 resolve(source); |
| 2041 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2241 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2042 verify([source]); | 2242 verify([source]); |
| 2043 } | 2243 } |
| 2044 | 2244 |
| 2045 void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_getter() { | 2245 void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_getter() { |
| 2046 // 15001 | 2246 // 15001 |
| 2047 Source source = addSource(EngineTestCase.createSource([ | 2247 Source source = addSource(r''' |
| 2048 "abstract class A { get g1; get g2; }", | 2248 abstract class A { get g1; get g2; } |
| 2049 "abstract class B implements A { get g1 => 1; }", | 2249 abstract class B implements A { get g1 => 1; } |
| 2050 "class C extends Object with B {}"])); | 2250 class C extends Object with B {}'''); |
| 2051 resolve(source); | 2251 resolve(source); |
| 2052 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2252 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2053 } | 2253 } |
| 2054 | 2254 |
| 2055 void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_method() { | 2255 void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_method() { |
| 2056 // 15001 | 2256 // 15001 |
| 2057 Source source = addSource(EngineTestCase.createSource([ | 2257 Source source = addSource(r''' |
| 2058 "abstract class A { m1(); m2(); }", | 2258 abstract class A { m1(); m2(); } |
| 2059 "abstract class B implements A { m1() => 1; }", | 2259 abstract class B implements A { m1() => 1; } |
| 2060 "class C extends Object with B {}"])); | 2260 class C extends Object with B {}'''); |
| 2061 resolve(source); | 2261 resolve(source); |
| 2062 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2262 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2063 } | 2263 } |
| 2064 | 2264 |
| 2065 void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_setter() { | 2265 void test_nonAbstractClassInheritsAbstractMemberOne_mixinInherits_setter() { |
| 2066 // 15001 | 2266 // 15001 |
| 2067 Source source = addSource(EngineTestCase.createSource([ | 2267 Source source = addSource(r''' |
| 2068 "abstract class A { set s1(v); set s2(v); }", | 2268 abstract class A { set s1(v); set s2(v); } |
| 2069 "abstract class B implements A { set s1(v) {} }", | 2269 abstract class B implements A { set s1(v) {} } |
| 2070 "class C extends Object with B {}"])); | 2270 class C extends Object with B {}'''); |
| 2071 resolve(source); | 2271 resolve(source); |
| 2072 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2272 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2073 } | 2273 } |
| 2074 | 2274 |
| 2075 void test_nonAbstractClassInheritsAbstractMemberOne_setter_and_implicitSetter(
) { | 2275 void test_nonAbstractClassInheritsAbstractMemberOne_setter_and_implicitSetter(
) { |
| 2076 // test from language/override_inheritance_abstract_test_14.dart | 2276 // test from language/override_inheritance_abstract_test_14.dart |
| 2077 Source source = addSource(EngineTestCase.createSource([ | 2277 Source source = addSource(r''' |
| 2078 "abstract class A {", | 2278 abstract class A { |
| 2079 " set field(_);", | 2279 set field(_); |
| 2080 "}", | 2280 } |
| 2081 "abstract class I {", | 2281 abstract class I { |
| 2082 " var field;", | 2282 var field; |
| 2083 "}", | 2283 } |
| 2084 "class B extends A implements I {", | 2284 class B extends A implements I { |
| 2085 " get field => 0;", | 2285 get field => 0; |
| 2086 "}"])); | 2286 }'''); |
| 2087 resolve(source); | 2287 resolve(source); |
| 2088 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2288 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2089 verify([source]); | 2289 verify([source]); |
| 2090 } | 2290 } |
| 2091 | 2291 |
| 2092 void test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface() { | 2292 void test_nonAbstractClassInheritsAbstractMemberOne_setter_fromInterface() { |
| 2093 Source source = addSource(EngineTestCase.createSource([ | 2293 Source source = addSource(r''' |
| 2094 "class I {", | 2294 class I { |
| 2095 " set s(int i) {}", | 2295 set s(int i) {} |
| 2096 "}", | 2296 } |
| 2097 "class C implements I {", | 2297 class C implements I { |
| 2098 "}"])); | 2298 }'''); |
| 2099 resolve(source); | 2299 resolve(source); |
| 2100 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2300 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2101 verify([source]); | 2301 verify([source]); |
| 2102 } | 2302 } |
| 2103 | 2303 |
| 2104 void test_nonAbstractClassInheritsAbstractMemberOne_setter_fromSuperclass() { | 2304 void test_nonAbstractClassInheritsAbstractMemberOne_setter_fromSuperclass() { |
| 2105 Source source = addSource(EngineTestCase.createSource([ | 2305 Source source = addSource(r''' |
| 2106 "abstract class A {", | 2306 abstract class A { |
| 2107 " set s(int i);", | 2307 set s(int i); |
| 2108 "}", | 2308 } |
| 2109 "class C extends A {", | 2309 class C extends A { |
| 2110 "}"])); | 2310 }'''); |
| 2111 resolve(source); | 2311 resolve(source); |
| 2112 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2312 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2113 verify([source]); | 2313 verify([source]); |
| 2114 } | 2314 } |
| 2115 | 2315 |
| 2116 void test_nonAbstractClassInheritsAbstractMemberOne_superclasses_interface() { | 2316 void test_nonAbstractClassInheritsAbstractMemberOne_superclasses_interface() { |
| 2117 // bug 11154 | 2317 // bug 11154 |
| 2118 Source source = addSource(EngineTestCase.createSource([ | 2318 Source source = addSource(r''' |
| 2119 "class A {", | 2319 class A { |
| 2120 " get a => 'a';", | 2320 get a => 'a'; |
| 2121 "}", | 2321 } |
| 2122 "abstract class B implements A {", | 2322 abstract class B implements A { |
| 2123 " get b => 'b';", | 2323 get b => 'b'; |
| 2124 "}", | 2324 } |
| 2125 "class C extends B {", | 2325 class C extends B { |
| 2126 "}"])); | 2326 }'''); |
| 2127 resolve(source); | 2327 resolve(source); |
| 2128 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2328 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2129 verify([source]); | 2329 verify([source]); |
| 2130 } | 2330 } |
| 2131 | 2331 |
| 2132 void test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_mis
singGetter() { | 2332 void test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_mis
singGetter() { |
| 2133 // 16133 | 2333 // 16133 |
| 2134 Source source = addSource(EngineTestCase.createSource([ | 2334 Source source = addSource(r''' |
| 2135 "class I {", | 2335 class I { |
| 2136 " var v;", | 2336 var v; |
| 2137 "}", | 2337 } |
| 2138 "class C implements I {", | 2338 class C implements I { |
| 2139 " set v(_) {}", | 2339 set v(_) {} |
| 2140 "}"])); | 2340 }'''); |
| 2141 resolve(source); | 2341 resolve(source); |
| 2142 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2342 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2143 verify([source]); | 2343 verify([source]); |
| 2144 } | 2344 } |
| 2145 | 2345 |
| 2146 void test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_mis
singSetter() { | 2346 void test_nonAbstractClassInheritsAbstractMemberOne_variable_fromInterface_mis
singSetter() { |
| 2147 // 16133 | 2347 // 16133 |
| 2148 Source source = addSource(EngineTestCase.createSource([ | 2348 Source source = addSource(r''' |
| 2149 "class I {", | 2349 class I { |
| 2150 " var v;", | 2350 var v; |
| 2151 "}", | 2351 } |
| 2152 "class C implements I {", | 2352 class C implements I { |
| 2153 " get v => 1;", | 2353 get v => 1; |
| 2154 "}"])); | 2354 }'''); |
| 2155 resolve(source); | 2355 resolve(source); |
| 2156 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); | 2356 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_ONE]); |
| 2157 verify([source]); | 2357 verify([source]); |
| 2158 } | 2358 } |
| 2159 | 2359 |
| 2160 void test_nonAbstractClassInheritsAbstractMemberThree() { | 2360 void test_nonAbstractClassInheritsAbstractMemberThree() { |
| 2161 Source source = addSource(EngineTestCase.createSource([ | 2361 Source source = addSource(r''' |
| 2162 "abstract class A {", | 2362 abstract class A { |
| 2163 " m();", | 2363 m(); |
| 2164 " n();", | 2364 n(); |
| 2165 " o();", | 2365 o(); |
| 2166 "}", | 2366 } |
| 2167 "class C extends A {", | 2367 class C extends A { |
| 2168 "}"])); | 2368 }'''); |
| 2169 resolve(source); | 2369 resolve(source); |
| 2170 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_THREE]); | 2370 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_THREE]); |
| 2171 verify([source]); | 2371 verify([source]); |
| 2172 } | 2372 } |
| 2173 | 2373 |
| 2174 void test_nonAbstractClassInheritsAbstractMemberTwo() { | 2374 void test_nonAbstractClassInheritsAbstractMemberTwo() { |
| 2175 Source source = addSource(EngineTestCase.createSource([ | 2375 Source source = addSource(r''' |
| 2176 "abstract class A {", | 2376 abstract class A { |
| 2177 " m();", | 2377 m(); |
| 2178 " n();", | 2378 n(); |
| 2179 "}", | 2379 } |
| 2180 "class C extends A {", | 2380 class C extends A { |
| 2181 "}"])); | 2381 }'''); |
| 2182 resolve(source); | 2382 resolve(source); |
| 2183 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_TWO]); | 2383 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_TWO]); |
| 2184 verify([source]); | 2384 verify([source]); |
| 2185 } | 2385 } |
| 2186 | 2386 |
| 2187 void test_nonAbstractClassInheritsAbstractMemberTwo_variable_fromInterface_mis
singBoth() { | 2387 void test_nonAbstractClassInheritsAbstractMemberTwo_variable_fromInterface_mis
singBoth() { |
| 2188 // 16133 | 2388 // 16133 |
| 2189 Source source = addSource(EngineTestCase.createSource([ | 2389 Source source = addSource(r''' |
| 2190 "class I {", | 2390 class I { |
| 2191 " var v;", | 2391 var v; |
| 2192 "}", | 2392 } |
| 2193 "class C implements I {", | 2393 class C implements I { |
| 2194 "}"])); | 2394 }'''); |
| 2195 resolve(source); | 2395 resolve(source); |
| 2196 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_TWO]); | 2396 assertErrors(source, [StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT
_MEMBER_TWO]); |
| 2197 verify([source]); | 2397 verify([source]); |
| 2198 } | 2398 } |
| 2199 | 2399 |
| 2200 void test_nonTypeInCatchClause_noElement() { | 2400 void test_nonTypeInCatchClause_noElement() { |
| 2201 Source source = addSource(EngineTestCase.createSource(["f() {", " try {", "
} on T catch (e) {", " }", "}"])); | 2401 Source source = addSource(r''' |
| 2402 f() { |
| 2403 try { |
| 2404 } on T catch (e) { |
| 2405 } |
| 2406 }'''); |
| 2202 resolve(source); | 2407 resolve(source); |
| 2203 assertErrors(source, [StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE]); | 2408 assertErrors(source, [StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE]); |
| 2204 verify([source]); | 2409 verify([source]); |
| 2205 } | 2410 } |
| 2206 | 2411 |
| 2207 void test_nonTypeInCatchClause_notType() { | 2412 void test_nonTypeInCatchClause_notType() { |
| 2208 Source source = addSource(EngineTestCase.createSource([ | 2413 Source source = addSource(r''' |
| 2209 "var T = 0;", | 2414 var T = 0; |
| 2210 "f() {", | 2415 f() { |
| 2211 " try {", | 2416 try { |
| 2212 " } on T catch (e) {", | 2417 } on T catch (e) { |
| 2213 " }", | 2418 } |
| 2214 "}"])); | 2419 }'''); |
| 2215 resolve(source); | 2420 resolve(source); |
| 2216 assertErrors(source, [StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE]); | 2421 assertErrors(source, [StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE]); |
| 2217 verify([source]); | 2422 verify([source]); |
| 2218 } | 2423 } |
| 2219 | 2424 |
| 2220 void test_nonVoidReturnForOperator() { | 2425 void test_nonVoidReturnForOperator() { |
| 2221 Source source = addSource(EngineTestCase.createSource([ | 2426 Source source = addSource(r''' |
| 2222 "class A {", | 2427 class A { |
| 2223 " int operator []=(a, b) { return a; }", | 2428 int operator []=(a, b) { return a; } |
| 2224 "}"])); | 2429 }'''); |
| 2225 resolve(source); | 2430 resolve(source); |
| 2226 assertErrors(source, [StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR]); | 2431 assertErrors(source, [StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR]); |
| 2227 verify([source]); | 2432 verify([source]); |
| 2228 } | 2433 } |
| 2229 | 2434 |
| 2230 void test_nonVoidReturnForSetter_function() { | 2435 void test_nonVoidReturnForSetter_function() { |
| 2231 Source source = addSource(EngineTestCase.createSource(["int set x(int v) {",
" return 42;", "}"])); | 2436 Source source = addSource(r''' |
| 2437 int set x(int v) { |
| 2438 return 42; |
| 2439 }'''); |
| 2232 resolve(source); | 2440 resolve(source); |
| 2233 assertErrors(source, [StaticWarningCode.NON_VOID_RETURN_FOR_SETTER]); | 2441 assertErrors(source, [StaticWarningCode.NON_VOID_RETURN_FOR_SETTER]); |
| 2234 verify([source]); | 2442 verify([source]); |
| 2235 } | 2443 } |
| 2236 | 2444 |
| 2237 void test_nonVoidReturnForSetter_method() { | 2445 void test_nonVoidReturnForSetter_method() { |
| 2238 Source source = addSource(EngineTestCase.createSource([ | 2446 Source source = addSource(r''' |
| 2239 "class A {", | 2447 class A { |
| 2240 " int set x(int v) {", | 2448 int set x(int v) { |
| 2241 " return 42;", | 2449 return 42; |
| 2242 " }", | 2450 } |
| 2243 "}"])); | 2451 }'''); |
| 2244 resolve(source); | 2452 resolve(source); |
| 2245 assertErrors(source, [StaticWarningCode.NON_VOID_RETURN_FOR_SETTER]); | 2453 assertErrors(source, [StaticWarningCode.NON_VOID_RETURN_FOR_SETTER]); |
| 2246 verify([source]); | 2454 verify([source]); |
| 2247 } | 2455 } |
| 2248 | 2456 |
| 2249 void test_notAType() { | 2457 void test_notAType() { |
| 2250 Source source = addSource(EngineTestCase.createSource(["f() {}", "main() {",
" f v = null;", "}"])); | 2458 Source source = addSource(r''' |
| 2459 f() {} |
| 2460 main() { |
| 2461 f v = null; |
| 2462 }'''); |
| 2251 resolve(source); | 2463 resolve(source); |
| 2252 assertErrors(source, [StaticWarningCode.NOT_A_TYPE]); | 2464 assertErrors(source, [StaticWarningCode.NOT_A_TYPE]); |
| 2253 verify([source]); | 2465 verify([source]); |
| 2254 } | 2466 } |
| 2255 | 2467 |
| 2256 void test_notEnoughRequiredArguments() { | 2468 void test_notEnoughRequiredArguments() { |
| 2257 Source source = addSource(EngineTestCase.createSource(["f(int a, String b) {
}", "main() {", " f();", "}"])); | 2469 Source source = addSource(r''' |
| 2470 f(int a, String b) {} |
| 2471 main() { |
| 2472 f(); |
| 2473 }'''); |
| 2258 resolve(source); | 2474 resolve(source); |
| 2259 assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]); | 2475 assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]); |
| 2260 verify([source]); | 2476 verify([source]); |
| 2261 } | 2477 } |
| 2262 | 2478 |
| 2263 void test_notEnoughRequiredArguments_functionExpression() { | 2479 void test_notEnoughRequiredArguments_functionExpression() { |
| 2264 Source source = addSource(EngineTestCase.createSource(["main() {", " (int x
) {} ();", "}"])); | 2480 Source source = addSource(r''' |
| 2481 main() { |
| 2482 (int x) {} (); |
| 2483 }'''); |
| 2265 resolve(source); | 2484 resolve(source); |
| 2266 assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]); | 2485 assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]); |
| 2267 verify([source]); | 2486 verify([source]); |
| 2268 } | 2487 } |
| 2269 | 2488 |
| 2270 void test_notEnoughRequiredArguments_getterReturningFunction() { | 2489 void test_notEnoughRequiredArguments_getterReturningFunction() { |
| 2271 Source source = addSource(EngineTestCase.createSource([ | 2490 Source source = addSource(r''' |
| 2272 "typedef Getter(self);", | 2491 typedef Getter(self); |
| 2273 "Getter getter = (x) => x;", | 2492 Getter getter = (x) => x; |
| 2274 "main() {", | 2493 main() { |
| 2275 " getter();", | 2494 getter(); |
| 2276 "}"])); | 2495 }'''); |
| 2277 resolve(source); | 2496 resolve(source); |
| 2278 assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]); | 2497 assertErrors(source, [StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS]); |
| 2279 verify([source]); | 2498 verify([source]); |
| 2280 } | 2499 } |
| 2281 | 2500 |
| 2282 void test_partOfDifferentLibrary() { | 2501 void test_partOfDifferentLibrary() { |
| 2283 Source source = addSource(EngineTestCase.createSource(["library lib;", "part
'part.dart';"])); | 2502 Source source = addSource(r''' |
| 2284 addNamedSource("/part.dart", EngineTestCase.createSource(["part of lub;"])); | 2503 library lib; |
| 2504 part 'part.dart';'''); |
| 2505 addNamedSource("/part.dart", "part of lub;"); |
| 2285 resolve(source); | 2506 resolve(source); |
| 2286 assertErrors(source, [StaticWarningCode.PART_OF_DIFFERENT_LIBRARY]); | 2507 assertErrors(source, [StaticWarningCode.PART_OF_DIFFERENT_LIBRARY]); |
| 2287 verify([source]); | 2508 verify([source]); |
| 2288 } | 2509 } |
| 2289 | 2510 |
| 2290 void test_redirectToInvalidFunctionType() { | 2511 void test_redirectToInvalidFunctionType() { |
| 2291 Source source = addSource(EngineTestCase.createSource([ | 2512 Source source = addSource(r''' |
| 2292 "class A implements B {", | 2513 class A implements B { |
| 2293 " A(int p) {}", | 2514 A(int p) {} |
| 2294 "}", | 2515 } |
| 2295 "class B {", | 2516 class B { |
| 2296 " factory B() = A;", | 2517 factory B() = A; |
| 2297 "}"])); | 2518 }'''); |
| 2298 resolve(source); | 2519 resolve(source); |
| 2299 assertErrors(source, [StaticWarningCode.REDIRECT_TO_INVALID_FUNCTION_TYPE]); | 2520 assertErrors(source, [StaticWarningCode.REDIRECT_TO_INVALID_FUNCTION_TYPE]); |
| 2300 verify([source]); | 2521 verify([source]); |
| 2301 } | 2522 } |
| 2302 | 2523 |
| 2303 void test_redirectToInvalidReturnType() { | 2524 void test_redirectToInvalidReturnType() { |
| 2304 Source source = addSource(EngineTestCase.createSource([ | 2525 Source source = addSource(r''' |
| 2305 "class A {", | 2526 class A { |
| 2306 " A() {}", | 2527 A() {} |
| 2307 "}", | 2528 } |
| 2308 "class B {", | 2529 class B { |
| 2309 " factory B() = A;", | 2530 factory B() = A; |
| 2310 "}"])); | 2531 }'''); |
| 2311 resolve(source); | 2532 resolve(source); |
| 2312 assertErrors(source, [StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE]); | 2533 assertErrors(source, [StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE]); |
| 2313 verify([source]); | 2534 verify([source]); |
| 2314 } | 2535 } |
| 2315 | 2536 |
| 2316 void test_redirectToMissingConstructor_named() { | 2537 void test_redirectToMissingConstructor_named() { |
| 2317 Source source = addSource(EngineTestCase.createSource([ | 2538 Source source = addSource(r''' |
| 2318 "class A implements B{", | 2539 class A implements B{ |
| 2319 " A() {}", | 2540 A() {} |
| 2320 "}", | 2541 } |
| 2321 "class B {", | 2542 class B { |
| 2322 " factory B() = A.name;", | 2543 factory B() = A.name; |
| 2323 "}"])); | 2544 }'''); |
| 2324 resolve(source); | 2545 resolve(source); |
| 2325 assertErrors(source, [StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR]); | 2546 assertErrors(source, [StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR]); |
| 2326 } | 2547 } |
| 2327 | 2548 |
| 2328 void test_redirectToMissingConstructor_unnamed() { | 2549 void test_redirectToMissingConstructor_unnamed() { |
| 2329 Source source = addSource(EngineTestCase.createSource([ | 2550 Source source = addSource(r''' |
| 2330 "class A implements B{", | 2551 class A implements B{ |
| 2331 " A.name() {}", | 2552 A.name() {} |
| 2332 "}", | 2553 } |
| 2333 "class B {", | 2554 class B { |
| 2334 " factory B() = A;", | 2555 factory B() = A; |
| 2335 "}"])); | 2556 }'''); |
| 2336 resolve(source); | 2557 resolve(source); |
| 2337 assertErrors(source, [StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR]); | 2558 assertErrors(source, [StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR]); |
| 2338 } | 2559 } |
| 2339 | 2560 |
| 2340 void test_redirectToNonClass_notAType() { | 2561 void test_redirectToNonClass_notAType() { |
| 2341 Source source = addSource(EngineTestCase.createSource(["class B {", " int A
;", " factory B() = A;", "}"])); | 2562 Source source = addSource(r''' |
| 2563 class B { |
| 2564 int A; |
| 2565 factory B() = A; |
| 2566 }'''); |
| 2342 resolve(source); | 2567 resolve(source); |
| 2343 assertErrors(source, [StaticWarningCode.REDIRECT_TO_NON_CLASS]); | 2568 assertErrors(source, [StaticWarningCode.REDIRECT_TO_NON_CLASS]); |
| 2344 verify([source]); | 2569 verify([source]); |
| 2345 } | 2570 } |
| 2346 | 2571 |
| 2347 void test_redirectToNonClass_undefinedIdentifier() { | 2572 void test_redirectToNonClass_undefinedIdentifier() { |
| 2348 Source source = addSource(EngineTestCase.createSource(["class B {", " facto
ry B() = A;", "}"])); | 2573 Source source = addSource(r''' |
| 2574 class B { |
| 2575 factory B() = A; |
| 2576 }'''); |
| 2349 resolve(source); | 2577 resolve(source); |
| 2350 assertErrors(source, [StaticWarningCode.REDIRECT_TO_NON_CLASS]); | 2578 assertErrors(source, [StaticWarningCode.REDIRECT_TO_NON_CLASS]); |
| 2351 verify([source]); | 2579 verify([source]); |
| 2352 } | 2580 } |
| 2353 | 2581 |
| 2354 void test_returnWithoutValue_factoryConstructor() { | 2582 void test_returnWithoutValue_factoryConstructor() { |
| 2355 Source source = addSource(EngineTestCase.createSource(["class A { factory A(
) { return; } }"])); | 2583 Source source = addSource("class A { factory A() { return; } }"); |
| 2356 resolve(source); | 2584 resolve(source); |
| 2357 assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]); | 2585 assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]); |
| 2358 verify([source]); | 2586 verify([source]); |
| 2359 } | 2587 } |
| 2360 | 2588 |
| 2361 void test_returnWithoutValue_function() { | 2589 void test_returnWithoutValue_function() { |
| 2362 Source source = addSource(EngineTestCase.createSource(["int f() { return; }"
])); | 2590 Source source = addSource("int f() { return; }"); |
| 2363 resolve(source); | 2591 resolve(source); |
| 2364 assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]); | 2592 assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]); |
| 2365 verify([source]); | 2593 verify([source]); |
| 2366 } | 2594 } |
| 2367 | 2595 |
| 2368 void test_returnWithoutValue_method() { | 2596 void test_returnWithoutValue_method() { |
| 2369 Source source = addSource(EngineTestCase.createSource(["class A { int m() {
return; } }"])); | 2597 Source source = addSource("class A { int m() { return; } }"); |
| 2370 resolve(source); | 2598 resolve(source); |
| 2371 assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]); | 2599 assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]); |
| 2372 verify([source]); | 2600 verify([source]); |
| 2373 } | 2601 } |
| 2374 | 2602 |
| 2375 void test_returnWithoutValue_mixedReturnTypes_function() { | 2603 void test_returnWithoutValue_mixedReturnTypes_function() { |
| 2376 // Tests that only the RETURN_WITHOUT_VALUE warning is created, and no MIXED
_RETURN_TYPES are | 2604 // Tests that only the RETURN_WITHOUT_VALUE warning is created, and no MIXED
_RETURN_TYPES are |
| 2377 // created. | 2605 // created. |
| 2378 Source source = addSource(EngineTestCase.createSource([ | 2606 Source source = addSource(r''' |
| 2379 "int f(int x) {", | 2607 int f(int x) { |
| 2380 " if (x < 0) {", | 2608 if (x < 0) { |
| 2381 " return 1;", | 2609 return 1; |
| 2382 " }", | 2610 } |
| 2383 " return;", | 2611 return; |
| 2384 "}"])); | 2612 }'''); |
| 2385 resolve(source); | 2613 resolve(source); |
| 2386 assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]); | 2614 assertErrors(source, [StaticWarningCode.RETURN_WITHOUT_VALUE]); |
| 2387 verify([source]); | 2615 verify([source]); |
| 2388 } | 2616 } |
| 2389 | 2617 |
| 2390 void test_staticAccessToInstanceMember_method_invocation() { | 2618 void test_staticAccessToInstanceMember_method_invocation() { |
| 2391 Source source = addSource(EngineTestCase.createSource(["class A {", " m() {
}", "}", "main() {", " A.m();", "}"])); | 2619 Source source = addSource(r''' |
| 2620 class A { |
| 2621 m() {} |
| 2622 } |
| 2623 main() { |
| 2624 A.m(); |
| 2625 }'''); |
| 2392 resolve(source); | 2626 resolve(source); |
| 2393 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); | 2627 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); |
| 2394 verify([source]); | 2628 verify([source]); |
| 2395 } | 2629 } |
| 2396 | 2630 |
| 2397 void test_staticAccessToInstanceMember_method_reference() { | 2631 void test_staticAccessToInstanceMember_method_reference() { |
| 2398 Source source = addSource(EngineTestCase.createSource(["class A {", " m() {
}", "}", "main() {", " A.m;", "}"])); | 2632 Source source = addSource(r''' |
| 2633 class A { |
| 2634 m() {} |
| 2635 } |
| 2636 main() { |
| 2637 A.m; |
| 2638 }'''); |
| 2399 resolve(source); | 2639 resolve(source); |
| 2400 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); | 2640 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); |
| 2401 verify([source]); | 2641 verify([source]); |
| 2402 } | 2642 } |
| 2403 | 2643 |
| 2404 void test_staticAccessToInstanceMember_propertyAccess_field() { | 2644 void test_staticAccessToInstanceMember_propertyAccess_field() { |
| 2405 Source source = addSource(EngineTestCase.createSource(["class A {", " var f
;", "}", "main() {", " A.f;", "}"])); | 2645 Source source = addSource(r''' |
| 2646 class A { |
| 2647 var f; |
| 2648 } |
| 2649 main() { |
| 2650 A.f; |
| 2651 }'''); |
| 2406 resolve(source); | 2652 resolve(source); |
| 2407 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); | 2653 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); |
| 2408 verify([source]); | 2654 verify([source]); |
| 2409 } | 2655 } |
| 2410 | 2656 |
| 2411 void test_staticAccessToInstanceMember_propertyAccess_getter() { | 2657 void test_staticAccessToInstanceMember_propertyAccess_getter() { |
| 2412 Source source = addSource(EngineTestCase.createSource([ | 2658 Source source = addSource(r''' |
| 2413 "class A {", | 2659 class A { |
| 2414 " get f => 42;", | 2660 get f => 42; |
| 2415 "}", | 2661 } |
| 2416 "main() {", | 2662 main() { |
| 2417 " A.f;", | 2663 A.f; |
| 2418 "}"])); | 2664 }'''); |
| 2419 resolve(source); | 2665 resolve(source); |
| 2420 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); | 2666 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); |
| 2421 verify([source]); | 2667 verify([source]); |
| 2422 } | 2668 } |
| 2423 | 2669 |
| 2424 void test_staticAccessToInstanceMember_propertyAccess_setter() { | 2670 void test_staticAccessToInstanceMember_propertyAccess_setter() { |
| 2425 Source source = addSource(EngineTestCase.createSource([ | 2671 Source source = addSource(r''' |
| 2426 "class A {", | 2672 class A { |
| 2427 " set f(x) {}", | 2673 set f(x) {} |
| 2428 "}", | 2674 } |
| 2429 "main() {", | 2675 main() { |
| 2430 " A.f = 42;", | 2676 A.f = 42; |
| 2431 "}"])); | 2677 }'''); |
| 2432 resolve(source); | 2678 resolve(source); |
| 2433 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); | 2679 assertErrors(source, [StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER]); |
| 2434 verify([source]); | 2680 verify([source]); |
| 2435 } | 2681 } |
| 2436 | 2682 |
| 2437 void test_switchExpressionNotAssignable() { | 2683 void test_switchExpressionNotAssignable() { |
| 2438 Source source = addSource(EngineTestCase.createSource([ | 2684 Source source = addSource(r''' |
| 2439 "f(int p) {", | 2685 f(int p) { |
| 2440 " switch (p) {", | 2686 switch (p) { |
| 2441 " case 'a': break;", | 2687 case 'a': break; |
| 2442 " }", | 2688 } |
| 2443 "}"])); | 2689 }'''); |
| 2444 resolve(source); | 2690 resolve(source); |
| 2445 assertErrors(source, [StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE]); | 2691 assertErrors(source, [StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE]); |
| 2446 verify([source]); | 2692 verify([source]); |
| 2447 } | 2693 } |
| 2448 | 2694 |
| 2449 void test_typeAnnotationDeferredClass_asExpression() { | 2695 void test_typeAnnotationDeferredClass_asExpression() { |
| 2450 resolveWithAndWithoutExperimental(<String> [ | 2696 resolveWithAndWithoutExperimental(<String> [ |
| 2451 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2697 r''' |
| 2452 EngineTestCase.createSource([ | 2698 library lib1; |
| 2453 "library root;", | 2699 class A {}''', |
| 2454 "import 'lib1.dart' deferred as a;", | 2700 r''' |
| 2455 "f(var v) {", | 2701 library root; |
| 2456 " v as a.A;", | 2702 import 'lib1.dart' deferred as a; |
| 2457 "}"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <E
rrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2703 f(var v) { |
| 2704 v as a.A; |
| 2705 }'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <ErrorCode>
[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2458 } | 2706 } |
| 2459 | 2707 |
| 2460 void test_typeAnnotationDeferredClass_catchClause() { | 2708 void test_typeAnnotationDeferredClass_catchClause() { |
| 2461 resolveWithAndWithoutExperimental(<String> [ | 2709 resolveWithAndWithoutExperimental(<String> [ |
| 2462 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2710 r''' |
| 2463 EngineTestCase.createSource([ | 2711 library lib1; |
| 2464 "library root;", | 2712 class A {}''', |
| 2465 "import 'lib1.dart' deferred as a;", | 2713 r''' |
| 2466 "f(var v) {", | 2714 library root; |
| 2467 " try {", | 2715 import 'lib1.dart' deferred as a; |
| 2468 " } on a.A {", | 2716 f(var v) { |
| 2469 " }", | 2717 try { |
| 2470 "}"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <E
rrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2718 } on a.A { |
| 2719 } |
| 2720 }'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <ErrorCode>
[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2471 } | 2721 } |
| 2472 | 2722 |
| 2473 void test_typeAnnotationDeferredClass_fieldFormalParameter() { | 2723 void test_typeAnnotationDeferredClass_fieldFormalParameter() { |
| 2474 resolveWithAndWithoutExperimental(<String> [ | 2724 resolveWithAndWithoutExperimental(<String> [ |
| 2475 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2725 r''' |
| 2476 EngineTestCase.createSource([ | 2726 library lib1; |
| 2477 "library root;", | 2727 class A {}''', |
| 2478 "import 'lib1.dart' deferred as a;", | 2728 r''' |
| 2479 "class C {", | 2729 library root; |
| 2480 " var v;", | 2730 import 'lib1.dart' deferred as a; |
| 2481 " C(a.A this.v);", | 2731 class C { |
| 2482 "}"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <E
rrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2732 var v; |
| 2733 C(a.A this.v); |
| 2734 }'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <ErrorCode>
[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2483 } | 2735 } |
| 2484 | 2736 |
| 2485 void test_typeAnnotationDeferredClass_functionDeclaration_returnType() { | 2737 void test_typeAnnotationDeferredClass_functionDeclaration_returnType() { |
| 2486 resolveWithAndWithoutExperimental(<String> [ | 2738 resolveWithAndWithoutExperimental(<String> [ |
| 2487 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2739 r''' |
| 2488 EngineTestCase.createSource([ | 2740 library lib1; |
| 2489 "library root;", | 2741 class A {}''', |
| 2490 "import 'lib1.dart' deferred as a;", | 2742 r''' |
| 2491 "a.A f() { return null; }"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMP
ORTS_NOT_SUPPORTED], <ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLA
SS]); | 2743 library root; |
| 2744 import 'lib1.dart' deferred as a; |
| 2745 a.A f() { return null; }'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_
SUPPORTED], <ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2492 } | 2746 } |
| 2493 | 2747 |
| 2494 void test_typeAnnotationDeferredClass_functionTypedFormalParameter_returnType(
) { | 2748 void test_typeAnnotationDeferredClass_functionTypedFormalParameter_returnType(
) { |
| 2495 resolveWithAndWithoutExperimental(<String> [ | 2749 resolveWithAndWithoutExperimental(<String> [ |
| 2496 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2750 r''' |
| 2497 EngineTestCase.createSource([ | 2751 library lib1; |
| 2498 "library root;", | 2752 class A {}''', |
| 2499 "import 'lib1.dart' deferred as a;", | 2753 r''' |
| 2500 "f(a.A g()) {}"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SU
PPORTED], <ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2754 library root; |
| 2755 import 'lib1.dart' deferred as a; |
| 2756 f(a.A g()) {}'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED],
<ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2501 } | 2757 } |
| 2502 | 2758 |
| 2503 void test_typeAnnotationDeferredClass_isExpression() { | 2759 void test_typeAnnotationDeferredClass_isExpression() { |
| 2504 resolveWithAndWithoutExperimental(<String> [ | 2760 resolveWithAndWithoutExperimental(<String> [ |
| 2505 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2761 r''' |
| 2506 EngineTestCase.createSource([ | 2762 library lib1; |
| 2507 "library root;", | 2763 class A {}''', |
| 2508 "import 'lib1.dart' deferred as a;", | 2764 r''' |
| 2509 "f(var v) {", | 2765 library root; |
| 2510 " bool b = v is a.A;", | 2766 import 'lib1.dart' deferred as a; |
| 2511 "}"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <E
rrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2767 f(var v) { |
| 2768 bool b = v is a.A; |
| 2769 }'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <ErrorCode>
[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2512 } | 2770 } |
| 2513 | 2771 |
| 2514 void test_typeAnnotationDeferredClass_methodDeclaration_returnType() { | 2772 void test_typeAnnotationDeferredClass_methodDeclaration_returnType() { |
| 2515 resolveWithAndWithoutExperimental(<String> [ | 2773 resolveWithAndWithoutExperimental(<String> [ |
| 2516 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2774 r''' |
| 2517 EngineTestCase.createSource([ | 2775 library lib1; |
| 2518 "library root;", | 2776 class A {}''', |
| 2519 "import 'lib1.dart' deferred as a;", | 2777 r''' |
| 2520 "class C {", | 2778 library root; |
| 2521 " a.A m() { return null; }", | 2779 import 'lib1.dart' deferred as a; |
| 2522 "}"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <E
rrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2780 class C { |
| 2781 a.A m() { return null; } |
| 2782 }'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <ErrorCode>
[StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2523 } | 2783 } |
| 2524 | 2784 |
| 2525 void test_typeAnnotationDeferredClass_simpleFormalParameter() { | 2785 void test_typeAnnotationDeferredClass_simpleFormalParameter() { |
| 2526 resolveWithAndWithoutExperimental(<String> [ | 2786 resolveWithAndWithoutExperimental(<String> [ |
| 2527 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2787 r''' |
| 2528 EngineTestCase.createSource([ | 2788 library lib1; |
| 2529 "library root;", | 2789 class A {}''', |
| 2530 "import 'lib1.dart' deferred as a;", | 2790 r''' |
| 2531 "f(a.A v) {}"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPP
ORTED], <ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2791 library root; |
| 2792 import 'lib1.dart' deferred as a; |
| 2793 f(a.A v) {}'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <
ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2532 } | 2794 } |
| 2533 | 2795 |
| 2534 void test_typeAnnotationDeferredClass_typeArgumentList() { | 2796 void test_typeAnnotationDeferredClass_typeArgumentList() { |
| 2535 resolveWithAndWithoutExperimental(<String> [ | 2797 resolveWithAndWithoutExperimental(<String> [ |
| 2536 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2798 r''' |
| 2537 EngineTestCase.createSource([ | 2799 library lib1; |
| 2538 "library root;", | 2800 class A {}''', |
| 2539 "import 'lib1.dart' deferred as a;", | 2801 r''' |
| 2540 "class C<E> {}", | 2802 library root; |
| 2541 "C<a.A> c;"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPOR
TED], <ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2803 import 'lib1.dart' deferred as a; |
| 2804 class C<E> {} |
| 2805 C<a.A> c;'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <Er
rorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2542 } | 2806 } |
| 2543 | 2807 |
| 2544 void test_typeAnnotationDeferredClass_typeArgumentList2() { | 2808 void test_typeAnnotationDeferredClass_typeArgumentList2() { |
| 2545 resolveWithAndWithoutExperimental(<String> [ | 2809 resolveWithAndWithoutExperimental(<String> [ |
| 2546 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2810 r''' |
| 2547 EngineTestCase.createSource([ | 2811 library lib1; |
| 2548 "library root;", | 2812 class A {}''', |
| 2549 "import 'lib1.dart' deferred as a;", | 2813 r''' |
| 2550 "class C<E, F> {}", | 2814 library root; |
| 2551 "C<a.A, a.A> c;"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_S
UPPORTED], <ErrorCode> [ | 2815 import 'lib1.dart' deferred as a; |
| 2816 class C<E, F> {} |
| 2817 C<a.A, a.A> c;'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED]
, <ErrorCode> [ |
| 2552 StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, | 2818 StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, |
| 2553 StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2819 StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2554 } | 2820 } |
| 2555 | 2821 |
| 2556 void test_typeAnnotationDeferredClass_typeParameter_bound() { | 2822 void test_typeAnnotationDeferredClass_typeParameter_bound() { |
| 2557 resolveWithAndWithoutExperimental(<String> [ | 2823 resolveWithAndWithoutExperimental(<String> [ |
| 2558 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2824 r''' |
| 2559 EngineTestCase.createSource([ | 2825 library lib1; |
| 2560 "library root;", | 2826 class A {}''', |
| 2561 "import 'lib1.dart' deferred as a;", | 2827 r''' |
| 2562 "class C<E extends a.A> {}"])], <ErrorCode> [ParserErrorCode.DEFERRED_IM
PORTS_NOT_SUPPORTED], <ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CL
ASS]); | 2828 library root; |
| 2829 import 'lib1.dart' deferred as a; |
| 2830 class C<E extends a.A> {}'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT
_SUPPORTED], <ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2563 } | 2831 } |
| 2564 | 2832 |
| 2565 void test_typeAnnotationDeferredClass_variableDeclarationList() { | 2833 void test_typeAnnotationDeferredClass_variableDeclarationList() { |
| 2566 resolveWithAndWithoutExperimental(<String> [ | 2834 resolveWithAndWithoutExperimental(<String> [ |
| 2567 EngineTestCase.createSource(["library lib1;", "class A {}"]), | 2835 r''' |
| 2568 EngineTestCase.createSource([ | 2836 library lib1; |
| 2569 "library root;", | 2837 class A {}''', |
| 2570 "import 'lib1.dart' deferred as a;", | 2838 r''' |
| 2571 "a.A v;"])], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED
], <ErrorCode> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); | 2839 library root; |
| 2840 import 'lib1.dart' deferred as a; |
| 2841 a.A v;'''], <ErrorCode> [ParserErrorCode.DEFERRED_IMPORTS_NOT_SUPPORTED], <Error
Code> [StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS]); |
| 2572 } | 2842 } |
| 2573 | 2843 |
| 2574 void test_typeParameterReferencedByStatic_field() { | 2844 void test_typeParameterReferencedByStatic_field() { |
| 2575 Source source = addSource(EngineTestCase.createSource(["class A<K> {", " st
atic K k;", "}"])); | 2845 Source source = addSource(r''' |
| 2846 class A<K> { |
| 2847 static K k; |
| 2848 }'''); |
| 2576 resolve(source); | 2849 resolve(source); |
| 2577 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); | 2850 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); |
| 2578 verify([source]); | 2851 verify([source]); |
| 2579 } | 2852 } |
| 2580 | 2853 |
| 2581 void test_typeParameterReferencedByStatic_getter() { | 2854 void test_typeParameterReferencedByStatic_getter() { |
| 2582 Source source = addSource(EngineTestCase.createSource(["class A<K> {", " st
atic K get k => null;", "}"])); | 2855 Source source = addSource(r''' |
| 2856 class A<K> { |
| 2857 static K get k => null; |
| 2858 }'''); |
| 2583 resolve(source); | 2859 resolve(source); |
| 2584 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); | 2860 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); |
| 2585 verify([source]); | 2861 verify([source]); |
| 2586 } | 2862 } |
| 2587 | 2863 |
| 2588 void test_typeParameterReferencedByStatic_methodBodyReference() { | 2864 void test_typeParameterReferencedByStatic_methodBodyReference() { |
| 2589 Source source = addSource(EngineTestCase.createSource(["class A<K> {", " st
atic m() {", " K k;", " }", "}"])); | 2865 Source source = addSource(r''' |
| 2866 class A<K> { |
| 2867 static m() { |
| 2868 K k; |
| 2869 } |
| 2870 }'''); |
| 2590 resolve(source); | 2871 resolve(source); |
| 2591 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); | 2872 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); |
| 2592 verify([source]); | 2873 verify([source]); |
| 2593 } | 2874 } |
| 2594 | 2875 |
| 2595 void test_typeParameterReferencedByStatic_methodParameter() { | 2876 void test_typeParameterReferencedByStatic_methodParameter() { |
| 2596 Source source = addSource(EngineTestCase.createSource(["class A<K> {", " st
atic m(K k) {}", "}"])); | 2877 Source source = addSource(r''' |
| 2878 class A<K> { |
| 2879 static m(K k) {} |
| 2880 }'''); |
| 2597 resolve(source); | 2881 resolve(source); |
| 2598 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); | 2882 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); |
| 2599 verify([source]); | 2883 verify([source]); |
| 2600 } | 2884 } |
| 2601 | 2885 |
| 2602 void test_typeParameterReferencedByStatic_methodReturn() { | 2886 void test_typeParameterReferencedByStatic_methodReturn() { |
| 2603 Source source = addSource(EngineTestCase.createSource(["class A<K> {", " st
atic K m() { return null; }", "}"])); | 2887 Source source = addSource(r''' |
| 2888 class A<K> { |
| 2889 static K m() { return null; } |
| 2890 }'''); |
| 2604 resolve(source); | 2891 resolve(source); |
| 2605 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); | 2892 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); |
| 2606 verify([source]); | 2893 verify([source]); |
| 2607 } | 2894 } |
| 2608 | 2895 |
| 2609 void test_typeParameterReferencedByStatic_setter() { | 2896 void test_typeParameterReferencedByStatic_setter() { |
| 2610 Source source = addSource(EngineTestCase.createSource(["class A<K> {", " st
atic set s(K k) {}", "}"])); | 2897 Source source = addSource(r''' |
| 2898 class A<K> { |
| 2899 static set s(K k) {} |
| 2900 }'''); |
| 2611 resolve(source); | 2901 resolve(source); |
| 2612 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); | 2902 assertErrors(source, [StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC]
); |
| 2613 verify([source]); | 2903 verify([source]); |
| 2614 } | 2904 } |
| 2615 | 2905 |
| 2616 void test_typePromotion_functionType_arg_InterToDyn() { | 2906 void test_typePromotion_functionType_arg_InterToDyn() { |
| 2617 Source source = addSource(EngineTestCase.createSource([ | 2907 Source source = addSource(r''' |
| 2618 "typedef FuncDyn(x);", | 2908 typedef FuncDyn(x); |
| 2619 "typedef FuncA(A a);", | 2909 typedef FuncA(A a); |
| 2620 "class A {}", | 2910 class A {} |
| 2621 "class B {}", | 2911 class B {} |
| 2622 "main(FuncA f) {", | 2912 main(FuncA f) { |
| 2623 " if (f is FuncDyn) {", | 2913 if (f is FuncDyn) { |
| 2624 " f(new B());", | 2914 f(new B()); |
| 2625 " }", | 2915 } |
| 2626 "}"])); | 2916 }'''); |
| 2627 resolve(source); | 2917 resolve(source); |
| 2628 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 2918 assertErrors(source, [StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 2629 } | 2919 } |
| 2630 | 2920 |
| 2631 void test_typeTestNonType() { | 2921 void test_typeTestNonType() { |
| 2632 Source source = addSource(EngineTestCase.createSource(["var A = 0;", "f(var
p) {", " if (p is A) {", " }", "}"])); | 2922 Source source = addSource(r''' |
| 2923 var A = 0; |
| 2924 f(var p) { |
| 2925 if (p is A) { |
| 2926 } |
| 2927 }'''); |
| 2633 resolve(source); | 2928 resolve(source); |
| 2634 assertErrors(source, [StaticWarningCode.TYPE_TEST_NON_TYPE]); | 2929 assertErrors(source, [StaticWarningCode.TYPE_TEST_NON_TYPE]); |
| 2635 verify([source]); | 2930 verify([source]); |
| 2636 } | 2931 } |
| 2637 | 2932 |
| 2638 void test_undefinedClass_instanceCreation() { | 2933 void test_undefinedClass_instanceCreation() { |
| 2639 Source source = addSource(EngineTestCase.createSource(["f() { new C(); }"]))
; | 2934 Source source = addSource("f() { new C(); }"); |
| 2640 resolve(source); | 2935 resolve(source); |
| 2641 assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]); | 2936 assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]); |
| 2642 } | 2937 } |
| 2643 | 2938 |
| 2644 void test_undefinedClass_variableDeclaration() { | 2939 void test_undefinedClass_variableDeclaration() { |
| 2645 Source source = addSource(EngineTestCase.createSource(["f() { C c; }"])); | 2940 Source source = addSource("f() { C c; }"); |
| 2646 resolve(source); | 2941 resolve(source); |
| 2647 assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]); | 2942 assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS]); |
| 2648 } | 2943 } |
| 2649 | 2944 |
| 2650 void test_undefinedClassBoolean_variableDeclaration() { | 2945 void test_undefinedClassBoolean_variableDeclaration() { |
| 2651 Source source = addSource(EngineTestCase.createSource(["f() { boolean v; }"]
)); | 2946 Source source = addSource("f() { boolean v; }"); |
| 2652 resolve(source); | 2947 resolve(source); |
| 2653 assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS_BOOLEAN]); | 2948 assertErrors(source, [StaticWarningCode.UNDEFINED_CLASS_BOOLEAN]); |
| 2654 } | 2949 } |
| 2655 | 2950 |
| 2656 void test_undefinedGetter_fromLibrary() { | 2951 void test_undefinedGetter_fromLibrary() { |
| 2657 Source source1 = addNamedSource("lib.dart", ""); | 2952 Source source1 = addNamedSource("lib.dart", ""); |
| 2658 Source source2 = addNamedSource("lib2.dart", EngineTestCase.createSource([ | 2953 Source source2 = addNamedSource("lib2.dart", r''' |
| 2659 "import 'lib.dart' as lib;", | 2954 import 'lib.dart' as lib; |
| 2660 "void f() {", | 2955 void f() { |
| 2661 " var g = lib.gg;", | 2956 var g = lib.gg; |
| 2662 "}"])); | 2957 }'''); |
| 2663 resolve(source1); | 2958 resolve(source1); |
| 2664 resolve(source2); | 2959 resolve(source2); |
| 2665 assertErrors(source2, [StaticWarningCode.UNDEFINED_GETTER]); | 2960 assertErrors(source2, [StaticWarningCode.UNDEFINED_GETTER]); |
| 2666 verify([source1]); | 2961 verify([source1]); |
| 2667 } | 2962 } |
| 2668 | 2963 |
| 2669 void test_undefinedIdentifier_for() { | 2964 void test_undefinedIdentifier_for() { |
| 2670 Source source = addSource(EngineTestCase.createSource(["f(var l) {", " for
(e in l) {", " }", "}"])); | 2965 Source source = addSource(r''' |
| 2966 f(var l) { |
| 2967 for (e in l) { |
| 2968 } |
| 2969 }'''); |
| 2671 resolve(source); | 2970 resolve(source); |
| 2672 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); | 2971 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); |
| 2673 } | 2972 } |
| 2674 | 2973 |
| 2675 void test_undefinedIdentifier_function() { | 2974 void test_undefinedIdentifier_function() { |
| 2676 Source source = addSource(EngineTestCase.createSource(["int a() => b;"])); | 2975 Source source = addSource("int a() => b;"); |
| 2677 resolve(source); | 2976 resolve(source); |
| 2678 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); | 2977 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); |
| 2679 } | 2978 } |
| 2680 | 2979 |
| 2681 void test_undefinedIdentifier_function_prefix() { | 2980 void test_undefinedIdentifier_function_prefix() { |
| 2682 addNamedSource("/lib.dart", EngineTestCase.createSource(["library lib;", "cl
ass C {}"])); | 2981 addNamedSource("/lib.dart", r''' |
| 2683 Source source = addSource(EngineTestCase.createSource(["import 'lib.dart' as
b;", "", "int a() => b;", "b.C c;"])); | 2982 library lib; |
| 2983 class C {}'''); |
| 2984 Source source = addSource(r''' |
| 2985 import 'lib.dart' as b; |
| 2986 |
| 2987 int a() => b; |
| 2988 b.C c;'''); |
| 2684 resolve(source); | 2989 resolve(source); |
| 2685 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); | 2990 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); |
| 2686 verify([source]); | 2991 verify([source]); |
| 2687 } | 2992 } |
| 2688 | 2993 |
| 2689 void test_undefinedIdentifier_initializer() { | 2994 void test_undefinedIdentifier_initializer() { |
| 2690 Source source = addSource(EngineTestCase.createSource(["var a = b;"])); | 2995 Source source = addSource("var a = b;"); |
| 2691 resolve(source); | 2996 resolve(source); |
| 2692 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); | 2997 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); |
| 2693 } | 2998 } |
| 2694 | 2999 |
| 2695 void test_undefinedIdentifier_initializer_prefix() { | 3000 void test_undefinedIdentifier_initializer_prefix() { |
| 2696 addNamedSource("/lib.dart", EngineTestCase.createSource(["library lib;", "cl
ass C {}"])); | 3001 addNamedSource("/lib.dart", r''' |
| 2697 Source source = addSource(EngineTestCase.createSource(["import 'lib.dart' as
b;", "", "var a = b;", "b.C c;"])); | 3002 library lib; |
| 3003 class C {}'''); |
| 3004 Source source = addSource(r''' |
| 3005 import 'lib.dart' as b; |
| 3006 |
| 3007 var a = b; |
| 3008 b.C c;'''); |
| 2698 resolve(source); | 3009 resolve(source); |
| 2699 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); | 3010 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); |
| 2700 } | 3011 } |
| 2701 | 3012 |
| 2702 void test_undefinedIdentifier_methodInvocation() { | 3013 void test_undefinedIdentifier_methodInvocation() { |
| 2703 Source source = addSource(EngineTestCase.createSource(["f() { C.m(); }"])); | 3014 Source source = addSource("f() { C.m(); }"); |
| 2704 resolve(source); | 3015 resolve(source); |
| 2705 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); | 3016 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); |
| 2706 } | 3017 } |
| 2707 | 3018 |
| 2708 void test_undefinedIdentifier_private_getter() { | 3019 void test_undefinedIdentifier_private_getter() { |
| 2709 addNamedSource("/lib.dart", EngineTestCase.createSource(["library lib;", "cl
ass A {", " var _foo;", "}"])); | 3020 addNamedSource("/lib.dart", r''' |
| 2710 Source source = addSource(EngineTestCase.createSource([ | 3021 library lib; |
| 2711 "import 'lib.dart';", | 3022 class A { |
| 2712 "class B extends A {", | 3023 var _foo; |
| 2713 " test() {", | 3024 }'''); |
| 2714 " var v = _foo;", | 3025 Source source = addSource(r''' |
| 2715 " }", | 3026 import 'lib.dart'; |
| 2716 "}"])); | 3027 class B extends A { |
| 3028 test() { |
| 3029 var v = _foo; |
| 3030 } |
| 3031 }'''); |
| 2717 resolve(source); | 3032 resolve(source); |
| 2718 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); | 3033 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); |
| 2719 } | 3034 } |
| 2720 | 3035 |
| 2721 void test_undefinedIdentifier_private_setter() { | 3036 void test_undefinedIdentifier_private_setter() { |
| 2722 addNamedSource("/lib.dart", EngineTestCase.createSource(["library lib;", "cl
ass A {", " var _foo;", "}"])); | 3037 addNamedSource("/lib.dart", r''' |
| 2723 Source source = addSource(EngineTestCase.createSource([ | 3038 library lib; |
| 2724 "import 'lib.dart';", | 3039 class A { |
| 2725 "class B extends A {", | 3040 var _foo; |
| 2726 " test() {", | 3041 }'''); |
| 2727 " _foo = 42;", | 3042 Source source = addSource(r''' |
| 2728 " }", | 3043 import 'lib.dart'; |
| 2729 "}"])); | 3044 class B extends A { |
| 3045 test() { |
| 3046 _foo = 42; |
| 3047 } |
| 3048 }'''); |
| 2730 resolve(source); | 3049 resolve(source); |
| 2731 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); | 3050 assertErrors(source, [StaticWarningCode.UNDEFINED_IDENTIFIER]); |
| 2732 } | 3051 } |
| 2733 | 3052 |
| 2734 void test_undefinedNamedParameter() { | 3053 void test_undefinedNamedParameter() { |
| 2735 Source source = addSource(EngineTestCase.createSource(["f({a, b}) {}", "main
() {", " f(c: 1);", "}"])); | 3054 Source source = addSource(r''' |
| 3055 f({a, b}) {} |
| 3056 main() { |
| 3057 f(c: 1); |
| 3058 }'''); |
| 2736 resolve(source); | 3059 resolve(source); |
| 2737 assertErrors(source, [StaticWarningCode.UNDEFINED_NAMED_PARAMETER]); | 3060 assertErrors(source, [StaticWarningCode.UNDEFINED_NAMED_PARAMETER]); |
| 2738 // no verify(), 'c' is not resolved | 3061 // no verify(), 'c' is not resolved |
| 2739 } | 3062 } |
| 2740 | 3063 |
| 2741 void test_undefinedSetter() { | 3064 void test_undefinedSetter() { |
| 2742 Source source1 = addNamedSource("lib.dart", ""); | 3065 Source source1 = addNamedSource("lib.dart", ""); |
| 2743 Source source2 = addNamedSource("lib2.dart", EngineTestCase.createSource([ | 3066 Source source2 = addNamedSource("lib2.dart", r''' |
| 2744 "import 'lib.dart' as lib;", | 3067 import 'lib.dart' as lib; |
| 2745 "void f() {", | 3068 void f() { |
| 2746 " lib.gg = null;", | 3069 lib.gg = null; |
| 2747 "}"])); | 3070 }'''); |
| 2748 resolve(source1); | 3071 resolve(source1); |
| 2749 resolve(source2); | 3072 resolve(source2); |
| 2750 assertErrors(source2, [StaticWarningCode.UNDEFINED_SETTER]); | 3073 assertErrors(source2, [StaticWarningCode.UNDEFINED_SETTER]); |
| 2751 } | 3074 } |
| 2752 | 3075 |
| 2753 void test_undefinedStaticMethodOrGetter_getter() { | 3076 void test_undefinedStaticMethodOrGetter_getter() { |
| 2754 Source source = addSource(EngineTestCase.createSource(["class C {}", "f(var
p) {", " f(C.m);", "}"])); | 3077 Source source = addSource(r''' |
| 3078 class C {} |
| 3079 f(var p) { |
| 3080 f(C.m); |
| 3081 }'''); |
| 2755 resolve(source); | 3082 resolve(source); |
| 2756 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]); | 3083 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]); |
| 2757 } | 3084 } |
| 2758 | 3085 |
| 2759 void test_undefinedStaticMethodOrGetter_getter_inSuperclass() { | 3086 void test_undefinedStaticMethodOrGetter_getter_inSuperclass() { |
| 2760 Source source = addSource(EngineTestCase.createSource([ | 3087 Source source = addSource(r''' |
| 2761 "class S {", | 3088 class S { |
| 2762 " static int get g => 0;", | 3089 static int get g => 0; |
| 2763 "}", | 3090 } |
| 2764 "class C extends S {}", | 3091 class C extends S {} |
| 2765 "f(var p) {", | 3092 f(var p) { |
| 2766 " f(C.g);", | 3093 f(C.g); |
| 2767 "}"])); | 3094 }'''); |
| 2768 resolve(source); | 3095 resolve(source); |
| 2769 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]); | 3096 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_GETTER]); |
| 2770 } | 3097 } |
| 2771 | 3098 |
| 2772 void test_undefinedStaticMethodOrGetter_method() { | 3099 void test_undefinedStaticMethodOrGetter_method() { |
| 2773 Source source = addSource(EngineTestCase.createSource(["class C {}", "f(var
p) {", " f(C.m());", "}"])); | 3100 Source source = addSource(r''' |
| 3101 class C {} |
| 3102 f(var p) { |
| 3103 f(C.m()); |
| 3104 }'''); |
| 2774 resolve(source); | 3105 resolve(source); |
| 2775 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]); | 3106 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]); |
| 2776 } | 3107 } |
| 2777 | 3108 |
| 2778 void test_undefinedStaticMethodOrGetter_method_inSuperclass() { | 3109 void test_undefinedStaticMethodOrGetter_method_inSuperclass() { |
| 2779 Source source = addSource(EngineTestCase.createSource([ | 3110 Source source = addSource(r''' |
| 2780 "class S {", | 3111 class S { |
| 2781 " static m() {}", | 3112 static m() {} |
| 2782 "}", | 3113 } |
| 2783 "class C extends S {}", | 3114 class C extends S {} |
| 2784 "f(var p) {", | 3115 f(var p) { |
| 2785 " f(C.m());", | 3116 f(C.m()); |
| 2786 "}"])); | 3117 }'''); |
| 2787 resolve(source); | 3118 resolve(source); |
| 2788 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]); | 3119 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_METHOD]); |
| 2789 } | 3120 } |
| 2790 | 3121 |
| 2791 void test_undefinedStaticMethodOrGetter_setter_inSuperclass() { | 3122 void test_undefinedStaticMethodOrGetter_setter_inSuperclass() { |
| 2792 Source source = addSource(EngineTestCase.createSource([ | 3123 Source source = addSource(r''' |
| 2793 "class S {", | 3124 class S { |
| 2794 " static set s(int i) {}", | 3125 static set s(int i) {} |
| 2795 "}", | 3126 } |
| 2796 "class C extends S {}", | 3127 class C extends S {} |
| 2797 "f(var p) {", | 3128 f(var p) { |
| 2798 " f(C.s = 1);", | 3129 f(C.s = 1); |
| 2799 "}"])); | 3130 }'''); |
| 2800 resolve(source); | 3131 resolve(source); |
| 2801 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]); | 3132 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_SETTER]); |
| 2802 } | 3133 } |
| 2803 | 3134 |
| 2804 void test_voidReturnForGetter() { | 3135 void test_voidReturnForGetter() { |
| 2805 Source source = addSource(EngineTestCase.createSource(["class S {", " void
get value {}", "}"])); | 3136 Source source = addSource(r''' |
| 3137 class S { |
| 3138 void get value {} |
| 3139 }'''); |
| 2806 resolve(source); | 3140 resolve(source); |
| 2807 assertErrors(source, [StaticWarningCode.VOID_RETURN_FOR_GETTER]); | 3141 assertErrors(source, [StaticWarningCode.VOID_RETURN_FOR_GETTER]); |
| 2808 } | 3142 } |
| 2809 } | 3143 } |
| 2810 | 3144 |
| 2811 main() { | 3145 main() { |
| 2812 _ut.groupSep = ' | '; | 3146 _ut.groupSep = ' | '; |
| 2813 runReflectiveTests(StaticWarningCodeTest); | 3147 runReflectiveTests(StaticWarningCodeTest); |
| 2814 } | 3148 } |
| OLD | NEW |