From cc990265406c4d7db96e4c1acac59bdb25ec1c20 Mon Sep 17 00:00:00 2001 From: piyush-jaiswal Date: Wed, 22 Feb 2017 02:56:06 +0530 Subject: Add tests for ConsoleReporter. --- .../tools/nsc/reporters/ConsoleReporterTest.scala | 173 +++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 test/junit/scala/tools/nsc/reporters/ConsoleReporterTest.scala (limited to 'test') 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) + } +} -- cgit v1.2.3