1111package org .eclipse .rdf4j .rio ;
1212
1313import static org .junit .jupiter .api .Assertions .assertEquals ;
14+ import static org .junit .jupiter .api .Assertions .assertFalse ;
1415import static org .junit .jupiter .api .Assertions .assertNotEquals ;
1516import static org .junit .jupiter .api .Assertions .assertTrue ;
1617import static org .junit .jupiter .api .Assertions .fail ;
1920import java .io .ByteArrayOutputStream ;
2021import java .io .InputStream ;
2122import java .io .OutputStream ;
23+ import java .util .Collection ;
2224import java .util .Collections ;
2325import java .util .Date ;
2426import java .util .HashSet ;
2527import java .util .Locale ;
28+ import java .util .Map ;
2629
2730import org .eclipse .rdf4j .model .BNode ;
2831import org .eclipse .rdf4j .model .IRI ;
@@ -115,7 +118,7 @@ public abstract class AbstractParserHandlingTest {
115118
116119 private ParseErrorCollector testListener ;
117120
118- private Model testStatements ;
121+ private TestStatementCollector testStatements ;
119122
120123 /**
121124 * Returns an {@link InputStream} containing the given RDF statements in a format that is recognised by the
@@ -211,20 +214,90 @@ protected RDFWriter createWriter(OutputStream output) {
211214 }
212215
213216 /**
217+ *
214218 */
215219 @ BeforeEach
216220 public void setUp () {
217221 testParser = getParser ();
218222
219223 testParser .setValueFactory (vf );
220224 testListener = new ParseErrorCollector ();
221- testStatements = new LinkedHashModel ();
225+ testStatements = new TestStatementCollector ( new LinkedHashModel () );
222226
223227 testParser .setParseErrorListener (testListener );
224- testParser .setRDFHandler (new StatementCollector (testStatements ));
228+ testParser .setRDFHandler (testStatements );
229+ }
230+
231+ private class TestStatementCollector extends StatementCollector {
232+
233+ private boolean start ;
234+ private boolean end ;
235+
236+ public TestStatementCollector (Model testStatements ) {
237+ super (testStatements );
238+ }
239+
240+ @ Override
241+ public void clear () {
242+ super .clear ();
243+ this .start = false ;
244+ this .end = false ;
245+ }
246+
247+ @ Override
248+ public void startRDF () throws RDFHandlerException {
249+ assertFalse (start , "startRDF was called twice" );
250+ assertFalse (end , "startRDF was called after endRDF" );
251+ this .start = true ;
252+ super .startRDF ();
253+ }
254+
255+ @ Override
256+ public void endRDF () throws RDFHandlerException {
257+ assertTrue (start , "startRDF was not called before endRDF" );
258+ assertFalse (end , "endRDF was called twice" );
259+ this .end = true ;
260+ super .endRDF ();
261+ }
262+
263+ @ Override
264+ public void handleComment (String comment ) throws RDFHandlerException {
265+ assertTrue (start , "startRDF was not called before handleComment" );
266+ assertFalse (end , "endRDF was called before handleComment" );
267+ super .handleComment (comment );
268+ }
269+
270+ @ Override
271+ public void handleStatement (Statement st ) {
272+ assertTrue (start , "startRDF was not called before handleStatement" );
273+ assertFalse (end , "endRDF was called before handleStatement" );
274+ super .handleStatement (st );
275+ }
276+
277+ @ Override
278+ public void handleNamespace (String prefix , String uri ) throws RDFHandlerException {
279+ assertTrue (start , "startRDF was not called before handleNamespace" );
280+ assertFalse (end , "endRDF was called before handleNamespace" );
281+ super .handleNamespace (prefix , uri );
282+ }
283+
284+ @ Override
285+ public Collection <Statement > getStatements () {
286+ assertTrue (start , "startRDF was not called before getStatements" );
287+ assertTrue (end , "endRDF was not called before getStatements" );
288+ return super .getStatements ();
289+ }
290+
291+ @ Override
292+ public Map <String , String > getNamespaces () {
293+ assertTrue (start , "startRDF was not called before getStatements" );
294+ assertTrue (end , "endRDF was not called before getStatements" );
295+ return super .getNamespaces ();
296+ }
225297 }
226298
227299 /**
300+ *
228301 */
229302 @ AfterEach
230303 public void tearDown () {
@@ -390,6 +463,9 @@ public void testUnknownDatatypeWithMessageWithFailCase1() throws Exception {
390463 }
391464
392465 assertErrorListener (0 , 1 , 0 );
466+ // Since the parser failed it would not have called endRdf(), so we just overwrite the end variable so that
467+ // assertModel(...) doesn't fail
468+ testStatements .end = true ;
393469 assertModel (new LinkedHashModel ());
394470 }
395471
@@ -699,6 +775,9 @@ public void testUnknownLanguageWithMessageWithFailCase1() throws Exception {
699775 }
700776
701777 assertErrorListener (0 , 1 , 0 );
778+ // Since the parser failed it would not have called endRdf(), so we just overwrite the end variable so that
779+ // assertModel(...) doesn't fail
780+ testStatements .end = true ;
702781 assertModel (new LinkedHashModel ());
703782 }
704783
@@ -917,12 +996,13 @@ public void testSkolemization() throws Exception {
917996
918997 assertErrorListener (0 , 0 , 0 );
919998 // assertModel(expectedModel); // GH-2768 isomorphism is not maintained after skolemization
920- assertNotEquals (new HashSet <>(expectedModel ), new HashSet <>(testStatements )); // blank nodes not preserved
921- assertTrue (Models .subjectBNodes (testStatements ).isEmpty ()); // skolemized
999+ assertNotEquals (new HashSet <>(expectedModel ), new HashSet <>(testStatements .getStatements ())); // blank nodes not
1000+ // preserved
1001+ assertTrue (Models .subjectBNodes (testStatements .getStatements ()).isEmpty ()); // skolemized
9221002 }
9231003
9241004 @ Test
925- public void testRDFStarCompatibility () throws Exception {
1005+ public void testRDFStarCompatibility1 () throws Exception {
9261006 Model expectedModel = new LinkedHashModel ();
9271007 Triple t1 = vf .createTriple (vf .createIRI ("http://example.com/1" ), vf .createIRI ("http://example.com/2" ),
9281008 vf .createLiteral ("example" , vf .createIRI ("http://example.com/3" )));
@@ -939,9 +1019,20 @@ public void testRDFStarCompatibility() throws Exception {
9391019 testParser .parse (input1 , BASE_URI );
9401020 assertErrorListener (0 , 0 , 0 );
9411021 assertModel (expectedModel );
1022+ }
9421023
943- testListener .reset ();
944- testStatements .clear ();
1024+ @ Test
1025+ public void testRDFStarCompatibility2 () throws Exception {
1026+ Model expectedModel = new LinkedHashModel ();
1027+ Triple t1 = vf .createTriple (vf .createIRI ("http://example.com/1" ), vf .createIRI ("http://example.com/2" ),
1028+ vf .createLiteral ("example" , vf .createIRI ("http://example.com/3" )));
1029+ expectedModel .add (vf .createStatement (t1 , DC .SOURCE , vf .createIRI ("http://example.com/4" )));
1030+ Triple t2 = vf .createTriple (t1 , DC .DATE , vf .createLiteral (new Date ()));
1031+ expectedModel .add (vf .createStatement (vf .createIRI ("http://example.com/5" ), DC .RELATION , t2 ));
1032+ Triple t3 = vf .createTriple (vf .createTriple (vf .createTriple (vf .createIRI ("urn:a" ), RDF .TYPE ,
1033+ vf .createIRI ("urn:b" )), vf .createIRI ("urn:c" ), vf .createIRI ("urn:d" )), vf .createIRI ("urn:e" ),
1034+ vf .createIRI ("urn:f" ));
1035+ expectedModel .add (vf .createStatement (t3 , vf .createIRI ("urn:same" ), t3 ));
9451036
9461037 // Turn off compatibility on parsing: formats with RDF-star support will produce RDF-star triples,
9471038 // non-RDF-star formats will produce IRIs of the kind urn:rdf4j:triple:xxx
@@ -952,22 +1043,26 @@ public void testRDFStarCompatibility() throws Exception {
9521043 if (testParser .getRDFFormat ().supportsRDFStar ()) {
9531044 assertModel (expectedModel );
9541045 } else {
955- assertTrue (testStatements .contains (RDFStarUtil .toRDFEncodedValue (t1 ), DC .SOURCE ,
956- vf .createIRI ("http://example.com/4" )));
957- assertTrue (testStatements .contains (vf .createIRI ("http://example.com/5" ), DC .RELATION ,
958- RDFStarUtil .toRDFEncodedValue (t2 )));
959- assertTrue (testStatements .contains (RDFStarUtil .toRDFEncodedValue (t3 ), vf .createIRI ("urn:same" ),
960- RDFStarUtil .toRDFEncodedValue (t3 )));
961- assertEquals (3 , testStatements .size ());
1046+ assertTrue (testStatements .getStatements ()
1047+ .contains (vf .createStatement (RDFStarUtil .toRDFEncodedValue (t1 ), DC .SOURCE ,
1048+ vf .createIRI ("http://example.com/4" ))));
1049+ assertTrue (testStatements .getStatements ()
1050+ .contains (vf .createStatement (vf .createIRI ("http://example.com/5" ), DC .RELATION ,
1051+ RDFStarUtil .toRDFEncodedValue (t2 ))));
1052+ assertTrue (testStatements .getStatements ()
1053+ .contains (vf .createStatement (RDFStarUtil .toRDFEncodedValue (t3 ), vf .createIRI ("urn:same" ),
1054+ RDFStarUtil .toRDFEncodedValue (t3 ))));
1055+ assertEquals (3 , testStatements .getStatements ().size ());
9621056 }
9631057 }
9641058
9651059 private void assertModel (Model expectedModel ) {
9661060 if (logger .isTraceEnabled ()) {
9671061 logger .trace ("Expected: {}" , expectedModel );
968- logger .trace ("Actual: {}" , testStatements );
1062+ logger .trace ("Actual: {}" , testStatements . getStatements () );
9691063 }
970- assertTrue (Models .isomorphic (expectedModel , testStatements ), "Did not find expected statements" );
1064+ assertTrue (Models .isomorphic (expectedModel , testStatements .getStatements ()),
1065+ "Did not find expected statements" );
9711066 }
9721067
9731068 private void assertErrorListener (int expectedWarnings , int expectedErrors , int expectedFatalErrors ) {
0 commit comments