sysmodelmgr/com.symbian.smt.gui.test/src/com/symbian/smt/gui/wizard/NewSMTProjectWizardTest.java
changeset 0 522a326673b6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysmodelmgr/com.symbian.smt.gui.test/src/com/symbian/smt/gui/wizard/NewSMTProjectWizardTest.java	Thu Mar 11 19:08:43 2010 +0200
@@ -0,0 +1,525 @@
+// Copyright (c) 2008-2009 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:
+// NewSMTProjectWizardTest
+//
+
+
+
+package com.symbian.smt.gui.wizard;
+
+import static com.symbian.smt.gui.ResourcesEnums.BORDER_SHAPES;
+import static com.symbian.smt.gui.ResourcesEnums.BORDER_STYLES;
+import static com.symbian.smt.gui.ResourcesEnums.COLOURS;
+import static com.symbian.smt.gui.ResourcesEnums.DEPENDENCIES;
+import static com.symbian.smt.gui.ResourcesEnums.LEVELS;
+import static com.symbian.smt.gui.ResourcesEnums.LOCALISATION;
+import static com.symbian.smt.gui.ResourcesEnums.PATTERNS;
+import static com.symbian.smt.gui.ResourcesEnums.S12_XML;
+import static com.symbian.smt.gui.ResourcesEnums.SHAPES;
+import static com.symbian.smt.gui.ResourcesEnums.SYSTEM_INFO;
+
+import java.util.List;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ProjectScope;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+
+import com.symbian.smt.gui.AbstractPersistentDataStore;
+import com.symbian.smt.gui.Activator;
+import com.symbian.smt.gui.Helper;
+import com.symbian.smt.gui.PersistentDataStore;
+import com.symbian.smt.gui.TestConstants;
+import com.symbian.smt.gui.preferences.SmmPreferencesInitializer;
+
+/**
+ * @author barbararosi-schwartz
+ * 
+ */
+public class NewSMTProjectWizardTest extends TestCase {
+
+	private static final String SEPARATOR = "|";
+
+	private static final AbstractPersistentDataStore getPersistDataStore(
+			IProject project) {
+		IScopeContext projectScope = new ProjectScope(project);
+		IEclipsePreferences node = projectScope.getNode(Activator.PLUGIN_ID);
+		PersistentDataStore dataStore = new PersistentDataStore(node);
+
+		return dataStore;
+	}
+
+	private IStructuredSelection selection;
+	private Shell shell;
+	private String smgFolder;
+	private NewSMTProjectWizard wizard;
+	private Text wizardProjectTextField;
+	private IWorkbench workbench;
+
+	// This method is dependent on the current UI composition
+	// of Eclipse's WizardNewProjectCreationPage. 
+	// We cannot find the Text widget in any other way because
+	// it is hidden.
+	private final Text findText(Composite parent) {
+		Text text = null;
+		Control[] children = parent.getChildren();
+
+		for (Control control : children) {
+			if (control instanceof Text) {
+				text = (Text) control;
+				break;
+			} else if (control instanceof Composite) {
+				return findText((Composite) control);
+			}
+		}
+
+		return text;
+	}
+
+	private final String prependPathAndMakeLowerCase(String filename) {
+		assertNotNull("Location of SystemModelManager should not be null.",
+				smgFolder);
+		return new StringBuffer(smgFolder).append(TestConstants.RESOURCE_FILES_FOLDER_PATH)
+				.append(filename).toString().toLowerCase();
+	}
+
+	/**
+	 * @throws java.lang.Exception
+	 */
+	protected final void setUp() throws Exception {
+		// Initialise the default values
+		SmmPreferencesInitializer initialiser = new SmmPreferencesInitializer();
+
+		initialiser.initializeDefaultPreferences();
+
+		smgFolder = initialiser.getSmgFolder();
+		wizard = new NewSMTProjectWizard();
+		selection = new StructuredSelection(StructuredSelection.EMPTY);
+		workbench = PlatformUI.getWorkbench();
+		shell = workbench.getActiveWorkbenchWindow().getShell();
+
+		wizard.init(workbench, selection);
+
+		WizardDialog dialog = new WizardDialog(shell, wizard);
+
+		dialog.setBlockOnOpen(false);
+		dialog.open();
+
+		NewProjectCreationPageCaseInsensitive page = (NewProjectCreationPageCaseInsensitive) wizard
+				.getPage("page1");
+		Composite c = (Composite) page.getControl();
+		wizardProjectTextField = findText(c);
+
+		if (wizardProjectTextField == null) {
+			throw new Exception("Could not find project name Text field");
+		}
+
+		wizardProjectTextField.setText("testproject");
+	}
+
+	/**
+	 * @throws java.lang.Exception
+	 */
+	protected final void tearDown() throws Exception {
+		IWorkspace ws = ResourcesPlugin.getWorkspace();
+		
+		ws.getRoot().delete(true, true, null);
+		wizard.dispose();
+		
+		wizard = null;
+	}
+
+	/**
+	 * Test method for
+	 * {@link com.symbian.smt.gui.wizard.NewSMTProjectWizard#addPages()}.
+	 */
+	public final void testAddPages() {
+		assertEquals(3, wizard.getPageCount());
+		IWizardPage[] pages = wizard.getPages();
+
+		assertTrue(pages[0] instanceof NewProjectCreationPageCaseInsensitive);
+		assertTrue(pages[1] instanceof NewProjectWizardSystemDefsPage);
+		assertTrue(pages[2] instanceof NewProjectWizardTabbedPropertiesPage);
+	}
+
+	/**
+	 * Test method for
+	 * {@link com.symbian.smt.gui.wizard.NewSMTProjectWizard#copyFilesIntoProject()}
+	 * .
+	 */
+	public final void testCopyFilesIntoProject() {
+		IWizardPage[] pages = wizard.getPages();
+		NewProjectCreationPageCaseInsensitive page1 = (NewProjectCreationPageCaseInsensitive) pages[0];
+		IProject newProject = page1.getProjectHandle();
+
+		assertEquals("\\testproject", newProject.getFullPath().toOSString());
+		testDefaultResourcesFromPage((NewProjectWizardTabbedPropertiesPage) pages[2]);
+	}
+
+	/**
+	 * Test method for
+	 * {@link com.symbian.smt.gui.wizard.NewSMTProjectWizard#createPageControls()}
+	 * .
+	 */
+	public final void testCreatePageControls() {
+		IScopeContext defaultScope = new DefaultScope();
+		IEclipsePreferences defaultNode = defaultScope
+				.getNode(Activator.PLUGIN_ID);
+		IScopeContext instanceScope = new InstanceScope();
+		IEclipsePreferences instanceNode = instanceScope
+				.getNode(Activator.PLUGIN_ID);
+		PersistentDataStore instanceStore = new PersistentDataStore(
+				instanceNode, defaultNode);
+
+		assertNotNull(instanceStore);
+	}
+
+	/**
+	 * Test method for
+	 * {@link com.symbian.smt.gui.wizard.NewSMTProjectWizard#createProject()}.
+	 */
+	public final void testCreateProject() {
+		NewProjectCreationPageCaseInsensitive page1 = (NewProjectCreationPageCaseInsensitive) wizard
+				.getPage("page1");
+		IProject newProject = page1.getProjectHandle();
+
+		NewProjectWizardSystemDefsPage page2 = (NewProjectWizardSystemDefsPage) wizard.getPage("wizardPage");
+		
+		page2.setSystemDefinitions(new String[] {smgFolder + "/../smg-sysdef/Bob_System_Definition.xml"});
+		wizard.performFinish();
+
+		try {
+			IProjectDescription desc = newProject.getDescription();
+
+			assertEquals("testproject", desc.getName());
+
+			List<String> natureIds = Helper
+					.toListOfStrings(desc.getNatureIds());
+
+			assertTrue(natureIds.contains("com.symbian.smt.gui.nature"));
+		} catch (CoreException e) {
+			throw new AssertionFailedError(
+					"Problem encountered in obtaining the project's description.");
+		}
+	}
+
+	private final void testDefaultResourcesFromPage(
+			NewProjectWizardTabbedPropertiesPage page) {
+		String[] expected = { TestConstants.SHAPES_RESOURCE_FILE_PATH };
+		String[] actual = page.getDefaultShapesFiles();
+		String message = "Error in default shapes files.";
+		testResourceName(message, expected, actual);
+
+		expected = new String[] { "Auto" };
+		actual = page.getDefaultLevelsFiles();
+		message = "Error in default level files.";
+		testResourceName(message, expected, actual);
+
+		expected = new String[] { TestConstants.LOCALISATION_RESOURCE_FILE_PATH };
+		actual = page.getDefaultLocalisationFiles();
+		message = "Error in default localisation files.";
+		testResourceName(message, expected, actual);
+
+		expected = new String[] {};
+		actual = page.getDefaultDependenciesFiles();
+		message = "Error in default dependencies files.";
+		testResourceName(message, expected, actual);
+
+		expected = new String[] {};
+		actual = page.getDefaultSystemInfoFiles();
+		message = "Error in default system info files.";
+		testResourceName(message, expected, actual);
+
+		expected = new String[] {};
+		actual = page.getDefaultColoursFiles();
+		message = "Error in default colours files.";
+		testResourceName(message, expected, actual);
+
+		expected = new String[] {};
+		actual = page.getDefaultBorderStylesFiles();
+		message = "Error in default border styles files.";
+		testResourceName(message, expected, actual);
+
+		expected = new String[] {};
+		actual = page.getDefaultBorderShapesFiles();
+		message = "Error in default border shapes files.";
+		testResourceName(message, expected, actual);
+
+		expected = new String[] {};
+		actual = page.getDefaultPatternsFiles();
+		message = "Error in default patters files.";
+		testResourceName(message, expected, actual);
+
+		expected = new String[] {};
+		actual = page.getDefaultS12XmlFiles();
+		message = "Error in default S12 files.";
+		testResourceName(message, expected, actual);
+	}
+
+	/**
+	 * Test method for
+	 * {@link com.symbian.smt.gui.wizard.NewSMTProjectWizard#performFinish()}.
+	 */
+	public final void testPerformFinish() {
+		NewProjectCreationPageCaseInsensitive page = (NewProjectCreationPageCaseInsensitive) wizard
+				.getPage("page1");
+		IProject newProject = page.getProjectHandle();
+
+		wizard.performFinish();
+
+		testPersistedSelectedItems(newProject);
+		testPersistedItems(newProject);
+		testWorkspaceContents(newProject);
+	}
+
+	private final void testPersistedItems(IProject project) {
+		AbstractPersistentDataStore dataStore = getPersistDataStore(project);
+		String[] options = dataStore.getAdvancedOptions();
+		assertEquals(0, options.length);
+
+		Boolean fixsize = dataStore.getFixItemSize();
+		assertFalse(fixsize);
+
+		options = dataStore.getDistributionTexts();
+		assertEquals(4, options.length);
+		assertEquals("secret", options[0]);
+		assertEquals("confidential", options[1]);
+		assertEquals("internal", options[2]);
+		assertEquals("unrestricted", options[3]);
+
+		options = dataStore.getModelVersionTexts();
+		assertEquals(3, options.length);
+		assertEquals("draft", options[0]);
+		assertEquals("build", options[1]);
+		assertEquals("issued", options[2]);
+
+		options = dataStore.getPrintedDpis();
+		assertEquals(2, options.length);
+		assertEquals("300", options[0]);
+		assertEquals("600", options[1]);
+
+		String[] filenames = dataStore.getBorderShapesFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getBorderStylesFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getColoursFiles();
+		assertEquals(1, filenames.length);
+		assertEquals(prependPathAndMakeLowerCase("system_model_colors.xml"),
+				filenames[0].toLowerCase());
+
+		filenames = dataStore.getDependenciesFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getLevelsFiles();
+		assertEquals(3, filenames.length);
+		assertEquals("Auto", filenames[0]);
+		assertEquals(prependPathAndMakeLowerCase("Levels.xml"), filenames[1]
+				.toLowerCase());
+		assertEquals(prependPathAndMakeLowerCase("Levels91.xml"), filenames[2]
+				.toLowerCase());
+
+		filenames = dataStore.getLocalisationFiles();
+		assertEquals(1, filenames.length);
+		assertEquals(prependPathAndMakeLowerCase("display-names.xml"),
+				filenames[0].toLowerCase());
+
+		filenames = dataStore.getPatternsFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getS12XmlFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getShapesFiles();
+		assertEquals(2, filenames.length);
+		assertEquals(prependPathAndMakeLowerCase("Shapes.xml"), filenames[0]
+				.toLowerCase());
+		assertEquals(prependPathAndMakeLowerCase("Example-shapes.xml"),
+				filenames[1].toLowerCase());
+
+		filenames = dataStore.getSystemInfoFiles();
+		assertEquals(1, filenames.length);
+		assertEquals(prependPathAndMakeLowerCase("SystemInfo.xml"),
+				filenames[0].toLowerCase());
+
+		filenames = dataStore.getBorderShapesFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getBorderShapesFiles();
+		assertEquals(0, filenames.length);
+	}
+
+	private final void testPersistedSelectedItems(IProject project) {
+		AbstractPersistentDataStore dataStore = getPersistDataStore(project);
+
+		String[] filenames = dataStore.getSelectedBorderShapesFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getSelectedBorderStylesFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getSelectedColoursFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getSelectedDependenciesFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getSelectedLevelsFiles();
+		assertEquals(1, filenames.length);
+		assertEquals("Auto", filenames[0]);
+
+		filenames = dataStore.getSelectedLocalisationFiles();
+		assertEquals(1, filenames.length);
+		assertEquals(prependPathAndMakeLowerCase("display-names.xml"),
+				filenames[0].toLowerCase());
+
+		filenames = dataStore.getSelectedPatternsFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getSelectedS12XmlFiles();
+		assertEquals(0, filenames.length);
+
+		filenames = dataStore.getSelectedShapesFiles();
+		assertEquals(1, filenames.length);
+		assertEquals(prependPathAndMakeLowerCase("Shapes.xml"), filenames[0]
+				.toLowerCase());
+
+		filenames = dataStore.getSelectedSystemInfoFiles();
+		assertEquals(0, filenames.length);
+
+		String distributionText = dataStore.getSelectedDistributionText();
+		assertEquals("secret", distributionText);
+
+		String modelVersionText = dataStore.getSelectedModelVersionText();
+		assertEquals("draft", modelVersionText);
+
+		String dpi = dataStore.getSelectedPrintedDpi();
+		assertEquals("600", dpi);
+	}
+
+	private final void testResourceName(String message, String[] expected,
+			String[] actual) {
+		assertEquals(message, expected.length, actual.length);
+
+		for (int i = 0; i < expected.length; i++) {
+			assertEquals(message, Helper.relative2AbsolutePaths(expected[i],
+					smgFolder, SEPARATOR), actual[i]);
+		}
+	}
+
+	private final void testWorkspaceContents(IProject project) {
+		String folderName = "";
+
+		try {
+			folderName = BORDER_SHAPES.arg();
+			IFolder folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			IResource[] children = folder.members();
+			assertEquals(0, children.length);
+
+			folderName = BORDER_STYLES.arg();
+			folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			children = folder.members();
+			assertEquals(0, children.length);
+
+			folderName = COLOURS.arg();
+			folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			children = folder.members();
+			assertEquals(0, children.length);
+
+			folderName = DEPENDENCIES.arg();
+			folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			children = folder.members();
+			assertEquals(0, children.length);
+
+			folderName = LEVELS.arg();
+			folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			children = folder.members();
+			assertEquals(0, children.length);
+
+			folderName = LOCALISATION.arg();
+			folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			children = folder.members();
+			assertEquals(1, children.length);
+			assertEquals("display-names.xml", children[0].getName());
+
+			folderName = PATTERNS.arg();
+			folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			children = folder.members();
+			assertEquals(0, children.length);
+
+			folderName = S12_XML.arg();
+			folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			children = folder.members();
+			assertEquals(0, children.length);
+
+			folderName = SHAPES.arg();
+			folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			// TODO:BRS:Check why assertions below fail.
+			// assertEquals(1, children.length);
+			// assertEquals("Shapes.xml", children[0].getName());
+
+			folderName = SYSTEM_INFO.arg();
+			folder = project.getFolder(new Path(folderName));
+			assertFalse("Folder [" + folderName
+					+ "] does not exist in project.", !folder.exists());
+			children = folder.members();
+			assertEquals(0, children.length);
+		} catch (CoreException e) {
+			assertFalse("Exception while looking for the contents of folder ["
+					+ folderName + "].", true);
+		}
+	}
+
+}