Skip to content

Killing partest part 2 - Enter the Vulpix #2194

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 25 commits into from
Apr 12, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d65e4ea
Rename test suite to "vulpix"
felixmulder Apr 3, 2017
5c573d3
Add reproduction instr for pos separate compilation
felixmulder Apr 3, 2017
c15b83b
Add cleanup hooks to SummaryReporter
felixmulder Apr 3, 2017
2969101
Add initial RunnerOrchestration interface
felixmulder Apr 3, 2017
429066b
Implement inter-VM communication logic
felixmulder Apr 3, 2017
a3078ee
Fix settings having uninitialized values
felixmulder Apr 4, 2017
a5b9d07
Complete subprocess communication protocol
felixmulder Apr 4, 2017
eff50df
Add `RunnerOrchestration` to `ParallelTesting` trait
felixmulder Apr 4, 2017
2f1a542
Remove partest, keeping `dotc.tests` for now
felixmulder Apr 4, 2017
7dcfbd7
Rename filter shorthand to vulpix and update `drone.yml`
felixmulder Apr 5, 2017
923533e
Move vulpix to `dotty.tools.vulpix`
felixmulder Apr 5, 2017
c1e787f
Make inter JVM communication be string based
felixmulder Apr 5, 2017
95732a3
Improve test failure output
felixmulder Apr 5, 2017
0ee9977
Disable scalac internals tests
felixmulder Apr 5, 2017
67065d0
Add vulpix docstrings and change defines
felixmulder Apr 5, 2017
1fced2b
Only complete tests after run has been performed
felixmulder Apr 6, 2017
07fab41
Add `Properties` object for dotty testing props and env
felixmulder Apr 6, 2017
8fe0d14
Fix interactive mode in eclipse
felixmulder Apr 6, 2017
55803b2
Implement meta tests suggested by @DarkDimius
felixmulder Apr 7, 2017
d42a28d
Add ability to only compile run tests
felixmulder Apr 7, 2017
f891b22
Make sure that everything is dumped to log files
felixmulder Apr 10, 2017
bcdacee
Remove need for java written summary reporter
felixmulder Apr 11, 2017
7c42277
Make vulpix test filter work on substring instead of regexp
felixmulder Apr 12, 2017
ebd1670
Remove duplication with run test output verification
felixmulder Apr 12, 2017
f6d519a
Add docs to SummaryReport.scala
felixmulder Apr 12, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,7 @@ pipeline:

