Add tests for invalid filename capitalization or missing files in CopyFiles process.
authorEd Swartz <ed.swartz@nokia.com>
Mon, 16 Nov 2009 10:11:24 -0600
changeset 591 a8e3469fafa4
parent 590 959d0be0b766
child 592 e03ece49757c
Add tests for invalid filename capitalization or missing files in CopyFiles process.
core/com.nokia.carbide.templatewizard.tests/src/com/nokia/carbide/templatewizard/tests/AllTests.java
core/com.nokia.carbide.templatewizard.tests/src/com/nokia/carbide/templatewizard/tests/TemplateCopyFilesTest.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;
 	}
--- /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<ProcessType> processes) {
+		if (processes == null)
+			return null;
+		List<String> invalidFiles = new ArrayList<String>();
+		for (ProcessType process : processes) {
+			String nameOrClass = process.getName();
+			if (nameOrClass == null)
+				nameOrClass = process.getClass_();
+			if (nameOrClass == null)
+				continue;
+			if (!nameOrClass.contains("CopyFile"))
+				continue;
+			EList<ParameterType> 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;
+	}
+}