From 2f4530dff4099958fdb165d5dc20374b35052a82 Mon Sep 17 00:00:00 2001 From: Evgenii Grigorev Date: Mon, 20 Jan 2025 09:52:34 +0100 Subject: [PATCH 1/8] Improved documentation for AbstractModuleTestHelper --- .../modules/AbstractModuleTestHelper.java | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java index abb29f0e9..05026c943 100644 --- a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java +++ b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java @@ -12,6 +12,49 @@ import java.nio.file.Path; import java.nio.file.Paths; +/** + * This is helper class to write tests that load configuration of modules from ttl file + * that is organized in directory `test/resources/module/${moduleName}/`. + * + * The `${moduleName}` is taken from abstract method getModuleName(). + * The configuration file should be located at `test/resources/module/${moduleName}/${fileName}` + * and to load the module one can call method getRootModule(fileName). + * + * ${fileName} (e.g. config.ttl) must contain only one module and must include declaration of the module type. + * Example `./test/module/apply-construct/config.ttl`: + * + *

+ *
+ * @prefix apply-construct:  .
+ * @prefix owl:  .
+ * @prefix sp:  .
+ * @prefix sml:  .
+ *
+ * # Declare module type (alternatively you can import it using owl:imports)
+ * sml:ApplyConstruct a sm:Module .
+ *
+ * # configure the module
+ * apply-construct:create-sample-triples
+ *   a sml:ApplyConstruct ;
+ *   sml:constructQuery [
+ *       a sp:Construct ;
+ *       sp:text """CONSTRUCT {
+ *      rdfs:label "label 1" .
+ *      rdfs:label "label 2" .
+ * }
+ * WHERE {
+ * }""" ;
+ *   ] ;
+ * .
+ *
+ * 
+ *   a owl:Ontology ;
+ *   owl:imports  ;
+ * .
+ *
+ * 
+ * + */ public abstract class AbstractModuleTestHelper { private static final String MODULE_DIR_NAME = "module"; @@ -55,11 +98,21 @@ public Model getModel(String fileName) { return model; } - + /** + * + * @return + */ public Module getConfigRootModule() { return getRootModule(CONFIG_FILE_NAME); } + /** + * Returns module from a provided configuration file. + * + * @param fileName of ttl file (e.g. config.ttl) to load module configuration. + * It should be located at test/resources/module/${fileName}. + * @return Returns loaded module from the given file. + */ public Module getRootModule(String fileName) { OntModel configModel = getOntModel(fileName); From 83eb4e53c034573d0bd7e6ce7321a50704977fdc Mon Sep 17 00:00:00 2001 From: Miroslav Blasko Date: Thu, 23 Jan 2025 10:45:33 +0100 Subject: [PATCH 2/8] Improve documentation --- .../java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java index 05026c943..b87ca707e 100644 --- a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java +++ b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java @@ -99,8 +99,10 @@ public Model getModel(String fileName) { } /** + * Returns module from a default configuration file located are `test/resources/module/${moduleName}/config.ttl`, + * where ${moduleName} is returned by getModuleName(). * - * @return + * @return Returns loaded module. */ public Module getConfigRootModule() { return getRootModule(CONFIG_FILE_NAME); From c941d3495a1fa81182ab5c28d8467b1d6e2a0caf Mon Sep 17 00:00:00 2001 From: Miroslav Blasko Date: Thu, 23 Jan 2025 16:45:28 +0100 Subject: [PATCH 3/8] Fix getRootModule to return model from correct file --- .../cvut/spipes/modules/AbstractModuleTestHelper.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java index b87ca707e..e91fd6512 100644 --- a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java +++ b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java @@ -66,8 +66,11 @@ public abstract class AbstractModuleTestHelper { */ abstract String getModuleName(); + Module getSingleModule(OntModel configModel) { + return PipelineFactory.loadPipelines(configModel).get(0); + } + public OntModel getConfigOntModel() { - JenaTestUtils.mapLocalSPipesDefinitionFiles(); return getOntModel(CONFIG_FILE_NAME); } @@ -116,14 +119,13 @@ public Module getConfigRootModule() { * @return Returns loaded module from the given file. */ public Module getRootModule(String fileName) { - OntModel configModel = getOntModel(fileName); OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); ontModel.read( - getClass().getResourceAsStream(getConfigFilePath()), null, FileUtils.langTurtle); + getClass().getResourceAsStream(fileName), null, FileUtils.langTurtle); - return PipelineFactory.loadPipelines(configModel).get(0); + return getSingleModule(ontModel); } public Path getFilePath(String fileName) throws URISyntaxException { From b1241de8082868b3e6ff04d689a6a7f4c4f51652 Mon Sep 17 00:00:00 2001 From: Miroslav Blasko Date: Thu, 23 Jan 2025 17:01:52 +0100 Subject: [PATCH 4/8] Refactor out AbstractModuleTestHelper to package s-pipes-test Part that was not dependant on s-pipes-core was extracted --- .../modules/AbstractCoreModuleTestHelper.java | 26 +++++++++++++++++++ .../spipes/modules/AbstractModuleTest.java | 2 +- .../modules/ApplyConstructModuleTest.java | 2 +- .../modules/BindWithConstantModuleTest.java | 2 +- .../modules/AbstractModuleTestHelper.java | 11 +++----- 5 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractCoreModuleTestHelper.java rename {s-pipes-core/src/test => s-pipes-test/src/main}/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java (93%) diff --git a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractCoreModuleTestHelper.java b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractCoreModuleTestHelper.java new file mode 100644 index 000000000..7712ae2ae --- /dev/null +++ b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractCoreModuleTestHelper.java @@ -0,0 +1,26 @@ +package cz.cvut.spipes.modules; + +import cz.cvut.spipes.engine.PipelineFactory; +import org.apache.jena.ontology.OntModel; + +/** + * This is helper class to write tests that load configuration of modules from ttl file + * that is organized in directory `test/resources/module/${moduleName}/`. + * + * See more information in {@link AbstractModuleTestHelper}. + */ +public abstract class AbstractCoreModuleTestHelper extends AbstractModuleTestHelper { + + @Override + Module getSingleModule(OntModel configModel) { + return PipelineFactory.loadPipelines(configModel).get(0); + } + + public Module getConfigRootModule() { + return (Module) super.getConfigRootModule(); + } + public Module getRootModule(String fileName) { + return (Module) super.getRootModule(fileName); + } + +} diff --git a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTest.java b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTest.java index 7e26b9857..7d2e47d01 100644 --- a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTest.java +++ b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTest.java @@ -12,7 +12,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -public class AbstractModuleTest extends AbstractModuleTestHelper { +public class AbstractModuleTest extends AbstractCoreModuleTestHelper { @Override String getModuleName() { diff --git a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/ApplyConstructModuleTest.java b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/ApplyConstructModuleTest.java index 2f2cf9a85..a9dddbd0e 100644 --- a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/ApplyConstructModuleTest.java +++ b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/ApplyConstructModuleTest.java @@ -13,7 +13,7 @@ import org.junit.jupiter.api.Test; -public class ApplyConstructModuleTest extends AbstractModuleTestHelper { +public class ApplyConstructModuleTest extends AbstractCoreModuleTestHelper { @BeforeEach public void setUp() { diff --git a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/BindWithConstantModuleTest.java b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/BindWithConstantModuleTest.java index 860d70f21..6ca745660 100644 --- a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/BindWithConstantModuleTest.java +++ b/s-pipes-core/src/test/java/cz/cvut/spipes/modules/BindWithConstantModuleTest.java @@ -15,7 +15,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import org.junit.jupiter.api.Test; -public class BindWithConstantModuleTest extends AbstractModuleTestHelper { +public class BindWithConstantModuleTest extends AbstractCoreModuleTestHelper { @Override public String getModuleName() { diff --git a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java similarity index 93% rename from s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java rename to s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java index e91fd6512..2eafdc39b 100644 --- a/s-pipes-core/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java +++ b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java @@ -1,6 +1,5 @@ package cz.cvut.spipes.modules; -import cz.cvut.spipes.engine.PipelineFactory; import cz.cvut.spipes.test.JenaTestUtils; import org.apache.jena.ontology.OntModel; import org.apache.jena.ontology.OntModelSpec; @@ -66,9 +65,7 @@ public abstract class AbstractModuleTestHelper { */ abstract String getModuleName(); - Module getSingleModule(OntModel configModel) { - return PipelineFactory.loadPipelines(configModel).get(0); - } + abstract Object getSingleModule(OntModel configModel); public OntModel getConfigOntModel() { return getOntModel(CONFIG_FILE_NAME); @@ -107,8 +104,8 @@ public Model getModel(String fileName) { * * @return Returns loaded module. */ - public Module getConfigRootModule() { - return getRootModule(CONFIG_FILE_NAME); + public Object getConfigRootModule() { + return getRootModule(CONFIG_FILE_NAME); } /** @@ -118,7 +115,7 @@ public Module getConfigRootModule() { * It should be located at test/resources/module/${fileName}. * @return Returns loaded module from the given file. */ - public Module getRootModule(String fileName) { + public Object getRootModule(String fileName) { OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); From c3e28e0f52323eaf538d42098d9301826ec17519 Mon Sep 17 00:00:00 2001 From: Evgenii Grigorev Date: Fri, 24 Jan 2025 12:33:08 +0100 Subject: [PATCH 5/8] Fixed crashes --- .../cz/cvut/spipes/modules/AbstractModuleTestHelper.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java index 2eafdc39b..90a886239 100644 --- a/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java +++ b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java @@ -116,13 +116,14 @@ public Object getConfigRootModule() { * @return Returns loaded module from the given file. */ public Object getRootModule(String fileName) { + OntModel configModel = getOntModel(fileName); OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); ontModel.read( - getClass().getResourceAsStream(fileName), null, FileUtils.langTurtle); + getClass().getResourceAsStream(getConfigFilePath()), null, FileUtils.langTurtle); - return getSingleModule(ontModel); + return getSingleModule(configModel); } public Path getFilePath(String fileName) throws URISyntaxException { From b5b6b2d1b21b1c0e2606d0b70a6bce9cd4dfebc6 Mon Sep 17 00:00:00 2001 From: Evgenii Grigorev Date: Fri, 24 Jan 2025 13:01:50 +0100 Subject: [PATCH 6/8] Removed duplicate AbstractModuleTestHelper from tabular module --- .../modules/AbstractModuleTestHelper.java | 76 ------------------- .../AbstractTabularModuleTestHelper.java | 26 +++++++ .../spipes/modules/TabularModuleTest.java | 2 +- .../modules/AbstractModuleTestHelper.java | 4 + 4 files changed, 31 insertions(+), 77 deletions(-) delete mode 100644 s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java create mode 100644 s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/AbstractTabularModuleTestHelper.java diff --git a/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java b/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java deleted file mode 100644 index 19bc8ca55..000000000 --- a/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java +++ /dev/null @@ -1,76 +0,0 @@ -package cz.cvut.spipes.modules; - -import cz.cvut.spipes.engine.PipelineFactory; -import cz.cvut.spipes.test.JenaTestUtils; -import org.apache.jena.ontology.OntModel; -import org.apache.jena.ontology.OntModelSpec; -import org.apache.jena.rdf.model.Model; -import org.apache.jena.rdf.model.ModelFactory; -import org.apache.jena.util.FileUtils; - -import java.net.URISyntaxException; -import java.nio.file.Path; -import java.nio.file.Paths; - -public abstract class AbstractModuleTestHelper { - - private static final String MODULE_DIR_NAME = "module"; - private static final String CONFIG_FILE_NAME = "config.ttl"; - - /** - * @return Name of the directory within test resources/modules folder. - */ - abstract String getModuleName(); - - public OntModel getConfigOntModel() { - JenaTestUtils.mapLocalSPipesDefinitionFiles(); - return getOntModel(CONFIG_FILE_NAME); - } - - public OntModel getOntModel(String fileName) { - OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); - - // load config - ontModel.read( - getClass().getResourceAsStream(getRelativeFilePath(fileName)), null, FileUtils.langTurtle); - - return ontModel; - } - - public Model getModel(String fileName) { - Model model = ModelFactory.createDefaultModel(); - - model.read( - getClass().getResourceAsStream(getRelativeFilePath(fileName)), null, FileUtils.langTurtle); - - return model; - } - - - public Module getConfigRootModule() { - return getRootModule(CONFIG_FILE_NAME); - } - - public Module getRootModule(String fileName) { - OntModel configModel = getOntModel(fileName); - - OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); - - ontModel.read( - getClass().getResourceAsStream(getConfigFilePath()), null, FileUtils.langTurtle); - - return PipelineFactory.loadPipelines(configModel).get(0); - } - - public Path getFilePath(String fileName) throws URISyntaxException { - return Paths.get(getClass().getResource(getRelativeFilePath(fileName)).toURI()); - } - - private String getRelativeFilePath(String fileName) { - return "/" + MODULE_DIR_NAME + "/" + getModuleName() + "/" + fileName; - } - - private String getConfigFilePath() { - return "/" + MODULE_DIR_NAME + "/" + getModuleName() + "/" + CONFIG_FILE_NAME; - } -} diff --git a/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/AbstractTabularModuleTestHelper.java b/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/AbstractTabularModuleTestHelper.java new file mode 100644 index 000000000..7c6a34330 --- /dev/null +++ b/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/AbstractTabularModuleTestHelper.java @@ -0,0 +1,26 @@ +package cz.cvut.spipes.modules; + +import cz.cvut.spipes.engine.PipelineFactory; +import org.apache.jena.ontology.OntModel; + +/** + * This is helper class to write tests that load configuration of modules from ttl file + * that is organized in directory `test/resources/module/${moduleName}/`. + * + * See more information in {@link AbstractModuleTestHelper}. + */ +public abstract class AbstractTabularModuleTestHelper extends AbstractModuleTestHelper { + + @Override + Module getSingleModule(OntModel configModel) { + return PipelineFactory.loadPipelines(configModel).get(0); + } + + public Module getConfigRootModule() { + return (Module) super.getConfigRootModule(); + } + public Module getRootModule(String fileName) { + return (Module) super.getRootModule(fileName); + } + +} diff --git a/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/TabularModuleTest.java b/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/TabularModuleTest.java index cc59b2b8f..1f7e80d1e 100644 --- a/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/TabularModuleTest.java +++ b/s-pipes-modules/module-tabular/src/test/java/cz/cvut/spipes/modules/TabularModuleTest.java @@ -30,7 +30,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assumptions.assumeTrue; - class TabularModuleTest extends AbstractModuleTestHelper { + class TabularModuleTest extends AbstractTabularModuleTestHelper { private TabularModule module; private final String DATA_PREFIX = "http://onto.fel.cvut.cz/data/"; diff --git a/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java index 90a886239..f484651a2 100644 --- a/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java +++ b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java @@ -65,6 +65,10 @@ public abstract class AbstractModuleTestHelper { */ abstract String getModuleName(); + /** + * This method should be implemented in other modules to avoid circular dependency + * @return First module in model + */ abstract Object getSingleModule(OntModel configModel); public OntModel getConfigOntModel() { From 5eef7a4b7a5f5e34c772035e1f4e9b47a91b5106 Mon Sep 17 00:00:00 2001 From: Evgenii Grigorev Date: Fri, 24 Jan 2025 14:45:09 +0100 Subject: [PATCH 7/8] Improved the comment and the readability --- .../cz/cvut/spipes/modules/AbstractModuleTestHelper.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java index f484651a2..5d5d70393 100644 --- a/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java +++ b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java @@ -66,8 +66,8 @@ public abstract class AbstractModuleTestHelper { abstract String getModuleName(); /** - * This method should be implemented in other modules to avoid circular dependency - * @return First module in model + * This method should load single SPipes Module from provided ontology. + * @return First module in ontology */ abstract Object getSingleModule(OntModel configModel); @@ -125,7 +125,7 @@ public Object getRootModule(String fileName) { OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); ontModel.read( - getClass().getResourceAsStream(getConfigFilePath()), null, FileUtils.langTurtle); + getClass().getResourceAsStream(getRelativeFilePath(fileName)), null, FileUtils.langTurtle); return getSingleModule(configModel); } From 0208bf5ae4399716e41cef6a1fc62b37cf45cf6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Bla=C5=A1ko?= Date: Sat, 25 Jan 2025 15:55:37 +0100 Subject: [PATCH 8/8] Remove duplicate code --- .../java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java index 5d5d70393..e610b16ac 100644 --- a/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java +++ b/s-pipes-test/src/main/java/cz/cvut/spipes/modules/AbstractModuleTestHelper.java @@ -139,6 +139,6 @@ private String getRelativeFilePath(String fileName) { } private String getConfigFilePath() { - return "/" + MODULE_DIR_NAME + "/" + getModuleName() + "/" + CONFIG_FILE_NAME; + return getRelativeFilePath(CONFIG_FILE_NAME); } }