RdfLiteralTest.java

/*******************************************************************************
 * Copyright (c) 2019 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.rdf;

import static org.assertj.core.api.Assertions.assertThat;

import java.math.BigInteger;

import org.eclipse.rdf4j.sparqlbuilder.rdf.RdfLiteral.StringLiteral;
import org.junit.jupiter.api.Test;

public class RdfLiteralTest {

	@Test
	public void emptyStringLiteralIsNotPadded() {
		StringLiteral literal = new StringLiteral("");
		assertThat(literal.getQueryString()).isEqualTo("\"\"");
	}

	@Test
	public void simpleStringLiteralIsNotPadded() {
		StringLiteral literal = new StringLiteral("foo");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\"");
	}

	@Test
	public void testNewline() {
		StringLiteral literal = new StringLiteral("foo\nbar");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\nbar\"");
		literal = new StringLiteral("foo\nbar\n");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\nbar\\n\"");
		literal = new StringLiteral("\nfoo\nbar\n");
		assertThat(literal.getQueryString()).isEqualTo("\"\\nfoo\\nbar\\n\"");
		literal = new StringLiteral("foobar\n");
		assertThat(literal.getQueryString()).isEqualTo("\"foobar\\n\"");
		literal = new StringLiteral("\nfoobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\nfoobar\"");
		literal = new StringLiteral("\n\n\nfoobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\n\\n\\nfoobar\"");
		literal = new StringLiteral("\nfoobar\n\n\n");
		assertThat(literal.getQueryString()).isEqualTo("\"\\nfoobar\\n\\n\\n\"");
	}

	@Test
	public void testCarriageReturn() {
		StringLiteral literal = new StringLiteral("foo\rbar");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\rbar\"");
		literal = new StringLiteral("foobar\r");
		assertThat(literal.getQueryString()).isEqualTo("\"foobar\\r\"");
		literal = new StringLiteral("\rfoobar\r");
		assertThat(literal.getQueryString()).isEqualTo("\"\\rfoobar\\r\"");
		literal = new StringLiteral("\rfoo\rbar\r");
		assertThat(literal.getQueryString()).isEqualTo("\"\\rfoo\\rbar\\r\"");
		literal = new StringLiteral("\rfoobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\rfoobar\"");
	}

	@Test
	public void testTab() {
		StringLiteral literal = new StringLiteral("foo\tbar");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\tbar\"");
		literal = new StringLiteral("foobar\t");
		assertThat(literal.getQueryString()).isEqualTo("\"foobar\\t\"");
		literal = new StringLiteral("\tfoobar\t");
		assertThat(literal.getQueryString()).isEqualTo("\"\\tfoobar\\t\"");
		literal = new StringLiteral("\tfoo\tbar\t");
		assertThat(literal.getQueryString()).isEqualTo("\"\\tfoo\\tbar\\t\"");
		literal = new StringLiteral("\tfoobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\tfoobar\"");
	}

	@Test
	public void testBackspace() {
		StringLiteral literal = new StringLiteral("foo\bbar");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\bbar\"");
		literal = new StringLiteral("foobar\b");
		assertThat(literal.getQueryString()).isEqualTo("\"foobar\\b\"");
		literal = new StringLiteral("\bfoobar\b");
		assertThat(literal.getQueryString()).isEqualTo("\"\\bfoobar\\b\"");
		literal = new StringLiteral("\bfoo\bbar\b");
		assertThat(literal.getQueryString()).isEqualTo("\"\\bfoo\\bbar\\b\"");
		literal = new StringLiteral("\bfoobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\bfoobar\"");
	}

	@Test
	public void testFormFeed() {
		StringLiteral literal = new StringLiteral("foo\fbar");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\fbar\"");
		literal = new StringLiteral("foobar\f");
		assertThat(literal.getQueryString()).isEqualTo("\"foobar\\f\"");
		literal = new StringLiteral("\ffoobar\f");
		assertThat(literal.getQueryString()).isEqualTo("\"\\ffoobar\\f\"");
		literal = new StringLiteral("\ffoo\fbar\f");
		assertThat(literal.getQueryString()).isEqualTo("\"\\ffoo\\fbar\\f\"");
		literal = new StringLiteral("\ffoobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\ffoobar\"");
	}

	@Test
	public void testSingleQuote() {
		StringLiteral literal = new StringLiteral("'foobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\'foobar\"");
		literal = new StringLiteral("foobar'");
		assertThat(literal.getQueryString()).isEqualTo("\"foobar\\'\"");
		literal = new StringLiteral("foo'bar");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\'bar\"");
		literal = new StringLiteral("'foo'bar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\'foo\\'bar\"");
		literal = new StringLiteral("'foobar'");
		assertThat(literal.getQueryString()).isEqualTo("\"\\'foobar\\'\"");
		literal = new StringLiteral("foo'bar'");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\'bar\\'\"");
		literal = new StringLiteral("'foo'bar'");
		assertThat(literal.getQueryString()).isEqualTo("\"\\'foo\\'bar\\'\"");
		literal = new StringLiteral("foobar'''");
		assertThat(literal.getQueryString()).isEqualTo("\"foobar\\'\\'\\'\"");
		literal = new StringLiteral("'''foobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\'\\'\\'foobar\"");
	}

	@Test
	public void testDoubleQuote() {
		StringLiteral literal = new StringLiteral("\"foobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\\"foobar\"");
		literal = new StringLiteral("foobar\"");
		assertThat(literal.getQueryString()).isEqualTo("\"foobar\\\"\"");
		literal = new StringLiteral("foo\"bar");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\\"bar\"");
		literal = new StringLiteral("\"foo\"bar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\\"foo\\\"bar\"");
		literal = new StringLiteral("\"foobar\"");
		assertThat(literal.getQueryString()).isEqualTo("\"\\\"foobar\\\"\"");
		literal = new StringLiteral("foo\"bar\"");
		assertThat(literal.getQueryString()).isEqualTo("\"foo\\\"bar\\\"\"");
		literal = new StringLiteral("\"foo\"bar\"");
		assertThat(literal.getQueryString()).isEqualTo("\"\\\"foo\\\"bar\\\"\"");
		literal = new StringLiteral("foobar\"\"\"");
		assertThat(literal.getQueryString()).isEqualTo("\"foobar\\\"\\\"\\\"\"");
		literal = new StringLiteral("\"\"\"foobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\\"\\\"\\\"foobar\"");
	}

	@Test
	public void testCornerCases() {
		StringLiteral literal = new StringLiteral("\\nfoobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\\\nfoobar\"");
		literal = new StringLiteral("\\\"foobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\\\\\\"foobar\"");
		literal = new StringLiteral("\\'foobar");
		assertThat(literal.getQueryString()).isEqualTo("\"\\\\\\'foobar\"");
		literal = new StringLiteral("\n\n\t\t\tfoo\\bar\n");
		assertThat(literal.getQueryString()).isEqualTo("\"\\n\\n\\t\\t\\tfoo\\\\bar\\n\"");
	}

	@Test
	public void testBoolean() {
		RdfLiteral.BooleanLiteral literal = new RdfLiteral.BooleanLiteral(true);
		assertThat(literal.getQueryString()).isEqualTo("true");
	}

	@Test
	public void testNumeric() {
		RdfLiteral.NumericLiteral literal = new RdfLiteral.NumericLiteral(10);
		assertThat(literal.getQueryString()).isEqualTo("10");
		literal = new RdfLiteral.NumericLiteral(10.00001);
		assertThat(literal.getQueryString()).isEqualTo("10.00001");
		literal = new RdfLiteral.NumericLiteral(new BigInteger("999999999999999999999999999999999999999999999"));
		assertThat(literal.getQueryString()).isEqualTo("999999999999999999999999999999999999999999999");
	}

}