From 36abdfd0f8db89c1475f74513cbeaaaf9463cb1c Mon Sep 17 00:00:00 2001 From: "Bernhard J. Berger" <bernhard.berger@uni-bremen.de> Date: Thu, 9 Feb 2023 08:21:02 +0100 Subject: [PATCH] Proper testing using Juniper, Java17 and Xtext. --- .../core/arff/io/ArffPropertiesReader.java | 14 +++++ .../core/arff/ArffPropertiesReaderTest.java | 52 +++++++++++++++++-- .../evoal/core/arff/utils/LanguageUtils.java | 3 +- .../src/test/resources/simple/input.arff | 8 +-- .../test/resources/simple/specification.ddl | 6 +++ src/core/de.evoal.core.main/pom.xml | 4 +- src/core/de.evoal.core.plugin/pom.xml | 9 +--- src/core/de.evoal.releng.parent/pom.xml | 2 +- 8 files changed, 74 insertions(+), 24 deletions(-) diff --git a/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/io/ArffPropertiesReader.java b/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/io/ArffPropertiesReader.java index ac6580d2..d30a2b96 100644 --- a/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/io/ArffPropertiesReader.java +++ b/src/core/de.evoal.core.arff/src/main/java/de/evoal/core/arff/io/ArffPropertiesReader.java @@ -104,6 +104,20 @@ public class ArffPropertiesReader implements PropertiesReader { properties.put(pSpec, (int)instance.toDoubleArray()[index]); return properties; }; + } else if(RepresentationType.STRING.equals(rType)) { + toProperties = (instance, template, builder) -> { + if(instance.isMissing(index)) { + return decoratee.apply(instance, template, builder); + } + + // add current specification to builder and let the chain complete it + builder.add(pSpec); + final Properties properties = decoratee.apply(instance, template, builder); + + // set value and return + properties.put(pSpec, instance.stringValue(index)); + return properties; + }; } else { throw new RuntimeException("Not yet supported: " + rType); } diff --git a/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/ArffPropertiesReaderTest.java b/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/ArffPropertiesReaderTest.java index 96632998..6d543b36 100644 --- a/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/ArffPropertiesReaderTest.java +++ b/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/ArffPropertiesReaderTest.java @@ -1,10 +1,14 @@ package de.evoal.core.arff; +import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; +import de.evoal.core.api.properties.PropertySpecification; import de.evoal.core.api.properties.io.PropertiesReader; import de.evoal.core.api.utils.EvoalIOException; +import de.evoal.core.arff.io.ArffPropertiesReader; import de.evoal.core.arff.utils.LanguageUtils; import de.evoal.core.arff.utils.ResourceUtils; +import de.evoal.languages.model.ddl.DataDescription; import de.evoal.languages.model.ddl.DataDescriptionModel; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -21,14 +25,52 @@ public class ArffPropertiesReaderTest { final Path temporary = Files.createTempDirectory("evoal"); final File temporaryFolder = temporary.toFile(); ResourceUtils.unpack(getClass().getClassLoader(), temporaryFolder, "simple/input.arff", "simple/specification.ddl"); -// final DataDescriptionModel model = LanguageUtils.load(new File(temporaryFolder, "simple/specification.ddl"), DataDescriptionModel.class); -// final PropertiesSpecification specification = toSpecification(model); + final File toLoad = new File(temporaryFolder, "simple/specification.ddl"); + final DataDescriptionModel model = LanguageUtils.load(toLoad, DataDescriptionModel.class); + final PropertiesSpecification specification = toSpecification(model); -// final PropertiesReader testee = new ArffPropertiesReader() -// .init(new File(temporaryFolder, "input.arff"), specification); + final PropertiesReader testee = new ArffPropertiesReader() + .init(new File(temporaryFolder, "simple/input.arff"), specification); -// Assertions.assertTrue(testee.hasNext()); + { + Assertions.assertTrue(testee.hasNext()); + final Properties p = testee.next(); + Assertions.assertEquals(5.1, p.get(new PropertySpecification("sepallength", null))); + Assertions.assertEquals(3.5, p.get(new PropertySpecification("sepalwidth", null))); + Assertions.assertEquals(1.4, p.get(new PropertySpecification("petallength", null))); + Assertions.assertEquals(0.2, p.get(new PropertySpecification("petalwidth", null))); + Assertions.assertEquals("Iris-setosa", p.get(new PropertySpecification("class", null))); + } + { + Assertions.assertTrue(testee.hasNext()); + final Properties p = testee.next(); + Assertions.assertEquals(4.9, p.get(new PropertySpecification("sepallength", null))); + Assertions.assertEquals(3.0, p.get(new PropertySpecification("sepalwidth", null))); + Assertions.assertEquals(1.4, p.get(new PropertySpecification("petallength", null))); + Assertions.assertEquals(0.2, p.get(new PropertySpecification("petalwidth", null))); + Assertions.assertEquals("Iris-setosa", p.get(new PropertySpecification("class", null))); + } + { + Assertions.assertTrue(testee.hasNext()); + final Properties p = testee.next(); + Assertions.assertEquals(4.7, p.get(new PropertySpecification("sepallength", null))); + Assertions.assertEquals(3.2, p.get(new PropertySpecification("sepalwidth", null))); + Assertions.assertEquals(1.3, p.get(new PropertySpecification("petallength", null))); + Assertions.assertEquals(0.2, p.get(new PropertySpecification("petalwidth", null))); + Assertions.assertEquals("Iris-setosa", p.get(new PropertySpecification("class", null))); + } + { + Assertions.assertTrue(testee.hasNext()); + final Properties p = testee.next(); + Assertions.assertEquals(4.6, p.get(new PropertySpecification("sepallength", null))); + Assertions.assertEquals(3.1, p.get(new PropertySpecification("sepalwidth", null))); + Assertions.assertEquals(1.5, p.get(new PropertySpecification("petallength", null))); + Assertions.assertEquals(0.2, p.get(new PropertySpecification("petalwidth", null))); + Assertions.assertEquals("Iris-setosa", p.get(new PropertySpecification("class", null))); + } + + Assertions.assertFalse(testee.hasNext()); } private PropertiesSpecification toSpecification(final DataDescriptionModel model) { diff --git a/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/utils/LanguageUtils.java b/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/utils/LanguageUtils.java index 1d1bd18d..367a2db4 100644 --- a/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/utils/LanguageUtils.java +++ b/src/core/de.evoal.core.arff/src/test/java/de/evoal/core/arff/utils/LanguageUtils.java @@ -27,11 +27,12 @@ public class LanguageUtils { public static <T extends EObject> T load(final @NonNull File path, final Class<T> cl) { loadPackages(); - final URI modelURI = URI.createPlatformResourceURI(path.toString(), true); + final URI modelURI = URI.createFileURI(path.toString()); return load(modelURI, cl); } private static void loadPackages() { + DdlPackage.eINSTANCE.getName(); DataDescriptionLanguageStandaloneSetup.doSetup(); } diff --git a/src/core/de.evoal.core.arff/src/test/resources/simple/input.arff b/src/core/de.evoal.core.arff/src/test/resources/simple/input.arff index 5d36ac62..5a6239eb 100644 --- a/src/core/de.evoal.core.arff/src/test/resources/simple/input.arff +++ b/src/core/de.evoal.core.arff/src/test/resources/simple/input.arff @@ -17,10 +17,4 @@ 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa -4.6,3.1,1.5,0.2,Iris-setosa -5.0,3.6,1.4,0.2,Iris-setosa -5.4,3.9,1.7,0.4,Iris-setosa -4.6,3.4,1.4,0.3,Iris-setosa -5.0,3.4,1.5,0.2,Iris-setosa -4.4,2.9,1.4,0.2,Iris-setosa -4.9,3.1,1.5,0.1,Iris-setosa \ No newline at end of file +4.6,3.1,1.5,0.2,Iris-setosa \ No newline at end of file diff --git a/src/core/de.evoal.core.arff/src/test/resources/simple/specification.ddl b/src/core/de.evoal.core.arff/src/test/resources/simple/specification.ddl index e69de29b..03c350f9 100644 --- a/src/core/de.evoal.core.arff/src/test/resources/simple/specification.ddl +++ b/src/core/de.evoal.core.arff/src/test/resources/simple/specification.ddl @@ -0,0 +1,6 @@ +data: + cardinal real 'sepallength'; + cardinal real 'sepalwidth'; + cardinal real 'petallength'; + cardinal real 'petalwidth'; + nominal string 'class'; \ No newline at end of file diff --git a/src/core/de.evoal.core.main/pom.xml b/src/core/de.evoal.core.main/pom.xml index 9cbf74e5..d9962933 100644 --- a/src/core/de.evoal.core.main/pom.xml +++ b/src/core/de.evoal.core.main/pom.xml @@ -335,8 +335,8 @@ <arg>io.jenetics.base/io.jenetics.internal.util=de.evoal.core.main</arg> <arg>--add-exports</arg> <arg>io.jenetics.base/io.jenetics.internal.collection=de.evoal.core.main</arg> - <arg>--add-exports</arg> - <arg>org.eclipse.xtext.util/org.eclipse.xtext.util=de.evoal.core.main</arg> + <!--<arg>- -add-exports</arg> + <arg>org.eclipse.xtext.util/org.eclipse.xtext.util=de.evoal.core.main</arg>--> </compilerArgs> <forceJavacCompilerUse>true</forceJavacCompilerUse> </configuration> diff --git a/src/core/de.evoal.core.plugin/pom.xml b/src/core/de.evoal.core.plugin/pom.xml index d1f4ebb3..1ed2b04c 100644 --- a/src/core/de.evoal.core.plugin/pom.xml +++ b/src/core/de.evoal.core.plugin/pom.xml @@ -92,14 +92,7 @@ <dependency> <groupId>org.eclipse.xtext</groupId> <artifactId>org.eclipse.xtext</artifactId> - <version>2.29.0</version> - <scope>provided</scope> - </dependency> - - <dependency> - <groupId>org.eclipse.xtext</groupId> - <artifactId>org.eclipse.xtext.util</artifactId> - <version>2.29.0</version> + <version>2.29.1</version> <scope>provided</scope> </dependency> diff --git a/src/core/de.evoal.releng.parent/pom.xml b/src/core/de.evoal.releng.parent/pom.xml index 5b25f12a..3b204f2d 100644 --- a/src/core/de.evoal.releng.parent/pom.xml +++ b/src/core/de.evoal.releng.parent/pom.xml @@ -127,7 +127,7 @@ <dependency> <groupId>org.eclipse.xtext</groupId> <artifactId>org.eclipse.xtext</artifactId> - <version>2.29.0</version> + <version>2.29.1</version> <scope>provided</scope> </dependency> -- GitLab