project/com.nokia.carbide.cpp.epoc.engine.tests/src/com/nokia/carbide/cpp/epoc/engine/tests/model/TestPKGView.java
changeset 0 fb279309251b
child 636 f96e62c11eac
--- /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/TestPKGView.java	Fri Apr 03 23:33:03 2009 +0100
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 2007 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 com.nokia.carbide.cpp.epoc.engine.DocumentFactory;
+import com.nokia.carbide.cpp.epoc.engine.model.*;
+import com.nokia.carbide.cpp.epoc.engine.preprocessor.*;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.model.pkg.*;
+import com.nokia.carbide.internal.cpp.epoc.engine.model.pkg.PKGView;
+import com.nokia.cpp.internal.api.utils.core.Logging;
+
+import org.eclipse.core.runtime.*;
+import org.eclipse.jface.text.IDocument;
+
+import java.util.*;
+
+public class TestPKGView extends BaseViewTests {
+	private static final String LANGUAGES = 
+		";Languages\n&EN,FR\n\n";
+	private static final String PKGHEADER = 
+		";Package Header\n#{\"Foo-EN\", \"Foo-FR\"}, (0x1000001F), 1, 2, 3\n\n";
+	
+	private static final String LANG_DEST_FILE = "C:\\private\\10000005\\import\\InstTest\\lang.txt";
+	private static final String FRENCH_SRC_FILE = "foo1\\frenchfile.txt";
+	private static final String ENG_SRC_FILE = "foo2\\englishfile.txt";
+	private static final String LANG_INSTALL_FILE_STATEMENT = 
+		"{\"" + ENG_SRC_FILE + "\", \"" + FRENCH_SRC_FILE + "\"}-\"" + LANG_DEST_FILE + "\"";
+	private static final String FIXED_DRIVE_INSTALL_FILE = 
+		";Ordinary file to fixed drive\n" + LANG_INSTALL_FILE_STATEMENT + "\n\n";
+	private static final String NO_LANG_SRC_FILE = "foo3\\1.png";
+	private static final String NO_LANG_DEST_FILE = "!:\\private\\10000005\\import\\InstTest\\1.png";
+	private static final String NO_LANG_OPTION = "FF";
+	private static final String NO_LANG_INSTALL_FILE_STATEMENT = 
+		"\"" + NO_LANG_SRC_FILE + "\"-\"" + NO_LANG_DEST_FILE + "\", " + NO_LANG_OPTION;
+	private static final String SELECTED_DRIVE_INSTALL_FILE = 
+		";Ordinary file to selected drive\n" + NO_LANG_INSTALL_FILE_STATEMENT + "\n\n";
+	private static final String[][] LANG_TO_SRC_FILES = {
+		new String[] { "EN", ENG_SRC_FILE }, 
+		new String[] { "FR", FRENCH_SRC_FILE }
+	};
+	private static final String CONDITIONAL_SRC_FILE = "foo4\\pass.txt";
+	private static final String CONDITIONAL_OPTION1 = "FT";
+	private static final String CONDITIONAL_OPTION2 = "TC";
+	private static final String CONDITIONAL_BLOCK =
+		";Conditional block\n" +
+		"IF MemoryRAM>0\n\"" + CONDITIONAL_SRC_FILE + "\"-\"\", " + 
+		CONDITIONAL_OPTION1 + ", " + CONDITIONAL_OPTION2 + "\nENDIF\n\n";
+	
+	private static final String ESCAPABLE_FILES = 
+		"&EN,FR\n" +
+		"{\"c:\\users\\E0192828\\back.txt\", \"c:\\users\\E0FG\\front.txt\"}-\"sp ac es.txt\"\r\n" +
+		"\"c:\\users\\E0192828\\back.txt\" - \"sp ac es.txt\"";
+	
+	private static final Map<String, String> lang2SrcFileMap = new HashMap();
+	static {
+		for (String[] lang2SrcFileSpec : LANG_TO_SRC_FILES) {
+			lang2SrcFileMap.put(lang2SrcFileSpec[0], lang2SrcFileSpec[1]);
+		}
+	};
+	
+	protected IPath path;
+	protected IPKGOwnedModel model;
+	protected IViewConfiguration config;
+
+	public TestPKGView() {
+		super();
+	}
+
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		this.path = new Path("c:\\symbian\\9.4\\epoc32\\tools\\Test.PKG");
+	
+		config = new IViewConfiguration() {
+	
+			public IViewFilter getViewFilter() {
+				return new AcceptedNodesViewFilter();
+			}
+	
+			public Collection<IDefine> getMacros() {
+				return Collections.EMPTY_LIST ;
+			}
+			
+			public IViewParserConfiguration getViewParserConfiguration() {
+				return parserConfig;
+			}
+		};
+	}
+
+	protected void makeModel(String text) {
+		IDocument document = DocumentFactory.createDocument(text);
+		model = new PKGModelFactory().createModel(path, document);
+		model.parse();
+	}
+	
+	protected void commitTest(IPKGView view, String modelText) {
+		ILogListener logListener = new ILogListener() {
+			public void logging(IStatus status, String plugin) {
+				fail(status.getMessage());
+			}
+		};
+		Logging.addListener(logListener);
+		try {
+			commitTest(model, view, modelText);
+		} finally {
+			Logging.removeListener(logListener);
+		}
+	}
+
+	protected IPKGView getView(IViewConfiguration config) {
+		IPKGView view = (IPKGView) model.createView(config);
+		assertNotNull(view);
+		return view;
+	}
+
+	public void testReadTopLevelInstallFiles() throws Exception {
+		String modelText = LANGUAGES + PKGHEADER + FIXED_DRIVE_INSTALL_FILE + SELECTED_DRIVE_INSTALL_FILE;
+		makeModel(modelText);
+		IPKGView view = getView(config);
+		List<IPKGInstallFile> installFileList = ((PKGView) view).getInstallFileList();
+		assertNotNull(installFileList);
+		assertEquals(2, installFileList.size());
+		
+		// first install file is language dependent
+		IPKGInstallFile installFile = installFileList.get(0);
+		assertEquals(new Path(LANG_DEST_FILE), installFile.getDestintationFile());
+		List<EPKGLanguage> langs = view.getLanguages();
+		assertEquals(2, langs.size());
+		Map<EPKGLanguage, IPath> sourceFiles = installFile.getSourceFiles();
+		for (EPKGLanguage lang : langs) {
+			IPath srcFilePath = sourceFiles.get(lang);
+			String srcFile = lang2SrcFileMap.get(lang.getCode());
+			assertEquals(new Path(srcFile), srcFilePath);
+		}
+		
+		// second install file is language independent
+		installFile = installFileList.get(1);
+		assertEquals(new Path(NO_LANG_DEST_FILE), installFile.getDestintationFile());
+		sourceFiles = installFile.getSourceFiles();
+		assertEquals(1, sourceFiles.size());
+		assertTrue(sourceFiles.containsKey(EPKGLanguage.INDEPENDENT));
+		IPath srcFilePath = sourceFiles.get(EPKGLanguage.INDEPENDENT);
+		assertEquals(new Path(NO_LANG_SRC_FILE), srcFilePath);
+		assertEquals(1, installFile.getOptions().size());
+		assertEquals(NO_LANG_OPTION, installFile.getOptions().get(0));
+		
+		commitTest(view, modelText);
+	}
+	
+	public void testReadAllInstallFiles() throws Exception {
+		String modelText = LANGUAGES + PKGHEADER + FIXED_DRIVE_INSTALL_FILE + CONDITIONAL_BLOCK + SELECTED_DRIVE_INSTALL_FILE;
+		makeModel(modelText);
+		IPKGView view = getView(config);
+		List<IPKGInstallFile> installFileList = ((PKGView) view).getInstallFileList();
+		assertNotNull(installFileList);
+		assertEquals(2, installFileList.size());
+		IPKGInstallFile[] allInstallFiles = view.getAllInstallFiles();
+		assertNotNull(allInstallFiles);
+		assertEquals(3, allInstallFiles.length);
+		
+		// find conditional install file
+		IPKGInstallFile conditionalInstallFile = null;
+		for (IPKGInstallFile installFile : allInstallFiles) {
+			if (installFile.getContainer() != null) {
+				conditionalInstallFile = installFile;
+				break;
+			}
+		}
+		assertNotNull(conditionalInstallFile);
+		IPath destintationFile = conditionalInstallFile.getDestintationFile();
+		assertTrue(destintationFile.isEmpty());
+		assertEquals(1, conditionalInstallFile.getSourceFiles().size());
+		assertEquals(new Path(CONDITIONAL_SRC_FILE), conditionalInstallFile.getSourceFiles().get(EPKGLanguage.INDEPENDENT));
+		assertEquals(2, conditionalInstallFile.getOptions().size());
+		
+		commitTest(view, modelText);
+	}
+	
+	public void testAddInstallFiles() throws Exception {
+		String modelText = LANGUAGES + PKGHEADER + CONDITIONAL_BLOCK;
+		makeModel(modelText);
+		IPKGView view = getView(config);
+		
+		// fully create and add a language independent install file statement
+		IPKGInstallFile installFile1 = view.createInstallFile(null);
+		installFile1.getSourceFiles().put(EPKGLanguage.INDEPENDENT, new Path(NO_LANG_SRC_FILE));
+		installFile1.getOptions().add(NO_LANG_OPTION);
+		installFile1.setDestinationFile(new Path(NO_LANG_DEST_FILE));
+		view.addInstallFile(installFile1);
+		
+		// create a language dependent install file and modify after add
+		IPKGInstallFile installFile2 = view.createInstallFile(null);
+		view.addInstallFile(installFile2);
+		for (String[] lang2SrcFileArray : LANG_TO_SRC_FILES) {
+			installFile2.getSourceFiles().put(
+					EPKGLanguage.forLangCode(lang2SrcFileArray[0]), new Path(lang2SrcFileArray[1]));
+		}
+		installFile2.setDestinationFile(new Path(LANG_DEST_FILE));
+		
+		// NOTE: the newlines are lost and shouldn't be
+		//String modifiedModelText = modelText + NO_LANG_INSTALL_FILE_STATEMENT + "\n" + LANG_INSTALL_FILE_STATEMENT;
+		String modifiedModelText =
+			";Languages\n" + 
+			"&EN,FR\n" + 
+			";Package Header\n" + 
+			"#{\"Foo-EN\", \"Foo-FR\"}, (0x1000001F), 1, 2, 3\n" + 
+			";Conditional block\n" + 
+			"IF MemoryRAM>0\n" + 
+			"\"foo4\\pass.txt\"-\"\", FT, TC\n" + 
+			"ENDIF\n" + 
+			"\"foo3\\1.png\"-\"!:\\private\\10000005\\import\\InstTest\\1.png\", FF\n" + 
+			"{\"foo2\\englishfile.txt\", \"foo1\\frenchfile.txt\"}-\"C:\\private\\10000005\\import\\InstTest\\lang.txt\"";
+		commitTest(view, modifiedModelText);
+		
+		view = getView(config);
+		List<IPKGInstallFile> installFileList = ((PKGView) view).getInstallFileList();
+		assertEquals(installFile1, installFileList.get(0));
+		assertEquals(installFile2, installFileList.get(1));
+		assertEquals(2, installFileList.size());
+	}
+	
+	public void testQuotedStrings() throws Exception {
+		makeModel(ESCAPABLE_FILES);
+		IPKGView view = getView(config);
+
+		IPKGInstallFile[] installFiles = view.getAllInstallFiles();
+		assertEquals(2, installFiles.length);
+		
+		IPKGInstallFile file = installFiles[0];
+		assertEquals(2, file.getSourceFiles().size());
+		assertEquals(new Path("c:\\users\\E0192828\\back.txt"), file.getSourceFiles().get(EPKGLanguage.EN));
+		assertEquals(new Path("c:\\users\\E0FG\\front.txt"), file.getSourceFiles().get(EPKGLanguage.FR));
+		assertEquals(new Path("sp ac es.txt"), file.getDestintationFile());
+		
+		file = installFiles[1];
+		assertEquals(1, file.getSourceFiles().size());
+		assertEquals(new Path("c:\\users\\E0192828\\back.txt"), file.getSourceFiles().get(EPKGLanguage.INDEPENDENT));
+		assertEquals(new Path("sp ac es.txt"), file.getDestintationFile());
+		
+		commitTest(view, ESCAPABLE_FILES);
+	}
+	
+}