/** * */ package com.sap.furcas.runtime.textblocks; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.List; import org.junit.Test; import com.sap.furcas.metamodel.FURCAS.textblocks.Bostoken; import com.sap.furcas.metamodel.FURCAS.textblocks.DocumentNode; import com.sap.furcas.metamodel.FURCAS.textblocks.LexedToken; import com.sap.furcas.metamodel.FURCAS.textblocks.TextBlock; import com.sap.furcas.runtime.textblocks.testbase.FixtureProvidingTextBlockTest; /** * */ public class TestTbNavigationUtil extends FixtureProvidingTextBlockTest { @Test public void testFirstToken() { assertEquals(bos, TbNavigationUtil.firstToken(main)); assertEquals(lexed3, TbNavigationUtil.firstToken(middle)); assertEquals(subToken, TbNavigationUtil.firstToken(subBlock1)); } @Test public void testLastToken() { assertEquals(eos, TbNavigationUtil.lastToken(main)); assertEquals(subToken, TbNavigationUtil.lastToken(middle)); assertEquals(subToken, TbNavigationUtil.lastToken(subBlock1)); } @Test public void testGetNextInSubTree() { assertEquals(null, TbNavigationUtil.getNextInSubTree(subBlock1)); assertEquals(null, TbNavigationUtil.getNextInSubTree(eos)); assertEquals(subBlock1, TbNavigationUtil.getNextInSubTree(lexed3)); assertEquals(lexed2, TbNavigationUtil.getNextInSubTree(left)); assertEquals(eos, TbNavigationUtil.getNextInSubTree(right)); assertEquals(null, TbNavigationUtil.getNextInSubTree(main)); } @Test public void testPreviousInSubTree() { assertEquals(null, TbNavigationUtil.getPreviousInSubTree(bos)); assertEquals(left, TbNavigationUtil.getPreviousInSubTree(lexed2)); assertEquals(middle, TbNavigationUtil.getPreviousInSubTree(right)); assertEquals(bos, TbNavigationUtil.getPreviousInSubTree(left)); assertEquals(null, TbNavigationUtil.getPreviousInSubTree(main)); } @Test public void testGetSubNodes() { // mixed subnodes List<DocumentNode> expectedNodesFromMain = new ArrayList<DocumentNode>(); expectedNodesFromMain.add(bos); expectedNodesFromMain.add(left); expectedNodesFromMain.add(lexed2); expectedNodesFromMain.add(middle); expectedNodesFromMain.add(right); expectedNodesFromMain.add(eos); assertEquals(expectedNodesFromMain, TbNavigationUtil.getSubNodes(main)); // only textblocks List<DocumentNode> expectedNodesFromLeft = new ArrayList<DocumentNode>(); expectedNodesFromLeft.add(leftLeft); assertEquals(expectedNodesFromLeft, TbNavigationUtil.getSubNodes(left)); // only tokens List<DocumentNode> expectedNodesFromRight = new ArrayList<DocumentNode>(); expectedNodesFromRight.add(lexed4); assertEquals(expectedNodesFromRight, TbNavigationUtil.getSubNodes(right)); } @Test public void testGetSubNodesBug() { List<DocumentNode> expectedNodes = new ArrayList<DocumentNode>(); Bostoken t = modelFactory.createBostoken(); t.setOffset(0); t.setOffsetRelative(true); TextBlock tb = modelFactory.createTextBlock(); tb.setOffset(0); tb.setOffsetRelative(true); TextBlock parent = modelFactory.createTextBlock(); parent.getSubNodes().add(t); parent.getSubNodes().add(tb); expectedNodes.add(t); expectedNodes.add(tb); assertEquals(tb, parent.getSubBlocks().iterator().next()); assertEquals(t, parent.getTokens().iterator().next()); } @Test public void testGetSubNodesIndex() { assertEquals(0, TbNavigationUtil.getSubNodesIndex(bos)); assertEquals(1, TbNavigationUtil.getSubNodesIndex(left)); assertEquals(0, TbNavigationUtil.getSubNodesIndex(leftLeft)); assertEquals(3, TbNavigationUtil.getSubNodesIndex(middle)); assertEquals(0, TbNavigationUtil.getSubNodesIndex(lexed4)); assertEquals(0, TbNavigationUtil.getSubNodesIndex(main)); assertEquals(5, TbNavigationUtil.getSubNodesIndex(eos)); } @Test public void testGetSubNodeAt() { assertEquals(bos, TbNavigationUtil.getSubNodeAt(main, 0)); assertEquals(left, TbNavigationUtil.getSubNodeAt(main, 1)); assertEquals(lexed2, TbNavigationUtil.getSubNodeAt(main, 2)); assertEquals(middle, TbNavigationUtil.getSubNodeAt(main, 3)); assertEquals(right, TbNavigationUtil.getSubNodeAt(main, 4)); assertEquals(eos, TbNavigationUtil.getSubNodeAt(main, 5)); assertEquals(lexed3, TbNavigationUtil.getSubNodeAt(middle, 0)); assertEquals(lexed4, TbNavigationUtil.getSubNodeAt(right, 0)); } @Test public void testGetSubNodesSize() { assertEquals(6, TbNavigationUtil.getSubNodesSize(main)); assertEquals(2, TbNavigationUtil.getSubNodesSize(middle)); assertEquals(1, TbNavigationUtil.getSubNodesSize(right)); } @Test public void testIsFirstInSubTree() { assertEquals(true, TbNavigationUtil.isFirstInSubTree(bos)); assertEquals(false, TbNavigationUtil.isFirstInSubTree(lexed2)); assertEquals(true, TbNavigationUtil.isFirstInSubTree(lexed1)); assertEquals(false, TbNavigationUtil.isFirstInSubTree(middle)); assertEquals(true, TbNavigationUtil.isFirstInSubTree(main)); } @Test public void testIsLastInSubTree() { assertEquals(true, TbNavigationUtil.isLastInSubTree(lexed1)); assertEquals(false, TbNavigationUtil.isLastInSubTree(bos)); assertEquals(true, TbNavigationUtil.isLastInSubTree(eos)); assertEquals(false, TbNavigationUtil.isLastInSubTree(middle)); assertEquals(true, TbNavigationUtil.isLastInSubTree(main)); } @Test public void testNextToken() { assertEquals(lexed1, TbNavigationUtil.nextToken(bos)); assertEquals(lexed2, TbNavigationUtil.nextToken(lexed1)); assertEquals(lexed3, TbNavigationUtil.nextToken(lexed2)); assertEquals(subToken, TbNavigationUtil.nextToken(lexed3)); assertEquals(lexed4, TbNavigationUtil.nextToken(subToken)); assertEquals(eos, TbNavigationUtil.nextToken(lexed4)); assertEquals(null, TbNavigationUtil.nextToken(eos)); } @Test public void testPreviousToken() { assertEquals(lexed4, TbNavigationUtil.previousToken(eos)); assertEquals(subToken, TbNavigationUtil.previousToken(lexed4)); assertEquals(lexed3, TbNavigationUtil.previousToken(subToken)); assertEquals(lexed2, TbNavigationUtil.previousToken(lexed3)); assertEquals(lexed1, TbNavigationUtil.previousToken(lexed2)); assertEquals(bos, TbNavigationUtil.previousToken(lexed1)); assertEquals(null, TbNavigationUtil.previousToken(bos)); } @Test public void testGetParentBlock() { assertEquals(main, left.getParent()); assertEquals(left, leftLeft.getParent()); assertEquals(null, main.getParent()); assertEquals(middle, lexed3.getParent()); } @Test public void testIsToken() { assertEquals(false, TbNavigationUtil.isToken(main)); assertEquals(true, TbNavigationUtil.isToken(bos)); } @Test public void testReplaceSubTree() { TextBlock middleNew = modelFactory.createTextBlock(); LexedToken lexed3New = modelFactory.createLexedToken(); middleNew.getSubNodes().add(lexed3New); middleNew.setOffset(6); assertEquals(middle, TbNavigationUtil.getSubNodeAt(main, 3)); TbNavigationUtil.replaceSubTree(middle, middleNew); assertEquals(middleNew, TbNavigationUtil.getSubNodeAt(main, 3)); assertEquals(null, middle.getParent()); assertEquals(main, middleNew.getParent()); assertEquals(middleNew, lexed3New.getParent()); } @Test(expected = IllegalArgumentException.class) public void testReplaceSubTreeRoot() { TbNavigationUtil.replaceSubTree(main, middle); } @Test public void testGetLevel() { assertEquals(0, TbNavigationUtil.getLevel(main)); assertEquals(1, TbNavigationUtil.getLevel(left)); assertEquals(1, TbNavigationUtil.getLevel(middle)); assertEquals(1, TbNavigationUtil.getLevel(right)); assertEquals(2, TbNavigationUtil.getLevel(leftLeft)); assertEquals(2, TbNavigationUtil.getLevel(subBlock1)); assertEquals(3, TbNavigationUtil.getLevel(subBlock2)); assertEquals(4, TbNavigationUtil.getLevel(subBlock3)); assertEquals(5, TbNavigationUtil.getLevel(subBlock4)); assertEquals(6, TbNavigationUtil.getLevel(subToken)); } }