/* * Copyright 2005-2011 by BerryWorks Software, LLC. All rights reserved. */ package com.berryworks.edireader; import com.berryworks.edireader.plugin.LoopDescriptor; import org.junit.Test; import static com.berryworks.edireader.Plugin.ANY_CONTEXT; import static com.berryworks.edireader.Plugin.INITIAL_CONTEXT; import static org.junit.Assert.*; public class LoopDescriptorTest { private LoopDescriptor loopDescriptor; @Test public void canConstruct() { loopDescriptor = new LoopDescriptor("LoopName", "FirstSegment", 3, "CurrentLoop"); assertEquals("LoopName", loopDescriptor.getName()); assertEquals("FirstSegment", loopDescriptor.getFirstSegment()); assertEquals(3, loopDescriptor.getNestingLevel()); assertEquals(-1, loopDescriptor.getLevelContext()); assertEquals("CurrentLoop", loopDescriptor.getLoopContext()); assertFalse(loopDescriptor.isAnyContext()); assertEquals( "loop LoopName at nesting level 3: encountering segment FirstSegment while currently in loop CurrentLoop", loopDescriptor.toString()); } @Test public void canConstructWithDefaultContext() { loopDescriptor = new LoopDescriptor("LoopName", "FirstSegment", 2); assertEquals("LoopName", loopDescriptor.getName()); assertEquals("FirstSegment", loopDescriptor.getFirstSegment()); assertEquals(2, loopDescriptor.getNestingLevel()); assertEquals(-1, loopDescriptor.getLevelContext()); assertEquals(ANY_CONTEXT, loopDescriptor.getLoopContext()); assertTrue(loopDescriptor.isAnyContext()); assertEquals( "loop LoopName at nesting level 2: encountering segment FirstSegment anytime", loopDescriptor.toString()); } @Test public void canConstructWithDefaultNestingLevel() { loopDescriptor = new LoopDescriptor("LoopName", "FirstSegment"); assertEquals("LoopName", loopDescriptor.getName()); assertEquals("FirstSegment", loopDescriptor.getFirstSegment()); assertEquals(1, loopDescriptor.getNestingLevel()); assertEquals(-1, loopDescriptor.getLevelContext()); assertEquals(INITIAL_CONTEXT, loopDescriptor.getLoopContext()); assertFalse(loopDescriptor.isAnyContext()); assertEquals( "loop LoopName at nesting level 1: encountering segment FirstSegment while outside any loop", loopDescriptor.toString()); } @Test public void canConstructWithLevelContext() { loopDescriptor = new LoopDescriptor("LoopName", "FirstSegment", 3, 4); assertEquals("LoopName", loopDescriptor.getName()); assertEquals("FirstSegment", loopDescriptor.getFirstSegment()); assertEquals(3, loopDescriptor.getNestingLevel()); assertEquals(4, loopDescriptor.getLevelContext()); assertEquals(ANY_CONTEXT, loopDescriptor.getLoopContext()); assertTrue(loopDescriptor.isAnyContext()); assertEquals( "loop LoopName at nesting level 3: encountering segment FirstSegment anytime while current at nesting level 4", loopDescriptor.toString()); } @Test public void canConstructionWithFlagsSet() { loopDescriptor = new LoopDescriptor("LoopName+Flag1", "FirstSegment"); assertEquals("LoopName", loopDescriptor.getName()); assertTrue("Missing Flag1", loopDescriptor.isResultFlag("Flag1")); assertFalse("Flag2 unexpected", loopDescriptor.isResultFlag("Flag2")); assertEquals("FirstSegment", loopDescriptor.getFirstSegment()); assertEquals(1, loopDescriptor.getNestingLevel()); assertEquals(-1, loopDescriptor.getLevelContext()); assertEquals(INITIAL_CONTEXT, loopDescriptor.getLoopContext()); assertFalse(loopDescriptor.isAnyContext()); assertEquals( "loop LoopName at nesting level 1: encountering segment FirstSegment while outside any loop" + ", setting Flag1", loopDescriptor.toString()); loopDescriptor = new LoopDescriptor("LoopName+Flag1+Flag0", "FirstSegment"); assertEquals("LoopName", loopDescriptor.getName()); assertTrue("Missing Flag0", loopDescriptor.isResultFlag("Flag0")); assertTrue("Missing Flag1", loopDescriptor.isResultFlag("Flag1")); assertFalse("Flag2 unexpected", loopDescriptor.isResultFlag("Flag2")); assertEquals("FirstSegment", loopDescriptor.getFirstSegment()); assertEquals(1, loopDescriptor.getNestingLevel()); assertEquals(-1, loopDescriptor.getLevelContext()); assertEquals(INITIAL_CONTEXT, loopDescriptor.getLoopContext()); assertFalse(loopDescriptor.isAnyContext()); assertEquals( "loop LoopName at nesting level 1: encountering segment FirstSegment while outside any loop" + ", setting Flag0 Flag1", loopDescriptor.toString()); } @Test public void canConstructionWithFlagsAsConditions() { loopDescriptor = new LoopDescriptor("LoopName", "FirstSegment", 3, "CurrentLoop?Flag1"); assertEquals("LoopName", loopDescriptor.getName()); assertEquals("FirstSegment", loopDescriptor.getFirstSegment()); assertEquals(3, loopDescriptor.getNestingLevel()); assertEquals(-1, loopDescriptor.getLevelContext()); assertEquals("CurrentLoop", loopDescriptor.getLoopContext()); assertTrue("Missing condition Flag1", loopDescriptor.isConditionFlag("Flag1")); assertFalse("Condition Flag2 unexpected", loopDescriptor.isConditionFlag("Flag2")); assertFalse(loopDescriptor.isAnyContext()); assertEquals( "loop LoopName at nesting level 3: encountering segment FirstSegment while currently in loop CurrentLoop" + ", conditional based on Flag1", loopDescriptor.toString()); loopDescriptor = new LoopDescriptor(null, "FirstSegment", 3, "CurrentLoop?Flag1?Flag0"); assertNull(loopDescriptor.getName()); assertEquals("FirstSegment", loopDescriptor.getFirstSegment()); assertEquals(3, loopDescriptor.getNestingLevel()); assertEquals(-1, loopDescriptor.getLevelContext()); assertEquals("CurrentLoop", loopDescriptor.getLoopContext()); assertTrue("Missing condition Flag1", loopDescriptor.isConditionFlag("Flag1")); assertTrue("Missing condition Flag0", loopDescriptor.isConditionFlag("Flag0")); assertFalse("Condition Flag2 unexpected", loopDescriptor.isConditionFlag("Flag2")); assertFalse(loopDescriptor.isAnyContext()); assertEquals( "loop null at nesting level 3: encountering segment FirstSegment while currently in loop CurrentLoop" + ", conditional based on Flag0 Flag1", loopDescriptor.toString()); } @Test public void testEquals() { loopDescriptor = new LoopDescriptor("name", "firstSegment", 1, ANY_CONTEXT); assertEquals(loopDescriptor, loopDescriptor); assertNotEquals(loopDescriptor, "A String"); assertNotEquals(loopDescriptor, null); LoopDescriptor d2 = new LoopDescriptor("name", "firstSegment", 1, ANY_CONTEXT); LoopDescriptor d3 = new LoopDescriptor("namex", "firstSegment", 1, INITIAL_CONTEXT); LoopDescriptor d4 = new LoopDescriptor("name", "firstSegmentx", 1, INITIAL_CONTEXT); LoopDescriptor d5 = new LoopDescriptor("name", "firstSegment", 2, INITIAL_CONTEXT); LoopDescriptor d6 = new LoopDescriptor("name", "firstSegment", 1, "contextx"); LoopDescriptor d7 = new LoopDescriptor("name", "firstSegment", 1, ANY_CONTEXT + "?flag"); LoopDescriptor d8 = new LoopDescriptor("name+flag", "firstSegment", 1, "contextx"); assertEquals(loopDescriptor, d2); assertNotEquals(loopDescriptor, d3); assertNotEquals(loopDescriptor, d4); assertNotEquals(loopDescriptor, d5); assertNotEquals(loopDescriptor, d6); assertNotEquals(loopDescriptor, d7); assertNotEquals(loopDescriptor, d8); } @Test public void testHashCode() { loopDescriptor = new LoopDescriptor("name", "firstSegment", 1, ANY_CONTEXT); LoopDescriptor d2 = new LoopDescriptor("name", "firstSegment", 1, ANY_CONTEXT); LoopDescriptor d3 = new LoopDescriptor("namex", "firstSegment", 1, INITIAL_CONTEXT); assertEquals(loopDescriptor.hashCode(), d2.hashCode()); assertNotEquals(loopDescriptor.hashCode(), d3.hashCode()); } }