ExpressionsTest.java

/*******************************************************************************
 * Copyright (c) ${year} 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.sparqlbuilder.constraint;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.eclipse.rdf4j.model.vocabulary.RDF;
import org.eclipse.rdf4j.model.vocabulary.RDFS;
import org.eclipse.rdf4j.sparqlbuilder.core.SparqlBuilder;
import org.eclipse.rdf4j.sparqlbuilder.core.Variable;
import org.eclipse.rdf4j.sparqlbuilder.rdf.Rdf;
import org.junit.jupiter.api.Test;

public class ExpressionsTest {

	@Test
	public void bnodeProducesProperQueryString() {
		Expression<?> expression = Expressions.bnode("name");
		assertEquals("BNODE( \"name\" )", expression.getQueryString());
	}

	@Test
	public void bnodeNoArgumentProducesProperQueryString() {
		Expression<?> expression = Expressions.bnode();
		assertEquals("BNODE()", expression.getQueryString());
	}

	@Test
	public void testLogicalExpression() {
		Expression expression = Expressions.or(Expressions.lt(Rdf.literalOf(30), Rdf.literalOf(20)),
				Expressions.and(Expressions.gt(Rdf.literalOf(30), Rdf.literalOf(50)),
						Expressions.or(Expressions.gt(Rdf.literalOf(30), Rdf.literalOf(60)),
								Expressions.lt(Rdf.literalOf(30), Rdf.literalOf(70)))));

		assertEquals(expression.getQueryString(), "( 30 < 20 || ( 30 > 50 && ( 30 > 60 || 30 < 70 ) ) )");
	}

	@Test
	public void testArithmeticExpression() {
		Expression expression = Expressions.lt(Rdf.literalOf(30), Expressions.subtract(
				Expressions.divide(Rdf.literalOf(100), Rdf.literalOf(20)),
				Expressions.multiply(Rdf.literalOf(2),
						Expressions.add(Rdf.literalOf(5), Rdf.literalOf(3)))));

		assertEquals(expression.getQueryString(), "30 < ( ( 100 / 20 ) - ( 2 * ( 5 + 3 ) ) )");
	}

	@Test
	public void testArithmeticAndLogicalExpression() {
		Expression expression = Expressions.or(Expressions.lt(Rdf.literalOf(30), Expressions.add(Rdf.literalOf(20),
				Expressions.divide(Rdf.literalOf(10), Rdf.literalOf(5)))),
				Expressions.lt(Rdf.literalOf(30), Rdf.literalOf(50)));

		assertEquals(expression.getQueryString(), "( 30 < ( 20 + ( 10 / 5 ) ) || 30 < 50 )");
	}

	@Test
	public void test_BIND_fromOtherVariable() {
		Variable from = SparqlBuilder.var("from");
		Variable to = SparqlBuilder.var("to");
		assertEquals(
				"BIND( ?from AS ?to )", Expressions.bind(from, to).getQueryString());
	}

	@Test
	public void test_NOT_IN_twoIris() {
		Variable test = SparqlBuilder.var("test");
		assertEquals(
				"?test NOT IN ( <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://www.w3.org/2000/01/rdf-schema#subClassOf> )",
				Expressions.notIn(test, Rdf.iri(RDF.TYPE), Rdf.iri(RDFS.SUBCLASSOF))
						.getQueryString());
	}

	@Test
	public void test_IS_BLANK() {
		Variable test = SparqlBuilder.var("test");
		assertEquals(
				"isBLANK( ?test )", Expressions.isBlank(test).getQueryString());
	}
}