blob: 21cc8fe80faa446ad31481b11bfcae57848378b0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2014 Xored Software Inc and others.
* 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:
* Xored Software Inc - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.rcptt.core.ecl.parser.test;
import static org.eclipse.rcptt.core.ecl.parser.test.ResolverTest.cont;
import static org.eclipse.rcptt.core.ecl.parser.test.ResolverTest.multiCommandCont;
import static junit.framework.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.junit.Test;
import org.eclipse.rcptt.core.ecl.model.BaseContainer;
import org.eclipse.rcptt.core.ecl.parser.ast.Parser;
import org.eclipse.rcptt.core.ecl.parser.model.Completer;
import org.eclipse.rcptt.core.ecl.parser.model.Proposal;
import org.eclipse.rcptt.core.ecl.parser.model.Proposal.ArgNameProposal;
import org.eclipse.rcptt.core.ecl.parser.model.Proposal.ProcNameProposal;
import org.eclipse.rcptt.core.ecl.parser.model.Proposal.VarValueProposal;
public class CompleterTest {
@Test
public void testEmptyScript() {
List<Proposal> proposals = proposals("", 0);
assertEquals(3, proposals.size());
assertProposal(proposals.get(0), VarValueProposal.class, "$param1");
assertProposal(proposals.get(1), VarValueProposal.class, "$param2");
assertProposal(proposals.get(2), ProcNameProposal.class, "proc");
}
@Test
public void testSingleCommand() {
List<Proposal> proposals = proposals("p", 1);
assertEquals(1, proposals.size());
assertProposal(proposals.get(0), ProcNameProposal.class, "proc");
}
@Test
public void testSingleCommandNoMatch() {
List<Proposal> proposals = proposals("d", 1);
assertEquals(0, proposals.size());
}
@Test
public void testSingleDollar() {
List<Proposal> proposals = proposals("$", 1);
assertEquals(2, proposals.size());
assertProposal(proposals.get(0), VarValueProposal.class, "$param1");
assertProposal(proposals.get(1), VarValueProposal.class, "$param2");
}
@Test
public void testArgProposal() {
List<Proposal> proposals = proposals("proc ", 5);
assertEquals(5, proposals.size());
assertProposal(proposals.get(0), ArgNameProposal.class, "-arg1");
assertProposal(proposals.get(1), ArgNameProposal.class, "-arg2");
assertProposal(proposals.get(2), ArgNameProposal.class, "-lastArg");
assertProposal(proposals.get(3), VarValueProposal.class, "$param1");
assertProposal(proposals.get(4), VarValueProposal.class, "$param2");
}
@Test
public void testArgProposalAfterDash() {
List<Proposal> proposals = proposals("proc -", 6);
assertEquals(3, proposals.size());
assertProposal(proposals.get(0), ArgNameProposal.class, "-arg1");
assertProposal(proposals.get(1), ArgNameProposal.class, "-arg2");
assertProposal(proposals.get(2), ArgNameProposal.class, "-lastArg");
}
@Test
public void testMultiCommandOneStringArgProposal() {
final String scriptText = "proc -arg1 \"test1\" | proc2 \"test\" ";
List<Proposal> proposals = proposals(scriptText, scriptText.length(), multiCommandCont);
assertEquals(3, proposals.size());
assertProposal(proposals.get(0), ArgNameProposal.class, "-proc2Arg");
assertProposal(proposals.get(1), VarValueProposal.class, "$param1");
assertProposal(proposals.get(2), VarValueProposal.class, "$param2");
}
@Test
public void testMultiCommandMultiStringArgProposal() {
final String scriptText = "proc -arg1 \"test1\" \nproc2 \"test\" ";
List<Proposal> proposals = proposals(scriptText, scriptText.length(), multiCommandCont);
assertEquals(3, proposals.size());
assertProposal(proposals.get(0), ArgNameProposal.class, "-proc2Arg");
assertProposal(proposals.get(1), VarValueProposal.class, "$param1");
assertProposal(proposals.get(2), VarValueProposal.class, "$param2");
}
@Test
public void testArgNonLastLineProposal() {
List<Proposal> proposals = proposals("proc \nproc ", 5);
assertEquals(5, proposals.size());
assertProposal(proposals.get(0), ArgNameProposal.class, "-arg1");
assertProposal(proposals.get(1), ArgNameProposal.class, "-arg2");
assertProposal(proposals.get(2), ArgNameProposal.class, "-lastArg");
assertProposal(proposals.get(3), VarValueProposal.class, "$param1");
assertProposal(proposals.get(4), VarValueProposal.class, "$param2");
}
@Test
public void testPrefixedArgProposalVar() {
List<Proposal> proposals = proposals("proc $p", 6);
assertEquals(2, proposals.size());
assertProposal(proposals.get(0), VarValueProposal.class, "$param1");
assertProposal(proposals.get(1), VarValueProposal.class, "$param2");
}
@Test
public void testDollarArgProposal() {
List<Proposal> proposals = proposals("proc $", 5);
assertEquals(2, proposals.size());
assertProposal(proposals.get(0), VarValueProposal.class, "$param1");
assertProposal(proposals.get(1), VarValueProposal.class, "$param2");
}
@Test
public void testPrefixedArgProposalArgName() {
List<Proposal> proposals = proposals("proc -a", 6);
assertEquals(2, proposals.size());
assertProposal(proposals.get(0), ArgNameProposal.class, "-arg1");
assertProposal(proposals.get(1), ArgNameProposal.class, "-arg2");
}
@Test
public void testPrefixedFilteredArgProposalArgName() {
List<Proposal> proposals = proposals("proc -l", 7);
assertEquals(1, proposals.size());
assertProposal(proposals.get(0), ArgNameProposal.class, "-lastArg");
}
@Test
public void testPrefixedFilteredArgProposalArgNameNonLastLine() {
List<Proposal> proposals = proposals("proc -l\nfoo", 7);
assertEquals(1, proposals.size());
assertProposal(proposals.get(0), ArgNameProposal.class, "-lastArg");
}
@Test
public void testCommentsProposals() {
List<Proposal> proposals = proposals("/* */", 3);
assertEquals(0, proposals.size());
}
private static void assertProposal(Proposal p, Class<? extends Proposal> type, String text) {
assertTrue(type.isAssignableFrom(p.getClass()));
assertEquals(text, p.fullText());
}
private static List<Proposal> proposals(String text, int offset) {
return proposals(text, offset, cont);
}
private static List<Proposal> proposals(String text, int offset, BaseContainer container) {
return Completer.proposals(Parser.parse(text), offset, container);
}
}