Skip to content

Commit 1ddea77

Browse files
committed
Draft of per-model testing
1 parent 70fc236 commit 1ddea77

3 files changed

Lines changed: 26 additions & 15 deletions

File tree

src/main/scala/org/nlogo/models/package.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ package object models {
6868
val allModels: Iterable[Model] = modelFiles.keys.toSeq
6969
val libraryModels: Iterable[Model] = allModels.filterNot(_.isTestModel)
7070

71+
val allModelsNamed: Map[Model, String] = modelFiles.mapValues(_.getName)
72+
val libraryModelsNamed: Map[Model, String] = modelFiles.mapValues(_.getName)
73+
7174
implicit class EnrichedModel(val model: Model) {
7275
def file = modelFiles(model)
7376
def content = modelContent(model)

src/test/scala/org/nlogo/models/ButtonTests.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import org.nlogo.core.Model
1414

1515
class ButtonTests extends TestModels {
1616

17-
val models = libraryModels.filter { model =>
17+
val models = libraryModelsNamed.filterKeys { model =>
1818
(model.is3D == Version.is3D) &&
1919
(model.isCompilable) &&
2020
(!Set(
@@ -53,11 +53,11 @@ class ButtonTests extends TestModels {
5353
}
5454

5555
val buttons: ParMap[Model, Iterable[Button]] =
56-
models.map { model =>
56+
models.map { case (model, _) =>
5757
model -> model.widgets.collect { case b: Button => b }
5858
}(collection.breakOut)
5959

60-
testModels(buttons.keys, "Buttons should be disabled until ticks start if they trigger a runtime error") { model =>
60+
testModels(models, "Buttons should be disabled until ticks start if they trigger a runtime error") { model =>
6161
for {
6262
button <- buttons(model)
6363
source <- button.source
@@ -66,7 +66,7 @@ class ButtonTests extends TestModels {
6666
} yield "\"" + button.display.getOrElse(source) + "\" button: " + exception.getMessage
6767
}
6868

69-
testModels(buttons.keys,
69+
testModels(models,
7070
"If any button is disabled until ticks start, ensure at least one enabled button that resets ticks") {
7171
model =>
7272
for {

src/test/scala/org/nlogo/models/TestModels.scala

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,40 @@
11
package org.nlogo.models
22

3-
import scala.collection.GenIterable
4-
import scala.collection.GenSeq
5-
import scala.util.Try
6-
73
import org.nlogo.api.Version
84
import org.nlogo.core.Model
9-
import org.scalatest.FunSuite
105

11-
trait TestModels extends FunSuite {
6+
import org.scalatest.{ Args, FunSuite, Status, SucceededStatus }
7+
8+
import scala.collection.{ GenIterable, GenMap, GenSeq }
9+
import scala.util.Try
10+
11+
abstract class TestModels extends FunSuite {
12+
13+
private var nameFilter: Option[String] = None
14+
15+
override def runTest(name: String, args: Args): Status = {
16+
nameFilter = args.configMap.get("model").map(_.toString.toLowerCase)
17+
18+
super.runTest(name, args)
19+
}
1220

1321
def testModels(
1422
testName: String,
1523
includeTestModels: Boolean = false,
1624
includeOtherDimension: Boolean = false,
1725
filter: Model => Boolean = _ => true)(testFun: Model => GenIterable[Any]): Unit = {
1826
val models =
19-
(if (includeTestModels) allModels else libraryModels)
20-
.filter(includeOtherDimension || _.is3D == Version.is3D)
21-
.filter(filter)
27+
(if (includeTestModels) allModelsNamed else libraryModelsNamed)
28+
.filterKeys(includeOtherDimension || _.is3D == Version.is3D)
29+
.filterKeys(filter)
2230
testModels(models, testName)(testFun)
2331
}
2432

25-
def testModels(models: GenIterable[Model], testName: String)(testFun: Model => GenIterable[Any]): Unit =
33+
def testModels(models: GenMap[Model, String], testName: String)(testFun: Model => GenIterable[Any]): Unit =
2634
test(testName) {
2735
val allFailures: GenSeq[String] =
2836
(for {
29-
model <- models
37+
model <- models.filterKeys(model => nameFilter.map(models(model).toLowerCase.contains).getOrElse(true)).keys
3038
failures <- Try(testFun(model))
3139
.recover { case e => Seq(e.toString + "\n" + e.getStackTrace.mkString("\n")) }
3240
.toOption

0 commit comments

Comments
 (0)