/* * 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.web; import org.apache.jena.atlas.junit.BaseTest ; import org.apache.jena.riot.web.LangTag ; import org.junit.Test ; public class TestLangTag extends BaseTest { @Test public void parse_01() { parseGood("en", "en", "en", null, null, null, null) ; } @Test public void parse_02() { parseGood("en-uk", "en-UK", "en", null, "UK", null, null) ; } @Test public void parse_03() { parseGood("es-419", "es-419", "es", null, "419", null, null) ; } @Test public void parse_04() { parseGood("zh-Hant", "zh-Hant", "zh", "Hant", null, null, null) ; } @Test public void parse_05() { parseGood("sr-Latn-CS", "sr-Latn-CS", "sr", "Latn", "CS", null, null) ; } @Test public void parse_06() { parseGood("sl-nedis", "sl-nedis", "sl", null, null, "nedis", null) ; } @Test public void parse_07() { parseGood("sl-IT-nedis", "sl-IT-nedis", "sl", null, "IT", "nedis", null) ; } @Test public void parse_08() { parseGood("sl-Latn-IT-nedis", "sl-Latn-IT-nedis", "sl", "Latn", "IT", "nedis", null) ; } @Test public void parse_09() { parseGood("de-CH-x-Phonebk", "de-CH-x-Phonebk", "de", null, "CH", null, "x-Phonebk") ; } @Test public void parse_10() { parseGood("zh-cn-a-myExt-x-private", "zh-CN-a-myExt-x-private", "zh", null, "CN", null, "a-myExt-x-private") ; } @Test public void parse_bad_01() { parseBad("i18n") ; } @Test public void parse_bad_02() { parseBad("i@n") ; } @Test public void parse_bad_03() { parseBad("123-abc") ; } @Test public void parse_bad_04() { parseBad("en-") ; } private static void parseGood(String input, String ex_output, String... ex_parts ) { String[] parts = LangTag.parse(input) ; assertArrayEquals(ex_parts, parts) ; String output = LangTag.canonical(input) ; assertEquals(ex_output, output) ; assertTrue(LangTag.check(input)) ; } private static void parseBad(String input) { String[] parts = LangTag.parse(input) ; assertNull(parts) ; String output = LangTag.canonical(input) ; assertEquals(input, output) ; assertFalse(LangTag.check(input)) ; } private void testCanonical(String input, String ex_output) { String output = LangTag.canonical(input) ; assertEquals(ex_output, output) ; } // "x" extensions and irregular forms are left alone, including "sgn-be-fr" // Mentioned in BCP 47 tests // @Test public void parseCanonical_01() { testCanonical("en-ca-x-ca","en-CA-x-ca"); } // "x" // @Test public void parseCanonical_02() { testCanonical("EN-ca-X-Ca","en-CA-x-ca"); } // @Test public void parseCanonical_03() { testCanonical("En-Ca-X-Ca","en-CA-x-ca"); } // @Test public void parseCanonical_04() { testCanonical("SGN-BE-FR","sgn-BE-FR"); } // Irregular // @Test public void parseCanonical_05() { testCanonical("sgn-be-fr","sgn-BE-FR"); } // Irregular // @Test public void parseCanonical_06() { testCanonical("AZ-latn-x-LATN","az-Latn-x-latn"); } // @Test public void parseCanonical_07() { testCanonical("Az-latn-X-Latn","az-Latn-x-latn"); } @Test public void parseCanonical_10() { testCanonical("zh-hant", "zh-Hant"); } @Test public void parseCanonical_11() { testCanonical("zh-latn-wadegile", "zh-Latn-wadegile"); } @Test public void parseCanonical_12() { testCanonical("zh-latn-pinyin", "zh-Latn-pinyin"); } @Test public void parseCanonical_13() { testCanonical("en-us", "en-US"); } @Test public void parseCanonical_14() { testCanonical("EN-Gb", "en-GB"); } @Test public void parseCanonical_15() { testCanonical("qqq-002", "qqq-002"); } @Test public void parseCanonical_16() { testCanonical("ja-latn", "ja-Latn"); } @Test public void parseCanonical_17() { testCanonical("x-local", "x-local"); } @Test public void parseCanonical_18() { testCanonical("he-latn", "he-Latn"); } @Test public void parseCanonical_19() { testCanonical("und", "und"); } @Test public void parseCanonical_20() { testCanonical("nn", "nn"); } @Test public void parseCanonical_21() { testCanonical("ko-latn", "ko-Latn"); } @Test public void parseCanonical_22() { testCanonical("ar-latn", "ar-Latn"); } @Test public void parseCanonical_23() { testCanonical("la-x-liturgic", "la-x-liturgic"); } @Test public void parseCanonical_24() { testCanonical("fa-x-middle", "fa-x-middle"); } @Test public void parseCanonical_25() { testCanonical("qqq-142", "qqq-142"); } @Test public void parseCanonical_26() { testCanonical("bnt", "bnt"); } @Test public void parseCanonical_27() { testCanonical("grc-x-liturgic", "grc-x-liturgic"); } @Test public void parseCanonical_28() { testCanonical("egy-Latn", "egy-Latn"); } @Test public void parseCanonical_29() { testCanonical("la-x-medieval", "la-x-medieval"); } }