summaryrefslogtreecommitdiff
path: root/test/junit/scala/tools/nsc/reporters/ConsoleReporterTest.scala
diff options
context:
space:
mode:
Diffstat (limited to 'test/junit/scala/tools/nsc/reporters/ConsoleReporterTest.scala')
-rw-r--r--test/junit/scala/tools/nsc/reporters/ConsoleReporterTest.scala173
1 files changed, 173 insertions, 0 deletions
diff --git a/test/junit/scala/tools/nsc/reporters/ConsoleReporterTest.scala b/test/junit/scala/tools/nsc/reporters/ConsoleReporterTest.scala
new file mode 100644
index 0000000000..f24e11c9e2
--- /dev/null
+++ b/test/junit/scala/tools/nsc/reporters/ConsoleReporterTest.scala
@@ -0,0 +1,173 @@
+package scala
+package tools.nsc
+package reporters
+
+import java.io.{ByteArrayOutputStream, StringReader, BufferedReader, PrintStream, PrintWriter}
+import org.junit.Assert._
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+import scala.reflect.internal.util._
+
+
+@RunWith(classOf[JUnit4])
+class ConsoleReporterTest {
+ val source = "Test_ConsoleReporter"
+ val batchFile = new BatchSourceFile(source, "For testing".toList)
+ val posWithSource = new OffsetPosition(batchFile, 4)
+ val content = posWithSource.lineContent
+ val writerOut = new ByteArrayOutputStream()
+ val echoWriterOut = new ByteArrayOutputStream()
+
+
+ def createConsoleReporter(inputForReader: String, errOut: ByteArrayOutputStream, echoOut: ByteArrayOutputStream = null): ConsoleReporter = {
+ val reader = new BufferedReader(new StringReader(inputForReader))
+
+ /** Create reporter with the same writer and echoWriter if echoOut is null */
+ echoOut match {
+ case null => new ConsoleReporter(new Settings(), reader, new PrintWriter(errOut))
+ case _ => new ConsoleReporter(new Settings(), reader, new PrintWriter(errOut), new PrintWriter(echoWriterOut))
+ }
+ }
+
+
+ def testHelper(pos: Position = NoPosition, msg: String, severity: String = "")(test: Position => Unit) = {
+ test(pos)
+ if (msg.isEmpty && severity.isEmpty) assertTrue(writerOut.toString.isEmpty)
+ else {
+ if (!pos.isDefined) assertEquals(severity + msg, writerOut.toString.lines.next)
+ else {
+ val it = writerOut.toString.lines
+ assertEquals(source + ":1: " + severity + msg, it.next)
+ assertEquals(content, it.next)
+ assertEquals(" ^", it.next)
+ }
+ }
+ writerOut.reset
+ }
+
+
+ @Test
+ def printMessageTest(): Unit = {
+ val reporter = createConsoleReporter("r", writerOut)
+ testHelper(msg = "Hello World!")(_ => reporter.printMessage("Hello World!"))
+ testHelper(msg = "Testing with NoPosition")(reporter.printMessage(_, "Testing with NoPosition"))
+ testHelper(posWithSource, "Testing with Defined Position")(reporter.printMessage(_, "Testing with Defined Position"))
+ }
+
+
+ @Test
+ def echoTest(): Unit = {
+ val reporter = createConsoleReporter("r", writerOut, echoWriterOut)
+ reporter.echo("Hello World!")
+ assertEquals("Hello World!", echoWriterOut.toString.lines.next)
+
+ /** Check with constructor which has the same writer and echoWriter */
+ val reporter2 = createConsoleReporter("r", writerOut)
+ testHelper(msg = "Hello World!")(_ => reporter2.echo("Hello World!"))
+ }
+
+
+ @Test
+ def printTest(): Unit = {
+ val reporter = createConsoleReporter("r", writerOut)
+ testHelper(msg = "test")(reporter.print(_, "test", reporter.INFO))
+ testHelper(msg = "test", severity = "warning: ")(reporter.print(_, "test", reporter.WARNING))
+ testHelper(msg = "test", severity = "error: ")(reporter.print(_, "test", reporter.ERROR))
+ testHelper(posWithSource, msg = "test")(reporter.print(_, "test", reporter.INFO))
+ testHelper(posWithSource, msg = "test", severity = "warning: ")(reporter.print(_, "test", reporter.WARNING))
+ testHelper(posWithSource, msg = "test", severity = "error: ")(reporter.print(_, "test", reporter.ERROR))
+ }
+
+
+ @Test
+ def printColumnMarkerTest(): Unit = {
+ val reporter = createConsoleReporter("r", writerOut)
+ testHelper(msg = "")(reporter.printColumnMarker(_))
+
+ reporter.printColumnMarker(posWithSource)
+ assertEquals(" ^", writerOut.toString.lines.next)
+ writerOut.reset
+ }
+
+
+ @Test
+ def displayTest(): Unit = {
+ val reporter = createConsoleReporter("r", writerOut)
+
+ /** Change maxerrs and maxwarns from default */
+ reporter.settings.maxerrs.value = 1
+ reporter.settings.maxwarns.value = 1
+
+ testHelper(msg = "Testing display")(reporter.display(_, "Testing display", reporter.INFO))
+ testHelper(msg = "Testing display", severity = "warning: ")(reporter.display(_, "Testing display", reporter.WARNING))
+ testHelper(msg = "Testing display", severity = "error: ")(reporter.display(_, "Testing display", reporter.ERROR))
+ testHelper(posWithSource, msg = "Testing display")(reporter.display(_, "Testing display", reporter.INFO))
+ testHelper(posWithSource, msg = "Testing display", severity = "warning: ")(reporter.display(_, "Testing display", reporter.WARNING))
+ testHelper(posWithSource, msg = "Testing display", severity = "error: ")(reporter.display(_, "Testing display", reporter.ERROR))
+
+ reporter.resetCount(reporter.ERROR)
+ reporter.resetCount(reporter.WARNING)
+
+ reporter.ERROR.count += 1
+ testHelper(posWithSource, msg = "Testing display for maxerrs to pass", severity = "error: ")(reporter.display(_, "Testing display for maxerrs to pass", reporter.ERROR))
+ reporter.ERROR.count += 1
+ testHelper(msg = "")(reporter.display(_, "Testing display for maxerrs to fail", reporter.ERROR))
+
+ reporter.WARNING.count += 1
+ testHelper(posWithSource, msg = "Testing display for maxwarns to pass", severity = "warning: ")(reporter.display(_, "Testing display for maxwarns to pass", reporter.WARNING))
+ reporter.WARNING.count += 1
+ testHelper(msg = "")(reporter.display(_, "Testing display for maxwarns to fail", reporter.WARNING))
+ }
+
+
+ @Test
+ def finishTest(): Unit = {
+ val reporter = createConsoleReporter("r", writerOut)
+
+ reporter.resetCount(reporter.ERROR)
+ reporter.resetCount(reporter.WARNING)
+ testHelper(msg = "")(_ => reporter.finish())
+
+ reporter.ERROR.count = 10
+ reporter.WARNING.count = 3
+ reporter.finish()
+ val it = writerOut.toString.lines
+ assertEquals("three warnings found", it.next)
+ assertEquals("10 errors found", it.next)
+ writerOut.reset
+ }
+
+
+ @Test
+ def displayPromptTest(): Unit = {
+ val output = "a)bort, s)tack, r)esume: "
+
+ /** Check for stack trace */
+ val reporter = createConsoleReporter("s", writerOut, echoWriterOut)
+ reporter.displayPrompt()
+ val it = writerOut.toString.lines
+ assertTrue(it.next.isEmpty)
+ assertEquals(output + "java.lang.Throwable", it.next)
+ assertTrue(it.hasNext)
+
+ /** Check for no stack trace */
+ val writerOut2 = new ByteArrayOutputStream()
+ val reporter2 = createConsoleReporter("w", writerOut2)
+ reporter2.displayPrompt()
+ val it2 = writerOut2.toString.lines
+ assertTrue(it2.next.isEmpty)
+ assertEquals(output, it2.next)
+ assertFalse(it2.hasNext)
+
+ /** Check for no stack trace */
+ val writerOut3 = new ByteArrayOutputStream()
+ val reporter3 = createConsoleReporter("r", writerOut3)
+ reporter3.displayPrompt()
+ val it3 = writerOut3.toString.lines
+ assertTrue(it3.next.isEmpty)
+ assertEquals(output, it3.next)
+ assertFalse(it3.hasNext)
+ }
+}