@@ -3,18 +3,20 @@ package dotc
33package reporting
44
55import scala .language .unsafeNulls
6-
7- import java .io .{ PrintStream , PrintWriter , File => JFile , FileOutputStream , StringWriter }
6+ import java .io .{BufferedReader , FileInputStream , FileOutputStream , FileReader , PrintStream , PrintWriter , StringReader , StringWriter , File as JFile }
87import java .text .SimpleDateFormat
98import java .util .Date
10- import core .Decorators ._
9+ import core .Decorators .*
1110
1211import scala .collection .mutable
13-
12+ import scala . jdk . CollectionConverters . *
1413import util .SourcePosition
15- import core .Contexts ._
16- import Diagnostic ._
17- import interfaces .Diagnostic .{ ERROR , WARNING }
14+ import core .Contexts .*
15+ import Diagnostic .*
16+ import dotty .Properties
17+ import interfaces .Diagnostic .{ERROR , WARNING }
18+
19+ import scala .io .Codec
1820
1921class TestReporter protected (outWriter : PrintWriter , filePrintln : String => Unit , logLevel : Int )
2022extends Reporter with UniqueMessagePositions with HideNonSensicalMessages with MessageRendering {
@@ -84,17 +86,23 @@ extends Reporter with UniqueMessagePositions with HideNonSensicalMessages with M
8486}
8587
8688object TestReporter {
89+ private val testLogsDirName : String = " testlogs"
90+ private val failedTestsFileName : String = " last-failed.log"
91+ private val failedTestsFile : JFile = new JFile (s " $testLogsDirName/ $failedTestsFileName" )
92+
8793 private var outFile : JFile = _
8894 private var logWriter : PrintWriter = _
95+ private var failedTestsWriter : PrintWriter = _
8996
9097 private def initLog () = if (logWriter eq null ) {
9198 val date = new Date
9299 val df0 = new SimpleDateFormat (" yyyy-MM-dd" )
93100 val df1 = new SimpleDateFormat (" yyyy-MM-dd-'T'HH-mm-ss" )
94- val folder = s " testlogs /tests- ${df0.format(date)}"
101+ val folder = s " $testLogsDirName /tests- ${df0.format(date)}"
95102 new JFile (folder).mkdirs()
96103 outFile = new JFile (s " $folder/tests- ${df1.format(date)}.log " )
97104 logWriter = new PrintWriter (new FileOutputStream (outFile, true ))
105+ failedTestsWriter = new PrintWriter (new FileOutputStream (failedTestsFile, false ))
98106 }
99107
100108 def logPrintln (str : String ) = {
@@ -144,4 +152,16 @@ object TestReporter {
144152 }
145153 rep
146154 }
155+
156+ def lastRunFailedTests : Option [List [String ]] =
157+ Option .when(
158+ Properties .rerunFailed &&
159+ failedTestsFile.exists() &&
160+ failedTestsFile.isFile
161+ )(java.nio.file.Files .readAllLines(failedTestsFile.toPath).asScala.toList)
162+
163+ def writeFailedTests (tests : List [String ]): Unit =
164+ initLog()
165+ tests.foreach(failed => failedTestsWriter.println(failed))
166+ failedTestsWriter.flush()
147167}
0 commit comments