@@ -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-" 
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