tracefw/tracecompiler/test/src/MultipleMmpTest.java
branchRCL_3
changeset 20 ca8a1b6995f6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tracefw/tracecompiler/test/src/MultipleMmpTest.java	Tue Aug 31 16:45:49 2010 +0300
@@ -0,0 +1,754 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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: 
+*
+*/
+
+import static org.junit.Assert.fail;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.nokia.tracecompiler.engine.TraceCompilerEngineGlobals;
+import com.nokia.tracecompiler.model.TraceCompilerException;
+
+
+public class MultipleMmpTest {
+	
+	public static void main(String args[]) {		
+	      	org.junit.runner.JUnitCore.main(MultipleMmpTest.class.getName());
+	    }
+	
+	/****************************************************UTILITY FUNCTIONS FOR TESTS************************************************************/
+	
+	private static String epocroot = null; 
+	private static String projectdir = "testdata\\MultipleMmpTestCases\\"; //$NON-NLS-1$
+	private static String dictpath= "epoc32\\ost_dictionaries\\"; //$NON-NLS-1$
+	private static String autogenpath= "epoc32\\include\\platform\\symbiantraces\\autogen\\"; //$NON-NLS-1$
+	private static Pattern versionPattern = Pattern.compile("^.*(\\d+\\.\\d+\\.\\d+).*$"); //$NON-NLS-1$
+	private static Pattern oldversionPat = Pattern.compile("^(1\\..*)|(2\\.1.*)"); //$NON-NLS-1$
+	//old TC version should be up to 2.12.5 as new functionality was submitted to 2.12.6 (we hope)
+	private static Pattern sbsoldversionPat = Pattern.compile("^(1\\..*)|(2\\.[01]\\..*)|(2\\.1[0-2]\\.[0-3].*)"); //$NON-NLS-1$
+	private static String TCversion = ""; //$NON-NLS-1$
+	private static String SBSversion = ""; //$NON-NLS-1$
+	private static File compilerpath;
+	private static boolean oldTC = false;
+	private static boolean oldBuilder = false; 
+	private static HashMap<String, List<File>> headers = new HashMap<String, List<File>>();
+	private static HashMap<String, List<File>> dicts = new HashMap<String, List<File>>();
+	private static HashMap<String, List<File>> sources = new HashMap<String, List<File>>();
+	private static ProcessBuilder sbs_build = new ProcessBuilder("sbs.bat","-k","-c","winscw_udeb.tracecompiler");
+	private static ProcessBuilder sbs_reallyclean = new ProcessBuilder("sbs.bat","-k","-c","winscw_udeb.tracecompiler", "reallyclean");
+	
+
+	@BeforeClass
+	static public void setEnvVariables() {
+		epocroot = System.getenv("EPOCROOT"); //$NON-NLS-1$
+		if(epocroot == null || (epocroot.length()==0)){
+			fail();
+		}
+		
+		// need to check that the path ends in a backslash
+		if(!epocroot.endsWith("\\")){ 
+			epocroot += "\\"; 
+		}
+
+		compilerpath = new File (epocroot + "epoc32" + File.separator + "tools" + File.separator +"tracecompiler" + File.separator); //default value to remove warnings. //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+
+		ProcessBuilder tc = new ProcessBuilder("java", "-classpath", compilerpath.getPath(), //$NON-NLS-1$//$NON-NLS-2$
+				"com.nokia.tracecompiler.TraceCompiler", "-v"); //$NON-NLS-1$//$NON-NLS-2$
+		System.out.println("compilerPath= " + compilerpath); //$NON-NLS-1$
+		tc.directory(compilerpath);
+		tc.redirectErrorStream(true);
+		try {
+		Process p = tc.start();
+		p.waitFor();	
+
+		
+		String str = readProcessOutput(p);
+		System.out.println("TC version = " + str); //$NON-NLS-1$
+		Matcher m = versionPattern.matcher(str.trim());
+		if (m.matches()) {
+			TCversion = m.group(1);
+			System.out.println("TC Version = " + TCversion); //$NON-NLS-1$
+		}
+		
+		m = oldversionPat.matcher(TCversion);
+		if (m.matches()){
+			oldTC=true;
+		}
+
+		System.out.println("TC version = " + TCversion); //$NON-NLS-1$ 
+		System.out.println("OLD TC version = " + oldTC); //$NON-NLS-1$
+
+		ProcessBuilder sbs = new ProcessBuilder("sbs.bat","-v"); //$NON-NLS-1$ //$NON-NLS-2$
+		sbs.directory(compilerpath);
+		sbs.redirectErrorStream(true);
+			
+		//start the compiler
+		p = sbs.start();
+		p.waitFor();
+			
+		InputStream inp = p.getInputStream();
+			
+	        str = ""; //$NON-NLS-1$
+	        int c;
+	        //read the output from the compiler into the input stream
+	        while ((c = inp.read()) != -1) {
+	           	 str= str +((char)c);
+	        }
+
+		System.out.println("SBS version = " + str); //$NON-NLS-1$
+		m = versionPattern.matcher(str.trim());
+		if (m.matches()) {
+			SBSversion = m.group(1);
+		}
+		
+		m = sbsoldversionPat.matcher(SBSversion);
+		if (m.matches()){
+			oldBuilder=true;
+		}
+		
+		} catch (Exception e) {// Catch exception if any
+			System.err.println(e.getMessage());
+		}
+	}
+	
+	
+	public void createListHeadersDicts(String builder)
+	{
+		//The whole logic of what is expected is built here whether we build with sbs 
+		//new TC or old, The structure is re-built for each case.
+		
+		
+		Matcher m = sbsoldversionPat.matcher(SBSversion);
+		if (m.matches()){
+			oldBuilder=true;
+		} else {
+			oldBuilder=false;
+		}
+		
+		
+		System.out.println("OLD Builder :" + builder + ": = " + oldBuilder); //$NON-NLS-1$
+		
+		File tracesHeader1;
+		File tracesHeader2;
+		File tracesHeader3;
+		File tracesHeader4;
+		File source1;
+		File source2;
+		File source3;
+		File source4;
+		File ostTraceDefinitions;
+		File fixedidDefinitions;
+		File ostDict1;
+		File ostDict2;
+		File autogenDict1;
+		File autogenDict2;
+		String loc = "traces\\"; //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces", Arrays.asList(source1, source2, source3, source4));
+		
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces\\traces\\MultipleMmpApp1Traces.h"); //$NON-NLS-1$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces\\traces\\ExtraCppFile1Traces.h"); //$NON-NLS-1$
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces\\traces\\MultipleMmpApp2Traces.h"); //$NON-NLS-1$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces\\traces\\ExtraCppFile2Traces.h"); //$NON-NLS-1$
+		
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces\\traces\\OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces\\traces\\fixed_id.definitions"); //$NON-NLS-1$)
+		headers.put("_traces", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		ostDict1     = new File(epocroot+dictpath+"mmp_traces1_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath+"mmp_traces2_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath+"mmp_traces1_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath+"mmp_traces2_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$
+		
+		//=============================
+		
+		if (!oldBuilder && !oldTC) {
+			loc = "traces_mmp_traces_mmpname1\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_mmpname\\"+ loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldBuilder && !oldTC) {
+			loc = "traces_mmp_traces_mmpname2\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_mmpname\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_mmpname", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_mmpname\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_mmpname", Arrays.asList(source1, source2, source3, source4));
+		
+		ostDict1     = new File(epocroot+dictpath+"mmp_traces_mmpname1_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath+"mmp_traces_mmpname2_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath+"mmp_traces_mmpname1_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath+"mmp_traces_mmpname2_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_mmpname", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$
+
+	    //=============================
+	    
+	    loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC) {
+			loc = "traces\\target7_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC) {
+			loc = "traces\\target8_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_slash_target_ext", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_slash_target_ext", Arrays.asList(source1, source2, source3, source4));
+
+		
+		String name1 = "";
+		String name2 = "";
+		if (oldTC) {
+			name1 = "mmp_traces_slash_target_ext1";
+			name2 = "mmp_traces_slash_target_ext2";
+		} else {
+			name1 = "target7_dll";
+			name2 = "target8_dll";
+		}
+		
+		ostDict1     = new File(epocroot+dictpath + name1 + "_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath + name2 + "_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath + name1 + "_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath + name2 + "_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_slash_target_ext", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$
+		
+	    //================================
+	    loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC) {
+			loc = "traces\\target9_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC) {
+			loc = "traces\\target10_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_slash_target_ext_commonsource", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		sources.put("_traces_slash_target_ext_commonsource", Arrays.asList(source1, source2, source3, source4));
+
+		
+		if (oldTC) {
+			name1 = "mmp_traces_slash_target_ext1_cs";
+			name2 = "mmp_traces_slash_target_ext2_cs";
+		} else {
+			name1 = "target9_dll";
+			name2 = "target10_dll";
+		}
+		ostDict1     = new File(epocroot+dictpath + name1 + "_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath + name2 + "_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath + name1 + "_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath + name2 + "_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_slash_target_ext_commonsource", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$
+		
+		//==================================
+		loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces_target11_exe\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc +"MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc +"ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces_target12_exe\\"; //$NON-NLS-1$
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_target_type\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_target_type\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_target_type\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_target_type", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$
+		
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_target_type\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_target_type", Arrays.asList(source1, source2, source3, source4));
+
+		ostDict1     = new File(epocroot+dictpath+"target11_exe_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		ostDict2     = new File(epocroot+dictpath+"target12_exe_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$	
+		autogenDict1 = new File(epocroot+autogenpath+"target11_exe_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$	
+		autogenDict2 = new File(epocroot+autogenpath+"target12_exe_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_target_type", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$	
+		
+		//==================================
+		
+		loc = "traces\\"; //$NON-NLS-1$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces\\target3_dll\\"; //$NON-NLS-1$
+		}
+		tracesHeader1 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "MultipleMmpApp1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader2 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "ExtraCppFile1Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		if (!oldTC && !oldBuilder) {
+			loc = "traces_target4_kext\\"; //$NON-NLS-1$ 
+		}
+		tracesHeader3 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "MultipleMmpApp2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$
+		tracesHeader4 = new File (epocroot+projectdir+"mmp_traces_mixed\\" + loc + "ExtraCppFile2Traces.h"); //$NON-NLS-1$ //$NON-NLS-2$		
+		ostTraceDefinitions = new File(epocroot+projectdir+"mmp_traces_mixed\\" + loc + "OstTraceDefinitions.h"); //$NON-NLS-1$
+		fixedidDefinitions = new File(epocroot+projectdir+"mmp_traces_mixed\\" + loc + "fixed_id.definitions"); //$NON-NLS-1$)
+
+		headers.put("_traces_mixed", Arrays.asList(tracesHeader1,tracesHeader2,tracesHeader3,tracesHeader4,ostTraceDefinitions,fixedidDefinitions)); //$NON-NLS-1$		
+		
+		source1 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\MultipleMmpApp1.cpp"); //$NON-NLS-1$
+		source2 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\ExtraCppFile1.cpp"); //$NON-NLS-1$
+		source3 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\MultipleMmpApp2.cpp"); //$NON-NLS-1$
+		source4 = new File (epocroot+projectdir+"mmp_traces_mixed\\src\\ExtraCppFile2.cpp"); //$NON-NLS-1$
+		sources.put("_traces_mixed", Arrays.asList(source1, source2, source3, source4));
+
+		String suffix = ""; //$NON-NLS-1$
+		String name = "";
+		if (!oldBuilder) {
+			suffix = "_dll"; //$NON-NLS-1$
+			name = "target3";
+		} else {
+		        name = "mmp_traces_mixed1";
+		}
+
+		ostDict1     = new File(epocroot+dictpath+name + suffix + "_0xe8576d96_Dictionary.xml"); //$NON-NLS-1$
+		autogenDict1 = new File(epocroot+autogenpath+name + suffix + "_0xe8576d96_TraceDefinitions.h"); //$NON-NLS-1$
+		if (!oldBuilder) {
+			suffix = "_kext"; //$NON-NLS-1$
+			name = "target4";
+		} else {
+			name = "mmp_traces_mixed2";
+		}
+		ostDict2     = new File(epocroot+dictpath+name + suffix + "_0xe8576d95_Dictionary.xml"); //$NON-NLS-1$
+		autogenDict2 = new File(epocroot+autogenpath+name + suffix + "_0xe8576d95_TraceDefinitions.h"); //$NON-NLS-1$	
+		dicts.put("_traces_mixed", Arrays.asList(ostDict1, ostDict2, autogenDict1, autogenDict2)); //$NON-NLS-1$	
+	}
+	
+	
+	/**
+	 * This function invokes raptor on the desired test c++ project
+	 * 
+	 * @param path String specifying the path the compiler needs
+	 * 				  to run from
+	 */
+	public void InvokeCompiler(String path, String builder) {
+		System.out.println ("InvokeCompiler() for : " + builder);
+		
+		List<File> headersList;
+		List<File> dictsList;
+		try{
+			
+			//set up the directory from which the process will be called
+			if (path.compareTo("_traces")==0){ //$NON-NLS-1$
+				headersList = headers.get("_traces"); //$NON-NLS-1$
+				System.out.println("deleting file " + headersList.toString()); //$NON-NLS-1$
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces"); //$NON-NLS-1$
+				System.out.println("deleting file " + dictsList.toString()); //$NON-NLS-1$
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces\\group\\"); //$NON-NLS-1$
+			}
+			else if (path.compareTo("_traces_mmpname")==0){ //$NON-NLS-1$
+				headersList = headers.get("_traces_mmpname"); //$NON-NLS-1$
+				System.out.println("deleting file " + headersList.toString()); //$NON-NLS-1$
+				for (File header : headersList) {
+					if (header.exists()) {
+						header.delete();
+					}
+				}
+				
+				dictsList = dicts.get("_traces_mmpname");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) {
+						dict.delete();
+					}
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_mmpname\\group\\");
+			}
+			else if (path.compareTo("_traces_slash_target_ext")==0){
+				headersList = headers.get("_traces_slash_target_ext");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces_slash_target_ext");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_slash_target_ext\\group\\");
+			}
+			else if (path.compareTo("_traces_slash_target_ext_commonsource")==0){
+				headersList = headers.get("_traces_slash_target_ext_commonsource");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces_slash_target_ext_commonsource");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_slash_target_ext_commonsource\\group\\");
+			}
+			else if (path.compareTo("_traces_target_type")==0){
+				headersList = headers.get("_traces_target_type");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces_target_type");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_target_type\\group\\");
+			}
+			else if (path.compareTo("_traces_mixed")==0){
+				headersList = headers.get("_traces_mixed");
+				System.out.println("deleting file " + headersList.toString());
+				for (File header : headersList) {
+					if (header.exists()) header.delete();
+				}
+				
+				dictsList = dicts.get("_traces_mixed");
+				System.out.println("deleting file " + dictsList.toString());
+				for (File dict : dictsList) {
+					if (dict.exists()) dict.delete();
+				}
+				compilerpath = new File (epocroot+projectdir+"mmp_traces_mixed\\group\\");
+			}
+			else{
+			
+				System.out.println("Error: Unrecognised test case.");
+				fail();
+			}
+			
+			//set up the process builder object
+			sbs_build.directory(compilerpath);
+			sbs_reallyclean.directory(compilerpath);
+			sbs_build.redirectErrorStream(true);
+			
+			
+			
+			Process p;
+			String str = "";
+			//start the compiler
+			System.out.println("Starting build process ....");
+			
+				System.out.println("Running sbs reallyclean on : " + compilerpath + " command: " + sbs_reallyclean.command().toString());
+				p = sbs_reallyclean.start();
+				readProcessOutput(p);
+				System.out.println("Running sbs on : " + compilerpath + " command: " + sbs_build.command().toString());
+				p = sbs_build.start();
+				str = readProcessOutput(p);
+			
+			
+			int ret = p.exitValue();
+			System.out.println("build process ended....");
+			if (ret!=0){
+				System.out.println("build process failed:"+str);
+			}
+		}
+		
+    	catch (Exception e){//Catch exception if any
+    		System.err.println("Error: " + e.getMessage());
+    		fail();
+        }
+		
+	}
+
+
+	static private String readProcessOutput(Process p) throws IOException {
+		InputStream inp = p.getInputStream();
+		
+			int c;
+			String str = "";	        
+			//read the output from the compiler into the input stream
+			while ((c = inp.read()) != -1) {
+		   	 str= str +((char)c);
+			}
+		return str;
+	}
+	
+	/**
+	 * This function checks that the traces header files have been generated in the expected locations
+	 * 
+	 * @param path  String specifying where to look for the traces header file.  		   
+	 */
+	public void CheckForTracesHeaders(String path) {
+		System.out.println ("CheckForTracesHeaders()");
+		System.out.println("Old Builder : " + oldBuilder + "......Old TC : " + oldTC);
+		List<File> headersList = headers.get(path);
+		List<File> sourceList =  sources.get(path);
+		System.out.println("checking files " + headersList.toString());
+		boolean error = false;
+		if ((path.compareTo("_traces_slash_target_ext")==0 || path.compareTo("_traces_slash_target_ext_commonsource")==0) && oldBuilder && !oldTC){
+			System.out.println("No need to check for header files as old sbs cannot call TC");
+		} else {
+			try {
+				TraceCompilerEngineGlobals.start();
+			} catch (TraceCompilerException e) {
+				fail();
+			}
+			for (File header : headersList) {
+				if (!header.exists()) {
+					error = true;
+					System.out.println("Error: "+header+" does not exist/hasn't been generated by TraceCompiler");
+				} else {
+					String licenceInSource = null;
+					String licenceInHeader = null;
+					File source = null;
+					// read the licence from the header file
+					if (header.getName().trim().equalsIgnoreCase("OstTraceDefinitions.h")) {
+						licenceInSource = TraceCompilerEngineGlobals.getDefaultLicence(true);
+						System.out.println("Reading default licence for OstTraceDefinitions.h" + licenceInSource);
+					} else {
+						if (header.getName().trim().equalsIgnoreCase("fixed_id.definitions")) {
+							licenceInSource = TraceCompilerEngineGlobals.getDefaultLicence(false);
+							System.out.println("Reading default licence for fixed_id.definitions" + licenceInSource);
+						} else {
+							licenceInHeader = readFirstMultiLineComment(header.getAbsolutePath());
+							System.out.println("Reading licence from " + header.getAbsolutePath() + " == " + licenceInHeader);
+							source = sourceList.get(headersList.indexOf(header));
+
+							licenceInSource = readFirstMultiLineComment(source.getAbsolutePath());
+							System.out.println("Reading licence from " + source.getAbsolutePath() + " == " + licenceInSource);
+							if (licenceInSource == null) {
+								//licence should be EPL
+								licenceInSource = TraceCompilerEngineGlobals.getDefaultLicence(true);
+								System.out.println("Reading default licence for " + header.getAbsolutePath() + " == " + licenceInSource);
+							}
+						}
+					}
+					if (licenceInHeader != licenceInHeader) {
+						System.out.println("Error: licence in header " + header + " is not the same in source." + source);
+						fail();
+					}
+				}
+			}
+		
+			if(!error){
+				System.out.println("All Traces Header files have been generated as expected");
+			}
+			else {
+				fail();
+				}
+		}
+	}
+
+
+	/**
+	 * @param path
+	 */
+	private String readFirstMultiLineComment(String path) {
+		StringBuffer sb = new StringBuffer();
+		try {
+			FileReader reader = new FileReader(new File(path));
+			BufferedReader br = new BufferedReader(reader);
+			String line;
+			boolean inComment = false;
+			
+			while ((line = br.readLine()) != null) {
+				if (line.trim().startsWith("/*")) {
+					inComment = true;
+				}
+				if (inComment) {
+					sb.append(line + System.getProperty("line.separator"));
+				}
+				if (line.trim().endsWith("*/") && inComment) {
+					break;
+				}
+			}
+			br.close();
+		} catch (Exception e) {
+			System.out.println("Failed to open/read file " + path + "  " + e.getMessage());
+			fail();
+		}
+		String licence = null;
+		if (sb.length()> 0) {
+			licence = sb.toString();
+			if (!licence.contains("Copyright")) {
+				licence = null;
+			}
+		}
+			
+		return licence;
+	}
+	
+	/**
+	 * This function checks that the dictionary files have been generated in the expected locations with the right name
+	 * 
+	 * @param path.  		   
+	 */
+	public void CheckForDictionary(String path) {
+		System.out.println ("CheckForDictionaries()");
+
+		List<File> dictsList = dicts.get(path);
+		System.out.println("checking files " + dictsList.toString());
+		boolean error = false;
+
+		if ((path.compareTo("_traces_slash_target_ext")==0 || path.compareTo("_traces_slash_target_ext_commonsource")==0) && oldBuilder && !oldTC){
+			System.out.println("No need to check for dictionary as old sbs cannot call TC");
+		} else {
+			for (File dict : dictsList) {
+				if(!dict.exists()) {
+					error = true;
+					System.out.println("Error: "+dict+" does not exist/hasn't been generated by TraceCompiler");
+				}
+			}
+
+			if (!error) {
+				System.out.println("Dictionary files have been generated as expected");
+			}
+			else {
+				fail();
+			}
+		}
+	}
+	
+
+	/****************************************************ACTUAL TESTS************************************************************/
+	@Test
+	public void MultipleMmpsTest1 (){
+		System.out.println ("*********************traces****************************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces", "sbs");		
+		//Check for header files
+		CheckForTracesHeaders("_traces");
+		//Check dictionary
+		CheckForDictionary("_traces");	
+		
+	
+	}
+	
+
+	@Test
+	public void MultipleMmpsTest2 (){
+		System.out.println ("****************traces_mmpname**********************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_mmpname", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_mmpname");
+		//Check dictionary
+		CheckForDictionary("_traces_mmpname");
+		
+		
+	}
+	
+
+	@Test
+	public void MultipleMmpsTest3 (){
+		System.out.println ("**********traces_slash_target_ext****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_slash_target_ext", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_slash_target_ext");
+		//Check dictionary
+		CheckForDictionary("_traces_slash_target_ext");	
+		
+		
+	}
+
+	@Test
+	public void MultipleMmpsTest4 (){
+		System.out.println ("**********traces_slash_target_ext_commonsource****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_slash_target_ext_commonsource", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_slash_target_ext_commonsource");
+		//Check dictionary
+		CheckForDictionary("_traces_slash_target_ext_commonsource");
+		
+		
+				
+	}
+
+	@Test
+	public void MultipleMmpsTest5 (){
+		System.out.println ("**********traces_target_type****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_target_type", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_target_type");
+		//Check dictionary
+		CheckForDictionary("_traces_target_type");
+		
+		
+	}
+
+	@Test
+	public void MultipleMmpsTest6 (){
+		System.out.println ("**********traces_mixed****************");
+		createListHeadersDicts("sbs");
+		//Call Raptor
+		InvokeCompiler("_traces_mixed", "sbs");
+		//Check for header files
+		CheckForTracesHeaders("_traces_mixed");
+		//Check dictionary
+		CheckForDictionary("_traces_mixed");	
+	}
+}