/* * Copyright 2001-2009 Terracotta, Inc. * * 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.quartz.utils; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.quartz.utils.DirtyFlagMap; import junit.framework.TestCase; /** * Unit test for DirtyFlagMap. These tests focus on making * sure the isDirty flag is set correctly. */ public class DirtyFlagMapTest extends TestCase { public void testClear() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); assertFalse(dirtyFlagMap.isDirty()); dirtyFlagMap.clear(); assertFalse(dirtyFlagMap.isDirty()); dirtyFlagMap.put("X", "Y"); dirtyFlagMap.clearDirtyFlag(); dirtyFlagMap.clear(); assertTrue(dirtyFlagMap.isDirty()); } public void testPut() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); dirtyFlagMap.put("a", "Y"); assertTrue(dirtyFlagMap.isDirty()); } public void testRemove() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); dirtyFlagMap.put("a", "Y"); dirtyFlagMap.clearDirtyFlag(); dirtyFlagMap.remove("b"); assertFalse(dirtyFlagMap.isDirty()); dirtyFlagMap.remove("a"); assertTrue(dirtyFlagMap.isDirty()); } public void testEntrySetRemove() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); Set<Map.Entry<String, String>> entrySet = dirtyFlagMap.entrySet(); dirtyFlagMap.remove("a"); assertFalse(dirtyFlagMap.isDirty()); dirtyFlagMap.put("a", "Y"); dirtyFlagMap.clearDirtyFlag(); entrySet.remove("b"); assertFalse(dirtyFlagMap.isDirty()); entrySet.remove(entrySet.iterator().next()); assertTrue(dirtyFlagMap.isDirty()); } public void testEntrySetRetainAll() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); Set<Map.Entry<String, String>> entrySet = dirtyFlagMap.entrySet(); entrySet.retainAll(Collections.EMPTY_LIST); assertFalse(dirtyFlagMap.isDirty()); dirtyFlagMap.put("a", "Y"); dirtyFlagMap.clearDirtyFlag(); entrySet.retainAll(Collections.singletonList(entrySet.iterator().next())); assertFalse(dirtyFlagMap.isDirty()); entrySet.retainAll(Collections.EMPTY_LIST); assertTrue(dirtyFlagMap.isDirty()); } public void testEntrySetRemoveAll() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); Set<Map.Entry<String, String>> entrySet = dirtyFlagMap.entrySet(); entrySet.removeAll(Collections.EMPTY_LIST); assertFalse(dirtyFlagMap.isDirty()); dirtyFlagMap.put("a", "Y"); dirtyFlagMap.clearDirtyFlag(); entrySet.removeAll(Collections.EMPTY_LIST); assertFalse(dirtyFlagMap.isDirty()); entrySet.removeAll(Collections.singletonList(entrySet.iterator().next())); assertTrue(dirtyFlagMap.isDirty()); } public void testEntrySetClear() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); Set<Map.Entry<String, String>> entrySet = dirtyFlagMap.entrySet(); entrySet.clear(); assertFalse(dirtyFlagMap.isDirty()); dirtyFlagMap.put("a", "Y"); dirtyFlagMap.clearDirtyFlag(); entrySet.clear(); assertTrue(dirtyFlagMap.isDirty()); } @SuppressWarnings("unchecked") public void testEntrySetIterator() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); Set<Map.Entry<String, String>> entrySet = dirtyFlagMap.entrySet(); dirtyFlagMap.put("a", "A"); dirtyFlagMap.put("b", "B"); dirtyFlagMap.put("c", "C"); dirtyFlagMap.clearDirtyFlag(); Iterator<?> entrySetIter = entrySet.iterator(); Map.Entry<?, ?> entryToBeRemoved = (Map.Entry<?, ?>)entrySetIter.next(); String removedKey = (String)entryToBeRemoved.getKey(); entrySetIter.remove(); assertEquals(2, dirtyFlagMap.size()); assertTrue(dirtyFlagMap.isDirty()); assertFalse(dirtyFlagMap.containsKey(removedKey)); dirtyFlagMap.clearDirtyFlag(); Map.Entry<?, String> entry = (Map.Entry<?, String>)entrySetIter.next(); entry.setValue("BB"); assertTrue(dirtyFlagMap.isDirty()); assertTrue(dirtyFlagMap.containsValue("BB")); } @SuppressWarnings("unchecked") public void testEntrySetToArray() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); Set<Map.Entry<String, String>> entrySet = dirtyFlagMap.entrySet(); dirtyFlagMap.put("a", "A"); dirtyFlagMap.put("b", "B"); dirtyFlagMap.put("c", "C"); dirtyFlagMap.clearDirtyFlag(); Object[] array = entrySet.toArray(); assertEquals(3, array.length); Map.Entry<?, String> entry = (Map.Entry<?, String>)array[0]; entry.setValue("BB"); assertTrue(dirtyFlagMap.isDirty()); assertTrue(dirtyFlagMap.containsValue("BB")); } @SuppressWarnings("unchecked") public void testEntrySetToArrayWithArg() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); Set<Map.Entry<String, String>> entrySet = dirtyFlagMap.entrySet(); dirtyFlagMap.put("a", "A"); dirtyFlagMap.put("b", "B"); dirtyFlagMap.put("c", "C"); dirtyFlagMap.clearDirtyFlag(); Object[] array = entrySet.toArray(new Map.Entry[] {}); assertEquals(3, array.length); Map.Entry<?, String> entry = (Map.Entry<?, String>)array[0]; entry.setValue("BB"); assertTrue(dirtyFlagMap.isDirty()); assertTrue(dirtyFlagMap.containsValue("BB")); } public void testKeySetClear() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); Set<?> keySet = dirtyFlagMap.keySet(); keySet.clear(); assertFalse(dirtyFlagMap.isDirty()); dirtyFlagMap.put("a", "Y"); dirtyFlagMap.clearDirtyFlag(); keySet.clear(); assertTrue(dirtyFlagMap.isDirty()); assertEquals(0, dirtyFlagMap.size()); } public void testValuesClear() { DirtyFlagMap<String, String> dirtyFlagMap = new DirtyFlagMap<String, String>(); Collection<?> values = dirtyFlagMap.values(); values.clear(); assertFalse(dirtyFlagMap.isDirty()); dirtyFlagMap.put("a", "Y"); dirtyFlagMap.clearDirtyFlag(); values.clear(); assertTrue(dirtyFlagMap.isDirty()); assertEquals(0, dirtyFlagMap.size()); } }