You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by er...@apache.org on 2014/08/01 13:00:37 UTC

[16/33] git commit: [flex-falcon] [refs/heads/develop] - Added the ability to test entire MXML projects.

Added the ability to test entire MXML projects.

Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/f6f606f4
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/f6f606f4
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/f6f606f4

Branch: refs/heads/develop
Commit: f6f606f45d9084c94ecd8df48f9ae70a5a675e83
Parents: 2afb814
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Wed Jul 2 16:12:38 2014 +0200
Committer: Erik de Bruin <er...@ixsoftware.nl>
Committed: Fri Aug 1 12:59:15 2014 +0200

----------------------------------------------------------------------
 .../compiler/internal/test/VF2JSTestBase.java   | 199 ++++++++++++++++++-
 1 file changed, 193 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f6f606f4/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/VF2JSTestBase.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/VF2JSTestBase.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/VF2JSTestBase.java
index 32c0f71..6a5f7b3 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/VF2JSTestBase.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/VF2JSTestBase.java
@@ -18,21 +18,34 @@
  */
 package org.apache.flex.compiler.internal.test;
 
+import java.io.BufferedOutputStream;
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.flex.compiler.config.Configurator;
 import org.apache.flex.compiler.driver.IBackend;
 import org.apache.flex.compiler.internal.driver.mxml.flexjs.MXMLFlexJSBackend;
 import org.apache.flex.compiler.internal.mxml.MXMLNamespaceMapping;
 import org.apache.flex.compiler.internal.projects.FlexJSProject;
+import org.apache.flex.compiler.internal.targets.JSTarget;
 import org.apache.flex.compiler.mxml.IMXMLNamespaceMapping;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IFileNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLFileNode;
 import org.apache.flex.compiler.tree.mxml.IMXMLNode;
