Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: pkg/analyzer/test/src/task/strong/checker_test.dart

Issue 2362563004: re-land fix #27110 with proper DDC side of changes (Closed)
Patch Set: add tests Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 analyzer.test.src.task.strong.checker_test; 5 library analyzer.test.src.task.strong.checker_test;
6 6
7 import 'package:test_reflective_loader/test_reflective_loader.dart'; 7 import 'package:test_reflective_loader/test_reflective_loader.dart';
8 8
9 import 'strong_test_helper.dart'; 9 import 'strong_test_helper.dart';
10 10
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 } 258 }
259 259
260 class B { 260 class B {
261 A operator -(B b) => null; 261 A operator -(B b) => null;
262 } 262 }
263 263
264 class D { 264 class D {
265 D operator +(D d) => null; 265 D operator +(D d) => null;
266 } 266 }
267 267
268 class SubA extends A {}
269 class SubSubA extends SubA {}
270
268 foo() => new A(); 271 foo() => new A();
269 272
270 test() { 273 test() {
271 int x = 0; 274 int x = 0;
272 x += 5; 275 x += 5;
273 /*error:STATIC_TYPE_ERROR*/x += /*error:INVALID_ASSIGNMENT*/3.14; 276 x += /*error:INVALID_ASSIGNMENT*/3.14;
274 277
275 double y = 0.0; 278 double y = 0.0;
276 y += 5; 279 y += 5;
277 y += 3.14; 280 y += 3.14;
278 281
279 num z = 0; 282 num z = 0;
280 z += 5; 283 z += 5;
281 z += 3.14; 284 z += 3.14;
282 285
283 x = /*info:DOWN_CAST_IMPLICIT*/x + z; 286 x = /*info:DOWN_CAST_IMPLICIT*/x + z;
284 x += /*info:DOWN_CAST_IMPLICIT*/z; 287 /*info:DOWN_CAST_IMPLICIT_ASSIGN*/x += z;
285 y = y + z; 288 y = y + z;
286 y += z; 289 y += z;
287 290
288 dynamic w = 42; 291 dynamic w = 42;
289 x += /*info:DYNAMIC_CAST*/w; 292 /*info:DOWN_CAST_IMPLICIT_ASSIGN*/x += /*info:DYNAMIC_CAST*/w;
290 y += /*info:DYNAMIC_CAST*/w; 293 y += /*info:DYNAMIC_CAST*/w;
291 z += /*info:DYNAMIC_CAST*/w; 294 z += /*info:DYNAMIC_CAST*/w;
292 295
293 A a = new A(); 296 A a = new A();
294 B b = new B(); 297 B b = new B();
295 var c = foo(); 298 var c = foo();
296 a = a * b; 299 a = a * b;
297 a *= b; 300 a *= b;
298 a *= /*info:DYNAMIC_CAST*/c; 301 a *= /*info:DYNAMIC_CAST*/c;
299 a /= b; 302 a /= b;
300 a ~/= b; 303 a ~/= b;
301 a %= b; 304 a %= b;
302 a += b; 305 a += b;
303 a += /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a; 306 a += /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a;
304 a -= b; 307 a -= b;
305 /*error:STATIC_TYPE_ERROR*/b -= /*error:INVALID_ASSIGNMENT*/b; 308 b -= /*error:INVALID_ASSIGNMENT*/b;
306 a <<= b; 309 a <<= b;
307 a >>= b; 310 a >>= b;
308 a &= b; 311 a &= b;
309 a ^= b; 312 a ^= b;
310 a |= b; 313 a |= b;
311 /*info:DYNAMIC_INVOKE*/c += b; 314 /*info:DYNAMIC_INVOKE*/c += b;
312 315
316 SubA sa;
317 /*info:DOWN_CAST_IMPLICIT_ASSIGN*/sa += b;
318 SubSubA ssa = /*info:ASSIGNMENT_CAST,info:DOWN_CAST_IMPLICIT_ASSIGN*/sa += b;
319
313 var d = new D(); 320 var d = new D();
314 a[b] += d; 321 a[b] += d;
315 a[/*info:DYNAMIC_CAST*/c] += d; 322 a[/*info:DYNAMIC_CAST*/c] += d;
316 a[/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z] += d; 323 a[/*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z] += d;
317 a[b] += /*info:DYNAMIC_CAST*/c; 324 a[b] += /*info:DYNAMIC_CAST*/c;
318 a[b] += /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z; 325 a[b] += /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/z;
319 /*info:DYNAMIC_INVOKE,info:DYNAMIC_INVOKE*/c[b] += d; 326 /*info:DYNAMIC_INVOKE,info:DYNAMIC_INVOKE*/c[b] += d;
320 } 327 }
321 '''); 328 ''');
322 } 329 }
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 final List<Q> list = /*info:INFERRED_TYPE_LITERAL*/const []; 373 final List<Q> list = /*info:INFERRED_TYPE_LITERAL*/const [];
367 final Map<Q, Iterable<Q>> m = /*info:INFERRED_TYPE_LITERAL*/const {}; 374 final Map<Q, Iterable<Q>> m = /*info:INFERRED_TYPE_LITERAL*/const {};
368 const C(); 375 const C();
369 } 376 }
370 main() { 377 main() {
371 const SetEquality<String>(); 378 const SetEquality<String>();
372 } 379 }
373 '''); 380 ''');
374 } 381 }
375 382
383 void test_compoundAssignment_returnsDynamic() {
384 checkFile(r'''
385 class Foo {
386 operator +(other) => null;
387 }
388
389 main() {
390 var foo = new Foo();
391 foo = /*info:DYNAMIC_CAST*/foo + 1;
392 /*info:DYNAMIC_CAST*/foo += 1;
393 }
394 ''');
395 }
396
376 void test_constructorInvalid() { 397 void test_constructorInvalid() {
377 // Regression test for https://github.com/dart-lang/sdk/issues/26695 398 // Regression test for https://github.com/dart-lang/sdk/issues/26695
378 checkFile(''' 399 checkFile('''
379 class A { 400 class A {
380 B({ /*error:FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR*/this.test: 1.0 }) {} 401 B({ /*error:FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR*/this.test: 1.0 }) {}
381 final double test = 0.0; 402 final double test = 0.0;
382 } 403 }
383 '''); 404 ''');
384 } 405 }
385 406
(...skipping 3452 matching lines...) Expand 10 before | Expand all | Expand 10 after
3838 } 3859 }
3839 3860
3840 void test_unaryOperators() { 3861 void test_unaryOperators() {
3841 checkFile(''' 3862 checkFile('''
3842 class A { 3863 class A {
3843 A operator ~() => null; 3864 A operator ~() => null;
3844 A operator +(int x) => null; 3865 A operator +(int x) => null;
3845 A operator -(int x) => null; 3866 A operator -(int x) => null;
3846 A operator -() => null; 3867 A operator -() => null;
3847 } 3868 }
3869 class B extends A {}
3870 class C extends B {}
3848 3871
3849 foo() => new A(); 3872 foo() => new A();
3850 3873
3851 test() { 3874 test() {
3852 A a = new A(); 3875 A a = new A();
3876 B b = new B();
3853 var c = foo(); 3877 var c = foo();
3854 dynamic d; 3878 dynamic d;
3855 3879
3856 ~a; 3880 ~a;
3857 (/*info:DYNAMIC_INVOKE*/~d); 3881 (/*info:DYNAMIC_INVOKE*/~d);
3858 3882
3859 !/*error:NON_BOOL_NEGATION_EXPRESSION*/a; 3883 !/*error:NON_BOOL_NEGATION_EXPRESSION*/a;
3860 !/*info:DYNAMIC_CAST*/d; 3884 !/*info:DYNAMIC_CAST*/d;
3861 3885
3862 -a; 3886 -a;
3863 (/*info:DYNAMIC_INVOKE*/-d); 3887 (/*info:DYNAMIC_INVOKE*/-d);
3864 3888
3865 ++a; 3889 ++a;
3866 --a; 3890 --a;
3867 (/*info:DYNAMIC_INVOKE*/++d); 3891 (/*info:DYNAMIC_INVOKE*/++d);
3868 (/*info:DYNAMIC_INVOKE*/--d); 3892 (/*info:DYNAMIC_INVOKE*/--d);
3869 3893
3870 a++; 3894 a++;
3871 a--; 3895 a--;
3872 (/*info:DYNAMIC_INVOKE*/d++); 3896 (/*info:DYNAMIC_INVOKE*/d++);
3873 (/*info:DYNAMIC_INVOKE*/d--); 3897 (/*info:DYNAMIC_INVOKE*/d--);
3898
3899 ++/*info:DOWN_CAST_IMPLICIT_ASSIGN*/b;
3900 --/*info:DOWN_CAST_IMPLICIT_ASSIGN*/b;
3901 /*info:DOWN_CAST_IMPLICIT_ASSIGN*/b++;
3902 /*info:DOWN_CAST_IMPLICIT_ASSIGN*/b--;
3903
3904 takesC(C c) => null;
3905 takesC(/*info:DOWN_CAST_IMPLICIT*/++/*info:DOWN_CAST_IMPLICIT_ASSIGN*/b);
3906 takesC(/*info:DOWN_CAST_IMPLICIT*/--/*info:DOWN_CAST_IMPLICIT_ASSIGN*/b);
3907 takesC(/*info:DOWN_CAST_IMPLICIT,info:DOWN_CAST_IMPLICIT_ASSIGN*/b++);
3908 takesC(/*info:DOWN_CAST_IMPLICIT,info:DOWN_CAST_IMPLICIT_ASSIGN*/b--);
3874 }'''); 3909 }''');
3875 } 3910 }
3876 3911
3877 void test_unboundRedirectingConstructor() { 3912 void test_unboundRedirectingConstructor() {
3878 // This is a regression test for https://github.com/dart-lang/sdk/issues/250 71 3913 // This is a regression test for https://github.com/dart-lang/sdk/issues/250 71
3879 checkFile(''' 3914 checkFile('''
3880 class Foo { 3915 class Foo {
3881 Foo() : /*error:REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR*/this.init(); 3916 Foo() : /*error:REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR*/this.init();
3882 } 3917 }
3883 '''); 3918 ''');
(...skipping 30 matching lines...) Expand all
3914 void _addMetaLibrary() { 3949 void _addMetaLibrary() {
3915 addFile(r''' 3950 addFile(r'''
3916 library meta; 3951 library meta;
3917 class _Checked { const _Checked(); } 3952 class _Checked { const _Checked(); }
3918 const Object checked = const _Checked(); 3953 const Object checked = const _Checked();
3919 3954
3920 class _Virtual { const _Virtual(); } 3955 class _Virtual { const _Virtual(); }
3921 const Object virtual = const _Virtual(); 3956 const Object virtual = const _Virtual();
3922 ''', name: '/meta.dart'); 3957 ''', name: '/meta.dart');
3923 } 3958 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/task/strong/checker.dart ('k') | pkg/analyzer/test/src/task/strong/non_null_checker_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698