blob: cccd216460fff8e995569d8cc1a7431a868e3f3c [file] [log] [blame]
/*
* Copyright (c) 2010-2012 Eike Stepper (Berlin, Germany) 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:
* Martin Fluegge - initial API and implementation
*/
package org.eclipse.emf.cdo.dawn.tests.common;
import org.eclipse.emf.cdo.dawn.codegen.dawngenmodel.gmf.ui.creators.GMFFragmentCreator;
import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.DawnAcoreDiagramEditor;
import org.eclipse.emf.cdo.dawn.tests.AbstractDawnTest;
import org.eclipse.emf.cdo.dawn.tests.DawnTestPlatform;
import org.eclipse.emf.mwe.core.WorkflowEngine;
import org.eclipse.emf.mwe.core.monitor.NullProgressMonitor;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.URI;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* @author Martin Fluegge
*/
public class DawnCodeGenGMFFragmentTest extends AbstractDawnTest
{
public void testCodeGeneration() throws Exception
{
Map<String, ?> slotMap = new HashMap<String, Object>();
Map<String, String> properties = new HashMap<String, String>();
File dawnGenFile = DawnTestPlatform.instance.getTestResource("/model/acore.dawngenmodel");
String ouputFolder = DawnTestPlatform.instance.getTestFolder();
properties.put("model", dawnGenFile.toURI().toString());
properties.put("src-gen", ouputFolder);
String workflowPath = getWorkflowPath("workflow/gmfFragmentGenerator.oaw");// FileLocator.toFileURL(workFlowURL).getFile();
System.out.println(workflowPath);
new WorkflowEngine().run(workflowPath, new NullProgressMonitor(), properties, slotMap);
String outputFolder = DawnTestPlatform.instance.getTestFolder();
String diagramFolder = ouputFolder + "/" + "src/org/eclipse/emf/cdo/dawn/examples/acore/diagram";
assertEquals(true, new File(outputFolder + "/META-INF/MANIFEST.MF").exists());
assertEquals(true, new File(outputFolder + "/fragment.xml").exists());
assertEquals(true, new File(outputFolder + "/build.properties").exists());
assertEquals(true, new File(diagramFolder + "/edit/").exists());
assertEquals(true, new File(diagramFolder + "/edit/parts/DawnAcoreEditPartFactory.java").exists());
assertEquals(true, new File(diagramFolder + "/edit/parts/DawnACoreRootEditPart.java").exists());
assertEquals(true, new File(diagramFolder + "/edit/policies/DawnACoreRootCanonicalEditPolicy.java").exists());
assertEquals(true, new File(diagramFolder + "/part/").exists());
assertEquals(true, new File(diagramFolder + "/part/DawnAcoreCreationWizard.java").exists());
assertEquals(true, new File(diagramFolder + "/part/DawnAcoreDiagramEditor.java").exists());
assertEquals(true, new File(diagramFolder + "/part/DawnAcoreDiagramEditorUtil.java").exists());
assertEquals(true, new File(diagramFolder + "/part/DawnAcoreDocumentProvider.java").exists());
assertEquals(true, new File(diagramFolder + "/providers/").exists());
assertEquals(true, new File(diagramFolder + "/providers/DawnAcoreEditPartProvider.java").exists());
assertEquals(true, new File(diagramFolder + "/providers/DawnAcoreEditPolicyProvider.java").exists());
basicCompare(
new File(new URI(DawnTestPlatform.instance.getBundlePathForClass(DawnAcoreDiagramEditor.class) + ".dawn/src/")),
new File(outputFolder + "/src"));
}
/**
* check whether the generated folder contains the same files as the reference editor
*
* @throws IOException
*/
private void basicCompare(File reference, File expected) throws IOException
{
if (reference.getName().endsWith("CVS"))
{
return;
}
msg(reference + " <---> " + expected);
assertEquals(true, reference.exists());
assertEquals(true, expected.exists());
if (reference.isFile())
{
// assertEquals(true, FileCompare.compare(reference, expected));
if (!FileCompare.compare(reference, expected))
{
fail("not equal: " + reference.getName());
}
}
else if (reference.isDirectory())
{
for (File child : reference.listFiles())
{
basicCompare(child, new File(expected + "/" + child.getName()));
}
}
}
private String getWorkflowPath(String subPath)
{
URL resource = GMFFragmentCreator.class.getResource("");
String packagePath = GMFFragmentCreator.class.getPackage().getName().replace(".", "/");
System.out.println(packagePath);
String path = resource.toString().replace(packagePath, "");
return path + subPath;
}
private static class FileCompare
{
public static boolean compare(File reference, File expected) throws IOException
{
String referenceContent = FileCompare.getContent(reference);
String compareContent = FileCompare.getContent(expected);
msg("REF.) " + referenceContent);
msg("EXP.) " + compareContent);
return referenceContent.equals(compareContent);
}
private static String getContent(File file) throws java.io.IOException
{
StringBuffer buffer = new StringBuffer();
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while ((line = reader.readLine()) != null)
{
if (isValid(line.trim()))
{
buffer.append(replaceWhiteSpace(line));
}
}
reader.close();
return buffer.toString();
}
private static Object replaceWhiteSpace(String line)
{
return line.replace(" ", "").replace("\t", "");
}
private static boolean isValid(String line)
{
if (line.contains("AcoreDiagramEditorPlugin.getInstance().logInfo") || line.equals("") || line.startsWith("*")
|| line.equals("import org.eclipse.emf.cdo.dawn.examples.acore.diagram.part.AcoreDiagramEditorPlugin;")
| line.startsWith("/*")
|| line.startsWith("//") || line.contains("@"))
{
return false;
}
return true;
}
}
}