+import org.apache.flex.compiler.units.ICompilationUnit;
 import org.apache.flex.utils.FilenameNormalization;
 import org.junit.Ignore;
 
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+
 @Ignore
 public class VF2JSTestBase extends TestBase
 {
@@ -41,6 +54,7 @@ public class VF2JSTestBase extends TestBase
     public void setUp()
     {
         project = new FlexJSProject(workspace);
+        
         super.setUp();
 
         asEmitter = backend.createEmitter(writer);
@@ -59,6 +73,8 @@ public class VF2JSTestBase extends TestBase
         libraries.add(new File(FilenameNormalization.normalize(env.SDK
                 + "/frameworks/libs/framework.swc")));
         libraries.add(new File(FilenameNormalization.normalize(env.SDK
+                + "/frameworks/libs/mx.swc")));
+        libraries.add(new File(FilenameNormalization.normalize(env.SDK
                 + "/frameworks/libs/spark.swc")));
         libraries.add(new File(FilenameNormalization.normalize(env.SDK
                 + "/frameworks/libs/vf2js_mx.swc")));
@@ -103,7 +119,7 @@ public class VF2JSTestBase extends TestBase
     }
     
     @Override
-    protected IMXMLFileNode compileMXML(String input, boolean isFileName,
+    protected IASNode compile(String input, boolean isFileName,
             String inputDir, boolean useTempFile)
     {
         File intermediateFile = new File(
@@ -118,13 +134,124 @@ public class VF2JSTestBase extends TestBase
         String onlyPath = filePath.substring(0,
                 filePath.lastIndexOf(File.separator));
         
-        IMXMLFileNode result = 
-                (IMXMLFileNode) compile(onlyName, isFileName, onlyPath, useTempFile);
+        IASNode result = super.compile(onlyName, isFileName, onlyPath,
+                useTempFile);
         
         tmpFile.delete();
         
         return result;
     }
+    
+    @Override
+    protected IFileNode compileAS(String input, boolean isFileName,
+            String inputDir, boolean useTempFile)
+    {
+        return (IFileNode) compile(input, isFileName, inputDir, useTempFile);
+    }
+    
+    @Override
+    protected IMXMLFileNode compileMXML(String input, boolean isFileName,
+            String inputDir, boolean useTempFile)
+    {
+        return (IMXMLFileNode) compile(input, isFileName, inputDir, useTempFile);
+    }
+
+    @Override
+    protected List<String> compileProject(String inputFileName,
+            String inputDirName)
+    {
+        String path = new File(FilenameNormalization.normalize("test-files"
+                + File.separator + inputDirName)).getPath();
+        
+        File[] files = new File(path).listFiles();
+
+        createTempProjectDir(files, "test-files"
+                + File.separator + inputDirName);
+        
+        inputDirName = inputDirName + File.separator + "src";
+
+        List<String> compiledFileNames = new ArrayList<String>();
+
+        String mainFileName = "temp" + File.separator + "test-files"
+                + File.separator + inputDirName + File.separator
+                + inputFileName + inputFileExtension;
+
+        addDependencies();
+
+        String normalizedFileName = FilenameNormalization.normalize(
+                mainFileName);
+        Collection<ICompilationUnit> compilationUnits = 
+                workspace.getCompilationUnits(normalizedFileName, project);
+        ICompilationUnit mainCU = Iterables.getOnlyElement(
+                compilationUnits);
+        
+        if (project instanceof FlexJSProject)
+            ((FlexJSProject) project).mainCU = mainCU;
+        
+        Configurator projectConfigurator = backend.createConfigurator();
+
+        JSTarget target = (JSTarget) backend.createTarget(project,
+                projectConfigurator.getTargetSettings(null), null);
+
+        target.build(mainCU, new ArrayList<ICompilerProblem>());
+
+        List<ICompilationUnit> reachableCompilationUnits = project
+                .getReachableCompilationUnitsInSWFOrder(ImmutableSet.of(mainCU));
+        for (final ICompilationUnit cu : reachableCompilationUnits)
+        {
+            ICompilationUnit.UnitType cuType = cu.getCompilationUnitType();
+
+            if (cuType == ICompilationUnit.UnitType.AS_UNIT
+                    || cuType == ICompilationUnit.UnitType.MXML_UNIT)
+            {
+                File outputRootDir = new File(
+                        FilenameNormalization.normalize(tempDir
+                                + File.separator + inputDirName));
+
+                String qname = "";
+                try
+                {
+                    qname = cu.getQualifiedNames().get(0);
+                }
+                catch (InterruptedException error)
+                {
+                    System.out.println(error);
+                }
+
+                compiledFileNames.add(qname.replace(".", "/"));
+
+                final File outputClassFile = getOutputClassFile(qname
+                        + "_output", outputRootDir);
+
+                if (cuType == ICompilationUnit.UnitType.AS_UNIT)
+                {
+                    asBlockWalker.visitCompilationUnit(cu);
+                }
+                else
+                {
+                    mxmlBlockWalker.visitCompilationUnit(cu);
+                }
+                
+                System.out.println(writer.toString());
+
+                try
+                {
+                    BufferedOutputStream out = new BufferedOutputStream(
+                            new FileOutputStream(outputClassFile));
+
+                    out.write(writer.toString().getBytes());
+                    out.flush();
+                    out.close();
+                }
+                catch (Exception error)
+                {
+                    System.out.println(error);
+                }
+            }
+        }
+
+        return compiledFileNames;
+    }
 
     //--------------------------------------------------------------------------
     // Node "factory"
@@ -174,27 +301,87 @@ public class VF2JSTestBase extends TestBase
         }
     }
 
+    private void createTempProjectDir(File[] files, String parentPath)
+    {
+        for (File file : files) 
+        {
+            if (file.isDirectory()) 
+            {
+                String path = parentPath + File.separator + file.getName(); 
+                
+                new File(tempDir + File.separator + path).mkdirs();
+
+                createTempProjectDir(file.listFiles(), path);
+            } 
+            else 
+            {
+                String fileName = file.getName();
+
+                if (fileName.contains(".") && fileName.charAt(0) != '.')
+                {
+                    String extension = fileName.substring(fileName.lastIndexOf("."), fileName.length());
+    
+                    if (extension.equals(".mxml") || extension.equals(".as"))
+                    {
+                        File intermediateFile = file;
+                        String tempFileName = fileName.substring(0, fileName.indexOf("."));
+                        File targetDir = new File(tempDir + File.separator + parentPath);
+
+                        createTempFileWithVF2JSNamespace(intermediateFile, 
+                                tempFileName, false, targetDir, extension);
+                    }
+                }
+            }
+        }
+    }
+    
     private File createTempFileWithVF2JSNamespace(File intermediateFile,
             String tempFileName, boolean createTempFile)
     {
+        return createTempFileWithVF2JSNamespace(intermediateFile,
+                tempFileName, createTempFile, tempDir, inputFileExtension); 
+    }
+    
+    private File createTempFileWithVF2JSNamespace(File intermediateFile,
+            String tempFileName, boolean createTempFile, File targetDir,
+            String extension)
+    {
         File tempFile = null;
         
         try 
         {
             String content = FileUtils.readFileToString(intermediateFile, "UTF-8");
+
+            // mx (MXML)
+            content = content.replace(
+                    "xmlns:mx=\"library://ns.adobe.com/flex/mx\"", 
+                    "xmlns:vf2js_mx=\"http://flex.apache.org/vf2js_mx/ns\"");
             content = content.replace("<mx:", "<vf2js_mx:");
             content = content.replace("</mx:", "</vf2js_mx:");
+
+            // mx (AS)
+            content = content.replace("mx.", "vf2js_mx.");
+
+            // s (MXML)
+            content = content.replace(
+                    "xmlns:s=\"library://ns.adobe.com/flex/spark\"", 
+                    "xmlns:vf2js_s=\"http://flex.apache.org/vf2js_s/ns\"");
             content = content.replace("<s:", "<vf2js_s:");
             content = content.replace("</s:", "</vf2js_s:");
+
+            // s (AS)
+            content = content.replace("spark.", "vf2js_s.");
+
             if (createTempFile)
             {
-                tempFile = File.createTempFile(tempFileName, inputFileExtension,
-                        tempDir);
+                tempFile = File.createTempFile(tempFileName, extension,
+                        targetDir);
                 tempFile.deleteOnExit();
             }
             else
             {
-                tempFile = new File(tempDir.getAbsolutePath(), tempFileName + inputFileExtension);
+                tempFile = new File(targetDir.getAbsolutePath(),
+                        tempFileName + extension);
             }
             FileUtils.writeStringToFile(tempFile, content, "UTF-8");
         }