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 | 24f31e120f9537faede7a174bb09ee35f64e1ce4 (patch) | |
tree | 06ffc3ecc7847789008352b7e2b7c040dad48907 /examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/utils/TestDetector.scala | |
parent | b89ce9cbf79363f8cab09186a5d7ba94bc0af02a (diff) | |
parent | 2c4b142503bd2d871e6818b5cab8c38627d9e4a0 (diff) | |
download | hands-on-scala-js-24f31e120f9537faede7a174bb09ee35f64e1ce4.tar.gz hands-on-scala-js-24f31e120f9537faede7a174bb09ee35f64e1ce4.tar.bz2 hands-on-scala-js-24f31e120f9537faede7a174bb09ee35f64e1ce4.zip |
Merge commit '2c4b142503bd2d871e6818b5cab8c38627d9e4a0' as 'examples/scala-js'
Diffstat (limited to 'examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/utils/TestDetector.scala')
-rw-r--r-- | examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/utils/TestDetector.scala | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/utils/TestDetector.scala b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/utils/TestDetector.scala new file mode 100644 index 0000000..ad67a95 --- /dev/null +++ b/examples/scala-js/test-suite/src/test/scala/scala/scalajs/testsuite/utils/TestDetector.scala @@ -0,0 +1,33 @@ +package scala.scalajs.testsuite.utils + +import scala.scalajs.js +import js.annotation.JSExport +import js.JSConverters._ + +/** An ad-hoc but centralized way to detect tests in this test suite */ +@JSExport("scalajs.TestDetector") +object TestDetector { + + private final val basePackage = "scala.scalajs.testsuite" + + def detectTestNames(): List[String] = detectTestsInternal().map(_._2).toList + + @JSExport + def loadDetectedTests(): Unit = detectTestsInternal().foreach(_._1()) + + private def detectTestsInternal() = { + val parts = basePackage.split('.') + val base = parts.foldLeft(js.Dynamic.global)(_.selectDynamic(_)) + + // We make sure to use only exported modules (not classes) by checking + // .prototype of the exporters. + for { + pName <- js.Object.properties(base) + testName <- js.Object.properties(base.selectDynamic(pName)) + test = base.selectDynamic(pName).selectDynamic(testName) + if js.Object.getPrototypeOf(test.prototype.asInstanceOf[js.Object]) eq + js.Object.asInstanceOf[js.Dynamic].prototype + } yield (test, s"$basePackage.$pName.$testName") + } + +} |