matrix:
TEST:
- ;set testOptions in LocalProject("dotty-compiler") += Tests.Argument(TestFrameworks.JUnit, "--exclude-categories=dotty.tools.dotc.ParallelTesting") ;test ;dotty-bin-tests/test
- ;set testOptions in LocalProject("dotty-compiler-bootstrapped") += Tests.Argument(TestFrameworks.JUnit, "--exclude-categories=dotty.tools.dotc.ParallelTesting") ;publishLocal ;dotty-bootstrapped/test
- ;set testOptions in LocalProject("dotty-compiler") += Tests.Argument(TestFrameworks.JUnit, "--exclude-categories=dotty.tools.dotc.ParallelTesting") ;partest-only-no-bootstrap --show-diff --verbose
- ;set testOptions in LocalProject("dotty-compiler-bootstrapped") += Tests.Argument(TestFrameworks.JUnit, "--exclude-categories=dotty.tools.dotc.ParallelTesting") ;partest-only --show-diff --verbose
- ;dotty-compiler/testOnly dotty.tools.dotc.CompilationTests
- ;publishLocal ;dotty-bootstrapped/testOnly dotty.tools.dotc.CompilationTests
- test
- ;publishLocal ;dotty-bootstrapped/test
- legacyTests
- dotty-bin-tests/test
2 changes: 1 addition & 1 deletion .drone.yml.sig
Original file line number Diff line number Diff line change
@@ -1 +1 @@
eyJhbGciOiJIUzI1NiJ9.IyBBZnRlciB1cGRhdGluZyB0aGlzIGZpbGUsIHlvdSBuZWVkIHRvIHJlLXNpZ24gaXQ6CiMKIyAtIEluc3RhbGwgW2Ryb25lLWNsaV0oaHR0cDovL3JlYWRtZS5kcm9uZS5pby91c2FnZS9nZXR0aW5nLXN0YXJ0ZWQtY2xpLykKIyAtIENvcHkgeW91ciB0b2tlbiBmcm9tICBodHRwOi8vZG90dHktY2kuZXBmbC5jaC9hY2NvdW50IChDbGljayBTSE9XIFRPS0VOKQojIC0gKGV4cG9ydCBEUk9ORV9UT0tFTj15b3VyLXRva2VuOyBleHBvcnQgRFJPTkVfU0VSVkVSPWh0dHA6Ly9kb3R0eS1jaS5lcGZsLmNoOyBkcm9uZSBzaWduIGxhbXBlcGZsL2RvdHR5KQoKcGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBsYW1wZXBmbC9kb3R0eTpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIGNvbW1hbmRzOgogICAgICAtIGxuIC1zIC92YXIvY2FjaGUvZHJvbmUvc2NhbGEtc2NhbGEgc2NhbGEtc2NhbGEKICAgICAgLSBsbiAtcyAvdmFyL2NhY2hlL2Ryb25lL2l2eTIgIiRIT01FLy5pdnkyIgogICAgICAtIC4vc2NyaXB0cy91cGRhdGUtc2NhbGEtbGlicmFyeQogICAgICAtIHNidCAtSi1YbXg0MDk2bSAtSi1YWDpSZXNlcnZlZENvZGVDYWNoZVNpemU9NTEybSAtSi1YWDpNYXhNZXRhc3BhY2VTaXplPTEwMjRtIC1EZG90dHkuZHJvbmUubWVtPTQwOTZtICIke1RFU1R9IgogICAgd2hlbjoKICAgICAgYnJhbmNoOgogICAgICAgIGV4Y2x1ZGU6IGdoLXBhZ2VzCgogIGRvY3VtZW50YXRpb246CiAgICBpbWFnZTogbGFtcGVwZmwvZG90dHk6bGF0ZXN0CiAgICBwdWxsOiB0cnVlCiAgICBjb21tYW5kczoKICAgICAgLSAuL3Byb2plY3Qvc2NyaXB0cy9nZW5Eb2NzICIke1RFU1R9IiAkQk9UX1BBU1MKICAgIHdoZW46CiAgICAgIGJyYW5jaDogbWFzdGVyCgogIGdpdHRlcjoKICAgIGltYWdlOiBwbHVnaW5zL2dpdHRlcgogICAgd2hlbjoKICAgICAgYnJhbmNoOiBtYXN0ZXIKICAgICAgc3RhdHVzOiBjaGFuZ2VkCgogIHNsYWNrOgogICAgaW1hZ2U6IHBsdWdpbnMvc2xhY2sKICAgIGNoYW5uZWw6IGRvdHR5CiAgICB3aGVuOgogICAgICBicmFuY2g6IG1hc3RlcgogICAgICBzdGF0dXM6IGNoYW5nZWQKCm1hdHJpeDoKICBURVNUOgogICAgLSA7c2V0IHRlc3RPcHRpb25zIGluIExvY2FsUHJvamVjdCgiZG90dHktY29tcGlsZXIiKSArPSBUZXN0cy5Bcmd1bWVudChUZXN0RnJhbWV3b3Jrcy5KVW5pdCwgIi0tZXhjbHVkZS1jYXRlZ29yaWVzPWRvdHR5LnRvb2xzLmRvdGMuUGFyYWxsZWxUZXN0aW5nIikgO3Rlc3QgO2RvdHR5LWJpbi10ZXN0cy90ZXN0CiAgICAtIDtzZXQgdGVzdE9wdGlvbnMgaW4gTG9jYWxQcm9qZWN0KCJkb3R0eS1jb21waWxlci1ib290c3RyYXBwZWQiKSArPSBUZXN0cy5Bcmd1bWVudChUZXN0RnJhbWV3b3Jrcy5KVW5pdCwgIi0tZXhjbHVkZS1jYXRlZ29yaWVzPWRvdHR5LnRvb2xzLmRvdGMuUGFyYWxsZWxUZXN0aW5nIikgO3B1Ymxpc2hMb2NhbCA7ZG90dHktYm9vdHN0cmFwcGVkL3Rlc3QKICAgIC0gO3NldCB0ZXN0T3B0aW9ucyBpbiBMb2NhbFByb2plY3QoImRvdHR5LWNvbXBpbGVyIikgKz0gVGVzdHMuQXJndW1lbnQoVGVzdEZyYW1ld29ya3MuSlVuaXQsICItLWV4Y2x1ZGUtY2F0ZWdvcmllcz1kb3R0eS50b29scy5kb3RjLlBhcmFsbGVsVGVzdGluZyIpIDtwYXJ0ZXN0LW9ubHktbm8tYm9vdHN0cmFwIC0tc2hvdy1kaWZmIC0tdmVyYm9zZQogICAgLSA7c2V0IHRlc3RPcHRpb25zIGluIExvY2FsUHJvamVjdCgiZG90dHktY29tcGlsZXItYm9vdHN0cmFwcGVkIikgKz0gVGVzdHMuQXJndW1lbnQoVGVzdEZyYW1ld29ya3MuSlVuaXQsICItLWV4Y2x1ZGUtY2F0ZWdvcmllcz1kb3R0eS50b29scy5kb3RjLlBhcmFsbGVsVGVzdGluZyIpIDtwYXJ0ZXN0LW9ubHkgLS1zaG93LWRpZmYgLS12ZXJib3NlCiAgICAtIDtkb3R0eS1jb21waWxlci90ZXN0T25seSBkb3R0eS50b29scy5kb3RjLkNvbXBpbGF0aW9uVGVzdHMKICAgIC0gO3B1Ymxpc2hMb2NhbCA7ZG90dHktYm9vdHN0cmFwcGVkL3Rlc3RPbmx5IGRvdHR5LnRvb2xzLmRvdGMuQ29tcGlsYXRpb25UZXN0cwo.z4tT2XteNQ9O0oTt_l26-K2mhgBHKyWQf6k_IRdZvgQ
eyJhbGciOiJIUzI1NiJ9.IyBBZnRlciB1cGRhdGluZyB0aGlzIGZpbGUsIHlvdSBuZWVkIHRvIHJlLXNpZ24gaXQ6CiMKIyAtIEluc3RhbGwgW2Ryb25lLWNsaV0oaHR0cDovL3JlYWRtZS5kcm9uZS5pby91c2FnZS9nZXR0aW5nLXN0YXJ0ZWQtY2xpLykKIyAtIENvcHkgeW91ciB0b2tlbiBmcm9tICBodHRwOi8vZG90dHktY2kuZXBmbC5jaC9hY2NvdW50IChDbGljayBTSE9XIFRPS0VOKQojIC0gKGV4cG9ydCBEUk9ORV9UT0tFTj15b3VyLXRva2VuOyBleHBvcnQgRFJPTkVfU0VSVkVSPWh0dHA6Ly9kb3R0eS1jaS5lcGZsLmNoOyBkcm9uZSBzaWduIGxhbXBlcGZsL2RvdHR5KQoKcGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBsYW1wZXBmbC9kb3R0eTpsYXRlc3QKICAgIHB1bGw6IHRydWUKICAgIGNvbW1hbmRzOgogICAgICAtIGxuIC1zIC92YXIvY2FjaGUvZHJvbmUvc2NhbGEtc2NhbGEgc2NhbGEtc2NhbGEKICAgICAgLSBsbiAtcyAvdmFyL2NhY2hlL2Ryb25lL2l2eTIgIiRIT01FLy5pdnkyIgogICAgICAtIC4vc2NyaXB0cy91cGRhdGUtc2NhbGEtbGlicmFyeQogICAgICAtIHNidCAtSi1YbXg0MDk2bSAtSi1YWDpSZXNlcnZlZENvZGVDYWNoZVNpemU9NTEybSAtSi1YWDpNYXhNZXRhc3BhY2VTaXplPTEwMjRtIC1EZG90dHkuZHJvbmUubWVtPTQwOTZtICIke1RFU1R9IgogICAgd2hlbjoKICAgICAgYnJhbmNoOgogICAgICAgIGV4Y2x1ZGU6IGdoLXBhZ2VzCgogIGRvY3VtZW50YXRpb246CiAgICBpbWFnZTogbGFtcGVwZmwvZG90dHk6bGF0ZXN0CiAgICBwdWxsOiB0cnVlCiAgICBjb21tYW5kczoKICAgICAgLSAuL3Byb2plY3Qvc2NyaXB0cy9nZW5Eb2NzICIke1RFU1R9IiAkQk9UX1BBU1MKICAgIHdoZW46CiAgICAgIGJyYW5jaDogbWFzdGVyCgogIGdpdHRlcjoKICAgIGltYWdlOiBwbHVnaW5zL2dpdHRlcgogICAgd2hlbjoKICAgICAgYnJhbmNoOiBtYXN0ZXIKICAgICAgc3RhdHVzOiBjaGFuZ2VkCgogIHNsYWNrOgogICAgaW1hZ2U6IHBsdWdpbnMvc2xhY2sKICAgIGNoYW5uZWw6IGRvdHR5CiAgICB3aGVuOgogICAgICBicmFuY2g6IG1hc3RlcgogICAgICBzdGF0dXM6IGNoYW5nZWQKCm1hdHJpeDoKICBURVNUOgogICAgLSB0ZXN0CiAgICAtIDtwdWJsaXNoTG9jYWwgO2RvdHR5LWJvb3RzdHJhcHBlZC90ZXN0CiAgICAtIGxlZ2FjeVRlc3RzCiAgICAtIGRvdHR5LWJpbi10ZXN0cy90ZXN0Cg.7jaA1Gh5FpzKvXQsaf2_of5tUEMBcR_3Mzo0wL8pE3E
Empty file removed compiler/foo
Empty file.
7 changes: 6 additions & 1 deletion compiler/test/dotc/comptest.scala
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package dotc

