| // 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/context/packages.dart'; |
| import 'package:analyzer/src/dart/analysis/experiments.dart'; |
| import 'package:analyzer/src/dart/ast/ast.dart'; |
| import 'package:analyzer/src/dart/error/hint_codes.dart'; |
| import 'package:meta/meta.dart'; |
| import 'package:pub_semver/pub_semver.dart'; |
| import 'package:test/test.dart'; |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| |
| import '../dart/constant/potentially_constant_test.dart'; |
| import '../dart/resolution/driver_resolution.dart'; |
| |
| main() { |
| defineReflectiveSuite(() { |
| defineReflectiveTests(InvalidLanguageOverrideGreaterTest); |
| }); |
| } |
| |
| @reflectiveTest |
| class InvalidLanguageOverrideGreaterTest extends DriverResolutionTest |
| with WithNullSafetyMixin { |
| test_greaterThanLatest() async { |
| var latestVersion = ExperimentStatus.currentVersion; |
| await assertErrorsInCode(''' |
| // @dart = ${latestVersion.major}.${latestVersion.minor + 1} |
| class A {} |
| ''', [ |
| error(HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER, 0, 15), |
| ]); |
| _assertUnitLanguageVersion( |
| package: latestVersion, |
| override: null, |
| ); |
| } |
| |
| test_greaterThanPackage() async { |
| _configureTestPackageLanguageVersion('2.5'); |
| await assertNoErrorsInCode(r''' |
| // @dart = 2.9 |
| int? a; |
| '''); |
| _assertUnitLanguageVersion( |
| package: Version.parse('2.5.0'), |
| override: Version.parse('2.9.0'), |
| ); |
| } |
| |
| test_lessThanPackage() async { |
| _configureTestPackageLanguageVersion('2.5'); |
| await assertNoErrorsInCode(r''' |
| // @dart = 2.4 |
| class A {} |
| '''); |
| _assertUnitLanguageVersion( |
| package: Version.parse('2.5.0'), |
| override: Version.parse('2.4.0'), |
| ); |
| } |
| |
| void _assertUnitLanguageVersion({ |
| @required Version package, |
| @required Version override, |
| }) { |
| var unitImpl = result.unit as CompilationUnitImpl; |
| var languageVersion = unitImpl.languageVersion; |
| expect(languageVersion.package, package); |
| expect(languageVersion.override, override); |
| } |
| |
| void _configureTestPackageLanguageVersion(String versionStr) { |
| driver.configure( |
| packages: Packages({ |
| 'test': Package( |
| name: 'test', |
| rootFolder: getFolder('/test'), |
| libFolder: getFolder('/test/lib'), |
| languageVersion: Version.parse(versionStr + '.0'), |
| ), |
| }), |
| ); |
| } |
| } |