    001/**
    002 * Copyright (c) 2004-2011 QOS.ch
    003 * All rights reserved.
    004 *
    005 * Permission is hereby granted, free  of charge, to any person obtaining
    006 * a  copy  of this  software  and  associated  documentation files  (the
    007 * "Software"), to  deal in  the Software without  restriction, including
    008 * without limitation  the rights to  use, copy, modify,  merge, publish,
    009 * distribute,  sublicense, and/or sell  copies of  the Software,  and to
    010 * permit persons to whom the Software  is furnished to do so, subject to
    011 * the following conditions:
    012 *
    013 * The  above  copyright  notice  and  this permission  notice  shall  be
    014 * included in all copies or substantial portions of the Software.
    015 *
    016 * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
    017 * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
    018 * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
    019 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    020 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    021 * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
    022 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    023 *
    024 */
    025package org.slf4j;
    026
    027import static org.junit.Assert.*;
    028
    029import java.util.Iterator;
    030
    031import org.junit.Test;
    032import org.slf4j.helpers.BasicMarkerFactory;
    033
    034/**
    035 * Unit test BasicMarker
    036 *
    037 * @author Ceki G&uuml;lc&uuml;
    038 * @author Joern Huxhorn
    039 */
    040public class BasicMarkerTest {
    041    static final String BLUE_STR = "BLUE";
    042    static final String RED_STR = "RED";
    043    static final String GREEN_STR = "GREEN";
    044    static final String COMP_STR = "COMP";
    045    static final String MULTI_COMP_STR = "MULTI_COMP";
    046    static final String PARENT_MARKER_STR = "PARENT_MARKER";
    047    static final String CHILD_MARKER_STR = "CHILD_MARKER";
    048    static final String NOT_CONTAINED_MARKER_STR = "NOT_CONTAINED";
    049
    050    final IMarkerFactory factory;
    051    final Marker blue;
    052    final Marker red;
    053    final Marker green;
    054    final Marker comp;
    055    final Marker multiComp;
    056
    057    short diff = Differentiator.getDiffentiator();
    058
    059    public BasicMarkerTest() {
    060        factory = new BasicMarkerFactory();
    061
    062        blue = factory.getMarker(BLUE_STR);
    063        red = factory.getMarker(RED_STR);
    064        green = factory.getMarker(GREEN_STR);
    065        comp = factory.getMarker(COMP_STR);
    066        comp.add(blue);
    067
    068        multiComp = factory.getMarker(MULTI_COMP_STR);
    069        multiComp.add(green);
    070        multiComp.add(comp);
    071    }
    072
    073    @Test
    074    public void testPrimitive() {
    075        assertEquals(BLUE_STR, blue.getName());
    076        assertTrue(blue.contains(blue));
    077
    078        Marker blue2 = factory.getMarker(BLUE_STR);
    079        assertEquals(BLUE_STR, blue2.getName());
    080        assertEquals(blue, blue2);
    081        assertTrue(blue.contains(blue2));
    082        assertTrue(blue2.contains(blue));
    083    }
    084
    085    @Test
    086    public void testPrimitiveByName() {
    087        assertTrue(blue.contains(BLUE_STR));
    088    }
    089
    090    @Test
    091    public void testComposite() {
    092        assertTrue(comp.contains(comp));
    093        assertTrue(comp.contains(blue));
    094    }
    095
    096    @Test
    097    public void testCompositeByName() {
    098        assertTrue(comp.contains(COMP_STR));
    099        assertTrue(comp.contains(BLUE_STR));
    100    }
    101
    102    @Test
    103    public void testMultiComposite() {
    104        assertTrue(multiComp.contains(comp));
    105        assertTrue(multiComp.contains(blue));
    106        assertTrue(multiComp.contains(green));
    107        assertFalse(multiComp.contains(red));
    108    }
    109
    110    @Test
    111    public void testMultiCompositeByName() {
    112        assertTrue(multiComp.contains(COMP_STR));
    113        assertTrue(multiComp.contains(BLUE_STR));
    114        assertTrue(multiComp.contains(GREEN_STR));
    115        assertFalse(multiComp.contains(RED_STR));
    116    }
    117
    118    @Test
    119    public void testMultiAdd() {
    120        Marker parent = factory.getMarker(PARENT_MARKER_STR);
    121        Marker child = factory.getMarker(CHILD_MARKER_STR);
    122        for (int i = 0; i < 10; i++) {
    123            parent.add(child);
    124        }
    125
    126        // check that the child was added once and only once
    127        Iterator<Marker> iterator = parent.iterator();
    128        assertTrue(iterator.hasNext());
    129        assertEquals(CHILD_MARKER_STR, iterator.next().toString());
    130        assertFalse(iterator.hasNext());
    131    }
    132
    133    @Test
    134    public void testAddRemove() {
    135        final String NEW_PREFIX = "NEW_";
    136        Marker parent = factory.getMarker(NEW_PREFIX + PARENT_MARKER_STR);
    137        Marker child = factory.getMarker(NEW_PREFIX + CHILD_MARKER_STR);
    138        assertFalse(parent.contains(child));
    139        assertFalse(parent.contains(NEW_PREFIX + CHILD_MARKER_STR));
    140        assertFalse(parent.remove(child));
    141
    142        parent.add(child);
    143
    144        assertTrue(parent.contains(child));
    145        assertTrue(parent.contains(NEW_PREFIX + CHILD_MARKER_STR));
    146
    147        assertTrue(parent.remove(child));
    148
    149        assertFalse(parent.contains(child));
    150        assertFalse(parent.contains(NEW_PREFIX + CHILD_MARKER_STR));
    151        assertFalse(parent.remove(child));
    152    }
    153
    154    @Test
    155    public void testSelfRecursion() {
    156        final String diffPrefix = "NEW_" + diff;
    157        final String PARENT_NAME = diffPrefix + PARENT_MARKER_STR;
    158        final String NOT_CONTAINED_NAME = diffPrefix + NOT_CONTAINED_MARKER_STR;
    159        Marker parent = factory.getMarker(PARENT_NAME);
    160        Marker notContained = factory.getMarker(NOT_CONTAINED_NAME);
    161        parent.add(parent);
    162        assertTrue(parent.contains(parent));
    163        assertTrue(parent.contains(PARENT_NAME));
    164        assertFalse(parent.contains(notContained));
    165        assertFalse(parent.contains(NOT_CONTAINED_MARKER_STR));
    166    }
    167
    168    @Test
    169    public void testIndirectRecursion() {
    170        final String diffPrefix = "NEW_" + diff;
    171        final String PARENT_NAME = diffPrefix + PARENT_MARKER_STR;
    172        final String CHILD_NAME = diffPrefix + CHILD_MARKER_STR;
    173        final String NOT_CONTAINED_NAME = diffPrefix + NOT_CONTAINED_MARKER_STR;
    174
    175        Marker parent = factory.getMarker(PARENT_NAME);
    176        Marker child = factory.getMarker(CHILD_NAME);
    177        Marker notContained = factory.getMarker(NOT_CONTAINED_NAME);
    178
    179        parent.add(child);
    180        child.add(parent);
    181        assertTrue(parent.contains(parent));
    182        assertTrue(parent.contains(child));
    183        assertTrue(parent.contains(PARENT_NAME));
    184        assertTrue(parent.contains(CHILD_NAME));
    185        assertFalse(parent.contains(notContained));
    186        assertFalse(parent.contains(NOT_CONTAINED_MARKER_STR));
    187    }
    188
    189    @Test
    190    public void testHomonyms() {
    191        final String diffPrefix = "homonym" + diff;
    192        final String PARENT_NAME = diffPrefix + PARENT_MARKER_STR;
    193        final String CHILD_NAME = diffPrefix + CHILD_MARKER_STR;
    194        Marker parent = factory.getMarker(PARENT_NAME);
    195        Marker child = factory.getMarker(CHILD_NAME);
    196        parent.add(child);
    197
    198        IMarkerFactory otherFactory = new BasicMarkerFactory();
    199        Marker otherParent = otherFactory.getMarker(PARENT_NAME);
    200        Marker otherChild = otherFactory.getMarker(CHILD_NAME);
    201
    202        assertTrue(parent.contains(otherParent));
    203        assertTrue(parent.contains(otherChild));
    204
    205        assertTrue(parent.remove(otherChild));
    206    }
    207
    208}