You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by st...@apache.org on 2017/02/08 14:43:56 UTC
[01/16] commons-rdf git commit: COMMONSRDF-51: compare language tags
in lower case
Repository: commons-rdf
Updated Branches:
refs/heads/master 6d4e333d9 -> 4c69d42f4
COMMONSRDF-51: compare language tags in lower case
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/3064d219
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/3064d219
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/3064d219
Branch: refs/heads/master
Commit: 3064d219606cbe42c0150d81dbf6cdbc74bf7491
Parents: 0e1969a
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 12 14:51:26 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 12 14:51:26 2017 +0000
----------------------------------------------------------------------
.../org/apache/commons/rdf/api/Literal.java | 27 +++--
.../apache/commons/rdf/api/AbstractRDFTest.java | 118 ++++++++++++++++++-
.../commons/rdf/jena/impl/JenaLiteralImpl.java | 13 +-
.../commons/rdf/jsonldjava/JsonLdLiteral.java | 13 +-
.../commons/rdf/rdf4j/impl/LiteralImpl.java | 15 ++-
.../apache/commons/rdf/simple/LiteralImpl.java | 8 +-
6 files changed, 169 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/api/src/main/java/org/apache/commons/rdf/api/Literal.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/Literal.java b/api/src/main/java/org/apache/commons/rdf/api/Literal.java
index a434a73..ea6e3a4 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/Literal.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/Literal.java
@@ -18,6 +18,7 @@
package org.apache.commons.rdf.api;
import java.io.Serializable;
+import java.util.Locale;
import java.util.Objects;
import java.util.Optional;
@@ -72,7 +73,13 @@ public interface Literal extends RDFTerm {
* <a href="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
* >http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</a>, this method
* must return {@link Optional#empty()}.
- *
+ * <p>
+ * The value space of language tags is always in lower case; although
+ * RDF implementations MAY convert all language tags to lower case,
+ * safe comparisons of language tags should be done using
+ * {@link String#toLowerCase(Locale)} with the locale
+ * {@link Locale#ROOT}.
+ * <p>
* Implementation note: If your application requires {@link Serializable}
* objects, it is best not to store an {@link Optional} in a field. It is
* recommended to use {@link Optional#ofNullable(Object)} to create the
@@ -80,8 +87,8 @@ public interface Literal extends RDFTerm {
*
* @return The {@link Optional} language tag for this literal. If
* {@link Optional#isPresent()} returns true, the value returned by
- * {@link Optional#get()} must be a non-empty string conforming to
- * BCP47.
+ * {@link Optional#get()} must be a non-empty language tag string
+ * conforming to BCP47.
* @see <a href=
* "http://www.w3.org/TR/rdf11-concepts/#dfn-language-tag">RDF-1.1
* Literal language tag</a>
@@ -89,14 +96,20 @@ public interface Literal extends RDFTerm {
Optional<String> getLanguageTag();
/**
- * Check it this Literal is equal to another Literal. <blockquote>
+ * Check it this Literal is equal to another Literal.
+ * <blockquote>
* <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-literal-term">Literal
- * term equality</a>: Two literals are term-equal (the same RDF literal) if
+ * term equality</a>:
+ * Two literals are term-equal (the same RDF literal) if
* and only if the two lexical forms, the two datatype IRIs, and the two
* language tags (if any) compare equal, character by character. Thus, two
* literals can have the same value without being the same RDF term.
* </blockquote>
- *
+ * As the value space for language tags is lower-space, if they are present,
+ * they MUST be compared character by character
+ * using the equivalent of {@link String#toLowerCase(java.util.Locale)} with
+ * the locale {@link Locale#ROOT}.
+ * <p>
* Implementations MUST also override {@link #hashCode()} so that two equal
* Literals produce the same hash code.
*
@@ -114,7 +127,7 @@ public interface Literal extends RDFTerm {
* The returned hash code MUST be equal to the result of
* {@link Objects#hash(Object...)} with the arguments
* {@link #getLexicalForm()}, {@link #getDatatype()},
- * {@link #getLanguageTag()}.
+ * {@link #getLanguageTag()}<code>.map(s->s.toLowerString(Locale.ROOT))</code>.
* <p>
* This method MUST be implemented in conjunction with
* {@link #equals(Object)} so that two equal Literals produce the same hash
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 85e7b61..5efcee1 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -17,13 +17,13 @@
*/
package org.apache.commons.rdf.api;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.*;
+import java.util.Locale;
import java.util.Objects;
+import java.util.Optional;
+import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;
@@ -139,7 +139,7 @@ public abstract class AbstractRDFTest {
assertEquals("<http://example.com/vocab#term>", term.ntriplesString());
// and now for the international fun!
-
+ // make sure this file is edited/compiled as UTF-8
final IRI latin1 = factory.createIRI("http://acc�nt.example.com/premi�re");
assertEquals("http://acc�nt.example.com/premi�re", latin1.getIRIString());
assertEquals("<http://acc�nt.example.com/premi�re>", latin1.ntriplesString());
@@ -194,6 +194,114 @@ public abstract class AbstractRDFTest {
assertEquals("\"Herbert Van de Sompel\"@vls", vls.ntriplesString());
}
+ public void testCreateLiteralLangCaseInsensitive() throws Exception {
+ // COMMONSRDF-51: Literal langtag may not be in lowercase, but
+ // must be COMPARED (aka .equals and .hashCode()) in lowercase
+ // as the language space is lower case.
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+
+ assertEquals("en-gb", lower.getLanguageTag().get());
+
+ // NOTE: the RDF framework is free to lowercase the language tag
+ // or leave it as-is, so we can't assume:
+ /*
+ assertEquals("en-gb", upper.getLanguageTag().get());
+ assertEquals("en-gb", mixed.getLanguageTag().get());
+ */
+ // ..unless we do a case-insensitive comparison:
+ assertEquals("en-gb",
+ upper.getLanguageTag().get().toLowerCase(Locale.ROOT));
+ assertEquals("en-gb",
+ mixed.getLanguageTag().get().toLowerCase(Locale.ROOT));
+
+ // However these should all be true
+ assertEquals(lower, lower);
+ assertEquals(lower, upper);
+ assertEquals(lower, mixed);
+ assertEquals(upper, lower);
+ assertEquals(upper, upper);
+ assertEquals(upper, mixed);
+ assertEquals(mixed, lower);
+ assertEquals(mixed, upper);
+ assertEquals(mixed, mixed);
+
+ // And then by java.lang.Object contract, also the hashcode:
+ assertEquals(lower.hashCode(), upper.hashCode());
+ assertEquals(lower.hashCode(), mixed.hashCode());
+ }
+
+ @Test
+ public void testCreateLiteralLangCaseInsensitiveOther() throws Exception {
+ // COMMONSRDF-51: Ensure the Literal is using case insensitive
+ // comparison against more 'liberal' literal implementations
+ // which may not have done .toLowerString() in their constructor
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+ Literal otherLiteral = new Literal() {
+ @Override
+ public String ntriplesString() {
+ return "Hello@en-GB";
+ }
+ @Override
+ public String getLexicalForm() {
+ return "Hello";
+ }
+ @Override
+ public Optional<String> getLanguageTag() {
+ return Optional.of("en-GB");
+ }
+ @Override
+ public IRI getDatatype() {
+ return factory.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#langString");
+ }
+ @Override
+ public boolean equals(Object obj) {
+ throw new RuntimeException("Wrong way comparison of literal");
+ }
+ };
+
+ assertEquals(mixed, otherLiteral);
+ assertEquals(lower, otherLiteral);
+ assertEquals(upper, otherLiteral);
+ }
+
+ @Test
+ public void testCreateLiteralLangCaseInsensitiveInTurkish() throws Exception {
+ // COMMONSRDF-51: Special test for Turkish issue where
+ // "i".toLowerCase() != "i"
+ // See also:
+ // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
+ Locale defaultLocale = Locale.getDefault();
+ try {
+ Locale turkish = Locale.forLanguageTag("TR");
+ Locale.setDefault(turkish);
+ Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+
+ final Literal lower = factory.createLiteral("moi", "fi");
+ final Literal upper = factory.createLiteral("moi", "FI");
+ final Literal mixed = factory.createLiteral("moi", "fI");
+
+ assertEquals(lower, lower);
+ assertEquals(lower, upper);
+ assertEquals(lower, mixed);
+ assertEquals(upper, lower);
+ assertEquals(upper, upper);
+ assertEquals(upper, mixed);
+ assertEquals(mixed, lower);
+ assertEquals(mixed, upper);
+ assertEquals(mixed, mixed);
+ assertEquals(lower.hashCode(), upper.hashCode());
+ assertEquals(lower.hashCode(), mixed.hashCode());
+ } finally {
+ Locale.setDefault(defaultLocale);
+ }
+ }
+
@Test
public void testCreateLiteralString() throws Exception {
final Literal example = factory.createLiteral("Example",
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
index faee060..8a0c9ee 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
@@ -18,6 +18,7 @@
package org.apache.commons.rdf.jena.impl;
+import java.util.Locale;
import java.util.Objects;
import java.util.Optional;
@@ -37,6 +38,10 @@ class JenaLiteralImpl extends AbstractJenaRDFTerm implements JenaLiteral {
throw new IllegalArgumentException("Node is not a literal: " + node);
}
}
+
+ private static String lowerCase(String langTag) {
+ return langTag.toLowerCase(Locale.ROOT);
+ }
@Override
public boolean equals(final Object other) {
@@ -50,8 +55,10 @@ class JenaLiteralImpl extends AbstractJenaRDFTerm implements JenaLiteral {
return false;
}
final Literal literal = (Literal) other;
- return getLexicalForm().equals(literal.getLexicalForm()) && getLanguageTag().equals(literal.getLanguageTag())
- && getDatatype().equals(literal.getDatatype());
+ return getLexicalForm().equals(literal.getLexicalForm()) &&
+ getDatatype().equals(literal.getDatatype()) &&
+ getLanguageTag().map(JenaLiteralImpl::lowerCase).equals(
+ literal.getLanguageTag().map(JenaLiteralImpl::lowerCase));
}
@Override
@@ -75,6 +82,6 @@ class JenaLiteralImpl extends AbstractJenaRDFTerm implements JenaLiteral {
@Override
public int hashCode() {
- return Objects.hash(getLexicalForm(), getDatatype(), getLanguageTag());
+ return Objects.hash(getLexicalForm(), getDatatype(), getLanguageTag().map(JenaLiteralImpl::lowerCase));
}
}
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
index 2414087..0d63c29 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
@@ -17,6 +17,7 @@
*/
package org.apache.commons.rdf.jsonldjava;
+import java.util.Locale;
import java.util.Objects;
import java.util.Optional;
@@ -38,6 +39,10 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
}
}
+ private static String lowerCase(String langTag) {
+ return langTag.toLowerCase(Locale.ROOT);
+ }
+
@Override
public String ntriplesString() {
final StringBuilder sb = new StringBuilder();
@@ -76,9 +81,8 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
@Override
public int hashCode() {
- // Should be the same as
- // Objects.hash(getLexicalForm(), getDatatype(), getLanguageTag());
- return Objects.hash(node.getValue(), node.getDatatype(), node.getLanguage());
+ return Objects.hash(node.getValue(), node.getDatatype(),
+ getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
}
@Override
@@ -90,7 +94,8 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
if (obj instanceof Literal) {
final Literal other = (Literal) obj;
return getLexicalForm().equals(other.getLexicalForm()) && getDatatype().equals(other.getDatatype())
- && getLanguageTag().equals(other.getLanguageTag());
+ && getLanguageTag().map(JsonLdLiteralImpl::lowerCase)
+ .equals(other.getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
}
return false;
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
index 16d70b8..253b645 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
@@ -17,6 +17,7 @@
*/
package org.apache.commons.rdf.rdf4j.impl;
+import java.util.Locale;
import java.util.Objects;
import java.util.Optional;
@@ -32,6 +33,10 @@ final class LiteralImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
super(literal);
}
+ private static String lowerCase(String langTag) {
+ return langTag.toLowerCase(Locale.ROOT);
+ }
+
@Override
public boolean equals(final Object obj) {
if (obj == this) {
@@ -39,9 +44,10 @@ final class LiteralImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
}
if (obj instanceof org.apache.commons.rdf.api.Literal) {
final org.apache.commons.rdf.api.Literal other = (org.apache.commons.rdf.api.Literal) obj;
- return getLexicalForm().equals(other.getLexicalForm()) && getDatatype().equals(other.getDatatype())
- && getLanguageTag().equals(other.getLanguageTag());
-
+ return getLexicalForm().equals(other.getLexicalForm()) &&
+ getDatatype().equals(other.getDatatype()) &&
+ getLanguageTag().map(LiteralImpl::lowerCase).equals(
+ other.getLanguageTag().map(LiteralImpl::lowerCase));
}
return false;
}
@@ -63,7 +69,8 @@ final class LiteralImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
@Override
public int hashCode() {
- return Objects.hash(value.getLabel(), value.getDatatype(), value.getLanguage());
+ return Objects.hash(value.getLabel(), value.getDatatype(),
+ getLanguageTag().map(LiteralImpl::lowerCase));
}
@Override
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
----------------------------------------------------------------------
diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java b/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
index 3cca4c6..763a629 100644
--- a/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
+++ b/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
@@ -52,7 +52,7 @@ final class LiteralImpl implements Literal, SimpleRDF.SimpleRDFTerm {
public LiteralImpl(final String literal, final String languageTag) {
this.lexicalForm = Objects.requireNonNull(literal);
- this.languageTag = Objects.requireNonNull(languageTag).toLowerCase(Locale.ENGLISH);
+ this.languageTag = Objects.requireNonNull(lowerCase(languageTag));
if (languageTag.isEmpty()) {
// TODO: Check against
// http://www.w3.org/TR/n-triples/#n-triples-grammar
@@ -116,6 +116,10 @@ final class LiteralImpl implements Literal, SimpleRDF.SimpleRDFTerm {
return Objects.hash(lexicalForm, dataType, languageTag);
}
+ private static String lowerCase(String langTag) {
+ return langTag.toLowerCase(Locale.ROOT);
+ }
+
@Override
public boolean equals(final Object obj) {
if (this == obj) {
@@ -126,7 +130,7 @@ final class LiteralImpl implements Literal, SimpleRDF.SimpleRDFTerm {
}
final Literal literal = (Literal) obj;
return getDatatype().equals(literal.getDatatype()) && getLexicalForm().equals(literal.getLexicalForm())
- && getLanguageTag().equals(literal.getLanguageTag());
+ && getLanguageTag().equals(literal.getLanguageTag().map(LiteralImpl::lowerCase));
}
}
[15/16] commons-rdf git commit: COMMONSRDF-51: Comment
Posted by st...@apache.org.
COMMONSRDF-51: Comment
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/202a8c61
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/202a8c61
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/202a8c61
Branch: refs/heads/master
Commit: 202a8c617f383027ddf82361dc05d600207d8b13
Parents: f8745ef
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:40:27 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:40:27 2017 +0000
----------------------------------------------------------------------
.../java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/202a8c61/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
index a5f4e36..486903a 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
@@ -117,12 +117,12 @@ class JenaDatasetImpl implements JenaDataset {
@Override
public void remove(final Quad quad) {
+ // COMMONSRDF-51:
graph.deleteAny(
toJenaPattern(quad.getGraphName()),
toJenaPattern(quad.getSubject()),
toJenaPattern(quad.getPredicate()),
toJenaPattern(quad.getObject()));
-// graph.delete(factory.asJenaQuad(quad));
}
@Override
[09/16] commons-rdf git commit: COMMONSRDF-51: g.remove()/stream()
case insensitive lang testing
Posted by st...@apache.org.
COMMONSRDF-51: g.remove()/stream() case insensitive lang testing
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/f5766fe5
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/f5766fe5
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/f5766fe5
Branch: refs/heads/master
Commit: f5766fe5365b41fab01d1745543bf2a72a8b19d3
Parents: 4bc08f6
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 12:06:07 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 12:06:57 2017 +0000
----------------------------------------------------------------------
.../commons/rdf/api/AbstractGraphTest.java | 64 +++++++++++++++-----
1 file changed, 49 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/f5766fe5/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 89e91f2..4856ed4 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -408,13 +408,6 @@ public abstract class AbstractGraphTest {
assertTrue(graph.contains(null, null, upper));
assertTrue(graph.contains(null, null, lower));
assertTrue(graph.contains(null, null, mixed));
-
- // Remove should also honour any case
- graph.remove(example1, null, mixed);
-// Triple t = graph.stream().findAny().get();
-// System.out.println(t);
- // no more greetings of any kind
- assertFalse(graph.contains(null, greeting, null));
}
@Test
@@ -463,9 +456,6 @@ public abstract class AbstractGraphTest {
assertTrue(g.contains(exampleTR, null, lowerROOT));
assertTrue(g.contains(exampleTR, null, mixed));
assertTrue(g.contains(exampleTR, null, mixedROOT));
- g.remove(exampleTR, null, mixed);
- // No more greetings for exampleTR
- assertFalse(g.contains(exampleTR, null, null));
// What about the triple we added while in ROOT locale?
assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, upper)));
@@ -474,15 +464,59 @@ public abstract class AbstractGraphTest {
assertTrue(g.contains(exampleROOT, null, upper));
assertTrue(g.contains(exampleROOT, null, lower));
assertTrue(g.contains(exampleROOT, null, mixed));
- g.remove(exampleROOT, null, mixed);
- // No more greetings of any kind
- assertFalse(g.contains(null, null, null));
-
-
} finally {
Locale.setDefault(defaultLocale);
}
+ }
+
+
+ @Test
+ public void removeLanguageTagsCaseInsensitive() {
+ // COMMONSRDF-51: Ensure we can remove with any casing
+ // of literal language tag
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+ final IRI example1 = factory.createIRI("http://example.com/s1");
+ final IRI greeting = factory.createIRI("http://example.com/greeting");
+ final Graph graph = factory.createGraph();
+ graph.add(example1, greeting, upper);
+
+ // Remove should also honour any case
+ graph.remove(example1, null, mixed);
+ assertFalse(graph.contains(null, greeting, null));
+
+ graph.add(example1, greeting, lower);
+ graph.remove(example1, null, upper);
+
+ graph.add(factory.createTriple(example1, greeting, mixed));
+ graph.remove(factory.createTriple(example1, greeting, upper));
+ }
+
+ @Test
+ public void streamLanguageTagsCaseInsensitive() {
+ // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+ // of literal language tag
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+ final IRI example1 = factory.createIRI("http://example.com/s1");
+ final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+ final Graph graph = factory.createGraph();
+ graph.add(example1, greeting, upper);
+
+ // or as patterns
+ assertTrue(graph.stream(null, null, upper).findAny().isPresent());
+ assertTrue(graph.stream(null, null, lower).findAny().isPresent());
+ assertTrue(graph.stream(null, null, mixed).findAny().isPresent());
+
+ // Check the triples returned equal a new triple
+ Triple t = graph.stream(null, null, lower).findAny().get();
+ assertEquals(t, factory.createTriple(example1, greeting, mixed));
}
private void notEquals(final BlankNodeOrIRI node1, final BlankNodeOrIRI node2) {
[04/16] commons-rdf git commit: COMMONSRDF-51: Don't assume langtag
case is preserved
Posted by st...@apache.org.
COMMONSRDF-51: Don't assume langtag case is preserved
also test .equals() both ways
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/7046ea1e
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/7046ea1e
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/7046ea1e
Branch: refs/heads/master
Commit: 7046ea1e38a0da9b1c8ef8716ac7667fd96f7de7
Parents: 25cc1f1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:20:30 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:20:30 2017 +0000
----------------------------------------------------------------------
.../apache/commons/rdf/api/AbstractRDFTest.java | 124 ++++++++++++-------
1 file changed, 79 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/7046ea1e/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 52686d7..0032659 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -41,10 +41,10 @@ public abstract class AbstractRDFTest {
private RDF factory;
/**
- *
+ *
* This method must be overridden by the implementing test to provide a
* factory for the test to create {@link Literal}, {@link IRI} etc.
- *
+ *
* @return {@link RDF} instance to be tested.
*/
protected abstract RDF createFactory();
@@ -194,55 +194,67 @@ public abstract class AbstractRDFTest {
assertEquals("\"Herbert Van de Sompel\"@vls", vls.ntriplesString());
}
+
+ private void assertEqualsBothWays(Object a, Object b) {
+ assertEquals(a, b);
+ assertEquals(b, a);
+ // hashCode must match as well
+ assertEquals(a.hashCode(), b.hashCode());
+ }
+
@Test
public void testCreateLiteralLangCaseInsensitive() throws Exception {
- // COMMONSRDF-51: Literal langtag may not be in lowercase, but
- // must be COMPARED (aka .equals and .hashCode()) in lowercase
- // as the language space is lower case.
- final Literal lower = factory.createLiteral("Hello", "en-gb");
- final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ /*
+ * COMMONSRDF-51: Literal langtag may not be in lowercase, but must be
+ * COMPARED (aka .equals and .hashCode()) in lowercase as the language
+ * space is lower case.
+ */
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
final Literal mixed = factory.createLiteral("Hello", "en-GB");
-
- assertEquals("en-gb", lower.getLanguageTag().get());
-
- // NOTE: the RDF framework is free to lowercase the language tag
- // or leave it as-is, so we can't assume:
/*
- assertEquals("en-gb", upper.getLanguageTag().get());
- assertEquals("en-gb", mixed.getLanguageTag().get());
- */
- // ..unless we do a case-insensitive comparison:
+ * Disabled as some RDF frameworks (namely RDF4J) can be c configured to
+ * do BCP47 normalization (e.g. "en-GB"), so we can't guarantee
+ * lowercase language tags are preserved.
+ */
+ // assertEquals("en-gb", lower.getLanguageTag().get());
+
+ /*
+ * NOTE: the RDF framework is free to lowercase the language tag or
+ * leave it as-is, so we can't assume:
+ */
+ // assertEquals("en-gb", upper.getLanguageTag().get());
+ // assertEquals("en-gb", mixed.getLanguageTag().get());
+
+ /* ..unless we do a case-insensitive comparison: */
+ assertEquals("en-gb",
+ lower.getLanguageTag().get().toLowerCase(Locale.ROOT));
assertEquals("en-gb",
upper.getLanguageTag().get().toLowerCase(Locale.ROOT));
assertEquals("en-gb",
mixed.getLanguageTag().get().toLowerCase(Locale.ROOT));
-
- // However these should all be true
+
+ // However these should all be true using .equals
assertEquals(lower, lower);
- assertEquals(lower, upper);
- assertEquals(lower, mixed);
- assertEquals(upper, lower);
+ assertEqualsBothWays(lower, upper);
+ assertEqualsBothWays(lower, mixed);
assertEquals(upper, upper);
- assertEquals(upper, mixed);
- assertEquals(mixed, lower);
- assertEquals(mixed, upper);
+ assertEqualsBothWays(upper, mixed);
assertEquals(mixed, mixed);
-
- // And then by java.lang.Object contract, also the hashcode:
- assertEquals(lower.hashCode(), upper.hashCode());
- assertEquals(lower.hashCode(), mixed.hashCode());
+ // Note that assertEqualsBothWays also checks
+ // that .hashCode() matches
}
@Test
public void testCreateLiteralLangCaseInsensitiveOther() throws Exception {
// COMMONSRDF-51: Ensure the Literal is using case insensitive
- // comparison against more 'liberal' literal implementations
+ // comparison against any literal implementation
// which may not have done .toLowerString() in their constructor
- final Literal lower = factory.createLiteral("Hello", "en-gb");
- final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
final Literal mixed = factory.createLiteral("Hello", "en-GB");
-
+
Literal otherLiteral = new Literal() {
@Override
public String ntriplesString() {
@@ -266,6 +278,8 @@ public abstract class AbstractRDFTest {
}
};
+ // NOTE: Our fake Literal can't do .equals() or .hashCode(),
+ // so don't check the wrong way around!
assertEquals(mixed, otherLiteral);
assertEquals(lower, otherLiteral);
assertEquals(upper, otherLiteral);
@@ -273,36 +287,56 @@ public abstract class AbstractRDFTest {
@Test
public void testCreateLiteralLangCaseInsensitiveInTurkish() throws Exception {
- // COMMONSRDF-51: Special test for Turkish issue where
+ // COMMONSRDF-51: Special test for Turkish issue where
// "i".toLowerCase() != "i"
// See also:
// https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
Locale defaultLocale = Locale.getDefault();
- try {
+ try {
+ Locale.setDefault(Locale.ROOT);
+ final Literal lowerROOT = factory.createLiteral("moi", "fi");
+ final Literal upperROOT = factory.createLiteral("moi", "FI");
+ final Literal mixedROOT = factory.createLiteral("moi", "fI");
+
Locale turkish = Locale.forLanguageTag("TR");
Locale.setDefault(turkish);
+ // If the below assertion fails, then the Turkish
+ // locale no longer have this peculiarity that
+ // we want to test.
Assume.assumeFalse("FI".toLowerCase().equals("fi"));
- final Literal lower = factory.createLiteral("moi", "fi");
- final Literal upper = factory.createLiteral("moi", "FI");
+ final Literal lower = factory.createLiteral("moi", "fi");
+ final Literal upper = factory.createLiteral("moi", "FI");
final Literal mixed = factory.createLiteral("moi", "fI");
assertEquals(lower, lower);
- assertEquals(lower, upper);
- assertEquals(lower, mixed);
- assertEquals(upper, lower);
+ assertEqualsBothWays(lower, upper);
+ assertEqualsBothWays(lower, mixed);
+
assertEquals(upper, upper);
- assertEquals(upper, mixed);
- assertEquals(mixed, lower);
- assertEquals(mixed, upper);
+ assertEqualsBothWays(upper, mixed);
+
assertEquals(mixed, mixed);
- assertEquals(lower.hashCode(), upper.hashCode());
- assertEquals(lower.hashCode(), mixed.hashCode());
+
+ // And our instance created previously in ROOT locale
+ // should still be equal to the instance created in TR locale
+ // (e.g. test constructor is not doing a naive .toLowerCase())
+ assertEqualsBothWays(lower, lowerROOT);
+ assertEqualsBothWays(upper, lowerROOT);
+ assertEqualsBothWays(mixed, lowerROOT);
+
+ assertEqualsBothWays(lower, upperROOT);
+ assertEqualsBothWays(upper, upperROOT);
+ assertEqualsBothWays(mixed, upperROOT);
+
+ assertEqualsBothWays(lower, mixedROOT);
+ assertEqualsBothWays(upper, mixedROOT);
+ assertEqualsBothWays(mixed, mixedROOT);
} finally {
Locale.setDefault(defaultLocale);
}
}
-
+
@Test
public void testCreateLiteralString() throws Exception {
final Literal example = factory.createLiteral("Example",
[05/16] commons-rdf git commit: COMMONSRDF-51: Check langtag equals
also graph.add/contains/remove
Posted by st...@apache.org.
COMMONSRDF-51: Check langtag equals also graph.add/contains/remove
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/50dc8861
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/50dc8861
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/50dc8861
Branch: refs/heads/master
Commit: 50dc8861f3a0824168c8484d1c7a3535e49de57c
Parents: 7046ea1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:37:19 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:37:19 2017 +0000
----------------------------------------------------------------------
.../commons/rdf/api/AbstractGraphTest.java | 105 ++++++++++++++++++-
1 file changed, 100 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/50dc8861/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 7e32676..eba8888 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
@@ -46,7 +47,7 @@ import org.junit.Test;
* <p>
* This test uses try-with-resources blocks for calls to {@link Graph#stream()}
* and {@link Graph#iterate()}.
- *
+ *
* @see Graph
* @see RDF
*/
@@ -68,10 +69,10 @@ public abstract class AbstractGraphTest {
protected Triple bobNameTriple;
/**
- *
+ *
* This method must be overridden by the implementing test to provide a
* factory for the test to create {@link Graph}, {@link IRI} etc.
- *
+ *
* @return {@link RDF} instance to be tested.
*/
protected abstract RDF createFactory();
@@ -385,6 +386,100 @@ public abstract class AbstractGraphTest {
}
}
+ @Test
+ public void containsLanguageTagsCaseInsensitive() {
+ // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+ // of literal language tag
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+ final IRI example1 = factory.createIRI("http://example.com/s1");
+ final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+ final Graph graph = factory.createGraph();
+ graph.add(example1, greeting, upper);
+
+ assertTrue(graph.contains(factory.createTriple(example1, greeting, upper)));
+ assertTrue(graph.contains(factory.createTriple(example1, greeting, lower)));
+ assertTrue(graph.contains(factory.createTriple(example1, greeting, mixed)));
+
+ // or as patterns
+ assertTrue(graph.contains(null, null, upper));
+ assertTrue(graph.contains(null, null, lower));
+ assertTrue(graph.contains(null, null, mixed));
+
+ // Remove should also honour any case
+ graph.remove(example1, greeting, mixed);
+ assertFalse(graph.contains(null, greeting, null));
+ }
+
+ @Test
+ public void containsLanguageTagsCaseInsensitiveTurkish() {
+ // COMMONSRDF-51: Special test for Turkish issue where
+ // "i".toLowerCase() != "i"
+ // See also:
+ // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
+
+ // This is similar to the test in AbstractRDFTest, but on a graph
+ Locale defaultLocale = Locale.getDefault();
+ try {
+ Locale.setDefault(Locale.ROOT);
+ final Literal lowerROOT = factory.createLiteral("moi", "fi");
+ final Literal upperROOT = factory.createLiteral("moi", "FI");
+ final Literal mixedROOT = factory.createLiteral("moi", "fI");
+ final Graph g = factory.createGraph();
+ final IRI exampleROOT = factory.createIRI("http://example.com/s1");
+ final IRI greeting = factory.createIRI("http://example.com/greeting");
+ g.add(exampleROOT, greeting, mixedROOT);
+
+ Locale turkish = Locale.forLanguageTag("TR");
+ Locale.setDefault(turkish);
+ // If the below assertion fails, then the Turkish
+ // locale no longer have this peculiarity that
+ // we want to test.
+ Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+
+ // Below is pretty much the same as in
+ // containsLanguageTagsCaseInsensitive()
+ final Literal lower = factory.createLiteral("moi", "fi");
+ final Literal upper = factory.createLiteral("moi", "FI");
+ final Literal mixed = factory.createLiteral("moi", "fI");
+
+ final IRI exampleTR = factory.createIRI("http://example.com/s2");
+ g.add(exampleTR, greeting, upper);
+ assertTrue(g.contains(factory.createTriple(exampleTR, greeting, upper)));
+ assertTrue(g.contains(factory.createTriple(exampleTR, greeting, upperROOT)));
+ assertTrue(g.contains(factory.createTriple(exampleTR, greeting, lower)));
+ assertTrue(g.contains(factory.createTriple(exampleTR, greeting, lowerROOT)));
+ assertTrue(g.contains(factory.createTriple(exampleTR, greeting, mixed)));
+ assertTrue(g.contains(factory.createTriple(exampleTR, greeting, mixedROOT)));
+ assertTrue(g.contains(exampleTR, null, upper));
+ assertTrue(g.contains(exampleTR, null, upperROOT));
+ assertTrue(g.contains(exampleTR, null, lower));
+ assertTrue(g.contains(exampleTR, null, lowerROOT));
+ assertTrue(g.contains(exampleTR, null, mixed));
+ assertTrue(g.contains(exampleTR, null, mixedROOT));
+ g.remove(exampleTR, greeting, mixed);
+ assertFalse(g.contains(exampleTR, null, null));
+
+ // What about the triple we added while in ROOT locale?
+ assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, upper)));
+ assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, lower)));
+ assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, mixed)));
+ assertTrue(g.contains(exampleROOT, null, upper));
+ assertTrue(g.contains(exampleROOT, null, lower));
+ assertTrue(g.contains(exampleROOT, null, mixed));
+ g.remove(exampleROOT, greeting, mixed);
+ assertFalse(g.contains(exampleROOT, null, null));
+
+
+ } finally {
+ Locale.setDefault(defaultLocale);
+ }
+
+ }
+
private void notEquals(final BlankNodeOrIRI node1, final BlankNodeOrIRI node2) {
assertFalse(node1.equals(node2));
// in which case we should be able to assume
@@ -439,7 +534,7 @@ public abstract class AbstractGraphTest {
* Create a different implementation of BlankNode to be tested with
* graph.add(a,b,c); (the implementation may or may not then choose to
* translate such to its own instances)
- *
+ *
* @param name
* @return
*/
@@ -493,7 +588,7 @@ public abstract class AbstractGraphTest {
* An attempt to use the Java 8 streams to look up a more complicated query.
* <p>
* FYI, the equivalent SPARQL version (untested):
- *
+ *
* <pre>
* SELECT ?orgName WHERE {
* ?org foaf:name ?orgName .
[07/16] commons-rdf git commit: COMMONSRDF-51: Use patterns for
remove/contains
Posted by st...@apache.org.
COMMONSRDF-51: Use patterns for remove/contains
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/c729469a
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/c729469a
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/c729469a
Branch: refs/heads/master
Commit: c729469aed46349b927d4038e67ff4fb5fa8ebd2
Parents: 448c20b
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:50:23 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:50:23 2017 +0000
----------------------------------------------------------------------
.../org/apache/commons/rdf/api/AbstractGraphTest.java | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/c729469a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index eba8888..e18ca08 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -410,7 +410,8 @@ public abstract class AbstractGraphTest {
assertTrue(graph.contains(null, null, mixed));
// Remove should also honour any case
- graph.remove(example1, greeting, mixed);
+ graph.remove(example1, null, mixed);
+ // no more greetings of any kind
assertFalse(graph.contains(null, greeting, null));
}
@@ -460,7 +461,8 @@ public abstract class AbstractGraphTest {
assertTrue(g.contains(exampleTR, null, lowerROOT));
assertTrue(g.contains(exampleTR, null, mixed));
assertTrue(g.contains(exampleTR, null, mixedROOT));
- g.remove(exampleTR, greeting, mixed);
+ g.remove(exampleTR, null, mixed);
+ // No more greetings for exampleTR
assertFalse(g.contains(exampleTR, null, null));
// What about the triple we added while in ROOT locale?
@@ -470,8 +472,9 @@ public abstract class AbstractGraphTest {
assertTrue(g.contains(exampleROOT, null, upper));
assertTrue(g.contains(exampleROOT, null, lower));
assertTrue(g.contains(exampleROOT, null, mixed));
- g.remove(exampleROOT, greeting, mixed);
- assertFalse(g.contains(exampleROOT, null, null));
+ g.remove(exampleROOT, null, mixed);
+ // No more greetings of any kind
+ assertFalse(g.contains(null, null, null));
} finally {
[16/16] commons-rdf git commit: COMMONSRDF-51: compare language tags
in lower case
Posted by st...@apache.org.
COMMONSRDF-51: compare language tags in lower case
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/4c69d42f
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/4c69d42f
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/4c69d42f
Branch: refs/heads/master
Commit: 4c69d42f40028a2faa613be04ff0d8a0d20b6ec3
Parents: 6d4e333 202a8c6
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:43:18 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:43:18 2017 +0000
----------------------------------------------------------------------
.../org/apache/commons/rdf/api/Literal.java | 27 +++-
.../commons/rdf/api/AbstractDatasetTest.java | 139 ++++++++++++++++
.../commons/rdf/api/AbstractGraphTest.java | 153 +++++++++++++++++-
.../apache/commons/rdf/api/AbstractRDFTest.java | 158 ++++++++++++++++++-
.../commons/rdf/jena/impl/JenaDatasetImpl.java | 7 +-
.../commons/rdf/jena/impl/JenaGraphImpl.java | 18 ++-
.../commons/rdf/jena/impl/JenaLiteralImpl.java | 13 +-
.../commons/rdf/jsonldjava/JsonLdLiteral.java | 13 +-
.../commons/rdf/rdf4j/impl/LiteralImpl.java | 15 +-
.../apache/commons/rdf/simple/LiteralImpl.java | 8 +-
10 files changed, 515 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/4c69d42f/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
----------------------------------------------------------------------
[13/16] commons-rdf git commit: COMMONSRDF-51: Make sure
graph.remove(Triple) ignores langtag case
Posted by st...@apache.org.
COMMONSRDF-51: Make sure graph.remove(Triple) ignores langtag case
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/3cf27116
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/3cf27116
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/3cf27116
Branch: refs/heads/master
Commit: 3cf271162416df98e63b4e40eb08007a3a754f5a
Parents: 0470e7c
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:33:35 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:33:35 2017 +0000
----------------------------------------------------------------------
.../test/java/org/apache/commons/rdf/api/AbstractGraphTest.java | 5 ++++-
.../java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java | 1 -
2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3cf27116/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 8245b5d..3020704 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -399,7 +399,8 @@ public abstract class AbstractGraphTest {
final Graph graph = factory.createGraph();
graph.add(example1, greeting, upper);
-
+
+ // any kind of Triple should match
assertTrue(graph.contains(factory.createTriple(example1, greeting, upper)));
assertTrue(graph.contains(factory.createTriple(example1, greeting, lower)));
assertTrue(graph.contains(factory.createTriple(example1, greeting, mixed)));
@@ -491,8 +492,10 @@ public abstract class AbstractGraphTest {
graph.add(example1, greeting, lower);
graph.remove(example1, null, upper);
+ // Check with Triple
graph.add(factory.createTriple(example1, greeting, mixed));
graph.remove(factory.createTriple(example1, greeting, upper));
+ assertFalse(graph.contains(null, greeting, null));
}
private static Optional<? extends Triple> closableFindAny(Stream<? extends Triple> stream) {
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3cf27116/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
index 76e92f7..55256e2 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
@@ -29,7 +29,6 @@ import org.apache.commons.rdf.api.RDFTerm;
import org.apache.commons.rdf.api.Triple;
import org.apache.commons.rdf.jena.JenaGraph;
import org.apache.commons.rdf.jena.JenaRDF;
-import org.apache.commons.rdf.jena.JenaTriple;
import org.apache.jena.atlas.iterator.Iter;
import org.apache.jena.graph.Node;
import org.apache.jena.rdf.model.Model;
[14/16] commons-rdf git commit: COMMONSRDF-51: Avoid deleting
directly from Quad
Posted by st...@apache.org.
COMMONSRDF-51: Avoid deleting directly from Quad
.. so that langtags are compared case insensitrive
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/f8745ef5
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/f8745ef5
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/f8745ef5
Branch: refs/heads/master
Commit: f8745ef5f1e8cb2b392f5dc88938a65980a72170
Parents: 3cf2711
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:38:11 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:38:11 2017 +0000
----------------------------------------------------------------------
.../org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/f8745ef5/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
index 9e4eac2..a5f4e36 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
@@ -117,7 +117,12 @@ class JenaDatasetImpl implements JenaDataset {
@Override
public void remove(final Quad quad) {
- graph.delete(factory.asJenaQuad(quad));
+ graph.deleteAny(
+ toJenaPattern(quad.getGraphName()),
+ toJenaPattern(quad.getSubject()),
+ toJenaPattern(quad.getPredicate()),
+ toJenaPattern(quad.getObject()));
+// graph.delete(factory.asJenaQuad(quad));
}
@Override
[03/16] commons-rdf git commit: Merge remote-tracking branch
'origin/master' into COMMONSRDF-51-langtag-lcase
Posted by st...@apache.org.
Merge remote-tracking branch 'origin/master' into COMMONSRDF-51-langtag-lcase
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/25cc1f18
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/25cc1f18
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/25cc1f18
Branch: refs/heads/master
Commit: 25cc1f1839c9d99adbaf92ab740d482eaf0f4606
Parents: 6f11372 42363cf
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 10:58:51 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 10:58:51 2017 +0000
----------------------------------------------------------------------
jena/pom.xml | 19 +++-
jsonld-java/pom.xml | 19 +++-
pom.xml | 271 +++++++++++++++++++++++------------------------
rdf4j/pom.xml | 7 +-
simple/pom.xml | 19 +++-
5 files changed, 180 insertions(+), 155 deletions(-)
----------------------------------------------------------------------
[12/16] commons-rdf git commit: COMMONSRDF-51 Added langtag case
tests for dataset
Posted by st...@apache.org.
COMMONSRDF-51 Added langtag case tests for dataset
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/0470e7c0
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/0470e7c0
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/0470e7c0
Branch: refs/heads/master
Commit: 0470e7c06ab9b8de927c185caf7d56f3f11fc51b
Parents: 6b07abf
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:32:55 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:32:55 2017 +0000
----------------------------------------------------------------------
.../commons/rdf/api/AbstractDatasetTest.java | 139 +++++++++++++++++++
1 file changed, 139 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/0470e7c0/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
index 505994f..9e2e192 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
@@ -542,7 +543,145 @@ public abstract class AbstractDatasetTest {
}
+ @Test
+ public void containsLanguageTagsCaseInsensitive() {
+ // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+ // of literal language tag
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+ final IRI example1 = factory.createIRI("http://example.com/s1");
+ final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+
+ dataset.add(null, example1, greeting, upper);
+
+ // any kind of Triple should match
+ assertTrue(dataset.contains(factory.createQuad(null, example1, greeting, upper)));
+ assertTrue(dataset.contains(factory.createQuad(null, example1, greeting, lower)));
+ assertTrue(dataset.contains(factory.createQuad(null, example1, greeting, mixed)));
+
+ // or as patterns
+ assertTrue(dataset.contains(null, null, null, upper));
+ assertTrue(dataset.contains(null, null, null, lower));
+ assertTrue(dataset.contains(null, null, null, mixed));
+ }
+
+ @Test
+ public void containsLanguageTagsCaseInsensitiveTurkish() {
+ // COMMONSRDF-51: Special test for Turkish issue where
+ // "i".toLowerCase() != "i"
+ // See also:
+ // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
+
+ // This is similar to the test in AbstractRDFTest, but on a graph
+ Locale defaultLocale = Locale.getDefault();
+ try {
+ Locale.setDefault(Locale.ROOT);
+ final Literal lowerROOT = factory.createLiteral("moi", "fi");
+ final Literal upperROOT = factory.createLiteral("moi", "FI");
+ final Literal mixedROOT = factory.createLiteral("moi", "fI");
+ final IRI exampleROOT = factory.createIRI("http://example.com/s1");
+ final IRI greeting = factory.createIRI("http://example.com/greeting");
+ dataset.add(null, exampleROOT, greeting, mixedROOT);
+
+ Locale turkish = Locale.forLanguageTag("TR");
+ Locale.setDefault(turkish);
+ // If the below assertion fails, then the Turkish
+ // locale no longer have this peculiarity that
+ // we want to test.
+ Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+
+ // Below is pretty much the same as in
+ // containsLanguageTagsCaseInsensitive()
+ final Literal lower = factory.createLiteral("moi", "fi");
+ final Literal upper = factory.createLiteral("moi", "FI");
+ final Literal mixed = factory.createLiteral("moi", "fI");
+
+ final IRI exampleTR = factory.createIRI("http://example.com/s2");
+ dataset.add(null, exampleTR, greeting, upper);
+ assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, upper)));
+ assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, upperROOT)));
+ assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, lower)));
+ assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, lowerROOT)));
+ assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, mixed)));
+ assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, mixedROOT)));
+ assertTrue(dataset.contains(null, exampleTR, null, upper));
+ assertTrue(dataset.contains(null, exampleTR, null, upperROOT));
+ assertTrue(dataset.contains(null, exampleTR, null, lower));
+ assertTrue(dataset.contains(null, exampleTR, null, lowerROOT));
+ assertTrue(dataset.contains(null, exampleTR, null, mixed));
+ assertTrue(dataset.contains(null, exampleTR, null, mixedROOT));
+
+ // What about the triple we added while in ROOT locale?
+ assertTrue(dataset.contains(factory.createQuad(null, exampleROOT, greeting, upper)));
+ assertTrue(dataset.contains(factory.createQuad(null, exampleROOT, greeting, lower)));
+ assertTrue(dataset.contains(factory.createQuad(null, exampleROOT, greeting, mixed)));
+ assertTrue(dataset.contains(null, exampleROOT, null, upper));
+ assertTrue(dataset.contains(null, exampleROOT, null, lower));
+ assertTrue(dataset.contains(null, exampleROOT, null, mixed));
+ } finally {
+ Locale.setDefault(defaultLocale);
+ }
+ }
+
+
+ @Test
+ public void removeLanguageTagsCaseInsensitive() {
+ // COMMONSRDF-51: Ensure we can remove with any casing
+ // of literal language tag
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+ final IRI example1 = factory.createIRI("http://example.com/s1");
+ final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+ dataset.add(null, example1, greeting, upper);
+
+ // Remove should also honour any case
+ dataset.remove(null, example1, null, mixed);
+ assertFalse(dataset.contains(null, null, greeting, null));
+
+ dataset.add(null, example1, greeting, lower);
+ dataset.remove(null, example1, null, upper);
+
+ // Check with Triple
+ dataset.add(factory.createQuad(null, example1, greeting, mixed));
+ dataset.remove(factory.createQuad(null, example1, greeting, upper));
+ assertFalse(dataset.contains(null, null, greeting, null));
+ }
+
+ private static Optional<? extends Quad> closableFindAny(Stream<? extends Quad> stream) {
+ try (Stream<? extends Quad> s = stream) {
+ return s.findAny();
+ }
+ }
+ @Test
+ public void streamLanguageTagsCaseInsensitive() {
+ // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+ // of literal language tag
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
+ final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+ final IRI example1 = factory.createIRI("http://example.com/s1");
+ final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+ dataset.add(null, example1, greeting, upper);
+
+ // or as patterns
+ assertTrue(closableFindAny(dataset.stream(null, null, null, upper)).isPresent());
+ assertTrue(closableFindAny(dataset.stream(null, null, null, lower)).isPresent());
+ assertTrue(closableFindAny(dataset.stream(null, null, null, mixed)).isPresent());
+
+ // Check the quad returned equal a new quad
+ Quad q = closableFindAny(dataset.stream(null, null, null, lower)).get();
+ assertEquals(q, factory.createQuad(null, example1, greeting, mixed));
+ }
+
/**
* An attempt to use the Java 8 streams to look up a more complicated query.
* <p>
[08/16] commons-rdf git commit: commented out debug statement
Posted by st...@apache.org.
commented out debug statement
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/4bc08f6e
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/4bc08f6e
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/4bc08f6e
Branch: refs/heads/master
Commit: 4bc08f6e31cec45179b8c99b9905a39ddeaac746
Parents: c729469
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:57:45 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:57:45 2017 +0000
----------------------------------------------------------------------
.../test/java/org/apache/commons/rdf/api/AbstractGraphTest.java | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/4bc08f6e/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index e18ca08..89e91f2 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -411,6 +411,8 @@ public abstract class AbstractGraphTest {
// Remove should also honour any case
graph.remove(example1, null, mixed);
+// Triple t = graph.stream().findAny().get();
+// System.out.println(t);
// no more greetings of any kind
assertFalse(graph.contains(null, greeting, null));
}
[11/16] commons-rdf git commit: Test removal of Triple as well
Posted by st...@apache.org.
Test removal of Triple as well
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/6b07abf4
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/6b07abf4
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/6b07abf4
Branch: refs/heads/master
Commit: 6b07abf49be486d6985de3c9fe8425adaabc1c38
Parents: d5964a1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:24:13 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:24:13 2017 +0000
----------------------------------------------------------------------
.../commons/rdf/jena/impl/JenaGraphImpl.java | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/6b07abf4/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
index e3805b6..76e92f7 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
@@ -24,10 +24,12 @@ import java.util.stream.Stream;
import org.apache.commons.rdf.api.BlankNodeOrIRI;
import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.Literal;
import org.apache.commons.rdf.api.RDFTerm;
import org.apache.commons.rdf.api.Triple;
import org.apache.commons.rdf.jena.JenaGraph;
import org.apache.commons.rdf.jena.JenaRDF;
+import org.apache.commons.rdf.jena.JenaTriple;
import org.apache.jena.atlas.iterator.Iter;
import org.apache.jena.graph.Node;
import org.apache.jena.rdf.model.Model;
@@ -93,8 +95,8 @@ class JenaGraphImpl implements JenaGraph {
@Override
public void remove(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
- graph.delete(org.apache.jena.graph.Triple.create(toJenaPattern(subject), toJenaPattern(predicate),
- toJenaPattern(object)));
+ graph.remove(toJenaPattern(subject), toJenaPattern(predicate),
+ toJenaPattern(object));
}
private Node toJenaPattern(final RDFTerm pattern) {
@@ -106,7 +108,18 @@ class JenaGraphImpl implements JenaGraph {
@Override
public void remove(final Triple triple) {
- graph.delete(factory.asJenaTriple(triple));
+ if ((triple.getObject() instanceof Literal) &&
+ ((Literal) triple.getObject()).getLanguageTag().isPresent()) {
+ // COMMONSRDF-51: graph.delete(Triple) would be too restrictive
+ // as it won't delete triples with different lang tag - so
+ // we'll need to use the pattern matching graph.remove instead()
+ graph.remove(
+ factory.asJenaNode(triple.getSubject()),
+ factory.asJenaNode(triple.getPredicate()),
+ factory.asJenaNode(triple.getObject()));
+ } else {
+ graph.delete(factory.asJenaTriple(triple));
+ }
}
@Override
[02/16] commons-rdf git commit: COMMONSRDF-51: annotated missing test
Posted by st...@apache.org.
COMMONSRDF-51: annotated missing test
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/6f11372b
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/6f11372b
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/6f11372b
Branch: refs/heads/master
Commit: 6f11372bb98dbbbb1f9e4ca00921725080cac341
Parents: 3064d21
Author: Sergio Fern�ndez <wi...@apache.org>
Authored: Tue Jan 17 08:34:11 2017 +0100
Committer: Sergio Fern�ndez <wi...@apache.org>
Committed: Tue Jan 17 08:34:11 2017 +0100
----------------------------------------------------------------------
api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/6f11372b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 5efcee1..52686d7 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -194,6 +194,7 @@ public abstract class AbstractRDFTest {
assertEquals("\"Herbert Van de Sompel\"@vls", vls.ntriplesString());
}
+ @Test
public void testCreateLiteralLangCaseInsensitive() throws Exception {
// COMMONSRDF-51: Literal langtag may not be in lowercase, but
// must be COMPARED (aka .equals and .hashCode()) in lowercase
@@ -415,4 +416,5 @@ public abstract class AbstractRDFTest {
final Triple triple = factory.createTriple(iri, iri, iri);
assertEquals(Objects.hash(iri, iri, iri), triple.hashCode());
}
+
}
[06/16] commons-rdf git commit: Ensure we don't create @en-gb first
with the factory (in case it caches)
Posted by st...@apache.org.
Ensure we don't create @en-gb first with the factory (in case it caches)
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/448c20b1
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/448c20b1
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/448c20b1
Branch: refs/heads/master
Commit: 448c20b1fe9241ffcd3955c235db0c35d24bb940
Parents: 50dc886
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:50:05 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:50:05 2017 +0000
----------------------------------------------------------------------
.../org/apache/commons/rdf/api/AbstractRDFTest.java | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/448c20b1/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 0032659..bb4dc5b 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -209,8 +209,8 @@ public abstract class AbstractRDFTest {
* COMPARED (aka .equals and .hashCode()) in lowercase as the language
* space is lower case.
*/
- final Literal lower = factory.createLiteral("Hello", "en-gb");
final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
final Literal mixed = factory.createLiteral("Hello", "en-GB");
/*
@@ -251,14 +251,14 @@ public abstract class AbstractRDFTest {
// COMMONSRDF-51: Ensure the Literal is using case insensitive
// comparison against any literal implementation
// which may not have done .toLowerString() in their constructor
- final Literal lower = factory.createLiteral("Hello", "en-gb");
final Literal upper = factory.createLiteral("Hello", "EN-GB");
+ final Literal lower = factory.createLiteral("Hello", "en-gb");
final Literal mixed = factory.createLiteral("Hello", "en-GB");
Literal otherLiteral = new Literal() {
@Override
public String ntriplesString() {
- return "Hello@en-GB";
+ return "Hello@eN-Gb";
}
@Override
public String getLexicalForm() {
@@ -266,7 +266,7 @@ public abstract class AbstractRDFTest {
}
@Override
public Optional<String> getLanguageTag() {
- return Optional.of("en-GB");
+ return Optional.of("eN-Gb");
}
@Override
public IRI getDatatype() {
@@ -294,9 +294,9 @@ public abstract class AbstractRDFTest {
Locale defaultLocale = Locale.getDefault();
try {
Locale.setDefault(Locale.ROOT);
+ final Literal mixedROOT = factory.createLiteral("moi", "fI");
final Literal lowerROOT = factory.createLiteral("moi", "fi");
final Literal upperROOT = factory.createLiteral("moi", "FI");
- final Literal mixedROOT = factory.createLiteral("moi", "fI");
Locale turkish = Locale.forLanguageTag("TR");
Locale.setDefault(turkish);
@@ -305,9 +305,9 @@ public abstract class AbstractRDFTest {
// we want to test.
Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+ final Literal mixed = factory.createLiteral("moi", "fI");
final Literal lower = factory.createLiteral("moi", "fi");
final Literal upper = factory.createLiteral("moi", "FI");
- final Literal mixed = factory.createLiteral("moi", "fI");
assertEquals(lower, lower);
assertEqualsBothWays(lower, upper);
[10/16] commons-rdf git commit: COMMONSRDF-51: Ensure RDF4J stream
closes in test
Posted by st...@apache.org.
COMMONSRDF-51: Ensure RDF4J stream closes in test
Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/d5964a19
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/d5964a19
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/d5964a19
Branch: refs/heads/master
Commit: d5964a19b274d60a0301680961dce087641623ce
Parents: f5766fe
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 12:10:32 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 12:10:32 2017 +0000
----------------------------------------------------------------------
.../org/apache/commons/rdf/api/AbstractGraphTest.java | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/d5964a19/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 4856ed4..8245b5d 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -495,6 +495,12 @@ public abstract class AbstractGraphTest {
graph.remove(factory.createTriple(example1, greeting, upper));
}
+ private static Optional<? extends Triple> closableFindAny(Stream<? extends Triple> stream) {
+ try (Stream<? extends Triple> s = stream) {
+ return s.findAny();
+ }
+ }
+
@Test
public void streamLanguageTagsCaseInsensitive() {
// COMMONSRDF-51: Ensure we can add/contains/remove with any casing
@@ -510,12 +516,12 @@ public abstract class AbstractGraphTest {
graph.add(example1, greeting, upper);
// or as patterns
- assertTrue(graph.stream(null, null, upper).findAny().isPresent());
- assertTrue(graph.stream(null, null, lower).findAny().isPresent());
- assertTrue(graph.stream(null, null, mixed).findAny().isPresent());
+ assertTrue(closableFindAny(graph.stream(null, null, upper)).isPresent());
+ assertTrue(closableFindAny(graph.stream(null, null, lower)).isPresent());
+ assertTrue(closableFindAny(graph.stream(null, null, mixed)).isPresent());
// Check the triples returned equal a new triple
- Triple t = graph.stream(null, null, lower).findAny().get();
+ Triple t = closableFindAny(graph.stream(null, null, lower)).get();
assertEquals(t, factory.createTriple(example1, greeting, mixed));
}