001/* 002 * Copyright 2020 Global Biodiversity Information Facility (GBIF) 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.gbif.api.vocabulary; 017 018import java.util.Locale; 019 020import org.junit.jupiter.api.Test; 021 022import com.fasterxml.jackson.databind.ObjectMapper; 023 024import static org.junit.jupiter.api.Assertions.assertEquals; 025import static org.junit.jupiter.api.Assertions.assertNotNull; 026import static org.junit.jupiter.api.Assertions.assertTrue; 027import static org.junit.jupiter.api.Assertions.fail; 028 029public class LanguageTest { 030 031 @Test 032 public void testFromIsoCode() { 033 assertEquals(Language.ENGLISH, Language.fromIsoCode("en")); 034 assertEquals(Language.ESTONIAN, Language.fromIsoCode("et")); 035 assertEquals(Language.ZULU, Language.fromIsoCode("ZU")); 036 assertEquals(Language.GERMAN, Language.fromIsoCode("de")); 037 assertEquals(Language.GERMAN, Language.fromIsoCode("DEU")); 038 assertEquals(Language.GERMAN, Language.fromIsoCode("Deu")); 039 } 040 041 @Test 042 public void testGetIso2LetterCode() { 043 for (Language l : Language.values()) { 044 assertNotNull(l.getIso2LetterCode()); 045 // make sure its lower case 046 assertEquals(l.getIso2LetterCode().toLowerCase(), l.getIso2LetterCode()); 047 } 048 assertEquals("en", Language.ENGLISH.getIso2LetterCode()); 049 assertEquals("de", Language.GERMAN.getIso2LetterCode()); 050 assertEquals("", Language.UNKNOWN.getIso2LetterCode()); 051 } 052 053 @Test 054 public void testGetIso3LetterCode() { 055 for (Language l : Language.values()) { 056 assertNotNull(l.getIso3LetterCode()); 057 // make sure its lower case 058 assertEquals(l.getIso3LetterCode().toLowerCase(), l.getIso3LetterCode()); 059 } 060 assertEquals("eng", Language.ENGLISH.getIso3LetterCode()); 061 assertEquals("deu", Language.GERMAN.getIso3LetterCode()); 062 assertEquals("", Language.UNKNOWN.getIso3LetterCode()); 063 } 064 065 @Test 066 public void testGetLocale() { 067 for (Language l : Language.values()) { 068 assertNotNull(l); 069 assertNotNull(l.getLocale()); 070 } 071 assertEquals(Locale.ENGLISH, Language.ENGLISH.getLocale()); 072 assertEquals(Locale.GERMAN, Language.GERMAN.getLocale()); 073 assertEquals(Locale.ROOT, Language.UNKNOWN.getLocale()); 074 } 075 076 @Test 077 public void testGetTitleEnglish() { 078 for (Language l : Language.values()) { 079 assertNotNull(l.getTitleEnglish()); 080 } 081 assertEquals("English", Language.ENGLISH.getTitleEnglish()); 082 assertEquals("German", Language.GERMAN.getTitleEnglish()); 083 assertEquals("", Language.UNKNOWN.getTitleEnglish()); 084 } 085 086 @Test 087 public void testGetTitleNative() { 088 for (Language l : Language.values()) { 089 assertNotNull(l.getTitleNative()); 090 } 091 assertEquals("English", Language.ENGLISH.getTitleNative()); 092 assertEquals("Deutsch", Language.GERMAN.getTitleNative()); 093 assertEquals("", Language.UNKNOWN.getTitleNative()); 094 } 095 096 /** 097 * A container of Languages using 2 properties. 098 */ 099 private static class Container { 100 101 public Language language; 102 public Language island; // verify that the names don't matter 103 104 public Container(Language language, Language island) { 105 this.language = language; 106 this.island = island; 107 } 108 109 // used by serializer below 110 public Container() { 111 } 112 } 113 114 @Test 115 public void testSerDe() { 116 ObjectMapper mapper = new ObjectMapper(); 117 Container source = new Container(Language.DANISH, Language.SUNDANESE); 118 try { 119 String json = mapper.writeValueAsString(source); 120 assertTrue(json.equals(json.toLowerCase()), "Only lower case letters allowed for language iso codes"); 121 assertEquals(33, json.length()); 122 Container target = mapper.readValue(json, Container.class); 123 assertEquals(source.language, target.language, "language differs"); 124 assertEquals(source.island, target.island, "island differs"); 125 } catch (Exception e) { 126 fail(e.getMessage()); 127 } 128 } 129 130 /** 131 * Ensure the decision to use iso 3 codes is as backwards compatible as possible. 132 */ 133 @Test 134 public void testSerDeBackwardsCompatible() { 135 try { 136 assertEquals(Language.PORTUGUESE, Language.LenientDeserializer.lenientParse("pt")); 137 assertEquals(Language.PORTUGUESE, Language.LenientDeserializer.lenientParse("PT")); 138 assertEquals(Language.PORTUGUESE, Language.LenientDeserializer.lenientParse("POR")); 139 assertEquals(Language.PORTUGUESE, Language.LenientDeserializer.lenientParse("por")); 140 assertEquals(Language.PORTUGUESE, Language.LenientDeserializer.lenientParse("PORTUGUESE")); 141 } catch (Exception e) { 142 fail(e.getMessage()); 143 } 144 } 145}