package org.pdtextensions.core.tests.codeassist; import junit.framework.TestCase; import org.junit.Test; public class CodeAssistTest extends TestCase /*extends AbstractPDTTTest*/ { @Test public void testDummy() { assertTrue(true); } /* protected static final List<String> TESTS = new ArrayList<>(); private static IProject project; protected static IFile testFile; protected static final char OFFSET_CHAR = '|'; static { TESTS.add("/workspace/codeassist/php54"); }; public CodeAssistTest(String description) { super(description); } public static Test suite() { TestSuite suite = new TestSuite("Method override Codeassist Tests"); for (String testsDirectory : TESTS) { TestSuite phpVerSuite = new TestSuite("test"); for (final String fileName : dogetPDTTFiles(testsDirectory)) { try { final CodeAssistPdttFile pdttFile = new CodeAssistPdttFile(fileName); phpVerSuite.addTest(new CodeAssistTest(fileName) { protected void setUp() throws Exception { PHPCoreTests.setProjectPhpVersion(project, PHPVersion.PHP5_4); pdttFile.applyPreferences(); } protected void tearDown() throws Exception { if (testFile != null) { testFile.delete(true, null); testFile = null; } } protected void runTest() throws Throwable { CompletionProposal[] proposals = getProposals(pdttFile .getFile()); compareProposals(proposals, pdttFile); } }); } catch (final Exception e) { suite.addTest(new TestCase(fileName) { // dummy // test // indicating // PDTT // file // parsing // failure protected void runTest() throws Throwable { throw e; } }); } } suite.addTest(phpVerSuite); } // Create a setup wrapper TestSetup setup = new TestSetup(suite) { protected void setUp() throws Exception { setUpSuite(); } protected void tearDown() throws Exception { tearDownSuite(); } }; return setup; } public static void setUpSuite() throws Exception { project = ResourcesPlugin.getWorkspace().getRoot() .getProject("CodeAssistTest"); if (project.exists()) { return; } project.create(null); project.open(null); // configure nature IProjectDescription desc = project.getDescription(); desc.setNatureIds(new String[] { PHPNature.ID }); project.setDescription(desc, null); } public static void tearDownSuite() throws Exception { project.close(null); project.delete(true, true, null); project = null; } protected static ISourceModule getSourceModule() { return DLTKCore.createSourceModuleFrom(testFile); } public static CompletionProposal[] getProposals(String data) throws Exception { int offset = createFile(data); return getProposals(offset); } public static CompletionProposal[] getProposals(int offset) throws ModelException { return getProposals(getSourceModule(), offset); } public static CompletionProposal[] getProposals(ISourceModule sourceModule, int offset) throws ModelException { final List<CompletionProposal> proposals = new LinkedList<CompletionProposal>(); final CompletionRequestor requestor = new CompletionRequestor() { public void accept(CompletionProposal proposal) { proposals.add(proposal); } }; sourceModule.codeComplete(offset, requestor, 1000); return (CompletionProposal[]) proposals .toArray(new CompletionProposal[proposals.size()]); } public static void compareProposals(CompletionProposal[] proposals, CodeAssistPdttFile pdttFile) throws Exception { ExpectedProposal[] expectedProposals = pdttFile.getExpectedProposals(); boolean proposalsEqual = true; if (proposals.length == expectedProposals.length) { for (ExpectedProposal expectedProposal : pdttFile .getExpectedProposals()) { boolean found = false; for (CompletionProposal proposal : proposals) { IModelElement modelElement = proposal.getModelElement(); if (modelElement == null) { if (new String(proposal.getName()) .equalsIgnoreCase(expectedProposal.name)) { // keyword found = true; break; } } else if (modelElement.getElementType() == expectedProposal.type) { if (modelElement instanceof AliasType) { if (((AliasType) modelElement).getAlias().equals( expectedProposal.name)) { found = true; break; } } else if ((modelElement instanceof FakeConstructor) && (modelElement.getParent() instanceof AliasType)) { if (((AliasType) modelElement.getParent()) .getAlias().equals(expectedProposal.name)) { found = true; break; } } else { if (modelElement.getElementName().equalsIgnoreCase( expectedProposal.name)) { found = true; break; } } } else if (modelElement.getElementType() == expectedProposal.type && new String(proposal.getName()) .equalsIgnoreCase(expectedProposal.name)) { // for phar include found = true; break; } } if (!found) { proposalsEqual = false; break; } } } else { proposalsEqual = false; } if (!proposalsEqual) { StringBuilder errorBuf = new StringBuilder(); errorBuf.append("\nEXPECTED COMPLETIONS LIST:\n-----------------------------\n"); errorBuf.append(pdttFile.getExpected()); errorBuf.append("\nACTUAL COMPLETIONS LIST:\n-----------------------------\n"); for (CompletionProposal p : proposals) { IModelElement modelElement = p.getModelElement(); if (modelElement == null || modelElement.getElementName() == null) { errorBuf.append("keyword(").append(p.getName()) .append(")\n"); } else { switch (modelElement.getElementType()) { case IModelElement.FIELD: errorBuf.append("field"); break; case IModelElement.METHOD: errorBuf.append("method"); break; case IModelElement.TYPE: errorBuf.append("type"); break; } if (modelElement instanceof AliasType) { errorBuf.append('(') .append(((AliasType) modelElement).getAlias()) .append(")\n"); } else { errorBuf.append('(') .append(modelElement.getElementName()) .append(")\n"); } } } fail(errorBuf.toString()); } } protected static int createFile(String data) throws Exception { int offset = data.lastIndexOf(OFFSET_CHAR); if (offset == -1) { throw new IllegalArgumentException("Offset character is not set"); } // replace the offset character data = data.substring(0, offset) + data.substring(offset + 1); testFile = project.getFile("test.php"); testFile.create(new ByteArrayInputStream(data.getBytes()), true, null); project.refreshLocal(IResource.DEPTH_INFINITE, null); project.build(IncrementalProjectBuilder.FULL_BUILD, null); PHPCoreTests.waitForIndexer(); // PHPCoreTests.waitForAutoBuild(); return offset; } protected static String[] dogetPDTTFiles(String testsDirectory) { return AbstractPDTTTest.getPDTTFiles(testsDirectory, PEXCoreTestPlugin.getDefault() .getBundle()); } */ }