# HG changeset patch # User Ed Swartz # Date 1258387884 21600 # Node ID a8e3469fafa41d018bc8e287951cfbf38cac64e8 # Parent 959d0be0b766768eb85f7daa3042c06916a615ba Add tests for invalid filename capitalization or missing files in CopyFiles process. diff -r 959d0be0b766 -r a8e3469fafa4 core/com.nokia.carbide.templatewizard.tests/src/com/nokia/carbide/templatewizard/tests/AllTests.java --- a/core/com.nokia.carbide.templatewizard.tests/src/com/nokia/carbide/templatewizard/tests/AllTests.java Mon Nov 16 10:10:51 2009 -0600 +++ b/core/com.nokia.carbide.templatewizard.tests/src/com/nokia/carbide/templatewizard/tests/AllTests.java Mon Nov 16 10:11:24 2009 -0600 @@ -28,6 +28,7 @@ //$JUnit-BEGIN$ suite.addTestSuite(TemplateLoaderTest.class); suite.addTestSuite(ProcessesTest.class); + suite.addTestSuite(TemplateCopyFilesTest.class); //$JUnit-END$ return suite; } diff -r 959d0be0b766 -r a8e3469fafa4 core/com.nokia.carbide.templatewizard.tests/src/com/nokia/carbide/templatewizard/tests/TemplateCopyFilesTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/com.nokia.carbide.templatewizard.tests/src/com/nokia/carbide/templatewizard/tests/TemplateCopyFilesTest.java Mon Nov 16 10:11:24 2009 -0600 @@ -0,0 +1,145 @@ +/* +* Copyright (c) 2009 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.templatewizard.tests; + +import com.nokia.carbide.internal.api.template.engine.*; +import com.nokia.carbide.internal.template.gen.Template.ParameterType; +import com.nokia.carbide.internal.template.gen.Template.ProcessType; +import com.nokia.carbide.internal.template.gen.Template.TemplateType; +import com.nokia.carbide.internal.templatewizard.tests.TestsPlugin; +import com.nokia.carbide.template.engine.*; +import com.nokia.cpp.internal.api.utils.core.FileUtils; +import com.nokia.cpp.internal.api.utils.core.TextUtils; + +import org.eclipse.core.resources.*; +import org.eclipse.core.runtime.*; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.FeatureMap; +import org.osgi.framework.Bundle; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URL; +import java.util.*; + +import junit.framework.TestCase; + +/** + * Test that the CopyFile* processes refer to extant files + */ +public class TemplateCopyFilesTest extends TestCase { + + protected void setUp() throws Exception { + super.setUp(); + } + + private ILoadedTemplate loadTemplate(File file, boolean validate) throws CoreException, IOException { + assertNotNull(file); + assertTrue(file.exists()); + Bundle bundle = TestsPlugin.getDefault().getBundle(); + URL templateUrl = file.toURL(); + TemplateType templateType = TemplateLoader.loadTemplate(bundle, templateUrl, validate); + assertNotNull(templateType); + ITemplate template = new Template(templateUrl, bundle, null, null, null, null, null, null, null); + return template.getLoadedTemplate(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + @SuppressWarnings("unchecked") + public void testTemplates() throws Exception { + String errors = ""; + for (ITemplate templateInfo : TemplateEngine.getInstance().getFilteredTemplates(null)) { + if (templateInfo instanceof Template) { + ILoadedTemplate template; + try { + template = templateInfo.getLoadedTemplate(); + } catch (CoreException e) { + // too bad! + e.printStackTrace(); + continue; + } + if (template instanceof LoadedTemplate) { + LoadedTemplate loadedTemplate = (LoadedTemplate) template; + String error = validateProcesses(templateInfo.getTemplateId(), + templateInfo.getBundle(), + templateInfo.getTemplateUrl(), + loadedTemplate.getTemplateType().getProcess()); + if (error != null) + errors += error; + } + } + } + if (errors.length() > 0) + fail(errors); + } + + @SuppressWarnings("unchecked") + private String validateProcesses(String templateId, Bundle bundle, URL templateBase, EList processes) { + if (processes == null) + return null; + List invalidFiles = new ArrayList(); + for (ProcessType process : processes) { + String nameOrClass = process.getName(); + if (nameOrClass == null) + nameOrClass = process.getClass_(); + if (nameOrClass == null) + continue; + if (!nameOrClass.contains("CopyFile")) + continue; + EList parameters = process.getParameter(); + for (ParameterType parameter : parameters) { + FeatureMap attributes = parameter.getAnyAttribute(); + for (Iterator iter = attributes.iterator(); iter.hasNext();) { + FeatureMap.Entry entry = (FeatureMap.Entry) iter.next(); + String attributeName = entry.getEStructuralFeature().getName(); + if (attributeName.equals("sourcePath")) { + String rawString = (String) entry.getValue(); + if (!rawString.contains("$(")) { + String fileName = templateBase.getFile(); + IPath path = new Path(fileName).removeLastSegments(1); + IPath sourcePath = path.append(rawString); + URL url = FileLocator.find(bundle, sourcePath, null); + if (url == null) { + invalidFiles.add(rawString); + continue; + } + try { + InputStream stream = url.openStream(); + stream.close(); + } catch (IOException e) { + invalidFiles.add(rawString); + } + } + } + } + } + } + if (!invalidFiles.isEmpty()) { + return (templateId + " references nonexistent files (check capitalization):\n" + + TextUtils.catenateStrings(invalidFiles.toArray(), "\n") + + "\n"); + } + return null; + } +}