/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.plugin.java.server.jdt;
import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.commons.subject.SubjectImpl;
import org.eclipse.che.jdt.javaeditor.TextViewer;
import org.eclipse.che.plugin.java.server.jdt.quickfix.QuickFixTest;
import org.eclipse.che.plugin.java.server.jdt.testplugin.Java18ProjectTestSetup;
import org.eclipse.che.plugin.java.server.jdt.testplugin.JavaProjectHelper;
import org.eclipse.che.plugin.java.server.jdt.testplugin.ProjectTestSetup;
import org.eclipse.che.jface.text.contentassist.ICompletionProposal;
import org.eclipse.che.jface.text.contentassist.ICompletionProposalExtension5;
import org.eclipse.jdt.core.IBuffer;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.core.DocumentAdapter;
import org.eclipse.jdt.internal.ui.text.java.JavaAllCompletionProposalComputer;
import org.eclipse.jdt.internal.ui.text.java.RelevanceSorter;
import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
import org.eclipse.jface.text.IDocument;
import org.eclipse.swt.graphics.Point;
import org.fest.assertions.Assertions;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
/**
* @author Evgen Vidolob
*/
public class CompletionJavadocTest extends QuickFixTest {
final String vfsUser = "dev";
private IJavaProject fJProject1;
private IPackageFragmentRoot fSourceFolder;
public CompletionJavadocTest() {
super(new Java18ProjectTestSetup());
}
private static List<ICompletionProposal> computeProposals(ICompilationUnit compilationUnit, int offset) throws JavaModelException {
IBuffer buffer = compilationUnit.getBuffer();
IDocument document;
if (buffer instanceof org.eclipse.jdt.internal.ui.javaeditor.DocumentAdapter) {
document = ((org.eclipse.jdt.internal.ui.javaeditor.DocumentAdapter)buffer).getDocument();
} else {
document = new DocumentAdapter(buffer);
}
TextViewer viewer = new TextViewer(document, new Point(offset, 0));
JavaContentAssistInvocationContext context =
new JavaContentAssistInvocationContext(viewer, offset, compilationUnit);
List<ICompletionProposal> proposals = new ArrayList<>();
proposals.addAll(new JavaAllCompletionProposalComputer().computeCompletionProposals(context, null));
// proposals.addAll(new TemplateCompletionProposalComputer().computeCompletionProposals(context, null));
Collections.sort(proposals, new RelevanceSorter());
return proposals;
}
@Before
public void setUp() throws Exception {
super.setUp();
EnvironmentContext customEnvironment = mock(EnvironmentContext.class);
doReturn(new SubjectImpl(vfsUser, "", "", false)).when(customEnvironment).getSubject();
EnvironmentContext.setCurrent(customEnvironment);
fJProject1 = Java18ProjectTestSetup.getProject();
fSourceFolder = JavaProjectHelper.addSourceContainer(fJProject1, "src");
}
@After
public void tearDown() throws Exception {
super.tearDown();
JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
}
@Test
public void testJavadoc() throws Exception {
IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
StringBuffer buf = new StringBuffer();
buf.append("package test1;\n");
buf.append("public class E {\n");
buf.append(" /**\n");
buf.append(" * Test JavaDoc.\n");
buf.append(" */\n");
buf.append(" public void foo(int i) {\n");
buf.append(" foo(10);");
buf.append(" }\n");
buf.append("}\n");
ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null);
List<ICompletionProposal> proposals = computeProposals(cu, buf.indexOf(" foo") + " foo".length());
Assertions.assertThat(proposals).hasSize(1);
ICompletionProposal proposal = proposals.get(0);
String result;
if (proposal instanceof ICompletionProposalExtension5) {
result = ((ICompletionProposalExtension5)proposal).getAdditionalProposalInfo(null).toString();
} else {
result = proposal.getAdditionalProposalInfo();
}
Assertions.assertThat(result).contains("Test JavaDoc.");
}
@Test
public void testInheredJavadoc() throws Exception {
IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
StringBuffer buf = new StringBuffer();
buf.append("package test1;\n");
buf.append("public class E {\n");
buf.append(" /**\n");
buf.append(" * Test JavaDoc.\n");
buf.append(" */\n");
buf.append(" public void foo(int i) {\n");
buf.append(" }\n");
buf.append("}\n");
pack1.createCompilationUnit("E.java", buf.toString(), false, null);
StringBuffer buf2 = new StringBuffer();
buf2.append("package test1;\n");
buf2.append("public class B extends E {\n");
buf2.append(" @Override\n");
buf2.append(" public void foo(int i) {\n");
buf2.append(" foo(10);\n");
buf2.append(" }\n");
buf2.append("}\n");
ICompilationUnit cu2 = pack1.createCompilationUnit("B.java", buf2.toString(), false, null);
List<ICompletionProposal> proposals = computeProposals(cu2, buf2.indexOf(" foo") + " foo".length());
Assertions.assertThat(proposals).hasSize(1);
ICompletionProposal proposal = proposals.get(0);
String result;
if (proposal instanceof ICompletionProposalExtension5) {
result = ((ICompletionProposalExtension5)proposal).getAdditionalProposalInfo(null).toString();
} else {
result = proposal.getAdditionalProposalInfo();
}
Assertions.assertThat(result).contains("Test JavaDoc.");
}
}