diff -r 000000000000 -r 522a326673b6 sysmodelmgr/com.symbian.smt.gui.test/src/com/symbian/smt/gui/wizard/NewSMTProjectWizardTest.java --- /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 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); + } + } + +}