blob: 3c637f87148229d98b3249dadacef84245648671 [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* 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.intellij.psi.impl.source.tree.java;
import com.intellij.codeInsight.CodeInsightUtilCore;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.psi.*;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocTag;
import com.intellij.testFramework.LightIdeaTestCase;
import com.intellij.util.IncorrectOperationException;
/**
* @author dsl
*/
public class JavadocParamTagsTest extends LightIdeaTestCase {
public void testDeleteTag1() throws Exception {
final PsiElementFactory factory = getFactory();
final PsiMethod method = factory.createMethodFromText(
"/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" * @param p2\n" +
" */" +
" void m() {}", null);
final PsiDocComment docComment = method.getDocComment();
assertNotNull(docComment);
final PsiDocTag[] tags = docComment.getTags();
WriteCommandAction.runWriteCommandAction(null, new Runnable() {
@Override
public void run() {
tags[0].delete();
}
});
assertEquals("/**\n" +
" * Javadoc\n" +
" * @param p2\n" +
" */", docComment.getText());
}
public void testDeleteTag2() throws Exception {
final PsiElementFactory factory = getFactory();
final PsiMethod method = factory.createMethodFromText(
"/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" * @param p2\n" +
" */" +
" void m() {}", null);
final PsiDocComment docComment = method.getDocComment();
assertNotNull(docComment);
final PsiDocTag[] tags = docComment.getTags();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
tags[1].delete();
}
});
assertEquals("/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" */", docComment.getText());
}
public void testDeleteTag3() throws Exception {
final PsiElementFactory factory = getFactory();
final PsiMethod method = factory.createMethodFromText(
"/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" * @param p2\n" +
" * @param p3\n" +
" */" +
" void m() {}", null);
final PsiDocComment docComment = method.getDocComment();
assertNotNull(docComment);
final PsiDocTag[] tags = docComment.getTags();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
tags[1].delete();
}
});
assertEquals("/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" * @param p3\n" +
" */", docComment.getText());
}
public void testTagCreation() throws Exception {
createAndTestTag("@param p1 Text", "p1", "Text");
createAndTestTag("@param p2", "p2", "");
createAndTestTag("@param p2 FirstLine\n * SecondLine", "p2", "FirstLine\nSecondLine");
}
public void testAddTag1() throws Exception {
final PsiElementFactory factory = getFactory();
final PsiMethod method = factory.createMethodFromText(
"/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" */\n" +
"void m();", null);
final PsiDocComment docComment = method.getDocComment();
assertNotNull(docComment);
final PsiDocTag[] tags = docComment.getTags();
final PsiDocTag tag2 = factory.createParamTag("p2", "");
docComment.addAfter(tag2, tags[0]);
assertEquals(
"/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" * @param p2\n" +
" */", docComment.getText());
}
public void testAddTag2() throws Exception {
final PsiElementFactory factory = getFactory();
final PsiMethod method = factory.createMethodFromText(
"/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" */\n" +
"void m();", null);
final PsiDocComment docComment = method.getDocComment();
assertNotNull(docComment);
final PsiDocTag[] tags = docComment.getTags();
final PsiDocTag tag2 = factory.createParamTag("p2", "");
docComment.addBefore(tag2, tags[0]);
assertEquals(
"/**\n" +
" * Javadoc\n" +
" * @param p2\n" +
" * @param p1\n" +
" */", docComment.getText());
}
public void testAddTag3() throws Exception {
CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
@Override
public void run() {
ApplicationManager.getApplication().runWriteAction(new Runnable(){
@Override
public void run() {
final PsiElementFactory factory = getFactory();
final PsiJavaFile psiFile;
try {
psiFile = (PsiJavaFile)createFile("aaa.java", "class A {/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" * @param p3\n" +
" */\n" +
"void m();}");
final PsiClass psiClass = psiFile.getClasses()[0];
final PsiMethod method = psiClass.getMethods()[0];
PsiDocComment docComment = method.getDocComment();
assertNotNull(docComment);
final PsiDocTag[] tags = docComment.getTags();
final PsiDocTag tag2 = factory.createParamTag("p2", "");
docComment.addAfter(tag2, tags[0]);
docComment = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(docComment);
assertEquals(
"/**\n" +
" * Javadoc\n" +
" * @param p1\n" +
" * @param p2\n" +
" * @param p3\n" +
" */", docComment.getText());
}
catch (IncorrectOperationException e) {}
}
});
}
}, "", null);
}
public void testAddTag4() throws Exception {
final PsiElementFactory factory = getFactory();
final PsiMethod method = factory.createMethodFromText(
"/**\n" +
" * Javadoc\n" +
" */\n" +
"void m();", null);
final PsiDocComment docComment = method.getDocComment();
assertNotNull(docComment);
final PsiDocTag tag2 = factory.createParamTag("p2", "");
docComment.add(tag2);
assertEquals(
"/**\n" +
" * Javadoc\n" +
" * @param p2\n" +
" */", docComment.getText());
}
private static PsiElementFactory getFactory() {
final PsiManager manager = getPsiManager();
return JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
}
private static void createAndTestTag(String expectedText, String parameterName, String description) throws IncorrectOperationException {
PsiElementFactory factory = getFactory();
final PsiDocTag paramTag = factory.createParamTag(parameterName, description);
assertEquals(expectedText, paramTag.getText());
}
}