import dotty.tools.dotc.ParallelTesting
import dotty.tools.vulpix.ParallelTesting

import scala.concurrent.duration._

object comptest extends ParallelTesting {

def maxDuration = 3.seconds
def numberOfSlaves = 5
def safeMode = false
Copy link
Member

@smarter smarter Apr 5, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this different from the other overrides of safeMode?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a legacy main used by some folks in the lab - it's only running a single test. No need to restart VMs after this single test.

def isInteractive = true
def testFilter = None

Expand Down
18 changes: 12 additions & 6 deletions compiler/test/dotc/tests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,23 @@ package dotc
import dotty.Jars
import dotty.tools.dotc.CompilerTest
import dotty.tools.StdLibSources
import org.junit.experimental.categories.Category
import org.junit.{Before, Test}
import org.junit.Assert._

import java.io.{ File => JFile }
import scala.reflect.io.Directory
import scala.io.Source

// tests that match regex '(pos|dotc|run|java|compileStdLib)\.*' would be executed as benchmarks.
/** WARNING
* =======
* These are legacy, do not add tests here, see `CompilationTests.scala`
*/
@Category(Array(classOf[java.lang.Exception]))
class tests extends CompilerTest {

def isRunByJenkins: Boolean = sys.props.isDefinedAt("dotty.jenkins.build")
// tests that match regex '(pos|dotc|run|java|compileStdLib)\.*' would be
// executed as benchmarks.

val defaultOutputDir = "../out/"

Expand Down Expand Up @@ -62,7 +68,7 @@ class tests extends CompilerTest {
}

implicit val defaultOptions: List[String] = noCheckOptions ++ {
if (isRunByJenkins) List("-Ycheck:tailrec,resolveSuper,mixin,restoreScopes,labelDef") // should be Ycheck:all, but #725
if (dotty.Properties.isRunByDrone) List("-Ycheck:tailrec,resolveSuper,mixin,restoreScopes,labelDef") // should be Ycheck:all, but #725
else List("-Ycheck:tailrec,resolveSuper,mixin,restoreScopes,labelDef")
} ++ checkOptions ++ classPath

Expand Down Expand Up @@ -204,8 +210,8 @@ class tests extends CompilerTest {
private val stdlibFiles: List[String] = StdLibSources.whitelisted

@Test def compileStdLib =
if (!generatePartestFiles)
compileList("compileStdLib", stdlibFiles, "-migration" :: "-Yno-inline" :: scala2mode)
compileList("compileStdLib", stdlibFiles, "-migration" :: "-Yno-inline" :: scala2mode)

@Test def compileMixed = compileLine(
"""../tests/pos/B.scala
|../scala-scala/src/library/scala/collection/immutable/Seq.scala
Expand All @@ -221,7 +227,7 @@ class tests extends CompilerTest {
|../scala-scala/src/library/scala/collection/parallel/mutable/ParSet.scala
|../scala-scala/src/library/scala/collection/mutable/SetLike.scala""".stripMargin)(scala2mode ++ defaultOptions)

@Test def dotty = {
@Test def dottyBooted = {
dottyBootedLib
dottyDependsOnBootedLib
}
Expand Down
33 changes: 27 additions & 6 deletions compiler/test/dotty/Jars.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,42 @@ package dotty

/** Jars used when compiling test, normally set from the sbt build */
object Jars {
/** Dotty library Jar */
val dottyLib: String = sys.env.get("DOTTY_LIB")
.getOrElse(sys.props("dotty.tests.classes.library"))
.getOrElse(Properties.dottyLib)

/** Dotty Compiler Jar */
val dottyCompiler: String = sys.env.get("DOTTY_COMPILER")
.getOrElse(sys.props("dotty.tests.classes.compiler"))
.getOrElse(Properties.dottyCompiler)

/** Dotty Interfaces Jar */
val dottyInterfaces: String = sys.env.get("DOTTY_INTERFACE")
.getOrElse(sys.props("dotty.tests.classes.interfaces"))
.getOrElse(Properties.dottyInterfaces)

val dottyExtras: List[String] = Option(sys.env.get("DOTTY_EXTRAS")
.getOrElse(sys.props("dotty.tests.extraclasspath")))
.map(_.split(":").toList).getOrElse(Nil)
/** Dotty extras classpath from env or properties */
val dottyExtras: List[String] = sys.env.get("DOTTY_EXTRAS")
.map(_.split(":").toList).getOrElse(Properties.dottyExtras)

/** Dotty REPL dependencies */
val dottyReplDeps: List[String] = dottyLib :: dottyExtras

/** Dotty test dependencies */
val dottyTestDeps: List[String] =
dottyLib :: dottyCompiler :: dottyInterfaces :: dottyExtras

/** Gets the scala 2.* library at runtime, note that doing this is unsafe
* unless you know that the library will be on the classpath of the running
* application. It is currently safe to call this function if the tests are
* run by sbt.
*/
def scalaLibraryFromRuntime: String = findJarFromRuntime("scala-library-2.")

private def findJarFromRuntime(partialName: String) = {
val urls = ClassLoader.getSystemClassLoader.asInstanceOf[java.net.URLClassLoader].getURLs.map(_.getFile.toString)
urls.find(_.contains(partialName)).getOrElse {
throw new java.io.FileNotFoundException(
s"""Unable to locate $partialName on classpath:\n${urls.toList.mkString("\n")}"""
)
}
}
}
49 changes: 49 additions & 0 deletions compiler/test/dotty/Properties.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package dotty

/** Runtime properties from defines or environmnent */
object Properties {

/** If property is unset or "TRUE" we consider it `true` */
private[this] def propIsNullOrTrue(prop: String): Boolean = {
val prop = System.getProperty("dotty.tests.interactive")
prop == null || prop == "TRUE"
}

/** Are we running on the Drone CI? */
val isRunByDrone: Boolean = sys.env.isDefinedAt("DRONE")

/** Tests should run interactive? */
val testsInteractive: Boolean = propIsNullOrTrue("dotty.tests.interactive")

/** Filter out tests not matching the regex supplied by "dotty.tests.filter"
* define
*/
val testsFilter: Option[String] = sys.props.get("dotty.tests.filter")

/** When set, the run tests are only compiled - not run, a warning will be
* issued
*/
val testsNoRun: Boolean = sys.props.get("dotty.tests.norun").isDefined

/** Should Unit tests run in safe mode?
*
* For run tests this means that we respawn child JVM processes after each
* test, so that they are never reused.
*/
val testsSafeMode: Boolean = sys.props.isDefinedAt("dotty.tests.safemode")

/** Dotty compiler path provided through define */
def dottyCompiler: String = sys.props("dotty.tests.classes.compiler")

/** Dotty classpath extras provided through define */
def dottyExtras: List[String] =
Option(sys.props("dotty.tests.extraclasspath"))
.map(_.split(":").toList)
.getOrElse(Nil)

/** Dotty interfaces path provided through define */
def dottyInterfaces: String = sys.props("dotty.tests.classes.interfaces")

/** Dotty library path provided through define */
def dottyLib: String = sys.props("dotty.tests.classes.library")
}
40 changes: 0 additions & 40 deletions compiler/test/dotty/partest/DPConfig.scala

This file was deleted.

Loading