/******************************************************************************* * Copyright (c) 2008, 2013 Institute for Software, HSR Hochschule fuer Technik * Rapperswil, University of applied sciences and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Institute for Software - initial API and implementation ******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.comenthandler; import junit.framework.TestCase; import org.eclipse.cdt.core.dom.ast.IASTComment; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; import org.eclipse.cdt.internal.core.dom.rewrite.commenthandler.NodeCommentMap; /** * @author Guido Zgraggen IFS */ public class NodeCommentMapTest extends TestCase { private NodeCommentMap map; @Override protected void setUp() throws Exception { map = new NodeCommentMap(); } @Override protected void tearDown() throws Exception { map = null; } public void testNoComment(){ ASTNode node = new CPPASTName(); assertEquals(0, map.getLeadingCommentsForNode(node).size()); assertEquals(0, map.getTrailingCommentsForNode(node).size()); assertEquals(0, map.getFreestandingCommentsForNode(node).size()); } public void testOneComment(){ ASTNode node = new CPPASTName(); IASTComment comm1 = new Comment(); IASTComment comm2 = new Comment(); IASTComment comm3 = new Comment(); map.addLeadingCommentToNode(node, comm1); map.addTrailingCommentToNode(node, comm2); map.addFreestandingCommentToNode(node, comm3); assertEquals(1, map.getLeadingCommentsForNode(node).size()); assertEquals(1, map.getTrailingCommentsForNode(node).size()); assertEquals(1, map.getFreestandingCommentsForNode(node).size()); assertEquals(comm1, map.getLeadingCommentsForNode(node).get(0)); assertEquals(comm2, map.getTrailingCommentsForNode(node).get(0)); assertEquals(comm3, map.getFreestandingCommentsForNode(node).get(0)); } public void testTwoComment(){ ASTNode node = new CPPASTName(); IASTComment com1 = new Comment(); IASTComment com2 = new Comment(); map.addLeadingCommentToNode(node, com1); map.addLeadingCommentToNode(node, com2); map.addTrailingCommentToNode(node, com1); map.addTrailingCommentToNode(node, com2); map.addFreestandingCommentToNode(node, com1); map.addFreestandingCommentToNode(node, com2); assertEquals(2, map.getLeadingCommentsForNode(node).size()); assertEquals(2, map.getTrailingCommentsForNode(node).size()); assertEquals(2, map.getFreestandingCommentsForNode(node).size()); assertEquals(com1, map.getLeadingCommentsForNode(node).get(0)); assertEquals(com2, map.getLeadingCommentsForNode(node).get(1)); assertEquals(com1, map.getTrailingCommentsForNode(node).get(0)); assertEquals(com2, map.getTrailingCommentsForNode(node).get(1)); assertEquals(com1, map.getFreestandingCommentsForNode(node).get(0)); assertEquals(com2, map.getFreestandingCommentsForNode(node).get(1)); } public void testCommentOnDifferentNodes(){ ASTNode node1 = new CPPASTName(); ASTNode node2 = new CPPASTName(); IASTComment com1 = new Comment(); IASTComment com2 = new Comment(); IASTComment com3 = new Comment(); map.addLeadingCommentToNode(node1, com1); map.addLeadingCommentToNode(node2, com2); map.addLeadingCommentToNode(node1, com3); map.addTrailingCommentToNode(node1, com1); map.addTrailingCommentToNode(node2, com2); map.addTrailingCommentToNode(node1, com3); map.addFreestandingCommentToNode(node1, com1); map.addFreestandingCommentToNode(node2, com2); map.addFreestandingCommentToNode(node1, com3); assertEquals(2, map.getLeadingCommentsForNode(node1).size()); assertEquals(1, map.getLeadingCommentsForNode(node2).size()); assertEquals(2, map.getTrailingCommentsForNode(node1).size()); assertEquals(1, map.getTrailingCommentsForNode(node2).size()); assertEquals(2, map.getFreestandingCommentsForNode(node1).size()); assertEquals(1, map.getFreestandingCommentsForNode(node2).size()); assertEquals(com1, map.getLeadingCommentsForNode(node1).get(0)); assertEquals(com2, map.getLeadingCommentsForNode(node2).get(0)); assertEquals(com3, map.getLeadingCommentsForNode(node1).get(1)); assertEquals(com1, map.getTrailingCommentsForNode(node1).get(0)); assertEquals(com2, map.getTrailingCommentsForNode(node2).get(0)); assertEquals(com3, map.getTrailingCommentsForNode(node1).get(1)); assertEquals(com1, map.getFreestandingCommentsForNode(node1).get(0)); assertEquals(com2, map.getFreestandingCommentsForNode(node2).get(0)); assertEquals(com3, map.getFreestandingCommentsForNode(node1).get(1)); } //=== Internal Comment class for testing private static class Comment extends ASTNode implements IASTComment { private char[] comment; @Override public char[] getComment() { return comment; } @Override public void setComment(char[] comment) { this.comment = comment; } // not used @Override public boolean isBlockComment() { return false; } @Override public IASTNode copy() { return null; } @Override public IASTNode copy(CopyStyle style) { return null; } } }