Skip to content

Commit c949f41

Browse files
committed
Fix model serialization tests
1 parent 1f25f5b commit c949f41

File tree

6 files changed

+67
-35
lines changed

6 files changed

+67
-35
lines changed

core/esmf-aspect-model-serializer/src/main/java/org/eclipse/esmf/aspectmodel/serializer/PrettyPrinter.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ public class PrettyPrinter {
7777
private final Set<Resource> processedResources = new HashSet<>();
7878
private final Queue<Resource> resourceQueue = new ArrayDeque<>();
7979

80-
private final List<ModelElement> elementsToWrite;
81-
private final List<String> headerComment;
80+
private final AspectModelFile modelFile;
8281
private final Model model;
8382
private final PrintWriter writer;
8483

@@ -91,8 +90,7 @@ public class PrettyPrinter {
9190
* @param writer the writer to write to
9291
*/
9392
public PrettyPrinter( final AspectModelFile modelFile, final PrintWriter writer ) {
94-
elementsToWrite = modelFile.elements();
95-
headerComment = modelFile.headerComment();
93+
this.modelFile = modelFile;
9694
this.writer = writer;
9795
model = ModelFactory.createDefaultModel();
9896
model.add( modelFile.sourceModel() );
@@ -211,10 +209,10 @@ private void showMilestoneBanner() {
211209
* Print to the PrintWriter given in the constructor. This method does not close the PrintWriter.
212210
*/
213211
public void print() {
214-
for ( final String line : headerComment ) {
212+
for ( final String line : modelFile.headerComment() ) {
215213
writer.println( "# " + line );
216214
}
217-
if ( headerComment.size() > 1 ) {
215+
if ( modelFile.headerComment().size() > 1 ) {
218216
writer.println();
219217
}
220218

@@ -224,7 +222,7 @@ public void print() {
224222
.forEach( entry -> writer.format( "@prefix %s: <%s> .%n", entry.getKey(), entry.getValue() ) );
225223
writer.println();
226224

227-
elementsToWrite.stream()
225+
modelFile.elements().stream()
228226
.filter( element -> !element.isAnonymous() )
229227
.sorted( elementDefinitionOrder )
230228
.map( ModelElement::urn )

core/esmf-aspect-model-serializer/src/test/java/org/eclipse/esmf/aspectmodel/serializer/AspectSerializerTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
1717
import static org.eclipse.esmf.aspectmodel.RdfUtil.createModel;
18+
import static org.eclipse.esmf.aspectmodel.serializer.RdfComparison.modelToString;
1819

1920
import java.io.File;
2021
import java.io.IOException;
@@ -31,13 +32,18 @@
3132
import org.eclipse.esmf.aspectmodel.edit.change.MoveRenameAspectModelFile;
3233
import org.eclipse.esmf.aspectmodel.loader.AspectModelLoader;
3334
import org.eclipse.esmf.aspectmodel.resolver.modelfile.RawAspectModelFileBuilder;
35+
import org.eclipse.esmf.aspectmodel.resolver.services.TurtleLoader;
3436
import org.eclipse.esmf.metamodel.AspectModel;
3537
import org.eclipse.esmf.test.TestAspect;
3638
import org.eclipse.esmf.test.TestResources;
3739

40+
import io.vavr.control.Try;
41+
import org.apache.jena.rdf.model.Model;
3842
import org.junit.jupiter.api.AfterEach;
3943
import org.junit.jupiter.api.BeforeEach;
4044
import org.junit.jupiter.api.Test;
45+
import org.junit.jupiter.params.ParameterizedTest;
46+
import org.junit.jupiter.params.provider.EnumSource;
4147

4248
public class AspectSerializerTest {
4349
Path outputDirectory = null;
@@ -68,6 +74,28 @@ void afterEach() {
6874
}
6975
}
7076

77+
@ParameterizedTest
78+
@EnumSource( value = TestAspect.class,
79+
mode = EnumSource.Mode.EXCLUDE,
80+
names = { "MODEL_WITH_BLANK_AND_ADDITIONAL_NODES" } )
81+
void testSerializeAspectModelFile( final TestAspect testAspect ) {
82+
final AspectModel aspectModel = TestResources.load( testAspect );
83+
for ( final AspectModelFile file : aspectModel.files() ) {
84+
final Model originalModel = file.sourceModel();
85+
86+
final String modelString = AspectSerializer.INSTANCE.aspectModelFileToString( file );
87+
final Try<Model> tryModel = TurtleLoader.loadTurtle( modelString );
88+
final Model serializedModel = tryModel.getOrElseThrow( () -> new RuntimeException( tryModel.getCause() ) );
89+
90+
serializedModel.clearNsPrefixMap();
91+
originalModel.getNsPrefixMap().forEach( serializedModel::setNsPrefix );
92+
93+
final String serializedModelString = modelToString( serializedModel );
94+
final String originalModelString = modelToString( originalModel );
95+
assertThat( serializedModelString ).isEqualToIgnoringWhitespace( originalModelString );
96+
}
97+
}
98+
7199
@Test
72100
void testWriteAspectModelFileToFileSystem() {
73101
final AspectModel aspectModel = TestResources.load( TestAspect.ASPECT );

core/esmf-aspect-model-serializer/src/test/java/org/eclipse/esmf/aspectmodel/serializer/PrettyPrinterTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ void testPrettyPrinter( final TestModel testModel ) {
5050

5151
final InputStream bufferInput = new ByteArrayInputStream( buffer.toByteArray() );
5252
final String formattedModel = buffer.toString( StandardCharsets.UTF_8 );
53-
System.out.println( formattedModel );
5453
final Model prettyPrintedModel = TurtleLoader.loadTurtle( formattedModel ).get();
5554

5655
assertThat( RdfComparison.hash( originalFile.sourceModel() ).equals( RdfComparison.hash( prettyPrintedModel ) ) ).isTrue();

core/esmf-aspect-model-serializer/src/test/java/org/eclipse/esmf/aspectmodel/serializer/RdfComparison.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313

1414
package org.eclipse.esmf.aspectmodel.serializer;
1515

16+
import java.util.Arrays;
1617
import java.util.List;
1718
import java.util.stream.Collectors;
1819

20+
import org.eclipse.esmf.test.TestModel;
21+
1922
import org.apache.jena.rdf.model.Model;
2023
import org.apache.jena.rdf.model.RDFList;
2124
import org.apache.jena.rdf.model.RDFNode;
@@ -58,4 +61,31 @@ private static String hashAnonymousResource( final Resource resource ) {
5861
.sorted()
5962
.collect( Collectors.joining() );
6063
}
64+
65+
static String modelToString( final Model model ) {
66+
return Arrays.stream( TestModel.modelToString( model )
67+
.replaceAll( ";", "" )
68+
.replaceAll( "\\.", "" )
69+
.replaceAll( " +", "" )
70+
.split( "\\n" ) )
71+
.filter( line -> !line.contains( "samm-c:values" ) )
72+
.filter( line -> !line.contains( "samm:see" ) )
73+
.map( RdfComparison::sortLineWithRdfListOrLangString )
74+
.sorted()
75+
.collect( Collectors.joining() )
76+
.replaceAll( " +", " " );
77+
}
78+
79+
/**
80+
* In some test models, lines with RDF lists appear, e.g.:
81+
* :property ( "foo" "bar" )
82+
* However, for some serialized models, the order of elements is non-deterministic since the underlying collection is a Set.
83+
* In order to check that the line is present in the two models, we simply tokenize and sort both lines, so we can compare them.
84+
*/
85+
static String sortLineWithRdfListOrLangString( final String line ) {
86+
if ( line.contains( " ( " ) || line.contains( "@" ) ) {
87+
return Arrays.stream( line.split( "[ ,\"]" ) ).sorted().collect( Collectors.joining() );
88+
}
89+
return line;
90+
}
6191
}

core/esmf-aspect-model-serializer/src/test/java/org/eclipse/esmf/aspectmodel/serializer/RdfModelCreatorVisitorTest.java

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package org.eclipse.esmf.aspectmodel.serializer;
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
17+
import static org.eclipse.esmf.aspectmodel.serializer.RdfComparison.modelToString;
1718

1819
import java.util.Arrays;
1920
import java.util.HashMap;
@@ -59,7 +60,8 @@ public class RdfModelCreatorVisitorTest {
5960
"ASPECT_WITH_UMLAUT_DESCRIPTION",
6061
"MODEL_WITH_BROKEN_CYCLES",
6162
"MODEL_WITH_BLANK_AND_ADDITIONAL_NODES",
62-
"ASPECT_WITH_TIME_SERIES"
63+
"ASPECT_WITH_TIME_SERIES",
64+
"ASPECT_WITH_NAMESPACE_DESCRIPTION"
6365
} )
6466
public void testRdfModelCreatorVisitor( final TestAspect testAspect ) {
6567
final KnownVersion knownVersion = KnownVersion.getLatest();
@@ -90,30 +92,5 @@ public void testRdfModelCreatorVisitor( final TestAspect testAspect ) {
9092
assertThat( serializedModelString ).isEqualToIgnoringWhitespace( originalModelString );
9193
}
9294

93-
private String modelToString( final Model model ) {
94-
return Arrays.stream( TestModel.modelToString( model )
95-
.replaceAll( ";", "" )
96-
.replaceAll( "\\.", "" )
97-
.replaceAll( " +", "" )
98-
.split( "\\n" ) )
99-
.filter( line -> !line.contains( "samm-c:values" ) )
100-
.filter( line -> !line.contains( "samm:see" ) )
101-
.map( this::sortLineWithRdfListOrLangString )
102-
.sorted()
103-
.collect( Collectors.joining() )
104-
.replaceAll( " +", " " );
105-
}
10695

107-
/**
108-
* In some test models, lines with RDF lists appear, e.g.:
109-
* :property ( "foo" "bar" )
110-
* However, for some serialized models, the order of elements is non-deterministic since the underlying collection is a Set.
111-
* In order to check that the line is present in the two models, we simply tokenize and sort both lines, so we can compare them.
112-
*/
113-
private String sortLineWithRdfListOrLangString( final String line ) {
114-
if ( line.contains( " ( " ) || line.contains( "@" ) ) {
115-
return Arrays.stream( line.split( "[ ,\"]" ) ).sorted().collect( Collectors.joining() );
116-
}
117-
return line;
118-
}
11996
}

core/esmf-test-aspect-models/src/main/resources/valid/org.eclipse.esmf.test/1.0.0/ModelWithBlankAndAdditionalNodes.ttl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
@prefix : <urn:samm:org.eclipse.esmf.test:1.0.0#> .
1313
@prefix samm: <urn:samm:org.eclipse.esmf.samm:meta-model:2.1.0#> .
1414
@prefix samm-c: <urn:samm:org.eclipse.esmf.samm:characteristic:2.1.0#> .
15-
@prefix aux: <urn:samm:org.eclipse.esmf.samm:aux#> .
15+
@prefix aux: <http://example.com/aux#> .
1616
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
1717

1818
[

0 commit comments

Comments
 (0)