You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jo...@apache.org on 2017/03/23 22:15:13 UTC
[4/5] git commit: [flex-falcon] [refs/heads/develop] - compiler-jx:
tests for source maps in MXML Script blocks
compiler-jx: tests for source maps in MXML Script blocks
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/de828849
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/de828849
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/de828849
Branch: refs/heads/develop
Commit: de8288496481a8349ec47a2be7fee01993e595fa
Parents: 83b00a0
Author: Josh Tynjala <jo...@apache.org>
Authored: Tue Mar 21 16:06:53 2017 -0700
Committer: Josh Tynjala <jo...@apache.org>
Committed: Tue Mar 21 16:06:53 2017 -0700
----------------------------------------------------------------------
.../sourcemaps/TestSourceMapMXMLScript.java | 77 ++++++++++++++++++++
.../internal/test/FlexJSSourceMapTestBase.java | 64 ++++++++++++++++
.../compiler/internal/test/FlexJSTestBase.java | 33 +++++++++
3 files changed, 174 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/de828849/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/mxml/sourcemaps/TestSourceMapMXMLScript.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/mxml/sourcemaps/TestSourceMapMXMLScript.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/mxml/sourcemaps/TestSourceMapMXMLScript.java
new file mode 100644
index 0000000..591e6e5
--- /dev/null
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/mxml/sourcemaps/TestSourceMapMXMLScript.java
@@ -0,0 +1,77 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.flex.compiler.internal.codegen.mxml.sourcemaps;
+
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.test.FlexJSSourceMapTestBase;
+import org.apache.flex.compiler.internal.test.TestBase;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDocumentNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLScriptNode;
+
+import org.junit.Test;
+import static org.junit.Assert.assertTrue;
+
+public class TestSourceMapMXMLScript extends FlexJSSourceMapTestBase
+{
+ @Test
+ public void testField()
+ {
+ String code = "var foo;";
+
+ IVariableNode node = (IVariableNode) getASNode(code, IVariableNode.class);
+ IMXMLDocumentNode dnode = (IMXMLDocumentNode) node
+ .getAncestorOfType(IMXMLDocumentNode.class);
+ IClassDefinition definition = dnode.getClassDefinition();
+ ((JSFlexJSEmitter)(mxmlBlockWalker.getASEmitter())).getModel().setCurrentClass(definition);
+ mxmlBlockWalker.visitDocument(dnode);
+ String definitionName = definition.getQualifiedName();
+ assertTrue(definitionName.startsWith(getClass().getSimpleName()));
+ int endColumn = definitionName.length() + 14;
+ ///**\n * @export\n * @type {*}\n */\nFalconTest_A.prototype.foo
+ assertMapping(node, 0, 4, 42, 0, 42, endColumn); // foo
+ }
+
+ @Test
+ public void testMethod()
+ {
+ String code = "function foo(){};";
+
+ IFunctionNode node = (IFunctionNode) getASNode(code, IFunctionNode.class);
+ IMXMLDocumentNode dnode = (IMXMLDocumentNode) node
+ .getAncestorOfType(IMXMLDocumentNode.class);
+ IClassDefinition definition = dnode.getClassDefinition();
+ ((JSFlexJSEmitter)(mxmlBlockWalker.getASEmitter())).getModel().setCurrentClass(definition);
+ mxmlBlockWalker.visitDocument(dnode);
+ String definitionName = definition.getQualifiedName();
+ assertTrue(definitionName.startsWith(getClass().getSimpleName()));
+ int nameEndColumn = definitionName.length() + 14;
+ ///**\n * @export\n * @type {*}\n */\nFalconTest_A.prototype.foo
+ assertMapping(node, 0, 9, 38, 0, 38, nameEndColumn); // foo
+ assertMapping(node, 0, 0, 38, nameEndColumn, 38, nameEndColumn + 11); // = function
+ assertMapping(node, 0, 12, 38, nameEndColumn + 11, 38, nameEndColumn + 12); // (
+ assertMapping(node, 0, 13, 38, nameEndColumn + 12, 38, nameEndColumn + 13); // )
+ assertMapping(node, 0, 14, 38, nameEndColumn + 14, 38, nameEndColumn + 15); // {
+ assertMapping(node, 0, 15, 39, 0, 39, 1); // }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/de828849/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/FlexJSSourceMapTestBase.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/FlexJSSourceMapTestBase.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/FlexJSSourceMapTestBase.java
new file mode 100644
index 0000000..9be5b2a
--- /dev/null
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/FlexJSSourceMapTestBase.java
@@ -0,0 +1,64 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.flex.compiler.internal.test;
+
+import java.util.List;
+
+import org.apache.flex.compiler.codegen.js.IMappingEmitter;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLNode;
+
+import com.google.debugging.sourcemap.FilePosition;
+import static org.junit.Assert.assertTrue;
+
+public class FlexJSSourceMapTestBase extends FlexJSTestBase
+{
+ protected void assertMapping(IASNode node, int nodeStartLine, int nodeStartColumn,
+ int outStartLine, int outStartColumn, int outEndLine, int outEndColumn)
+ {
+ int sourceStartLine = nodeStartLine + node.getLine();
+ int sourceStartColumn = nodeStartColumn;
+ if (nodeStartLine == 0)
+ {
+ sourceStartColumn += node.getColumn();
+ }
+ boolean foundMapping = false;
+ IMappingEmitter emitter = (IMappingEmitter) mxmlEmitter;
+ List<IMappingEmitter.SourceMapMapping> mappings = emitter.getSourceMapMappings();
+ for (IMappingEmitter.SourceMapMapping mapping : mappings)
+ {
+ FilePosition sourcePosition = mapping.sourceStartPosition;
+ FilePosition startPosition = mapping.destStartPosition;
+ FilePosition endPosition = mapping.destEndPosition;
+ if (sourcePosition.getLine() == sourceStartLine
+ && sourcePosition.getColumn() == sourceStartColumn
+ && startPosition.getLine() == outStartLine
+ && startPosition.getColumn() == outStartColumn
+ && endPosition.getLine() == outEndLine
+ && endPosition.getColumn() == outEndColumn)
+ {
+ foundMapping = true;
+ break;
+ }
+ }
+ assertTrue("Mapping not found for node " + node.getNodeID() + ". Expected "
+ + "source: (" + nodeStartLine + ", " + nodeStartColumn + "), dest: (" + outStartLine + ", " + outStartColumn + ") to (" + outEndLine + ", " + outEndColumn + ")",
+ foundMapping);
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/de828849/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/FlexJSTestBase.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/FlexJSTestBase.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/FlexJSTestBase.java
index c3f379c..30fcebc 100644
--- a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/FlexJSTestBase.java
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/test/FlexJSTestBase.java
@@ -26,8 +26,10 @@ 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.mxml.IMXMLNamespaceMapping;
+import org.apache.flex.compiler.tree.as.IASNode;
import org.apache.flex.compiler.tree.mxml.IMXMLFileNode;
import org.apache.flex.compiler.tree.mxml.IMXMLNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLScriptNode;
import org.apache.flex.utils.FilenameNormalization;
import org.apache.flex.utils.ITestAdapter;
import org.apache.flex.utils.TestAdapterFactory;
@@ -47,6 +49,7 @@ public class FlexJSTestBase extends TestBase
asEmitter = backend.createEmitter(writer);
mxmlEmitter = backend.createMXMLEmitter(writer);
+ asEmitter.setParentEmitter(mxmlEmitter);
asBlockWalker = backend.createWalker(project, errors, asEmitter);
mxmlBlockWalker = backend.createMXMLWalker(project, errors,
@@ -105,19 +108,49 @@ public class FlexJSTestBase extends TestBase
public static final int WRAP_LEVEL_NONE = 0;
public static final int WRAP_LEVEL_DOCUMENT = 1;
+ protected IASNode getASNode(String code, Class<? extends IASNode> type)
+ {
+ code = ""
+ + "<basic:Application xmlns:fx=\"http://ns.adobe.com/mxml/2009\" xmlns:basic=\"library://ns.apache.org/flexjs/basic\"><fx:Script><![CDATA["
+ + code + "]]></fx:Script></basic:Application>";
+
+ IMXMLFileNode node = compileMXML(code);
+
+ return findFirstASDescendantOfType(node, type);
+ }
+
protected IMXMLNode getNode(String code, Class<? extends IMXMLNode> type,
int wrapLevel)
{
if (wrapLevel >= WRAP_LEVEL_DOCUMENT)
+ {
code = ""
+ "<basic:Application xmlns:fx=\"http://ns.adobe.com/mxml/2009\" xmlns:basic=\"library://ns.apache.org/flexjs/basic\">"
+ code + "</basic:Application>";
+ }
IMXMLFileNode node = compileMXML(code);
return findFirstDescendantOfType(node, type);
}
+ protected IASNode findFirstASDescendantOfType(IMXMLNode node,
+ Class<? extends IASNode> nodeType)
+ {
+ IMXMLScriptNode scriptNode = (IMXMLScriptNode) findFirstDescendantOfType(node, IMXMLScriptNode.class);
+ if (scriptNode != null)
+ {
+ for (IASNode asNode : scriptNode.getASNodes())
+ {
+ if (nodeType.isInstance(asNode))
+ {
+ return asNode;
+ }
+ }
+ }
+ return null;
+ }
+
protected IMXMLNode findFirstDescendantOfType(IMXMLNode node,
Class<? extends IMXMLNode> nodeType)
{