/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.riot.process; import org.apache.jena.atlas.junit.BaseTest ; import org.apache.jena.graph.Node ; import org.apache.jena.riot.process.normalize.CanonicalizeLiteral ; import org.apache.jena.sparql.util.NodeFactoryExtra ; import org.junit.Test ; public class TestNormalization extends BaseTest { @Test public void normalize_int_01() { normalize("23", "23") ; } @Test public void normalize_int_02() { normalize("023", "23") ; } @Test public void normalize_int_03() { normalize("+23", "23") ; } @Test public void normalize_int_04() { normalize("+023", "23") ; } @Test public void normalize_int_05() { normalize("-23", "-23") ; } @Test public void normalize_int_06() { normalize("-0230", "-230") ; } @Test public void normalize_int_07() { normalize("0", "0") ; } @Test public void normalize_int_08() { normalize("00", "0") ; } @Test public void normalize_int_09() { normalize("+00", "0") ; } @Test public void normalize_int_10() { normalize("-0", "0") ; } @Test public void normalize_int_11() { normalize("-000", "0") ; } // Subtypes of integer @Test public void normalize_int_20() { normalize("'-000'^^xsd:int", "0") ; } @Test public void normalize_int_21() { normalize("'0'^^xsd:int", "0") ; } @Test public void normalize_int_22() { normalize("'1'^^xsd:long", "1") ; } @Test public void normalize_int_23() { normalize("'100'^^xsd:unsignedInt", "100") ; } @Test public void normalize_int_24() { normalize("'-100'^^xsd:nonPositiveInteger", "-100") ; } @Test public void normalize_int_25() { normalize("'+100'^^xsd:positiveInteger", "100") ; } @Test public void normalize_decimal_01() { normalize("0.0", "0.0") ; } @Test public void normalize_decimal_02() { normalize("'0'^^xsd:decimal", "0.0") ; } @Test public void normalize_decimal_03() { normalize("1.0", "1.0") ; } @Test public void normalize_decimal_04() { normalize("1.1", "1.1") ; } @Test public void normalize_decimal_05() { normalize("0001.10", "1.1") ; } @Test public void normalize_decimal_06() { normalize("-0.0", "0.0") ; } @Test public void normalize_decimal_07() { normalize("+0.0", "0.0") ; } @Test public void normalize_decimal_08() { normalize("+00560.0", "560.0") ; } @Test public void normalize_decimal_09() { normalize("-1.0", "-1.0") ; } @Test public void normalize_decimal_10() { normalize("-1.0", "-1.0") ; } @Test public void normalize_decimal_11() { normalize("+1.0", "1.0") ; } @Test public void normalize_decimal_12() { normalize("+1.0001", "1.0001") ; } @Test public void normalize_decimal_13() { normalize("-1.000100", "-1.0001") ; } @Test public void normalize_decimal_14() { normalize("'-1'^^xsd:decimal", "-1.0") ; } @Test public void normalize_decimal_15() { normalize("'0'^^xsd:decimal", "0.0") ; } // Check - what about exponent normalization? @Test public void normalize_double_01() { normalize("1e0", "1.0E0") ; } @Test public void normalize_double_02() { normalize("0e0", "0.0E0") ; } @Test public void normalize_double_03() { normalize("00e0", "0.0E0") ; } @Test public void normalize_double_04() { normalize("0e00", "0.0E0") ; } @Test public void normalize_double_05() { normalize("10e0", "1.0E1") ; } @Test public void normalize_double_10() { normalize("'-1e+0'^^xsd:double", "-1.0E0") ; } @Test public void normalize_double_11() { normalize("'+0e01'^^xsd:double", "0.0E0") ; } @Test public void normalize_double_12() { normalize("'1000'^^xsd:double", "1.0E3") ; } @Test public void normalize_double_13() { normalize("+1.e4", "1.0E4") ; } @Test public void normalize_double_14() { normalize("+12345.6789e+9", "1.23456789E13") ; } @Test public void normalize_double_15() { normalize("-12345.6789e+9", "-1.23456789E13") ; } @Test public void normalize_double_16() { normalize("+12345.6789e-9", "1.23456789E-5") ; } @Test public void normalize_double_17() { normalize("-12345.6789e-9", "-1.23456789E-5") ; } @Test public void normalize_datetime_01() { normalizeDT("1984-01-01T07:07:07", "1984-01-01T07:07:07") ; } @Test public void normalize_datetime_02() { normalizeDT("1984-01-01T07:07:07.0", "1984-01-01T07:07:07") ; } @Test public void normalize_datetime_03() { normalizeDT("1984-01-01T07:07:07.00", "1984-01-01T07:07:07") ; } @Test public void normalize_datetime_04() { normalizeDT("1984-01-01T07:07:07.01", "1984-01-01T07:07:07.01") ; } @Test public void normalize_datetime_05() { normalizeDT("1984-01-01T07:07:07.010","1984-01-01T07:07:07.01") ; } @Test public void normalize_boolean_01() { normalize("'true'^^xsd:boolean", "'true'^^xsd:boolean") ; } @Test public void normalize_boolean_02() { normalize("'false'^^xsd:boolean", "'false'^^xsd:boolean") ; } @Test public void normalize_boolean_03() { normalize("'1'^^xsd:boolean", "'true'^^xsd:boolean") ; } @Test public void normalize_boolean_04() { normalize("'0'^^xsd:boolean", "'false'^^xsd:boolean") ; } @Test public void normalize_lang_01() { normalizeLang("''", "''") ; } @Test public void normalize_lang_02() { normalizeLang("'abc'", "'abc'") ; } @Test public void normalize_lang_03() { normalizeLang("'abc'@EN", "'abc'@en") ; } @Test public void normalize_lang_04() { normalizeLang("'abc'@EN-UK", "'abc'@en-UK") ; } @Test public void normalize_lang_05() { normalizeLang("'abc'@EN", "'abc'@EN", false) ; } @Test public void normalize_lang_06() { normalizeLang("'abc'@EN-UK", "'abc'@en-uk", false) ; } private static void normalize(String input, String expected) { Node n1 = NodeFactoryExtra.parseNode(input) ; assertTrue("Invalid lexical form", n1.getLiteralDatatype().isValid(n1.getLiteralLexicalForm())); Node n2 = CanonicalizeLiteral.get().apply(n1) ; Node n3 = NodeFactoryExtra.parseNode(expected) ; assertEquals("Invalid canonicalization (lex)", n3.getLiteralLexicalForm(), n2.getLiteralLexicalForm()) ; assertEquals("Invalid canonicalization (node)", n3, n2) ; } private static void normalizeLang(String input, String expected) { normalizeLang(input, expected, true) ; } private static void normalizeLang(String input, String expected, boolean correct) { Node n1 = NodeFactoryExtra.parseNode(input) ; Node n2 = CanonicalizeLiteral.get().apply(n1) ; Node n3 = NodeFactoryExtra.parseNode(expected) ; if ( correct ) { assertEquals("Invalid canonicalization (lang)", n3.getLiteralLanguage(), n2.getLiteralLanguage()) ; assertEquals("Invalid canonicalization (node)", n3, n2) ; } else { assertNotEquals("Invalid canonicalization (lang)", n3.getLiteralLanguage(), n2.getLiteralLanguage()) ; assertNotEquals("Invalid canonicalization (node)", n3, n2) ; } } private static void normalizeDT(String input, String expected) { normalize("'"+input+"'^^xsd:dateTime", "'"+expected+"'^^xsd:dateTime") ; } }