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

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: fix pre/postifx ops Created 4 years, 3 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 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 foo() => new A(); 268 foo() => new A();
269 269
270 test() { 270 test() {
271 int x = 0; 271 int x = 0;
272 x += 5; 272 x += 5;
273 /*error:STATIC_TYPE_ERROR*/x += /*error:INVALID_ASSIGNMENT*/3.14; 273 x += /*error:INVALID_ASSIGNMENT*/3.14;
274 274
275 double y = 0.0; 275 double y = 0.0;
276 y += 5; 276 y += 5;
277 y += 3.14; 277 y += 3.14;
278 278
279 num z = 0; 279 num z = 0;
280 z += 5; 280 z += 5;
281 z += 3.14; 281 z += 3.14;
282 282
283 x = /*info:DOWN_CAST_IMPLICIT*/x + z; 283 x = /*info:DOWN_CAST_IMPLICIT*/x + z;
284 x += /*info:DOWN_CAST_IMPLICIT*/z; 284 /*info:DOWN_CAST_IMPLICIT_ASSIGN*/x += z;
285 y = y + z; 285 y = y + z;
286 y += z; 286 y += z;
287 287
288 dynamic w = 42; 288 dynamic w = 42;
289 x += /*info:DYNAMIC_CAST*/w; 289 /*info:DOWN_CAST_IMPLICIT_ASSIGN*/x += /*info:DYNAMIC_CAST*/w;
290 y += /*info:DYNAMIC_CAST*/w; 290 y += /*info:DYNAMIC_CAST*/w;
291 z += /*info:DYNAMIC_CAST*/w; 291 z += /*info:DYNAMIC_CAST*/w;
292 292
293 A a = new A(); 293 A a = new A();
294 B b = new B(); 294 B b = new B();
295 var c = foo(); 295 var c = foo();
296 a = a * b; 296 a = a * b;
297 a *= b; 297 a *= b;
298 a *= /*info:DYNAMIC_CAST*/c; 298 a *= /*info:DYNAMIC_CAST*/c;
299 a /= b; 299 a /= b;
300 a ~/= b; 300 a ~/= b;
301 a %= b; 301 a %= b;
302 a += b; 302 a += b;
303 a += /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a; 303 a += /*error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/a;
304 a -= b; 304 a -= b;
305 /*error:STATIC_TYPE_ERROR*/b -= /*error:INVALID_ASSIGNMENT*/b; 305 b -= /*error:INVALID_ASSIGNMENT*/b;
306 a <<= b; 306 a <<= b;
307 a >>= b; 307 a >>= b;
308 a &= b; 308 a &= b;
309 a ^= b; 309 a ^= b;
310 a |= b; 310 a |= b;
311 /*info:DYNAMIC_INVOKE*/c += b; 311 /*info:DYNAMIC_INVOKE*/c += b;
312 312
313 var d = new D(); 313 var d = new D();
314 a[b] += d; 314 a[b] += d;
315 a[/*info:DYNAMIC_CAST*/c] += d; 315 a[/*info:DYNAMIC_CAST*/c] += d;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 final List<Q> list = /*info:INFERRED_TYPE_LITERAL*/const []; 366 final List<Q> list = /*info:INFERRED_TYPE_LITERAL*/const [];
367 final Map<Q, Iterable<Q>> m = /*info:INFERRED_TYPE_LITERAL*/const {}; 367 final Map<Q, Iterable<Q>> m = /*info:INFERRED_TYPE_LITERAL*/const {};
368 const C(); 368 const C();
369 } 369 }
370 main() { 370 main() {
371 const SetEquality<String>(); 371 const SetEquality<String>();
372 } 372 }
373 '''); 373 ''');
374 } 374 }
375 375
376 void test_compoundAssignment_returnsDynamic() {
377 checkFile(r'''
378 class Foo {
379 operator +(other) => null;
380 }
381
382 main() {
383 var foo = new Foo();
384 foo = /*info:DYNAMIC_CAST*/foo + 1;
385 /*info:DYNAMIC_CAST*/foo += 1;
386 }
387 ''');
388 }
389
376 void test_constructorInvalid() { 390 void test_constructorInvalid() {
377 // Regression test for https://github.com/dart-lang/sdk/issues/26695 391 // Regression test for https://github.com/dart-lang/sdk/issues/26695
378 checkFile(''' 392 checkFile('''
379 class A { 393 class A {
380 B({ /*error:FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR*/this.test: 1.0 }) {} 394 B({ /*error:FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR*/this.test: 1.0 }) {}
381 final double test = 0.0; 395 final double test = 0.0;
382 } 396 }
383 '''); 397 ''');
384 } 398 }
385 399
(...skipping 3452 matching lines...) Expand 10 before | Expand all | Expand 10 after
3838 } 3852 }
3839 3853
3840 void test_unaryOperators() { 3854 void test_unaryOperators() {
3841 checkFile(''' 3855 checkFile('''
3842 class A { 3856 class A {
3843 A operator ~() => null; 3857 A operator ~() => null;
3844 A operator +(int x) => null; 3858 A operator +(int x) => null;
3845 A operator -(int x) => null; 3859 A operator -(int x) => null;
3846 A operator -() => null; 3860 A operator -() => null;
3847 } 3861 }
3862 class B extends A {}
3848 3863
3849 foo() => new A(); 3864 foo() => new A();
3850 3865
3851 test() { 3866 test() {
3852 A a = new A(); 3867 A a = new A();
3868 B b = new B();
3853 var c = foo(); 3869 var c = foo();
3854 dynamic d; 3870 dynamic d;
3855 3871
3856 ~a; 3872 ~a;
3857 (/*info:DYNAMIC_INVOKE*/~d); 3873 (/*info:DYNAMIC_INVOKE*/~d);
3858 3874
3859 !/*error:NON_BOOL_NEGATION_EXPRESSION*/a; 3875 !/*error:NON_BOOL_NEGATION_EXPRESSION*/a;
3860 !/*info:DYNAMIC_CAST*/d; 3876 !/*info:DYNAMIC_CAST*/d;
3861 3877
3862 -a; 3878 -a;
3863 (/*info:DYNAMIC_INVOKE*/-d); 3879 (/*info:DYNAMIC_INVOKE*/-d);
3864 3880
3865 ++a; 3881 ++a;
3866 --a; 3882 --a;
3867 (/*info:DYNAMIC_INVOKE*/++d); 3883 (/*info:DYNAMIC_INVOKE*/++d);
3868 (/*info:DYNAMIC_INVOKE*/--d); 3884 (/*info:DYNAMIC_INVOKE*/--d);
3869 3885
3870 a++; 3886 a++;
3871 a--; 3887 a--;
3872 (/*info:DYNAMIC_INVOKE*/d++); 3888 (/*info:DYNAMIC_INVOKE*/d++);
3873 (/*info:DYNAMIC_INVOKE*/d--); 3889 (/*info:DYNAMIC_INVOKE*/d--);
3890
3891 ++/*info:DOWN_CAST_IMPLICIT_ASSIGN*/b;
3892 --/*info:DOWN_CAST_IMPLICIT_ASSIGN*/b;
3893 /*info:DOWN_CAST_IMPLICIT_ASSIGN*/b++;
3894 /*info:DOWN_CAST_IMPLICIT_ASSIGN*/b--;
Leaf 2016/09/22 22:30:17 Maybe test the case where we are assigning the res
Jennifer Messerly 2016/09/22 22:32:19 great idea! Adding.
3874 }'''); 3895 }''');
3875 } 3896 }
3876 3897
3877 void test_unboundRedirectingConstructor() { 3898 void test_unboundRedirectingConstructor() {
3878 // This is a regression test for https://github.com/dart-lang/sdk/issues/250 71 3899 // This is a regression test for https://github.com/dart-lang/sdk/issues/250 71
3879 checkFile(''' 3900 checkFile('''
3880 class Foo { 3901 class Foo {
3881 Foo() : /*error:REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR*/this.init(); 3902 Foo() : /*error:REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR*/this.init();
3882 } 3903 }
3883 '''); 3904 ''');
(...skipping 30 matching lines...) Expand all
3914 void _addMetaLibrary() { 3935 void _addMetaLibrary() {
3915 addFile(r''' 3936 addFile(r'''
3916 library meta; 3937 library meta;
3917 class _Checked { const _Checked(); } 3938 class _Checked { const _Checked(); }
3918 const Object checked = const _Checked(); 3939 const Object checked = const _Checked();
3919 3940
3920 class _Virtual { const _Virtual(); } 3941 class _Virtual { const _Virtual(); }
3921 const Object virtual = const _Virtual(); 3942 const Object virtual = const _Virtual();
3922 ''', name: '/meta.dart'); 3943 ''', name: '/meta.dart');
3923 } 3944 }
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