package org.elixir_lang.parser_definition;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.tree.LeafPsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.testFramework.LightVirtualFile;
import org.elixir_lang.ElixirLanguage;
import org.elixir_lang.psi.Operator;
import org.elixir_lang.psi.operation.Operation;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.util.Collection;
public class InfixParsingTestCase extends ParsingTestCase {
/*
* Static Methods
*/
private static void assertOperator(Operation operation, @NotNull String operatorText) {
assertEquals(operatorText, operation.operator().getText());
}
/*
* Tests
*/
public void testIssue251() {
Operation[] operations = operations();
assertEquals(1, operations.length);
assertOperator(operations[0], "=");
}
public void testIssue251WithNoLeftOperand() {
Operation[] operations = operations();
assertEquals(2, operations.length);
assertOperator(operations[0], "=");
assertOperator(operations[1], "=");
}
public void testWellFormed() {
Operation[] operations = operations();
assertEquals(2, operations.length);
assertOperator(operations[0], "=");
assertOperator(operations[1], "=");
}
/*
*
* Instance Methods
* *
*/
@Override
protected String getTestDataPath() {
return super.getTestDataPath() + "/infix_parsing_test_case";
}
@NotNull
private Operation[] operations() {
PsiFile root = root();
Collection<Operation> operationCollection = PsiTreeUtil.findChildrenOfType(root, Operation.class);
return operationCollection.toArray(new Operation[operationCollection.size()]);
}
@NotNull
private PsiFile root() {
String name = getTestName(false);
PsiFile root;
try {
String text = loadFile(name + "." + myFileExt);
myFile = createPsiFile(name, text);
ensureParsed(myFile);
assertEquals("light virtual file text mismatch", text, ((LightVirtualFile) myFile.getVirtualFile()).getContent().toString());
assertEquals("virtual file text mismatch", text, LoadTextUtil.loadText(myFile.getVirtualFile()));
assertEquals("doc text mismatch", text, myFile.getViewProvider().getDocument().getText());
assertEquals("psi text mismatch", text, myFile.getText());
FileViewProvider fileViewProvider = myFile.getViewProvider();
root = fileViewProvider.getPsi(ElixirLanguage.INSTANCE);
assertNotNull(root);
} catch (IOException exception) {
throw new RuntimeException(exception);
}
return root;
}
}