diff options
author | Haoyi Li <haoyi@haoyi-mbp.corp.dropbox.com> | 2014-11-26 00:45:31 -0800 |
---|---|---|
committer | Haoyi Li <haoyi@haoyi-mbp.corp.dropbox.com> | 2014-11-26 00:45:31 -0800 |
commit | 2c4b142503bd2d871e6818b5cab8c38627d9e4a0 (patch) | |
tree | 6ba33d2980a1a7a1286100202a695c6631bd240e /partest/src/main/scala/scala/tools/partest/scalajs/ScalaJSPartestOptions.scala | |
download | hands-on-scala-js-2c4b142503bd2d871e6818b5cab8c38627d9e4a0.tar.gz hands-on-scala-js-2c4b142503bd2d871e6818b5cab8c38627d9e4a0.tar.bz2 hands-on-scala-js-2c4b142503bd2d871e6818b5cab8c38627d9e4a0.zip |
Squashed 'examples/scala-js/' content from commit 47311ba
git-subtree-dir: examples/scala-js
git-subtree-split: 47311ba693f949f204f27ea9475bb63425fbd4f3
Diffstat (limited to 'partest/src/main/scala/scala/tools/partest/scalajs/ScalaJSPartestOptions.scala')
-rw-r--r-- | partest/src/main/scala/scala/tools/partest/scalajs/ScalaJSPartestOptions.scala | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/partest/src/main/scala/scala/tools/partest/scalajs/ScalaJSPartestOptions.scala b/partest/src/main/scala/scala/tools/partest/scalajs/ScalaJSPartestOptions.scala new file mode 100644 index 0000000..1f1680a --- /dev/null +++ b/partest/src/main/scala/scala/tools/partest/scalajs/ScalaJSPartestOptions.scala @@ -0,0 +1,109 @@ +package scala.tools.partest.scalajs + +class ScalaJSPartestOptions private ( + val testFilter: ScalaJSPartestOptions.TestFilter, + val optMode: ScalaJSPartestOptions.OptMode, + val showDiff: Boolean +) + +object ScalaJSPartestOptions { + + sealed abstract class TestFilter { + def descr: String + } + case object UnknownTests extends TestFilter { + override def descr: String = "Unknown" + } + case object BlacklistedTests extends TestFilter { + override def descr: String = "Blacklisted" + } + case object WhitelistedTests extends TestFilter { + override def descr: String = "Whitelisted" + } + case object BuglistedTests extends TestFilter { + override def descr: String = "Buglisted" + } + case class SomeTests(names: List[String]) extends TestFilter { + override def descr: String = "Custom " + this.toString + override def toString() = + names.map(x => s""""$x"""").mkString("[", ", ", "]") + } + + sealed abstract class OptMode { + def shortStr: String + def id: String + } + object OptMode { + def fromId(id: String): OptMode = id match { + case "none" => NoOpt + case "fast" => FastOpt + case "full" => FullOpt + case _ => sys.error(s"Unknown optimization mode: $id") + } + } + case object NoOpt extends OptMode { + def shortStr: String = "None" + def id: String = "none" + } + case object FastOpt extends OptMode { + def shortStr: String = "Fast" + def id: String = "fast" + } + case object FullOpt extends OptMode { + def shortStr: String = "Full" + def id: String = "full" + } + + def apply(args: Array[String], + errorReporter: String => Unit): Option[ScalaJSPartestOptions] = { + + var failed = false + + var filter: Option[TestFilter] = None + var optMode: OptMode = NoOpt + var showDiff: Boolean = false + + def error(msg: String) = { + failed = true + errorReporter(msg) + } + + def setFilter(newFilter: TestFilter) = (filter, newFilter) match { + case (Some(SomeTests(oldNames)), SomeTests(newNames)) => + // Merge test names + filter = Some(SomeTests(oldNames ++ newNames)) + case (Some(fil), newFilter) => + error(s"You cannot specify twice what tests to use (already specified: $fil, new: $newFilter)") + case (None, newFilter) => + filter = Some(newFilter) + } + + for (arg <- args) arg match { + case "--fastOpt" => + optMode = FastOpt + case "--noOpt" => + optMode = NoOpt + case "--fullOpt" => + optMode = FullOpt + case "--blacklisted" => + setFilter(BlacklistedTests) + case "--buglisted" => + setFilter(BuglistedTests) + case "--whitelisted" => + setFilter(WhitelistedTests) + case "--unknown" => + setFilter(UnknownTests) + case "--showDiff" => + showDiff = true + case _ => + setFilter(SomeTests(arg :: Nil)) + } + + if (failed) None + else Some { + new ScalaJSPartestOptions( + filter.getOrElse(WhitelistedTests), optMode, showDiff) + } + } + +} |