| // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:analyzer/src/error/codes.dart'; |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| |
| import '../dart/resolution/context_collection_resolution.dart'; |
| |
| main() { |
| defineReflectiveSuite(() { |
| defineReflectiveTests(AssignmentOfDoNotStoreTest); |
| }); |
| } |
| |
| @reflectiveTest |
| class AssignmentOfDoNotStoreTest extends PubPackageResolutionTest { |
| @override |
| void setUp() { |
| super.setUp(); |
| writeTestPackageConfigWithMeta(); |
| } |
| |
| test_classMemberGetter() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| class A { |
| @doNotStore |
| String get v => ''; |
| } |
| |
| class B { |
| String f = A().v; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 106, 5, |
| messageContains: "'v'"), |
| ]); |
| } |
| |
| test_classMemberVariable() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| class A{ |
| @doNotStore |
| final f = ''; |
| } |
| |
| class B { |
| String f = A().f; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 99, 5), |
| ]); |
| } |
| |
| test_classStaticGetter() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| class A { |
| @doNotStore |
| static String get v => ''; |
| } |
| |
| class B { |
| String f = A.v; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 113, 3), |
| ]); |
| } |
| |
| test_classStaticVariable() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| class A{ |
| @doNotStore |
| static final f = ''; |
| } |
| |
| class B { |
| String f = A.f; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 106, 3), |
| ]); |
| } |
| |
| test_functionAssignment() async { |
| await assertNoErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| @doNotStore |
| String g(int i) => ''; |
| |
| class C { |
| String Function(int) f = g; |
| } |
| '''); |
| } |
| |
| test_functionReturnValue() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| @doNotStore |
| String getV() => ''; |
| |
| class A { |
| final f = getV(); |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 90, 6), |
| ]); |
| } |
| |
| test_methodReturnValue() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| class A { |
| @doNotStore |
| String getV() => ''; |
| } |
| |
| class B { |
| final f = A().getV(); |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 106, 10), |
| ]); |
| } |
| |
| test_tearOff() async { |
| await assertNoErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| @doNotStore |
| String getV() => ''; |
| |
| class A { |
| final f = getV; |
| } |
| '''); |
| } |
| |
| test_topLevelGetter() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| @doNotStore |
| String get v => ''; |
| |
| class A { |
| final f = v; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 89, 1), |
| ]); |
| } |
| |
| test_topLevelVariable() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| @doNotStore |
| final v = ''; |
| |
| class A { |
| final f = v; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 83, 1), |
| ]); |
| } |
| |
| test_topLevelVariable_assignment_field() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| String top = A().f; |
| |
| class A{ |
| @doNotStore |
| final f = ''; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 47, 5, messageContains: "'f'"), |
| ]); |
| } |
| |
| test_topLevelVariable_assignment_functionExpression() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| @doNotStore |
| String _v = ''; |
| |
| var c = ()=> _v; |
| |
| String v = c(); |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 76, 2), |
| ]); |
| } |
| |
| test_topLevelVariable_assignment_getter() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| String top = v; |
| |
| @doNotStore |
| String get v => ''; |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 47, 1, messageContains: "'v'"), |
| ]); |
| } |
| |
| test_topLevelVariable_assignment_method() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| String top = A().v(); |
| |
| class A{ |
| @doNotStore |
| String v() => ''; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 47, 7, messageContains: "'v'"), |
| ]); |
| } |
| |
| test_topLevelVariable_binaryExpression() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| @doNotStore |
| final v = ''; |
| |
| class A { |
| final f = v ?? v; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 83, 1), |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 88, 1), |
| ]); |
| } |
| |
| test_topLevelVariable_libraryAnnotation() async { |
| newFile('$testPackageLibPath/library.dart', content: ''' |
| @doNotStore |
| library lib; |
| |
| import 'package:meta/meta.dart'; |
| |
| final v = ''; |
| '''); |
| |
| await assertErrorsInCode(''' |
| import 'library.dart'; |
| |
| class A { |
| final f = v; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 46, 1), |
| ]); |
| } |
| |
| test_topLevelVariable_ternary() async { |
| await assertErrorsInCode(''' |
| import 'package:meta/meta.dart'; |
| |
| @doNotStore |
| final v = ''; |
| |
| class A { |
| static bool c = false; |
| final f = c ? v : v; |
| } |
| ''', [ |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 112, 1), |
| error(HintCode.ASSIGNMENT_OF_DO_NOT_STORE, 116, 1), |
| ]); |
| } |
| } |