blob: f294f865fd24968553f93e6ad3f021bcc126380e [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.codeInsight.editorActions
import com.intellij.openapi.editor.impl.AbstractEditorTest
/**
* @author Denis Zhdanov
* @since 9/20/12 6:17 PM
*/
class FixDocCommentTest extends AbstractEditorTest {
void testGenerateMethodDoc() {
doTest(
initial: '''\
class Test {
String test(int i) {
return "s";<caret>
}
}''',
expected: '''\
class Test {
/**
* @param i
* @return
*/
String test(int i) {
return "s";
}
}'''
)
}
void testGenerateFieldDoc() {
doTest(
initial: '''\
class Test {
int <caret>i;
}''',
expected: '''\
class Test {
/**
* <caret>
*/
int i;
}'''
)
}
void testGenerateClassDoc() {
doTest(
initial: '''\
class Test {
void test1() {}
<caret>
void test2() {}
}''',
expected: '''\
/**
* <caret>
*/
class Test {
void test1() {}
void test2() {}
}'''
)
}
void testRemoveOneParameterFromMany() {
doTest(
initial: '''\
class Test {
/**
* @param i
* @param j
* @param k
*/
void test(int i, int j) {<caret>
}
}''',
expected: '''\
class Test {
/**
* @param i <caret>
* @param j
*/
void test(int i, int j) {
}
}'''
)
}
void testRemoveTheOnlyParameter() {
doTest(
initial: '''\
class Test {
/**
* My description
* @param i
*/
void test() {<caret>
}
}''',
expected: '''\
class Test {
/**
* My description
*/
void test() {<caret>
}
}'''
)
}
void testRemoveReturn() {
doTest(
initial: '''\
class Test {
/**
* My description
* @return data
*/
void test() {<caret>
}
}''',
expected: '''\
class Test {
/**
* My description
*/
void test() {<caret>
}
}'''
)
}
void testRemoveOneThrowsFromMany() {
doTest(
initial: '''\
class MyException1 extends Exception {}
class MyException2 extends Exception {}
class Test {
/**
* @param i my arg
* @throws MyException1 text1
* @throws MyException2 text2
*/
void test(int i) throws MyException2 {<caret>
}
}''',
expected: '''\
class MyException1 extends Exception {}
class MyException2 extends Exception {}
class Test {
/**
* @param i my arg
* @throws MyException2 text2
*/
void test(int i) throws MyException2 {
}
}'''
)
}
void testRemoveTheOnlyThrows() {
doTest(
initial: '''\
class MyException extends Exception {}
class Test {
/**
* @param i my arg
* @throws MyException text
*/
void test(int i) {<caret>
}
}''',
expected: '''\
class MyException extends Exception {}
class Test {
/**
* @param i my arg
*/
void test(int i) {
}
}'''
)
}
void testRemoveOneTypeParameterFromMany() {
doTest(
initial: '''\
/**
* @param <T> tDescription
* @param <V> vDescription
*/
class Test<V> {<caret>
}''',
expected: '''\
/**
* @param <V> vDescription
*/
class Test<V> {<caret>
}'''
)
}
void testRemoveMultipleTypeParameter() {
doTest(
initial: '''\
/**
* @param <T> tDescription
* @param <V> vDescription
*/
class Test {<caret>
}''',
expected: '''\
/**
*/
class Test {<caret>
}'''
)
}
void testAddFirstParameter() {
doTest(
initial: '''\
class Test {
/**
*/
void test(int i) {<caret>
}
}''',
expected: '''\
class Test {
/**
* @param i <caret>
*/
void test(int i) {
}
}'''
)
}
void testAddMultipleParameter() {
doTest(
initial: '''\
class Test {
/**
* @param i
*/
void test(int i, int j, int k) {<caret>
}
}''',
expected: '''\
class Test {
/**
* @param i <caret>
* @param j
* @param k
*/
void test(int i, int j, int k) {
}
}'''
)
}
void testAddReturn() {
doTest(
initial: '''\
class Test {
/**
*/
int test() {<caret>
}
}''',
expected: '''\
class Test {
/**
* @return<caret>
*/
int test() {
}
}'''
)
}
void testAddFirstThrows() {
doTest(
initial: '''\
class MyException extends Exception {}
class Test {
/**
* @param i my arg
*/
void test(int i) throws MyException {<caret>
}
}''',
expected: '''\
class MyException extends Exception {}
class Test {
/**
* @param i my arg
* @throws MyException<caret>
*/
void test(int i) throws MyException {
}
}''')
}
void testAddNonFirstThrows() {
doTest(
initial: '''\
class MyException1 extends Exception {}
class MyException2 extends Exception {}
class MyException3 extends Exception {}
class Test {
/**
* @param i my arg
* @throws MyException1
*/
void test(int i) throws MyException1, MyException2, MyException3 {<caret>
}
}''',
expected: '''\
class MyException1 extends Exception {}
class MyException2 extends Exception {}
class MyException3 extends Exception {}
class Test {
/**
* @param i my arg
* @throws MyException1<caret>
* @throws MyException2
* @throws MyException3
*/
void test(int i) throws MyException1, MyException2, MyException3 {
}
}''')
}
void testAddFirstThrowsWhenEmptyReturnIsAvailable() {
doTest(
initial: '''\
class MyException extends Exception {}
class Test {
/**
* @return
*/
int test() throws MyException {<caret>
return 1;
}
}''',
expected: '''\
class MyException extends Exception {}
class Test {
/**
* @return<caret>
* @throws MyException
*/
int test() throws MyException {
return 1;
}
}''')
}
void testAddFirstTypeParameter() {
doTest(
initial: '''\
/**
* My description
* @author me
*/
class Test<T> {<caret>
}''',
expected: '''\
/**
* My description
* @author me
* @param <T> <caret>
*/
class Test<T> {
}''')
}
void testAddNonFirstTypeParameter() {
doTest(
initial: '''\
/**
* My description
* @author me
* @param <T> type description<caret>
*/
class Test<T, V> {
}''',
expected: '''\
/**
* My description
* @author me
* @param <T> type description
* @param <V> <caret>
*/
class Test<T, V> {
}''')
}
void testCorrectParametersOrder() {
doTest(
initial: '''\
class Test {
/**
* @param j
* @param k single line description
* @param i multi-line
* description
*/
public void test(int i, int j, int k) {<caret>
}
}''',
expected: '''\
class Test {
/**
* @param i multi-line
* description
* @param j <caret>
* @param k single line description
*/
public void test(int i, int j, int k) {
}
}'''
)
}
void testCorrectParametersDescriptionWhenIndentIsDefines() {
doTest(
initial: '''\
class Test {
/**
* @param j
* @param i
*/
public void test(int i, int j) {<caret>
}
}''',
expected: '''\
class Test {
/**
* @param i <caret>
* @param j
*/
public void test(int i, int j) {
}
}'''
)
}
void testCorrectMethodTypeParametersOrder() {
doTest(
initial: '''\
class Test {
/**
* @param <B>
* @param <A> A description
*/
<A, B> void test() {<caret>
}
}''',
expected: '''\
class Test {
/**
* @param <A> A description
* @param <B> <caret>
*/
<A, B> void test() {
}
}'''
)
}
void testCorrectClassTypeParametersOrder() {
doTest(
initial: '''\
/**
* Class description
* @author Zigmund
* @param <B> multi-line
* description
* @param <A>
*/
class Test<A, B> {<caret>
}''',
expected: '''\
/**
* Class description
* @author Zigmund
* @param <A> <caret>
* @param <B> multi-line
* description
*/
class Test<A, B> {
}'''
)
}
void testAllesZusammen() {
doTest(
initial: '''\
class MyException1 extends Exception {}
class MyException2 extends Exception {}
class Test {
/**
* Method description
* @param j j description (single line)
* @param s s description
* @param k
* k description (single line but located at another line)
* @throws MyException2
* @return some value
*/
void test(int i, int j, int k) throws MyException1 {<caret>
}
}''',
expected: '''\
class MyException1 extends Exception {}
class MyException2 extends Exception {}
class Test {
/**
* Method description
* @param i <caret>
* @param j j description (single line)
* @param k
* k description (single line but located at another line)
* @throws MyException1
*/
void test(int i, int j, int k) throws MyException1 {
}
}'''
)
}
void testNavigateToMissingParamDescription() {
doTest(
initial: '''\
class Test {
/**
* @param i
*/
void test(int i) {<caret>
}
}''',
expected: '''\
class Test {
/**
* @param i <caret>
*/
void test(int i) {
}
}'''
)
}
private def doTest(Map args) {
configureFromFileText("${getTestName(false)}.java", args.initial)
myEditor.settings.virtualSpace = false
executeAction(FixDocCommentAction.ACTION_ID)
checkResultByText(args.expected)
}
}