package org.example.expressions.tests;
import com.google.inject.Inject;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.junit4.InjectWith;
import org.eclipse.xtext.junit4.XtextRunner;
import org.eclipse.xtext.junit4.util.ParseHelper;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Extension;
import org.eclipse.xtext.xbase.lib.Functions.Function1;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.ListExtensions;
import org.eclipse.xtext.xbase.lib.ObjectExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.example.expressions.ExpressionsInjectorProvider;
import org.example.expressions.expressions.AbstractElement;
import org.example.expressions.expressions.ExpressionsModel;
import org.example.expressions.expressions.Variable;
import org.example.expressions.typing.ExpressionsModelUtil;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(XtextRunner.class)
@InjectWith(ExpressionsInjectorProvider.class)
@SuppressWarnings("all")
public class ExpressionsModelUtilTest {
@Inject
@Extension
private ParseHelper<ExpressionsModel> _parseHelper;
@Test
public void variablesBeforeVariable() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("true\t// (0)");
_builder.newLine();
_builder.append("i = 0\t// (1)");
_builder.newLine();
_builder.append("i + 10\t// (2)");
_builder.newLine();
_builder.append("j = i\t// (3)");
_builder.newLine();
_builder.append("i + j\t// (4)");
_builder.newLine();
ExpressionsModel _parse = this._parseHelper.parse(_builder);
final Procedure1<ExpressionsModel> _function = new Procedure1<ExpressionsModel>() {
@Override
public void apply(final ExpressionsModel it) {
ExpressionsModelUtilTest.this.assertVariablesDefinedBefore(it, 0, "");
ExpressionsModelUtilTest.this.assertVariablesDefinedBefore(it, 1, "");
ExpressionsModelUtilTest.this.assertVariablesDefinedBefore(it, 2, "i");
ExpressionsModelUtilTest.this.assertVariablesDefinedBefore(it, 3, "i");
ExpressionsModelUtilTest.this.assertVariablesDefinedBefore(it, 4, "i,j");
}
};
ObjectExtensions.<ExpressionsModel>operator_doubleArrow(_parse, _function);
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
public void assertVariablesDefinedBefore(final ExpressionsModel model, final int elemIndex, final CharSequence expectedVars) {
EList<AbstractElement> _elements = model.getElements();
AbstractElement _get = _elements.get(elemIndex);
List<Variable> _variablesDefinedBefore = ExpressionsModelUtil.variablesDefinedBefore(_get);
final Function1<Variable, String> _function = new Function1<Variable, String>() {
@Override
public String apply(final Variable it) {
return it.getName();
}
};
List<String> _map = ListExtensions.<Variable, String>map(_variablesDefinedBefore, _function);
String _join = IterableExtensions.join(_map, ",");
Assert.assertEquals(expectedVars, _join);
}
}