package com.sap.furcas.ide.editor.contentassist;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import com.sap.furcas.metamodel.FURCAS.TCS.FunctionCall;
import com.sap.furcas.runtime.common.util.TCSSpecificOCLEvaluator;
import com.sap.furcas.runtime.tcs.testbase.TCSFixtureTestBase;
public class TestCtsContentAssistUtil extends TCSFixtureTestBase {
private CtsContentAssistContext context;
private TCSSpecificOCLEvaluator oclEvaluator;
@Before
public void createContext() {
context = new CtsContentAssistContext();
Stack<FunctionCall> parentFunctionCallStack = new Stack<FunctionCall>();
context.setParentFunctionCallStack(parentFunctionCallStack);
oclEvaluator = new TCSSpecificOCLEvaluator();
}
@Test
public void testFollowProposalsFromContextMain1Lit() {
List<String> expected = new ArrayList<String>();
// from main2Cond then branch
expected.add("keywordA");
// as main2Cond else branch is empty, from main3Prop
expected.add("name");
context.setSequenceElement(main1Lit);
assertEquals(expected, CompletionListHelper.collectDisplayStrings(CompletionListHelper
.removeNullValues(CtsCompletionCalculator.createFollowProposalsFromContext(null, context, null, null, 0, 0, null,
null, oclEvaluator))));
}
@Test
public void testFollowProposalsFromContextMain2CondThenLit() {
List<String> expected = new ArrayList<String>();
expected.add("name");
context.setSequenceElement(main2CondThenLit);
assertEquals(expected, CompletionListHelper.collectDisplayStrings(CompletionListHelper
.removeNullValues(CtsCompletionCalculator.createFollowProposalsFromContext(null, context, null, null, 0, 0, null,
null, oclEvaluator))));
}
@Test
public void testFollowProposalsFromContextMain3Prop() {
List<String> expected = new ArrayList<String>();
expected.add("keywordB");
expected.add("symbolB");
context.setSequenceElement(main3Prop);
assertEquals(expected, CompletionListHelper.collectDisplayStrings(CompletionListHelper
.removeNullValues(CtsCompletionCalculator.createFollowProposalsFromContext(null, context, null, null, 0, 0, null,
null, oclEvaluator))));
}
@Ignore("Failing after the EMF migration. Failing for unknown reasons")
@Test
public void testFollowProposalsFromContextMain4AltCase1Lit() {
List<String> expected = new ArrayList<String>();
// not mode 1
// from mode2
expected.add("symbolB");
// from funcTemplateLit
expected.add("keywordA");
context.setSequenceElement(main4AltCase1Lit);
assertEquals(expected, CompletionListHelper.collectDisplayStrings(CompletionListHelper
.removeNullValues(CtsCompletionCalculator.createFollowProposalsFromContext(null, context, classTemplateMap, null, 0,
0, null, null, oclEvaluator))));
}
@Ignore("Failing after the EMF migration. Failing for unknown reasons")
@Test
public void testFollowProposalsFromContextMain5BlockProp() {
List<String> expected = new ArrayList<String>();
// main5BlockProp is multi-valued, repeat possible tokens of
// main5BlockProp
// not mode 1
// from mode2
expected.add("symbolB");
// from next SequenceElement
expected.add("keywordA");
context.setSequenceElement(main5BlockProp);
assertEquals(expected, CompletionListHelper.collectDisplayStrings(CompletionListHelper
.removeNullValues(CtsCompletionCalculator.createFollowProposalsFromContext(null, context, classTemplateMap, null, 0,
0, null, null, oclEvaluator))));
}
@Test
public void testFollowProposalsFromContextFuncTemplateLitInMain6Call() {
List<String> expected = new ArrayList<String>();
expected.add("keywordA");
context.setSequenceElement(funcTemplateLit);
context.getParentFunctionCallStack().push(main6Call);
assertEquals(expected, CompletionListHelper.collectDisplayStrings(CompletionListHelper
.removeNullValues(CtsCompletionCalculator.createFollowProposalsFromContext(null, context, null, null, 0, 0, null,
null, oclEvaluator))));
}
@Test
public void testFollowProposalsFromContextMain7Lit() {
List<String> expected = new ArrayList<String>();
expected.add("keywordA");
context.setSequenceElement(main7Lit);
assertEquals(expected, CompletionListHelper.collectDisplayStrings(CompletionListHelper
.removeNullValues(CtsCompletionCalculator.createFollowProposalsFromContext(null, context, null, null, 0, 0, null,
null, oclEvaluator))));
}
@Test
public void testFollowProposalsFromContextFuncTemplateLitInMain8Call() {
List<String> expected = new ArrayList<String>();
expected.add("keywordB");
context.setSequenceElement(funcTemplateLit);
context.getParentFunctionCallStack().push(main8Call);
assertEquals(expected, CompletionListHelper.collectDisplayStrings(CompletionListHelper
.removeNullValues(CtsCompletionCalculator.createFollowProposalsFromContext(null, context, null, null, 0, 0, null,
null, oclEvaluator))));
}
@Test
public void testFollowProposalsFromContextNull() {
List<String> expected = new ArrayList<String>();
assertEquals(expected,
CompletionListHelper.collectDisplayStrings(CompletionListHelper.removeNullValues(CtsCompletionCalculator
.createFollowProposalsFromContext(null, null, null, null, 0, 0, null, null, oclEvaluator))));
}
@Test
public void testGetCommonPrefix() {
String a = "aaaabbbbbb";
String b = "aa";
String c = "aaaccccc";
assertEquals("aa", CtsContentAssistUtil.getCommonPrefix(a, b));
assertEquals("aaa", CtsContentAssistUtil.getCommonPrefix(a, c));
}
}