/* * Copyright (c) 2013, the Dart project authors. * * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.dart.engine.services.internal.refactoring; import com.google.dart.engine.ast.ImportDirective; import com.google.dart.engine.services.status.RefactoringStatusSeverity; import com.google.dart.engine.source.FileBasedSource; import com.google.dart.engine.source.Source; import java.io.File; /** * Test for {@link RenameImportRefactoringImpl}. */ public class RenameImportRefactoringImplTest extends RenameRefactoringImplTest { public void test_checkNewName() throws Exception { indexTestUnit("import 'dart:async' as test;"); // configure refactoring createRenameImportRefactoring("import 'dart:async"); // null assertRefactoringStatus( refactoring.checkNewName(null), RefactoringStatusSeverity.ERROR, "Import prefix name must not be null."); // empty refactoring.setNewName(""); assertRefactoringStatusOK(refactoring.checkNewName("")); // same name assertRefactoringStatus( refactoring.checkNewName("test"), RefactoringStatusSeverity.FATAL, "Choose another name."); } public void test_createChange_add() throws Exception { indexTestUnit( "// filler filler filler filler filler filler filler filler filler filler", "import 'dart:async';", "import 'dart:math' show Random, min hide max;", "main() {", " Future f;", " Random r;", " min(1, 2);", "}"); // configure refactoring createRenameImportRefactoring("import 'dart:math"); assertEquals("Rename Import Prefix", refactoring.getRefactoringName()); assertEquals("", refactoring.getCurrentName()); refactoring.setNewName("newName"); // validate change assertSuccessfulRename( "// filler filler filler filler filler filler filler filler filler filler", "import 'dart:async';", "import 'dart:math' as newName show Random, min hide max;", "main() {", " Future f;", " newName.Random r;", " newName.min(1, 2);", "}"); } public void test_createChange_change_className() throws Exception { indexTestUnit( "// filler filler filler filler filler filler filler filler filler filler", "import 'dart:math' as test;", "import 'dart:async' as test;", "main() {", " test.Future f;", "}"); // configure refactoring createRenameRefactoring("test.Future"); assertEquals("Rename Import Prefix", refactoring.getRefactoringName()); assertEquals("test", refactoring.getCurrentName()); refactoring.setNewName("newName"); // validate change assertSuccessfulRename( "// filler filler filler filler filler filler filler filler filler filler", "import 'dart:math' as test;", "import 'dart:async' as newName;", "main() {", " newName.Future f;", "}"); } public void test_createChange_change_function() throws Exception { indexTestUnit( "// filler filler filler filler filler filler filler filler filler filler", "import 'dart:math' as test;", "import 'dart:async' as test;", "main() {", " test.max(1, 2);", "}"); // configure refactoring createRenameRefactoring("test.max"); assertEquals("Rename Import Prefix", refactoring.getRefactoringName()); assertEquals("test", refactoring.getCurrentName()); refactoring.setNewName("newName"); // validate change assertSuccessfulRename( "// filler filler filler filler filler filler filler filler filler filler", "import 'dart:math' as newName;", "import 'dart:async' as test;", "main() {", " newName.max(1, 2);", "}"); } public void test_createChange_remove() throws Exception { indexTestUnit( "// filler filler filler filler filler filler filler filler filler filler", "import 'dart:math' as test;", "import 'dart:async' as test;", "main() {", " test.Future f;", "}"); // configure refactoring createRenameRefactoring("test.Future"); assertEquals("Rename Import Prefix", refactoring.getRefactoringName()); assertEquals("test", refactoring.getCurrentName()); refactoring.setNewName(""); // validate change assertSuccessfulRename( "// filler filler filler filler filler filler filler filler filler filler", "import 'dart:math' as test;", "import 'dart:async';", "main() {", " Future f;", "}"); } public void test_shouldReportUnsafeRefactoringSource() throws Exception { indexTestUnit("import 'dart:async' as test;"); Source externalSource = new FileBasedSource(new File("other.dart")); // check public createRenameImportRefactoring("import 'dart:async"); assertTrue(refactoring.shouldReportUnsafeRefactoringSource(analysisContext, testSource)); assertFalse(refactoring.shouldReportUnsafeRefactoringSource(analysisContext, externalSource)); assertFalse(refactoring.shouldReportUnsafeRefactoringSource(null, null)); } private void createRenameImportRefactoring(String search) { ImportDirective importDirective = findNode(search, ImportDirective.class); createRenameRefactoring(importDirective.getElement()); } }