// Copyright 2014 Pants project contributors (see CONTRIBUTORS.md).
// Licensed under the Apache License, Version 2.0 (see LICENSE).
package com.twitter.intellij.pants.execution;
import com.intellij.openapi.util.io.FileUtil;
import com.twitter.intellij.pants.util.PantsOutputMessage;
import com.intellij.testFramework.UsefulTestCase;
import org.jetbrains.annotations.Nullable;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class PantsOutputMessageTest extends UsefulTestCase {
public void doTest(@Nullable PantsOutputMessage expected, @Nullable PantsOutputMessage actual) {
if (expected == null) {
assertNull(actual);
}
else {
assertNotNull(actual);
assertEquals(expected.getStart(), actual.getStart());
assertEquals(expected.getEnd(), actual.getEnd());
assertEquals(expected.getFilePath(), actual.getFilePath());
assertEquals(expected.getLineNumber(), actual.getLineNumber());
}
}
public void testBadMessage() {
PantsOutputMessage info = PantsOutputMessage.parseMessage("bla bla bla", true, false);
assertNull(info);
}
public void testUrl() {
PantsOutputMessage info = PantsOutputMessage.parseOutputMessage("/this/is/a/url");
doTest(new PantsOutputMessage(0, 14, "/this/is/a/url", 0), info);
}
public void testUrlWithSpaces() {
PantsOutputMessage info = PantsOutputMessage.parseOutputMessage(" /this/is/a/url");
doTest(new PantsOutputMessage(5, 19, "/this/is/a/url", 0), info);
}
public void testUrlWithLineNumber() {
PantsOutputMessage info = PantsOutputMessage.parseOutputMessage("/this/is/a/url:23");
doTest(new PantsOutputMessage(0, 17, "/this/is/a/url", 22), info);
}
public void testUrlWithLineNumberAndMessage() {
PantsOutputMessage info = PantsOutputMessage.parseOutputMessage("/this/is/a/url:23: error: ...");
doTest(new PantsOutputMessage(0, 17, "/this/is/a/url", 22, PantsOutputMessage.Level.ERROR), info);
}
public void testUrlWithSpaceAndNumberAndMessage() {
PantsOutputMessage info = PantsOutputMessage.parseOutputMessage(" /this/is/a/url:23: message ...");
doTest(new PantsOutputMessage(5, 22, "/this/is/a/url", 22), info);
}
public void testUrlWithTabsAndNumberAndMessage() {
PantsOutputMessage info = PantsOutputMessage.parseOutputMessage("\t/this/is/a/url:23: message ...");
doTest(new PantsOutputMessage(1, 18, "/this/is/a/url", 22), info);
}
public void testUrlWithErrorInBrackets() {
PantsOutputMessage info = PantsOutputMessage.parseOutputMessage(" [error] /this/is/a/url");
doTest(new PantsOutputMessage(13, 27, "/this/is/a/url", 0, PantsOutputMessage.Level.ERROR), info);
}
public List<PantsOutputMessage> parseCompilationOutputFile(String pathToFile) throws FileNotFoundException, IOException {
assertNotNull(pathToFile);
final List<String> lines = FileUtil.loadLines(new File(pathToFile));
assertNotNull(lines);
List<PantsOutputMessage> list = new ArrayList<PantsOutputMessage>();
for (String line : lines) {
list.add(PantsOutputMessage.parseOutputMessage(line));
}
return list;
}
public void testJavaSourceCompiledWithErrors() throws FileNotFoundException, IOException {
final String pathToCompilationOutput = "testData/testprojects/intellij-integration/src/java/org/pantsbuild/testproject/failures/simple/simpleCompilationOutput.txt";
List<PantsOutputMessage> actualList = parseCompilationOutputFile(pathToCompilationOutput);
assertNotNull(actualList);
assertContainsElements(actualList, new PantsOutputMessage(
25, 188,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/java/org/pantsbuild/testproject/failures/simple/HelloWorld.java",
10, PantsOutputMessage.Level.ERROR),
new PantsOutputMessage(
25, 188,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/java/org/pantsbuild/testproject/failures/simple/HelloWorld.java",
16, PantsOutputMessage.Level.ERROR),
new PantsOutputMessage(
25, 188,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/java/org/pantsbuild/testproject/failures/simple/HelloWorld.java",
16, PantsOutputMessage.Level.ERROR),
new PantsOutputMessage(
25, 188,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/java/org/pantsbuild/testproject/failures/simple/HelloWorld.java",
16, PantsOutputMessage.Level.ERROR),
new PantsOutputMessage(
25, 188,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/java/org/pantsbuild/testproject/failures/simple/HelloWorld.java",
16, PantsOutputMessage.Level.ERROR),
new PantsOutputMessage(
25, 188,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/java/org/pantsbuild/testproject/failures/simple/HelloWorld.java",
16, PantsOutputMessage.Level.ERROR),
new PantsOutputMessage(
25, 188,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/java/org/pantsbuild/testproject/failures/simple/HelloWorld.java",
17, PantsOutputMessage.Level.ERROR),
new PantsOutputMessage(
25, 188,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/java/org/pantsbuild/testproject/failures/simple/HelloWorld.java",
19, PantsOutputMessage.Level.ERROR)
);
}
public void testScalaSourceCompiledWithErrors() throws FileNotFoundException, IOException {
final String pathToCompilationOutput = "testData/testprojects/intellij-integration/src/scala/org/pantsbuild/testproject/failures/simple/simpleCompilationOutput.txt";
List<PantsOutputMessage> actualList = parseCompilationOutputFile(pathToCompilationOutput);
assertNotNull(actualList);
assertContainsElements(actualList, new PantsOutputMessage(
33, 198,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/scala/org/pantsbuild/testproject/failures/simple/HelloWorld.scala",
12, PantsOutputMessage.Level.ERROR),
new PantsOutputMessage(
33, 198,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/scala/org/pantsbuild/testproject/failures/simple/HelloWorld.scala",
13, PantsOutputMessage.Level.ERROR),
new PantsOutputMessage(
33, 198,
"/home/rushana/outreach/new9/intellij-pants-plugin/testData/testprojects/intellij-integration/src/scala/org/pantsbuild/testproject/failures/simple/HelloWorld.scala",
18, PantsOutputMessage.Level.ERROR)
);
}
}