/******************************************************************************* * Copyright (c) 2010 Symbian Software Limited and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Bala Torati (Symbian) - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.managedbuilder.templateengine.tests; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import junit.framework.TestCase; import org.eclipse.cdt.core.templateengine.TemplateDescriptor; import org.eclipse.cdt.core.templateengine.TemplateEngine; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IProjectType; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceDescription; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.osgi.framework.Bundle; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; /** * * All supporting functions which are not part of Testing class. * * @since 4.0 */ public class TemplateEngineTestsHelper { public static final String LOGGER_FILE_NAME="TemplateEngineTests"; //$NON-NLS-1$ private static List<IProjectType> projectTypes = new ArrayList<IProjectType>(); private static List<String> projectTypeNames = new ArrayList<String>(); /** * get the url of a xml template, by passing the xml file name. * @param templateName * @return URL */ public static URL getTemplateURL(String templateName){ Bundle bundle = Platform.getBundle("org.eclipse.cdt.managedbuilder.core.tests"); //$NON-NLS-1$ URL url = FileLocator.find(bundle, new Path("testdata/"+templateName), null); //$NON-NLS-1$ if ( url != null ) { try { url = FileLocator.toFileURL(url); } catch (IOException e) { e.printStackTrace(); } } return url; } public static int getChildCount(TemplateDescriptor templateDescriptor, String propertyGroupID){ List<Element> list = templateDescriptor.getPropertyGroupList(); for (int i = 0, l = list.size(); i < l; i++) { Element element = list.get(i); NamedNodeMap attributes = element.getAttributes(); for (int j = 0, l1 = attributes.getLength(); j < l1; j++) { String value = attributes.item(j).getNodeValue(); if (value.equals(propertyGroupID)) { return TemplateEngine.getChildrenOfElement(element).size(); } } } return 0; } public static boolean failIfErrorStatus(IStatus[] statuses) { for(int i=0; i<statuses.length; i++) { IStatus status = statuses[i]; if (status.getCode() == IStatus.ERROR) { TestCase.fail(status.getMessage()); return true; } IStatus[] children = status.getChildren(); if (children != null) { if (failIfErrorStatus(children)) { return true; } } } return false; } public static void turnOffAutoBuild() throws CoreException { IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceDescription workspaceDesc = workspace.getDescription(); workspaceDesc.setAutoBuilding(false); workspace.setDescription(workspaceDesc); } public static List<IProjectType> getProjectTypes() { populateProjectTypes(); return projectTypes; } public static List<String> getProjectTypeNames() { populateProjectTypes(); return projectTypeNames; } /* (non-Javadoc) * Collects all the valid project types for the platform Eclipse is running on * Note: This method is a copy of populateTypes() from org.eclipse.cdt.managedbuilder.ui.wizards.CProjectPlatformPage class. */ private static void populateProjectTypes() { IProjectType[] allProjectTypes = ManagedBuildManager.getDefinedProjectTypes(); String os = Platform.getOS(); String arch = Platform.getOSArch(); for (int index = 0; index < allProjectTypes.length; ++index) { IProjectType type = allProjectTypes[index]; if (!type.isAbstract() && !type.isTestProjectType()) { if (!type.getConvertToId().equals("")) //$NON-NLS-1$ continue; if (type.isSupported()) { IConfiguration[] configs = type.getConfigurations(); for (int j = 0; j < configs.length; ++j) { IToolChain tc = configs[j].getToolChain(); List<String> osList = Arrays.asList(tc.getOSList()); if (osList.contains("all") || osList.contains(os)) { //$NON-NLS-1$ List<String> archList = Arrays.asList(tc.getArchList()); if (archList.contains("all") || archList.contains(arch)) { //$NON-NLS-1$ projectTypes.add(type); break; } } } } } } for (Iterator<IProjectType> iter = projectTypes.iterator(); iter.hasNext();) { projectTypeNames.add(iter.next().getName()); } } }