| // 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. |
| |
| library test.services.correction.status; |
| |
| import 'package:analysis_services/correction/status.dart'; |
| import 'package:analysis_services/search/search_engine.dart'; |
| import 'package:analysis_services/src/correction/source_range.dart'; |
| import 'package:analysis_testing/abstract_single_unit.dart'; |
| import 'package:analysis_testing/reflective_tests.dart'; |
| import 'package:analyzer/src/generated/ast.dart'; |
| import 'package:analyzer/src/generated/element.dart'; |
| import 'package:analyzer/src/generated/source.dart'; |
| import 'package:typed_mock/typed_mock.dart'; |
| import 'package:unittest/unittest.dart'; |
| |
| |
| main() { |
| groupSep = ' | '; |
| runReflectiveTests(RefactoringStatusContextTest); |
| runReflectiveTests(RefactoringStatusEntryTest); |
| runReflectiveTests(RefactoringStatusTest); |
| } |
| |
| |
| @ReflectiveTestCase() |
| class RefactoringStatusContextTest extends AbstractSingleUnitTest { |
| void test_new_forElement() { |
| resolveTestUnit('class MyClass {}'); |
| Element element = findElement('MyClass'); |
| var statusContext = new RefactoringStatusContext.forElement(element); |
| // access |
| expect(statusContext.context, context); |
| expect(statusContext.source, testSource); |
| expect( |
| statusContext.range, |
| rangeStartLength(element.nameOffset, 'MyClass'.length)); |
| } |
| |
| void test_new_forMatch() { |
| resolveTestUnit('class MyClass {}'); |
| Element element = findElement('MyClass'); |
| SourceRange range = rangeElementName(element); |
| SearchMatch match = new SearchMatch(null, element, range, true, false); |
| var statusContext = new RefactoringStatusContext.forMatch(match); |
| // access |
| expect(statusContext.context, context); |
| expect(statusContext.source, testSource); |
| expect(statusContext.range, range); |
| } |
| |
| void test_new_forNode() { |
| resolveTestUnit(''' |
| main() { |
| } |
| '''); |
| AstNode node = findNodeAtString('main'); |
| var statusContext = new RefactoringStatusContext.forNode(node); |
| // access |
| expect(statusContext.context, context); |
| expect(statusContext.source, testSource); |
| expect(statusContext.range, rangeNode(node)); |
| } |
| |
| void test_new_forUnit() { |
| resolveTestUnit(''); |
| SourceRange range = rangeStartLength(10, 20); |
| var statusContext = new RefactoringStatusContext.forUnit(testUnit, range); |
| // access |
| expect(statusContext.context, context); |
| expect(statusContext.source, testSource); |
| expect(statusContext.range, range); |
| } |
| } |
| |
| |
| @ReflectiveTestCase() |
| class RefactoringStatusEntryTest { |
| void test_new_withContext() { |
| RefactoringStatusContext context = new _MockRefactoringStatusContext(); |
| RefactoringStatusEntry entry = |
| new RefactoringStatusEntry( |
| RefactoringStatusSeverity.ERROR, |
| "my message", |
| context); |
| // access |
| expect(entry.severity, RefactoringStatusSeverity.ERROR); |
| expect(entry.message, 'my message'); |
| expect(entry.context, context); |
| } |
| |
| void test_new_withoutContext() { |
| RefactoringStatusEntry entry = |
| new RefactoringStatusEntry(RefactoringStatusSeverity.ERROR, "my message"); |
| // access |
| expect(entry.severity, RefactoringStatusSeverity.ERROR); |
| expect(entry.message, 'my message'); |
| expect(entry.context, isNull); |
| // isX |
| expect(entry.isFatalError, isFalse); |
| expect(entry.isError, isTrue); |
| expect(entry.isWarning, isFalse); |
| } |
| } |
| |
| |
| @ReflectiveTestCase() |
| class RefactoringStatusTest { |
| void test_addError() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus(); |
| // initial state |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.OK); |
| // add ERROR |
| refactoringStatus.addError('msg'); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.ERROR); |
| expect(refactoringStatus.isOK, isFalse); |
| expect(refactoringStatus.hasFatalError, isFalse); |
| expect(refactoringStatus.hasError, isTrue); |
| // entries |
| List<RefactoringStatusEntry> entries = refactoringStatus.entries; |
| expect(entries, hasLength(1)); |
| expect(entries[0].message, 'msg'); |
| } |
| |
| void test_addFatalError_withContext() { |
| RefactoringStatusContext context = new _MockRefactoringStatusContext(); |
| RefactoringStatus refactoringStatus = new RefactoringStatus(); |
| // initial state |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.OK); |
| // add FATAL |
| refactoringStatus.addFatalError('msg', context); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.FATAL); |
| expect(refactoringStatus.isOK, isFalse); |
| expect(refactoringStatus.hasFatalError, isTrue); |
| expect(refactoringStatus.hasError, isTrue); |
| // entries |
| List<RefactoringStatusEntry> entries = refactoringStatus.entries; |
| expect(entries, hasLength(1)); |
| expect(entries[0].message, 'msg'); |
| expect(entries[0].context, context); |
| // add WARNING, resulting severity is still FATAL |
| refactoringStatus.addWarning("warning"); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.FATAL); |
| } |
| |
| void test_addFatalError_withoutContext() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus(); |
| // initial state |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.OK); |
| // add FATAL |
| refactoringStatus.addFatalError('msg'); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.FATAL); |
| expect(refactoringStatus.isOK, isFalse); |
| expect(refactoringStatus.hasFatalError, isTrue); |
| expect(refactoringStatus.hasError, isTrue); |
| // entries |
| List<RefactoringStatusEntry> entries = refactoringStatus.entries; |
| expect(entries, hasLength(1)); |
| expect(entries[0].message, 'msg'); |
| expect(entries[0].context, isNull); |
| } |
| |
| void test_addStatus_Error_withWarning() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus(); |
| refactoringStatus.addError("err"); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.ERROR); |
| // merge with OK |
| { |
| RefactoringStatus other = new RefactoringStatus(); |
| other.addWarning("warn"); |
| refactoringStatus.addStatus(other); |
| } |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.ERROR); |
| expect(refactoringStatus.message, 'err'); |
| } |
| |
| void test_addStatus_Warning_null() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus(); |
| refactoringStatus.addWarning("warn"); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.WARNING); |
| // merge with "null" |
| refactoringStatus.addStatus(null); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.WARNING); |
| } |
| |
| void test_addStatus_Warning_withError() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus(); |
| refactoringStatus.addWarning("warn"); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.WARNING); |
| // merge with OK |
| { |
| RefactoringStatus other = new RefactoringStatus(); |
| other.addError("err"); |
| refactoringStatus.addStatus(other); |
| } |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.ERROR); |
| expect(refactoringStatus.message, 'err'); |
| } |
| |
| void test_addWarning() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus(); |
| // initial state |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.OK); |
| // add WARNING |
| refactoringStatus.addWarning('msg'); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.WARNING); |
| expect(refactoringStatus.isOK, isFalse); |
| expect(refactoringStatus.hasFatalError, isFalse); |
| expect(refactoringStatus.hasError, isFalse); |
| expect(refactoringStatus.hasWarning, isTrue); |
| // entries |
| List<RefactoringStatusEntry> entries = refactoringStatus.entries; |
| expect(entries, hasLength(1)); |
| expect(entries[0].message, 'msg'); |
| } |
| |
| void test_escalateErrorToFatal() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus.error('msg'); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.ERROR); |
| // escalated |
| RefactoringStatus escalated = refactoringStatus.escalateErrorToFatal(); |
| expect(escalated.severity, RefactoringStatusSeverity.FATAL); |
| } |
| |
| void test_get_entryWithHighestSeverity() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus(); |
| // no entries |
| expect(refactoringStatus.entryWithHighestSeverity, isNull); |
| expect(refactoringStatus.message, isNull); |
| // add entries |
| refactoringStatus.addError('msgError'); |
| refactoringStatus.addWarning('msgWarning'); |
| refactoringStatus.addFatalError('msgFatalError'); |
| // get entry |
| { |
| RefactoringStatusEntry entry = refactoringStatus.entryWithHighestSeverity; |
| expect(entry.severity, RefactoringStatusSeverity.FATAL); |
| expect(entry.message, 'msgFatalError'); |
| } |
| // get message |
| expect(refactoringStatus.message, 'msgFatalError'); |
| } |
| |
| void test_newError() { |
| RefactoringStatusContext context = new _MockRefactoringStatusContext(); |
| RefactoringStatus refactoringStatus = |
| new RefactoringStatus.error('msg', context); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.ERROR); |
| expect(refactoringStatus.message, 'msg'); |
| expect(refactoringStatus.entryWithHighestSeverity.context, context); |
| } |
| |
| void test_newFatalError() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus.fatal('msg'); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.FATAL); |
| expect(refactoringStatus.message, 'msg'); |
| } |
| |
| void test_newWarning() { |
| RefactoringStatus refactoringStatus = new RefactoringStatus.warning('msg'); |
| expect(refactoringStatus.severity, RefactoringStatusSeverity.WARNING); |
| expect(refactoringStatus.message, 'msg'); |
| } |
| } |
| |
| |
| class _MockRefactoringStatusContext extends TypedMock implements |
| RefactoringStatusContext { |
| noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| } |