package com.temenos.interaction.rimdsl.formatting;
import static org.junit.Assert.*;
import java.io.IOException;
import java.net.URL;
import javax.inject.Inject;
import org.eclipse.xtext.formatting.INodeModelFormatter;
import org.eclipse.xtext.junit4.InjectWith;
import org.eclipse.xtext.junit4.XtextRunner;
import org.eclipse.xtext.junit4.util.ParseHelper;
import org.eclipse.xtext.nodemodel.ICompositeNode;
import org.eclipse.xtext.parser.IParseResult;
import org.eclipse.xtext.resource.XtextResource;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.google.common.base.Charsets;
import com.google.common.io.Resources;
import com.temenos.interaction.rimdsl.RIMDslInjectorProvider;
import com.temenos.interaction.rimdsl.rim.DomainModel;
import com.temenos.interaction.rimdsl.rim.DomainDeclaration;
import java.io.BufferedReader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
/**
* Tests Formatting.
*
* @author aphethean
*/
@RunWith(XtextRunner.class)
@InjectWith(RIMDslInjectorProvider.class)
public class FormatterTest {
@Inject
ParseHelper<DomainModel> parser;
@Inject
INodeModelFormatter formatter;
@Test
public void testFormatting() throws Exception {
String text = loadTestRIM("Simple.rim");
DomainModel domainModel = parser.parse(text);
DomainDeclaration domainDeclaration = (DomainDeclaration) domainModel.getRims().get(0);
IParseResult parseResult = ((XtextResource) domainDeclaration.eResource()).getParseResult();
assertNotNull(parseResult);
ICompositeNode rootNode = parseResult.getRootNode();
String formattedText = formatter.format(rootNode, 0, text.length()).getFormattedText();
assertEquals(toNormalizedLineList(text),toNormalizedLineList(formattedText));
}
@Test
public void testFormattingWithDomain() throws Exception {
String text = loadTestRIM("TestFormat.rim");
DomainModel domainModel = parser.parse(text);
IParseResult parseResult = ((XtextResource) domainModel.eResource()).getParseResult();
assertNotNull(parseResult);
ICompositeNode rootNode = parseResult.getRootNode();
String formattedText = formatter.format(rootNode, 0, text.length()).getFormattedText();
assertEquals(toNormalizedLineList(text),toNormalizedLineList(formattedText));
}
private String loadTestRIM(String rimPath) throws IOException {
URL url = Resources.getResource(rimPath);
String rim = Resources.toString(url, Charsets.UTF_8);
return rim;
}
private String toNormalizedLineList(String source) throws IOException {
StringBuffer lines = new StringBuffer();
BufferedReader reader = new BufferedReader(new StringReader(source));
String line = null;
while ((line = reader.readLine()) != null) {
line = line.trim();
if (!line.equals(""))
lines.append(line.trim()).append('\n');
}
return lines.toString();
}
}