/* * Copyright 2002-2017 the original author or authors. * * Licensed 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.springframework.util; import org.junit.Test; import static org.junit.Assert.*; /** * @author Juergen Hoeller */ public class LinkedCaseInsensitiveMapTests { private final LinkedCaseInsensitiveMap<String> map = new LinkedCaseInsensitiveMap<>(); @Test public void putAndGet() { map.put("key", "value1"); map.put("key", "value2"); map.put("key", "value3"); assertEquals(1, map.size()); assertEquals("value3", map.get("key")); assertEquals("value3", map.get("KEY")); assertEquals("value3", map.get("Key")); assertTrue(map.containsKey("key")); assertTrue(map.containsKey("KEY")); assertTrue(map.containsKey("Key")); assertTrue(map.keySet().contains("key")); assertTrue(map.keySet().contains("KEY")); assertTrue(map.keySet().contains("Key")); } @Test public void putWithOverlappingKeys() { map.put("key", "value1"); map.put("KEY", "value2"); map.put("Key", "value3"); assertEquals(1, map.size()); assertEquals("value3", map.get("key")); assertEquals("value3", map.get("KEY")); assertEquals("value3", map.get("Key")); assertTrue(map.containsKey("key")); assertTrue(map.containsKey("KEY")); assertTrue(map.containsKey("Key")); assertTrue(map.keySet().contains("key")); assertTrue(map.keySet().contains("KEY")); assertTrue(map.keySet().contains("Key")); } @Test public void getOrDefault() { map.put("key", "value1"); map.put("KEY", "value2"); map.put("Key", "value3"); assertEquals("value3", map.getOrDefault("key", "N")); assertEquals("value3", map.getOrDefault("KEY", "N")); assertEquals("value3", map.getOrDefault("Key", "N")); assertEquals("N", map.getOrDefault("keeeey", "N")); assertEquals("N", map.getOrDefault(new Object(), "N")); } @Test public void getOrDefaultWithNullValue() { map.put("key", null); map.put("KEY", null); map.put("Key", null); assertNull(map.getOrDefault("key", "N")); assertNull(map.getOrDefault("KEY", "N")); assertNull(map.getOrDefault("Key", "N")); assertEquals("N", map.getOrDefault("keeeey", "N")); assertEquals("N", map.getOrDefault(new Object(), "N")); } @Test public void computeIfAbsentWithExistingValue() { map.put("key", "value1"); map.put("KEY", "value2"); map.put("Key", "value3"); assertEquals("value3", map.computeIfAbsent("key", key -> "value1")); assertEquals("value3", map.computeIfAbsent("KEY", key -> "value2")); assertEquals("value3", map.computeIfAbsent("Key", key -> "value3")); } @Test public void computeIfAbsentWithComputedValue() { assertEquals("value1", map.computeIfAbsent("key", key -> "value1")); assertEquals("value1", map.computeIfAbsent("KEY", key -> "value2")); assertEquals("value1", map.computeIfAbsent("Key", key -> "value3")); } @Test @SuppressWarnings("unchecked") public void mapClone() { map.put("key", "value1"); LinkedCaseInsensitiveMap<String> copy = map.clone(); assertEquals("value1", map.get("key")); assertEquals("value1", map.get("KEY")); assertEquals("value1", map.get("Key")); assertEquals("value1", copy.get("key")); assertEquals("value1", copy.get("KEY")); assertEquals("value1", copy.get("Key")); copy.put("Key", "value2"); assertEquals(1, map.size()); assertEquals(1, copy.size()); assertEquals("value1", map.get("key")); assertEquals("value1", map.get("KEY")); assertEquals("value1", map.get("Key")); assertEquals("value2", copy.get("key")); assertEquals("value2", copy.get("KEY")); assertEquals("value2", copy.get("Key")); } }