/* * #%L * P6Spy * %% * Copyright (C) 2013 P6Spy * %% * 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. * #L% */ package com.p6spy.engine.spy.option; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.regex.Pattern; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.p6spy.engine.logging.Category; import com.p6spy.engine.spy.appender.MessageFormattingStrategy; import com.p6spy.engine.spy.appender.MultiLineFormat; import com.p6spy.engine.spy.appender.SingleLineFormat; import com.p6spy.engine.test.BaseTestCase; public class P6TestOptionsRepository extends BaseTestCase { private P6OptionsRepository optRepo; @Before public void setUp() { optRepo = new P6OptionsRepository(); } @Test public void testParse() { Assert.assertEquals("", optRepo.parse(String.class, "")); Assert.assertEquals(100, optRepo.parse(Integer.class, 100)); Assert.assertEquals(100L, optRepo.parse(Long.class, 100L)); Assert.assertEquals(true, optRepo.parse(Boolean.class, "true")); Assert.assertTrue(optRepo.parse(MessageFormattingStrategy.class, SingleLineFormat.class.getName()) instanceof MessageFormattingStrategy); Assert.assertTrue(optRepo.parse(MessageFormattingStrategy.class, MultiLineFormat.class.getName()) instanceof MessageFormattingStrategy); Assert.assertTrue(optRepo.parse(Pattern.class, "somepattern") instanceof Pattern); // existing categories work Assert.assertTrue(optRepo.parse(Category.class, "info") instanceof Category); // new categories can be added without restriction Assert.assertTrue(optRepo.parse(Category.class, "new_category") instanceof Category); } @Test(expected = IllegalArgumentException.class) public void testParseForCollectionFails() { optRepo.parse(Set.class, new HashSet<String>()); Assert.fail(); } @Test(expected = IllegalArgumentException.class) public void testParseForListFails() { optRepo.parse(Set.class, new HashSet<String>()); Assert.fail(); } @Test(expected = IllegalArgumentException.class) public void testParseForSetFails() { optRepo.parse(Set.class, new HashSet<String>()); Assert.fail(); } @Test(expected = IllegalStateException.class) public void testGetPrioToInitCompletedFails() { optRepo.set(String.class, "option1", ""); Assert.assertEquals("", optRepo.get(String.class, "option1")); } @Test public void testSetGetSimple() { optRepo.initCompleted(); optRepo.set(String.class, "option1", "value1"); Assert.assertEquals("value1", optRepo.get(String.class, "option1")); } @Test(expected = IllegalArgumentException.class) public void testSetSetForDeprecatedMinusPrefixOnFirstValueFails() { optRepo.setSet(String.class, "option1", "-value1,value2"); } @Test(expected = IllegalArgumentException.class) public void testSetSetForDeprecatedMinusPrefixOnNextValueFails() { optRepo.setSet(String.class, "option1", "value1,-value2"); } @Test public void testSetSetOverride() { optRepo.initCompleted(); optRepo.setSet(String.class, "option1", "value1,value2"); Assert.assertEquals(new HashSet<String>(Arrays.asList("value1", "value2")), optRepo.get(String.class, "option1")); optRepo.setSet(String.class, "option1", "value3,value4"); Assert.assertEquals(new HashSet<String>(Arrays.asList("value3", "value4")), optRepo.get(String.class, "option1")); } @Test public void testSetNullDoesNotModifyValue() { optRepo.initCompleted(); optRepo.set(String.class, "option1", "foo"); Assert.assertEquals("foo", optRepo.get(String.class, "option1")); optRepo.set(String.class, "option1", null); Assert.assertEquals("foo", optRepo.get(String.class, "option1")); } @Test public void testSetSetEmptyStringNullsValue() { optRepo.initCompleted(); optRepo.setSet(String.class, "option1", "foo"); Assert.assertEquals(new HashSet<String>(Arrays.asList("foo")), optRepo.get(String.class, "option1")); optRepo.setSet(String.class, "option1", ""); Assert.assertNull(optRepo.get(String.class, "option1")); } @Test public void testSetReturnsTrueForNonNull() { Assert.assertTrue(optRepo.set(String.class, "option1", "foo")); } @Test public void testSetReturnsFalseForNull() { Assert.assertFalse(optRepo.set(String.class, "option1", null)); } @Test public void testUnSetUsesDefaultForNullValue() { optRepo.initCompleted(); optRepo.set(String.class, "option1", "foo"); Assert.assertEquals("foo", optRepo.get(String.class, "option1")); optRepo.setOrUnSet(String.class, "option1", null, "default"); Assert.assertEquals("default", optRepo.get(String.class, "option1")); } @Test public void testUnSetIgnoresDefaultForValueNotNull() { optRepo.initCompleted(); optRepo.set(String.class, "option1", "foo"); Assert.assertEquals("foo", optRepo.get(String.class, "option1")); optRepo.setOrUnSet(String.class, "option1", "bar", "default"); Assert.assertEquals("bar", optRepo.get(String.class, "option1")); } @Test public void testUnSetSetsToNullForDefaultAndValueNull() { optRepo.initCompleted(); optRepo.set(String.class, "option1", "foo"); Assert.assertEquals("foo", optRepo.get(String.class, "option1")); optRepo.setOrUnSet(String.class, "option1", null, null); Assert.assertNull(optRepo.get(String.class, "option1")); } }