test: test against wacc-examples repo
This commit is contained in:
92
src/test/wacc/examples.scala
Normal file
92
src/test/wacc/examples.scala
Normal file
@@ -0,0 +1,92 @@
|
||||
package wacc
|
||||
|
||||
import org.scalatest.{ParallelTestExecution, BeforeAndAfterAll}
|
||||
import org.scalatest.flatspec.AnyFlatSpec
|
||||
import org.scalatest.Inspectors.forEvery
|
||||
import parsley.{Success, Failure}
|
||||
|
||||
class ParallelExamplesSpec
|
||||
extends AnyFlatSpec
|
||||
with BeforeAndAfterAll
|
||||
with ParallelTestExecution {
|
||||
val files =
|
||||
allWaccFiles("wacc-examples/valid").map { p =>
|
||||
(p.toString, (_: Int) == 0)
|
||||
} ++
|
||||
allWaccFiles("wacc-examples/invalid/syntaxErr").map { p =>
|
||||
(p.toString, (_: Int) == 100)
|
||||
} ++
|
||||
allWaccFiles("wacc-examples/invalid/semanticErr").map { p =>
|
||||
(p.toString, (_: Int) == 200)
|
||||
} ++
|
||||
allWaccFiles("wacc-examples/invalid/whack").map { p =>
|
||||
(p.toString, List(0, 100, 200).contains)
|
||||
}
|
||||
|
||||
// tests go here
|
||||
forEvery(files.filter { (filename, _) =>
|
||||
!fileIsDissallowed(filename)
|
||||
}) { (filename, expectedResult) =>
|
||||
s"$filename" should "be parsed with correct result" in {
|
||||
val contents = os.read(os.Path(filename))
|
||||
parser.parse(contents) match {
|
||||
case Success(x) => assert(expectedResult(x.toInt))
|
||||
case Failure(msg) => fail(msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def allWaccFiles(dir: String): IndexedSeq[os.Path] =
|
||||
val d = java.io.File(dir)
|
||||
os.walk(os.Path(d.getAbsolutePath)).filter { _.ext == "wacc" }
|
||||
|
||||
def fileIsDissallowed(filename: String): Boolean =
|
||||
Seq(
|
||||
"wacc-examples/valid/advanced",
|
||||
"wacc-examples/valid/array",
|
||||
"wacc-examples/valid/basic/exit",
|
||||
"wacc-examples/valid/basic/skip",
|
||||
"wacc-examples/valid/expressions",
|
||||
"wacc-examples/valid/function/nested_functions",
|
||||
"wacc-examples/valid/function/simple_functions",
|
||||
"wacc-examples/valid/if",
|
||||
"wacc-examples/valid/IO/print",
|
||||
"wacc-examples/valid/IO/read",
|
||||
"wacc-examples/valid/IO/IOLoop.wacc",
|
||||
"wacc-examples/valid/IO/IOSequence.wacc",
|
||||
"wacc-examples/valid/pairs",
|
||||
"wacc-examples/valid/runtimeErr",
|
||||
"wacc-examples/valid/scope",
|
||||
"wacc-examples/valid/sequence",
|
||||
"wacc-examples/valid/variables",
|
||||
"wacc-examples/valid/while",
|
||||
// invalid (syntax)
|
||||
"wacc-examples/invalid/syntaxErr/array",
|
||||
"wacc-examples/invalid/syntaxErr/basic",
|
||||
"wacc-examples/invalid/syntaxErr/expressions",
|
||||
"wacc-examples/invalid/syntaxErr/function",
|
||||
"wacc-examples/invalid/syntaxErr/if",
|
||||
"wacc-examples/invalid/syntaxErr/literals",
|
||||
"wacc-examples/invalid/syntaxErr/pairs",
|
||||
"wacc-examples/invalid/syntaxErr/print",
|
||||
"wacc-examples/invalid/syntaxErr/sequence",
|
||||
"wacc-examples/invalid/syntaxErr/variables",
|
||||
"wacc-examples/invalid/syntaxErr/while",
|
||||
// invalid (semantic)
|
||||
"wacc-examples/invalid/semanticErr/array",
|
||||
"wacc-examples/invalid/semanticErr/exit",
|
||||
"wacc-examples/invalid/semanticErr/expressions",
|
||||
"wacc-examples/invalid/semanticErr/function",
|
||||
"wacc-examples/invalid/semanticErr/if",
|
||||
"wacc-examples/invalid/semanticErr/IO",
|
||||
"wacc-examples/invalid/semanticErr/multiple",
|
||||
"wacc-examples/invalid/semanticErr/pairs",
|
||||
"wacc-examples/invalid/semanticErr/print",
|
||||
"wacc-examples/invalid/semanticErr/read",
|
||||
"wacc-examples/invalid/semanticErr/scope",
|
||||
"wacc-examples/invalid/semanticErr/variables",
|
||||
"wacc-examples/invalid/semanticErr/while",
|
||||
// invalid (whack)
|
||||
"wacc-examples/invalid/whack"
|
||||
).find(filename.contains).isDefined
|
||||
}
|
Reference in New Issue
Block a user