package com.sap.furcas.ide.editor.contentassist.processor; import static org.junit.Assert.fail; import java.io.InputStream; import java.util.List; import org.eclipse.jface.text.ITextViewer; import com.sap.furcas.ide.editor.contentassist.CompletionListHelper; import com.sap.furcas.ide.editor.contentassist.CtsContentAssistProcessor; import com.sap.furcas.ide.editor.contentassist.TestCtsContentAssistParsingHandler; import com.sap.furcas.ide.editor.contentassist.stubs.TextViewerStub; import com.sap.furcas.ide.editor.test.utils.GeneratedTextblocksBasedTest; import com.sap.furcas.ide.editor.test.utils.StringReplacement; import com.sap.furcas.runtime.common.exceptions.ParserInstantiationException; import com.sap.ide.cts.parser.errorhandling.SemanticParserException; import com.sap.ide.cts.parser.incremental.IncrementalParserFacade; public abstract class CtsContentAssistProcessorTestBase extends GeneratedTextblocksBasedTest { protected CtsContentAssistProcessor processor; protected ITextViewer viewer; /** * @param fixtureName * @param postFixtureParseReplacement * this is used to insert unparsable text after the fixture has * been parsed (emulating the user typing it in after a * successful and correct save) * @param languageTcsFile */ protected void initProcessorForFixture(String fixtureName, StringReplacement postFixtureParseReplacement, IncrementalParserFacade facade) throws ParserInstantiationException, SemanticParserException { String fixturePath = "fixtures/" + fixtureName + ".dsl"; viewer = new TextViewerStub(fixturePath, postFixtureParseReplacement); InputStream in = TestCtsContentAssistParsingHandler.class.getResourceAsStream(fixturePath); initTbModel(in, facade, postFixtureParseReplacement); processor = new CtsContentAssistProcessor(facade); } /** * * @param expected * @param line * @param charPositionInLine */ protected void assertDisplayStrings(List<String> expected, int line, int charPositionInLine) { List<String> displayStrings = CompletionListHelper.collectDisplayStrings(processor.computeCompletionProposals(viewer, line, charPositionInLine, tbModel)); boolean fail = false; String failMsg = ""; if (expected.size() != displayStrings.size()) { fail = true; failMsg = "result number differs: expected " + expected.size() + " but was " + displayStrings.size(); } for (int i = 0; i < displayStrings.size() && i < expected.size(); i++) { if (!fail) { String expectedString = expected.get(i); String displayString = displayStrings.get(i); if (!expectedString.equals(displayString)) { fail = true; failMsg = "position " + i + " differs. expected: " + expectedString + " but was: " + displayString; } } } if (fail) { System.out.println("DEBUGINFO assertDisplayStrings failed:"); System.out.println("EXPECTED:"); for (String e : expected) { System.out.println("expected.add(\"" + e + "\");"); } System.out.println("RESULT:"); for (String r : displayStrings) { System.out.println("expected.add(\"" + r + "\");"); } fail(failMsg); } } }