AbstractRDFParserTest.java

/*******************************************************************************
 * Copyright (c) 2020 Eclipse RDF4J contributors.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Distribution License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *******************************************************************************/
package org.eclipse.rdf4j.rio.helpers;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.io.InputStream;
import java.io.Reader;

import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.rio.RDFFormat;
import org.eclipse.rdf4j.rio.RDFHandlerException;
import org.eclipse.rdf4j.rio.RDFParseException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

/**
 * @author Bart Hanssens
 */
public class AbstractRDFParserTest {
	private MyRDFParser parser;

	private class MyRDFParser extends AbstractRDFParser {
		@Override
		public RDFFormat getRDFFormat() {
			throw new UnsupportedOperationException("Not supported yet.");
		}

		@Override
		public void parse(InputStream in, String baseURI) throws RDFParseException, RDFHandlerException {
			throw new UnsupportedOperationException("Not supported yet.");
		}

		@Override
		public void parse(Reader reader, String baseURI) throws RDFParseException, RDFHandlerException {
			throw new UnsupportedOperationException("Not supported yet.");
		}

		public Resource getBNode() {
			return createNode();
		}

		public Resource getBNode(String id) {
			return createNode(id);
		}
	}

	@BeforeEach
	public void setUp() {
		parser = new MyRDFParser();
	}

	@Test
	public void testSkolemOrigin() {
		parser.getParserConfig().set(BasicParserSettings.SKOLEMIZE_ORIGIN, "http://www.example.com");

		assertTrue(parser.getBNode().toString().startsWith("http://www.example.com"));
		assertTrue(parser.getBNode("12").toString().startsWith("http://www.example.com"));
	}

	@Test
	public void testSkolemOriginReset() {
		parser.getParserConfig().set(BasicParserSettings.SKOLEMIZE_ORIGIN, "http://www.example.com");
		parser.getParserConfig().set(BasicParserSettings.SKOLEMIZE_ORIGIN, "");

		assertFalse(parser.getBNode().toString().startsWith("http://www.example.com"));
		assertTrue(parser.getBNode().toString().startsWith("_"));
		assertTrue(parser.getBNode("12").toString().endsWith("12"));
	}

	@Test
	public void testNodeIdHashing() {
		// node ids look like "genid_.*-suffix
		assertThat(parser.createNode("someid").stringValue())
				.endsWith("-someid");

		// some long id (length > 32) => suffix is hashed
		String longNodeId = "someverylongnodeidwithmorethan32characters";
		assertThat(parser.createNode(longNodeId).stringValue())
				.endsWith("2A372A91878F0980C8F53341D2D8A944");
	}
}