| // Copyright (c) 2014, 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:analysis_server/src/protocol_server.dart' hide Element; |
| import 'package:analysis_server/src/services/correction/status.dart'; |
| import 'package:analysis_server/src/services/search/search_engine.dart'; |
| import 'package:analysis_server/src/services/search/search_engine_internal.dart'; |
| import 'package:analyzer/src/generated/source.dart'; |
| import 'package:analyzer_plugin/utilities/range_factory.dart'; |
| import 'package:test/test.dart'; |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| |
| import '../../abstract_single_unit.dart'; |
| |
| void main() { |
| defineReflectiveSuite(() { |
| defineReflectiveTests(RefactoringLocationTest); |
| defineReflectiveTests(RefactoringStatusTest); |
| }); |
| } |
| |
| @reflectiveTest |
| class RefactoringLocationTest extends AbstractSingleUnitTest { |
| Future<void> test_createLocation_forElement() async { |
| await resolveTestCode('class MyClass {}'); |
| var element = findElement.class_('MyClass'); |
| // check |
| var location = newLocation_fromElement(element)!; |
| expect(location.file, testFile); |
| expect(location.offset, 6); |
| expect(location.length, 7); |
| expect(location.startLine, 1); |
| expect(location.startColumn, 7); |
| } |
| |
| Future<void> test_createLocation_forMatch() async { |
| await resolveTestCode('class MyClass {}'); |
| var element = findElement.class_('MyClass'); |
| var sourceRange = range.elementName(element); |
| SearchMatch match = SearchMatchImpl( |
| element.source.fullName, |
| element.library.source, |
| element.source, |
| element.library, |
| element, |
| true, |
| false, |
| MatchKind.DECLARATION, |
| sourceRange); |
| // check |
| var location = newLocation_fromMatch(match); |
| expect(location.file, testFile); |
| expect(location.offset, sourceRange.offset); |
| expect(location.length, sourceRange.length); |
| } |
| |
| Future<void> test_createLocation_forNode() async { |
| await resolveTestCode(''' |
| main() { |
| } |
| '''); |
| var node = findNode.simple('main'); |
| // check |
| var location = newLocation_fromNode(node); |
| expect(location.file, testFile); |
| expect(location.offset, node.offset); |
| expect(location.length, node.length); |
| } |
| |
| Future<void> test_createLocation_forUnit() async { |
| await resolveTestCode(''); |
| var sourceRange = SourceRange(10, 20); |
| // check |
| var location = newLocation_fromUnit(testUnit, sourceRange); |
| expect(location.file, testFile); |
| expect(location.offset, sourceRange.offset); |
| expect(location.length, sourceRange.length); |
| } |
| } |
| |
| @reflectiveTest |
| class RefactoringStatusTest { |
| void test_addError() { |
| var refactoringStatus = RefactoringStatus(); |
| // initial state |
| expect(refactoringStatus.severity, null); |
| // add ERROR |
| refactoringStatus.addError('msg'); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.ERROR); |
| expect(refactoringStatus.isOK, isFalse); |
| expect(refactoringStatus.hasFatalError, isFalse); |
| expect(refactoringStatus.hasError, isTrue); |
| // problems |
| var problems = refactoringStatus.problems; |
| expect(problems, hasLength(1)); |
| expect(problems[0].message, 'msg'); |
| } |
| |
| void test_addFatalError_withLocation() { |
| var location = Location('/test.dart', 1, 2, 3, 4, endLine: 5, endColumn: 6); |
| var refactoringStatus = RefactoringStatus(); |
| // initial state |
| expect(refactoringStatus.severity, null); |
| // add FATAL |
| refactoringStatus.addFatalError('msg', location); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.FATAL); |
| expect(refactoringStatus.isOK, isFalse); |
| expect(refactoringStatus.hasFatalError, isTrue); |
| expect(refactoringStatus.hasError, isTrue); |
| // problems |
| var problems = refactoringStatus.problems; |
| expect(problems, hasLength(1)); |
| expect(problems[0].message, 'msg'); |
| var problemLocation = problems[0].location!; |
| expect(problemLocation.file, '/test.dart'); |
| expect(problemLocation.offset, 1); |
| expect(problemLocation.length, 2); |
| // add WARNING, resulting severity is still FATAL |
| refactoringStatus.addWarning('warning'); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.FATAL); |
| } |
| |
| void test_addFatalError_withoutContext() { |
| var refactoringStatus = RefactoringStatus(); |
| // initial state |
| expect(refactoringStatus.severity, null); |
| // add FATAL |
| refactoringStatus.addFatalError('msg'); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.FATAL); |
| expect(refactoringStatus.isOK, isFalse); |
| expect(refactoringStatus.hasFatalError, isTrue); |
| expect(refactoringStatus.hasError, isTrue); |
| // problems |
| var problems = refactoringStatus.problems; |
| expect(problems, hasLength(1)); |
| expect(problems[0].message, 'msg'); |
| expect(problems[0].location, isNull); |
| } |
| |
| void test_addStatus_Error_withWarning() { |
| var refactoringStatus = RefactoringStatus(); |
| refactoringStatus.addError('err'); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.ERROR); |
| // merge with OK |
| { |
| var other = RefactoringStatus(); |
| other.addWarning('warn'); |
| refactoringStatus.addStatus(other); |
| } |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.ERROR); |
| expect(refactoringStatus.message, 'err'); |
| } |
| |
| void test_addStatus_Warning_null() { |
| var refactoringStatus = RefactoringStatus(); |
| refactoringStatus.addWarning('warn'); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.WARNING); |
| // merge with "null" |
| refactoringStatus.addStatus(null); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.WARNING); |
| } |
| |
| void test_addStatus_Warning_withError() { |
| var refactoringStatus = RefactoringStatus(); |
| refactoringStatus.addWarning('warn'); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.WARNING); |
| // merge with OK |
| { |
| var other = RefactoringStatus(); |
| other.addError('err'); |
| refactoringStatus.addStatus(other); |
| } |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.ERROR); |
| expect(refactoringStatus.message, 'err'); |
| } |
| |
| void test_addWarning() { |
| var refactoringStatus = RefactoringStatus(); |
| // initial state |
| expect(refactoringStatus.severity, null); |
| // add WARNING |
| refactoringStatus.addWarning('msg'); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.WARNING); |
| expect(refactoringStatus.isOK, isFalse); |
| expect(refactoringStatus.hasFatalError, isFalse); |
| expect(refactoringStatus.hasError, isFalse); |
| expect(refactoringStatus.hasWarning, isTrue); |
| // problems |
| var problems = refactoringStatus.problems; |
| expect(problems, hasLength(1)); |
| expect(problems[0].message, 'msg'); |
| } |
| |
| void test_get_problem() { |
| var refactoringStatus = RefactoringStatus(); |
| // no entries |
| expect(refactoringStatus.problem, isNull); |
| expect(refactoringStatus.message, isNull); |
| // add entries |
| refactoringStatus.addError('msgError'); |
| refactoringStatus.addWarning('msgWarning'); |
| refactoringStatus.addFatalError('msgFatalError'); |
| var problem = refactoringStatus.problem!; |
| // get entry |
| expect(problem.severity, RefactoringProblemSeverity.FATAL); |
| expect(problem.message, 'msgFatalError'); |
| // get message |
| expect(problem.message, 'msgFatalError'); |
| } |
| |
| void test_newError() { |
| var location = Location('/test.dart', 1, 2, 3, 4, endLine: 5, endColumn: 6); |
| var refactoringStatus = RefactoringStatus.error('msg', location); |
| var problem = refactoringStatus.problem!; |
| var problemLocation = problem.location!; |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.ERROR); |
| expect(problem.message, 'msg'); |
| expect(problemLocation.file, '/test.dart'); |
| } |
| |
| void test_newFatalError() { |
| var refactoringStatus = RefactoringStatus.fatal('msg'); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.FATAL); |
| expect(refactoringStatus.message, 'msg'); |
| } |
| |
| void test_newWarning() { |
| var refactoringStatus = RefactoringStatus.warning('msg'); |
| expect(refactoringStatus.severity, RefactoringProblemSeverity.WARNING); |
| expect(refactoringStatus.message, 'msg'); |
| } |
| } |