aboutsummaryrefslogblamecommitdiff
path: root/test/test/CompilerTest.scala
blob: c9c7c602bdea852b25650c93b1df991e85f02e9f (plain) (tree)
1
2
3
4
5
6
7
8
9
10




                                          
                                             



                                          
                                                                                                         

                                                                          
                                                            

                                                                                         
 
                                                                                                                                             
 
                                                                                                                                              

                                                                     
                                                                                                                         

                                              
                                                                                                                   





                                                                             

   
                                                                                                           










                                                                                 
 
                                 










                                                                              
 
package test

import scala.reflect.io._
import org.junit.Test
import scala.collection.mutable.ListBuffer
import dotty.tools.dotc.{Main, Bench, Driver}
import dotty.tools.dotc.reporting.Reporter

class CompilerTest extends DottyTest {

  def compileArgs(args: Array[String], xerrors: Int = 0)(implicit defaultOptions: List[String]): Unit = {
    val allArgs = args ++ defaultOptions
    val processor = if (allArgs.exists(_.startsWith("#"))) Bench else Main
    val nerrors = processor.process(allArgs, ctx).errorCount
    assert(nerrors == xerrors, s"Wrong # of errors. Expected: $xerrors, found: $nerrors")
  }

  def compileLine(cmdLine: String, xerrors: Int = 0)(implicit defaultOptions: List[String]): Unit = compileArgs(cmdLine.split("\n"), xerrors)

  def compileFile(prefix: String, fileName: String, args: List[String] = Nil, xerrors: Int = 0)(implicit defaultOptions: List[String]): Unit =
    compileArgs((s"$prefix$fileName.scala" :: args).toArray, xerrors)

  def compileDir(path: String, args: List[String] = Nil, xerrors: Int = 0)(implicit defaultOptions: List[String]): Unit =
    compileDir(Directory(path), args, xerrors)

  def compileDir(dir: Directory, args: List[String], xerrors: Int)(implicit defaultOptions: List[String]): Unit = {
    val (files, normArgs) = args match {
      case "-deep" :: args1 => (dir.deepFiles, args1)
      case _ => (dir.files, args)
    }
    val fileNames = files.toArray.map(_.toString).filter(_ endsWith ".scala")
    compileArgs(fileNames ++ normArgs, xerrors)
  }

  def compileFiles(path: String, args: List[String] = Nil)(implicit defaultOptions: List[String]): Unit = {
    val dir = Directory(path)
    val fileNames = dir.files.toArray.map(_.toString).filter(_ endsWith ".scala")
    for (name <- fileNames) {
      println(s"testing $name")
      compileArgs((name :: args).toArray, 0)
    }
    for (subdir <- dir.dirs) {
      println(s"testing $subdir")
      compileDir(subdir, args, 0)
    }
  }
}
object CompilerTest extends App {

//  val dotcDir = "/Users/odersky/workspace/dotty/src/dotty/"

//  new CompilerTest().compileFile(dotcDir + "tools/dotc/", "CompilationUnit")
//  new CompilerTest().compileFile(dotcDir + "tools/dotc/", "Compiler")
//  new CompilerTest().compileFile(dotcDir + "tools/dotc/", "Driver")
//  new CompilerTest().compileFile(dotcDir + "tools/dotc/", "Main")
//  new CompilerTest().compileFile(dotcDir + "tools/dotc/", "Run")

//  new CompilerTest().compileDir(dotcDir + "tools/dotc")
 // new CompilerTest().compileFile(dotcDir + "tools/dotc/", "Run")
}