package com.sap.finex.editor.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.ui.PartInitException;
import org.junit.Test;
import structure.FinexClass;
import behavior.expressions.BinaryNumericOperator;
import behavior.expressions.Expression;
import behavior.expressions.literals.IntegerLiteral;
import com.sap.ide.cts.editor.AbstractGrammarBasedEditor;
import com.sap.ide.cts.editor.document.CtsDocument;
public class TestFinexEditingActions extends FinexEditorTest {
/**
* The editor gives an error dialog and the model is not updated.
*/
@Test
public void testAddingValidation() throws PartInitException, BadLocationException, CoreException {
FinexClass testInfixChangeClass = findClass("TestFinexInfixOperatorChange");
// Source / Copy of: PF.IDE:E007956A7EF09B11E0BA11DE91A5CC610A140E7A
assertNotNull(testInfixChangeClass);
assertTrue(testInfixChangeClass.is___Alive());
AbstractGrammarBasedEditor editor = openEditor(testInfixChangeClass);
CtsDocument document = getDocument(editor);
document.replace(49, 0, "\n ");
document.replace(54, 0, "[]");
document.replace(55, 0, "2");
document.replace(56, 0, " ");
document.replace(57, 0, "<");
document.replace(58, 0, " ");
document.replace(59, 0, "3");
document.replace(61, 0, ";");
saveAll(editor);
failOnError(editor);
assertTrue(testInfixChangeClass.is___Alive());
// Your assertions on refObject here
assertEquals(2, testInfixChangeClass.getInvariants().size());
boolean found = false;
for (Expression e : testInfixChangeClass.getInvariants()) {
if (e instanceof BinaryNumericOperator) {
BinaryNumericOperator bno = (BinaryNumericOperator) e;
if (bno.getOperator().equals("<")) {
found = found || (bno.getLeft() instanceof IntegerLiteral &&
bno.getRight() instanceof IntegerLiteral &&
((IntegerLiteral) bno.getLeft()).getLiteral().equals("2") &&
((IntegerLiteral) bno.getRight()).getLiteral().equals("3"));
}
}
}
assertTrue("Didn't find an invariant [ 2 < 3]", found);
close(editor);
};
/**
* The test failed because the incremental editor simply did not update the operator in the model
*/
@Test
public void testChangeInfixOperatorFromPlusToMinus() throws PartInitException, BadLocationException, CoreException {
FinexClass testInfixChangeClass = findClass("TestFinexInfixOperatorChange");
assertNotNull(testInfixChangeClass);
assertTrue(testInfixChangeClass.is___Alive());
AbstractGrammarBasedEditor editor = openEditor(testInfixChangeClass);
CtsDocument document = getDocument(editor);
document.replace(39, 1, "");
document.replace(39, 0, "+");
saveAll(editor);
failOnError(editor);
assertTrue(testInfixChangeClass.is___Alive());
BinaryNumericOperator invariant = (BinaryNumericOperator) testInfixChangeClass.getInvariants().iterator().next();
BinaryNumericOperator expectedPlusOperator = (BinaryNumericOperator) invariant.getLeft();
assertEquals("+", expectedPlusOperator.getOperator());
close(editor);
};
/**
* The test failed because the incremental editor simply did not update the operator in the model
* @throws BadLocationException
*/
@Test
public void testFindClass() throws PartInitException, CoreException, BadLocationException {
FinexClass testInfixChangeClass = findClass("TestFinexInfixOperatorChange");
assertNotNull(testInfixChangeClass);
assertTrue(testInfixChangeClass.is___Alive());
AbstractGrammarBasedEditor editor = openEditor(testInfixChangeClass);
CtsDocument document = getDocument(editor);
document.replace(38, 1, ""); // replace a + by a +
document.replace(38, 0, "+");
saveAll(editor);
failOnError(editor);
assertTrue(testInfixChangeClass.is___Alive());
BinaryNumericOperator invariant = (BinaryNumericOperator) testInfixChangeClass.getInvariants().iterator().next();
assertNotNull(invariant);
close(editor);
};
}