project/com.nokia.carbide.cpp.epoc.engine.tests/src/com/nokia/carbide/cpp/epoc/engine/tests/model/BaseViewTests.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/project/com.nokia.carbide.cpp.epoc.engine.tests/src/com/nokia/carbide/cpp/epoc/engine/tests/model/BaseViewTests.java Fri Apr 03 23:33:03 2009 +0100
@@ -0,0 +1,328 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.carbide.cpp.epoc.engine.tests.model;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import com.nokia.carbide.cpp.epoc.engine.model.IViewConfiguration;
+import com.nokia.carbide.cpp.epoc.engine.model.IViewParserConfiguration;
+import com.nokia.carbide.cpp.epoc.engine.preprocessor.IDefine;
+import com.nokia.carbide.cpp.epoc.engine.preprocessor.IViewFilter;
+import com.nokia.carbide.cpp.epoc.engine.preprocessor.DefineFactory;
+import com.nokia.carbide.cpp.epoc.engine.tests.BaseTest;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.dom.ASTFactory;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.dom.IASTNode;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.dom.IASTPreprocessorElifStatement;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.dom.IASTPreprocessorElseStatement;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.dom.IASTPreprocessorEndifStatement;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.dom.IASTPreprocessorIfdefStatement;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.dom.IASTPreprocessorTokenStreamStatement;
+import com.nokia.carbide.internal.cpp.epoc.engine.preprocessor.IConditionalBlock;
+
+public abstract class BaseViewTests extends BaseTest {
+
+ protected IASTPreprocessorTokenStreamStatement stmt_A;
+ protected IASTPreprocessorIfdefStatement stmt_ifdef_FOO;
+ protected IASTPreprocessorTokenStreamStatement stmt_B;
+ protected IASTPreprocessorEndifStatement stmt_endif;
+ protected IASTPreprocessorEndifStatement stmt_endif2;
+ protected IASTPreprocessorTokenStreamStatement stmt_C;
+ protected IASTPreprocessorIfdefStatement stmt_ifdef_BAR;
+ protected IASTPreprocessorElifStatement stmt_elif_def_BAR;
+ protected IASTPreprocessorElseStatement stmt_else;
+ protected IASTPreprocessorTokenStreamStatement stmt_D;
+ protected IASTPreprocessorTokenStreamStatement stmt_E;
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ setupNodes();
+ }
+
+ /**
+ * @param viewConfig
+ */
+ protected void dumpNodes(IViewConfiguration viewConfig, IASTNode[] viewNodes) {
+ if (false) {
+ System.out.println("dump of nodes for config " + viewConfig + ":");
+ for (IASTNode node : viewNodes) {
+ System.out.println("\t"+node.getNewText());
+ }
+ }
+ }
+
+ /**
+ * Compare actual nodes with expected nodes.
+ * @param viewConfig
+ */
+ protected void compareNodes(IViewConfiguration viewConfig, IASTNode[] viewNodes, IASTNode[] expNodeArray) {
+ int idx = 0;
+ StringBuffer buffer = new StringBuffer();
+ for (IASTNode node : viewNodes) {
+ if (idx >= expNodeArray.length) {
+ buffer.append("unexpected extra node " + node.getNewText()+"\n");
+ } else if (!node.equals(expNodeArray[idx])) {
+ buffer.append("failed to match node " + node.getNewText() + " against " + expNodeArray[idx].getNewText()+"\n");
+ }
+ idx++;
+ }
+ for (; idx < expNodeArray.length; idx++) {
+ buffer.append("missing expected node " + expNodeArray[idx].getNewText()+"\n");
+ }
+ if (buffer.length() > 0)
+ fail("for config " + viewConfig + ": " + buffer.toString());
+ }
+
+ protected boolean equalObj(Object a, Object b) {
+ if (a == null && b == null)
+ return true;
+ if ((a == null) != (b == null))
+ return false;
+ return a.equals(b);
+ }
+
+ /**
+ * @param viewConfig
+ * @param block
+ * @param regionArray
+ */
+ protected void compareBlockTree(IViewConfiguration viewConfig, IConditionalBlock expBlock, IConditionalBlock block) {
+ StringBuffer buffer = new StringBuffer();
+ doCompareBlock(buffer, expBlock, block);
+ if (buffer.length() > 0)
+ fail("for config " + viewConfig + ": " + buffer.toString());
+ }
+
+ /**
+ * @param buffer
+ * @param block
+ * @param region2
+ */
+ protected void doCompareBlock(StringBuffer buffer, IConditionalBlock expBlock, IConditionalBlock block) {
+ if (!equalObj(block.getCondition(), expBlock.getCondition())) {
+ buffer.append("different conditions: expected "+expBlock.getCondition()+" but got "+block.getCondition()+"\n");
+ }
+
+ if (!equalObj(block.getStartNode(), expBlock.getStartNode())) {
+ buffer.append("different start nodes: expected "+expBlock.getStartNode()+" but got "+block.getStartNode()+"\n");
+ }
+ if (!equalObj(block.getEndNode(), expBlock.getEndNode()) ){
+ buffer.append("different end nodes: expected "+expBlock.getEndNode()+" but got "+block.getEndNode()+"\n");
+ }
+
+ if (!matchNodeList(expBlock.getNodes(), block.getNodes())) {
+ buffer.append("mismatched node arrays: expected " + catenate(expBlock.getNodes())
+ + ", got " +catenate(block.getNodes())+"\n");
+ } else {
+ doCompareRegionLists(buffer, expBlock.getChildren(), block.getChildren());
+ }
+
+ }
+
+ /**
+ * @param nodes
+ * @param nodes2
+ * @return
+ */
+ protected boolean matchNodeList(IASTNode[] nodes, IASTNode[] nodes2) {
+ int idx = 0;
+ for (IASTNode node : nodes) {
+ if (idx >= nodes2.length)
+ return false;
+ if (!node.equals(nodes2[idx]))
+ return false;
+ idx++;
+ }
+ if (idx != nodes2.length)
+ return false;
+ return true;
+ }
+
+ protected void doCompareRegionLists(StringBuffer buffer, IConditionalBlock[] regions, IConditionalBlock[] regions2) {
+ int idx = 0;
+ for (IConditionalBlock block : regions) {
+ doCompareBlock(buffer, block, regions2[idx]);
+ idx++;
+ }
+ }
+
+ /**
+ * @param nodes
+ * @return
+ */
+ protected String catenate(IASTNode[] nodes) {
+ StringBuffer buffer = new StringBuffer();
+ for (IASTNode node : nodes) {
+ buffer.append(node.getNewText());
+ buffer.append('\n');
+ }
+ return buffer.toString();
+ }
+ protected String catenate(IConditionalBlock[] regions) {
+ StringBuffer buffer = new StringBuffer();
+ for (IConditionalBlock block : regions) {
+ buffer.append(block);
+ buffer.append('\n');
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * @param viewConfig
+ * @param regions
+ */
+ protected void dumpBlockTree(IViewConfiguration viewConfig, IConditionalBlock block) {
+ System.out.println("regions for "+viewConfig);
+ dumpBlockTree(1, block);
+ }
+
+ protected String spaces(int count) {
+ return " ".substring(0, count);
+ }
+
+ protected String textOf(IASTNode node){
+ if (node == null) return null;
+ return node.getNewText().trim();
+ }
+
+ protected void dumpBlockTree(int indent, IConditionalBlock block) {
+ String spaces = spaces(indent);
+ System.out.println(spaces + block + "[start="
+ +textOf(block.getStartNode())+", end="
+ +textOf(block.getEndNode())+"]");
+ if (block == null)
+ return;
+ for (IASTNode node : block.getNodes())
+ System.out.println(spaces + "-" +node.getNewText());
+ IConditionalBlock[] children = block.getChildren();
+ for (IConditionalBlock child : children) {
+ dumpBlockTree(indent+1, child);
+ }
+ }
+
+ /**
+ * Get configuration FOO
+ * @return
+ */
+ protected IViewConfiguration getFooConfiguration(final IViewFilter filter) {
+ final Collection<IDefine> macros = new ArrayList<IDefine>();
+ macros.add(DefineFactory.createDefine("FOO"));
+ IViewConfiguration viewConfig = new IViewConfiguration() {
+ public String toString() {
+ return "Foo";
+ }
+
+ public Collection<IDefine> getMacros() {
+ return macros;
+ }
+
+ public IViewFilter getViewFilter() {
+ return filter;
+ }
+
+ public IViewParserConfiguration getViewParserConfiguration() {
+ return parserConfig;
+ }
+ };
+ return viewConfig;
+ }
+
+ /**
+ * Get configuration BAR
+ * @return
+ */
+ protected IViewConfiguration getBarConfiguration(final IViewFilter filter) {
+ final Collection<IDefine> macros =
+ new ArrayList<IDefine>();
+ macros.add(DefineFactory.createDefine("BAR"));
+ IViewConfiguration viewConfig = new IViewConfiguration() {
+ public String toString() {
+ return "Bar";
+ }
+
+ public IViewFilter getViewFilter() {
+ return filter;
+ }
+
+ public Collection<IDefine> getMacros() {
+ return macros;
+ }
+
+ public IViewParserConfiguration getViewParserConfiguration() {
+ return parserConfig;
+ }
+
+ };
+ return viewConfig;
+ }
+
+ /**
+ * Get configuration FOO + BAR
+ * @return
+ */
+ protected IViewConfiguration getFooBarConfiguration(final IViewFilter filter) {
+ final Collection<IDefine> macros =
+ new ArrayList<IDefine>();
+ macros.add(DefineFactory.createDefine("FOO"));
+ macros.add(DefineFactory.createDefine("BAR"));
+ IViewConfiguration viewConfig = new IViewConfiguration() {
+ public String toString() {
+ return "FooBar";
+ }
+
+ public IViewFilter getViewFilter() {
+ return filter;
+ }
+
+ public Collection<IDefine> getMacros() {
+ return macros;
+ }
+
+ public IViewParserConfiguration getViewParserConfiguration() {
+ return parserConfig;
+ }
+
+ };
+ return viewConfig;
+ }
+
+ /**
+ * @return
+ */
+ protected void setupNodes() {
+ stmt_A = ASTFactory.createPreprocessorTokenStreamStatement("A\n");
+ stmt_ifdef_FOO = ASTFactory.createPreprocessorIfdefStatement(
+ ASTFactory.createPreprocessorLiteralTextNode("FOO"));
+ stmt_ifdef_BAR = ASTFactory.createPreprocessorIfdefStatement(
+ ASTFactory.createPreprocessorLiteralTextNode("BAR"));
+ stmt_elif_def_BAR = ASTFactory.createPreprocessorElifStatement(
+ ASTFactory.createPreprocessorTokenStream("defined(BAR)"));
+ stmt_else = ASTFactory.createPreprocessorElseStatement();
+ stmt_B = ASTFactory.createPreprocessorTokenStreamStatement("B\n");
+ stmt_endif = ASTFactory.createPreprocessorEndifStatement();
+ stmt_endif2 = ASTFactory.createPreprocessorEndifStatement();
+ stmt_C = ASTFactory.createPreprocessorTokenStreamStatement("C\n");
+ stmt_D = ASTFactory.createPreprocessorTokenStreamStatement("D\n");
+ stmt_E = ASTFactory.createPreprocessorTokenStreamStatement("E\n");
+ }
+
+}