/*
* Copyright 2000-2015 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
import com.intellij.codeInsight.documentation.DocumentationManager
import com.intellij.codeInsight.navigation.CtrlMouseHandler
import com.intellij.lang.java.JavaDocumentationProvider
import com.intellij.psi.PsiExpressionList
import com.intellij.psi.PsiMethod
import com.intellij.psi.util.PsiTreeUtil
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
/**
* @author peter
*/
class JavaDocumentationTest extends LightCodeInsightFixtureTestCase {
private static final String STYLE_BLOCK =
" ";
public void testConstructorDoc() {
configure """\
class Foo { Foo() {} Foo(int param) {} }
class Foo2 {{
new Foo
}}""".stripIndent()
def originalElement = myFixture.file.findElementAt(myFixture.editor.caretModel.offset)
def element = DocumentationManager.getInstance(project).findTargetElement(myFixture.editor, myFixture.file)
def doc = new JavaDocumentationProvider().generateDoc(element, originalElement)
def expected =
"" +
"Candidates for new Foo() are:
" +
" Foo()
" +
" Foo(int param)
" +
""
assert doc == expected
}
public void testConstructorDoc2() {
configure """\
class Foo { Foo() {} Foo(int param) {} }
class Foo2 {{
new Foo()
}}""".stripIndent()
def elementAt = myFixture.file.findElementAt(myFixture.editor.caretModel.offset)
def exprList = PsiTreeUtil.getParentOfType(elementAt, PsiExpressionList.class)
def doc = new JavaDocumentationProvider().generateDoc(exprList, elementAt)
def expected =
"" +
"Candidates for new Foo() are:
" +
" Foo()
" +
" Foo(int param)
" +
""
assert doc == expected
}
public void testMethodDocWhenInArgList() {
configure """\
class Foo { void doFoo() {} }
class Foo2 {{
new Foo().doFoo()
}}""".stripIndent()
def exprList = PsiTreeUtil.getParentOfType(myFixture.file.findElementAt(myFixture.editor.caretModel.offset), PsiExpressionList.class)
def doc = new JavaDocumentationProvider().generateDoc(exprList, null)
def expected =
"" + STYLE_BLOCK + "" +
"Foo" +
"void doFoo()
" +
""
assert doc == expected
}
public void testGenericMethod() {
configure """\
class Bar { java.util.List foo(T param); }
class Foo {{
new Bar().foo();
}}""".stripIndent()
def ref = myFixture.file.findReferenceAt(myFixture.editor.caretModel.offset)
def doc = CtrlMouseHandler.getInfo(ref.resolve(), ref.element)
assert doc == "Bar\n java.util.List<java.lang.String> foo (java.lang.String param)"
}
public void testGenericField() {
configure """\
class Bar { T field; }
class Foo {{
new Bar().field
}}""".stripIndent()
def ref = myFixture.file.findReferenceAt(myFixture.editor.caretModel.offset)
def doc = CtrlMouseHandler.getInfo(ref.resolve(), ref.element)
assert doc == "Bar\n java.lang.Integer field"
}
public void testMethodInAnonymousClass() {
configure """\
class Foo {{
new Runnable() {
@Override
public void run() {
m();
}
private void m() {}
}.run();
}}""".stripIndent()
def doc = CtrlMouseHandler.getInfo(editor, CtrlMouseHandler.BrowseMode.Declaration)
assert doc == "private void m ()"
}
public void testAsterisksFiltering() {
configure """\
class C {
/**
* For example, {@link String#String(byte[],
* int, int,
* String)}.
*/
public void m() { }
}""".stripIndent()
def method = PsiTreeUtil.getParentOfType(myFixture.file.findElementAt(myFixture.editor.caretModel.offset), PsiMethod.class)
def doc = new JavaDocumentationProvider().generateDoc(method, null)
def expected =
"" + STYLE_BLOCK + "" +
"C" +
"public void m()
\n " +
"For example, " +
"String.String(byte[], int, int, String)" +
"."
assert doc == expected
}
public void testInlineTagSpacing() {
configure """\
class C {
/** Visit the "{@code /login}" URL. */
public void m() { }
}""".stripIndent()
def method = PsiTreeUtil.getParentOfType(myFixture.file.findElementAt(myFixture.editor.caretModel.offset), PsiMethod.class)
def doc = new JavaDocumentationProvider().generateDoc(method, null)
def expected =
"" + STYLE_BLOCK + "" +
"C" +
"public void m()
" +
" Visit the \"/login\" URL." +
""
assert doc == expected
}
private void configure(String text) {
myFixture.configureByText 'a.java', text
}
}