Skip to content

Commit ff16eed

Browse files
Add a basic testing framework (#18)
1 parent 56fc2f0 commit ff16eed

File tree

5 files changed

+91
-0
lines changed

5 files changed

+91
-0
lines changed

src/main/scala/eu/neverblink/jelly/cli/App.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package eu.neverblink.jelly.cli
22

33
import caseapp.*
44
import eu.neverblink.jelly.cli.command.*
5+
import eu.neverblink.jelly.cli.command.rdf.*
56

67
/** Main entrypoint.
78
*/
@@ -11,4 +12,5 @@ object App extends CommandsEntryPoint:
1112
override def commands: Seq[Command[?]] = Seq(
1213
FoolAround,
1314
Version,
15+
RdfFromJelly,
1416
)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package eu.neverblink.jelly.cli.command.rdf
2+
import caseapp.*
3+
import eu.neverblink.jelly.cli.JellyCommand
4+
5+
case class FromJellyRdfOptions()
6+
7+
object RdfFromJelly extends JellyCommand[FromJellyRdfOptions]:
8+
override def names: List[List[String]] = List(
9+
List("rdf", "from-jelly"),
10+
)
11+
12+
override def run(options: FromJellyRdfOptions, remainingArgs: RemainingArgs): Unit =
13+
// This is a placeholder for the actual implementation
14+
println("rdf from-jelly")
15+
println(options)
16+
println(remainingArgs)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package eu.neverblink.jelly.cli.command
2+
3+
import eu.neverblink.jelly.cli.command.helpers.*
4+
import org.scalatest.matchers.should.Matchers
5+
import org.scalatest.wordspec.AnyWordSpec
6+
7+
class RdfFromJellySpec extends AnyWordSpec with Matchers with CleanUpFilesAfterTest:
8+
"rdf from-jelly command" should {
9+
"be able to convert a Jelly file to NTriples" in {
10+
val jellyFile = DataGenHelper.generateJellyFile(3)
11+
}
12+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package eu.neverblink.jelly.cli.command.helpers
2+
3+
import org.scalatest.BeforeAndAfterEach
4+
import org.scalatest.wordspec.AnyWordSpec
5+
6+
trait CleanUpFilesAfterTest extends BeforeAndAfterEach {
7+
this: AnyWordSpec =>
8+
override def afterEach(): Unit = {
9+
DataGenHelper.cleanUpFile()
10+
}
11+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package eu.neverblink.jelly.cli.command.helpers
2+
3+
import eu.ostrzyciel.jelly.convert.jena.riot.JellyLanguage
4+
import org.apache.jena.rdf.model.{Model, ModelFactory, ResourceFactory}
5+
import org.apache.jena.riot.RDFDataMgr
6+
7+
import java.io.FileOutputStream
8+
import java.nio.file.{Files, Paths}
9+
import scala.util.Using
10+
11+
/*
12+
* This class will be used to generate test data
13+
*/
14+
object DataGenHelper:
15+
16+
private val testFile = "testInput.jelly"
17+
18+
/*
19+
* This method generates a triple model with nTriples
20+
* @param nTriples number of triples to generate
21+
* @return Model
22+
*/
23+
def generateTripleModel(nTriples: Int): Model =
24+
val model = ModelFactory.createDefaultModel()
25+
val subStr = "http://example.org/subject"
26+
val predStr = "http://example.org/predicate"
27+
val objStr = "http://example.org/object"
28+
val tripleList = (1 to nTriples).map { i =>
29+
val sub = ResourceFactory.createResource(s"$subStr/$i")
30+
val pred = ResourceFactory.createProperty(s"$predStr/$i")
31+
val obj = ResourceFactory.createResource(s"$objStr/$i")
32+
val stat = ResourceFactory.createStatement(sub, pred, obj)
33+
model.add(stat)
34+
}
35+
model
36+
37+
/* This method generates a Jelly file with nTriples
38+
* @param nTriples number of triples to generate
39+
* @param fileName name of the file to generate
40+
*/
41+
def generateJellyFile(nTriples: Int): Unit =
42+
val model = generateTripleModel(nTriples)
43+
// TODO: Add configurable generation for different variants of Jelly (small strict etc)
44+
Using.resource(FileOutputStream(testFile)) { file =>
45+
RDFDataMgr.write(file, model, JellyLanguage.JELLY)
46+
}
47+
48+
/* This method cleans up the file after the test*/
49+
def cleanUpFile(): Unit =
50+
Files.deleteIfExists(Paths.get(testFile))

0 commit comments

Comments
 (0)