コード例 #1
0
        public void TestShortName1()
        {
            string libraryPath = "FFITarget.dll";

            if (!CurrentDynamoModel.LibraryServices.IsLibraryLoaded(libraryPath))
            {
                CurrentDynamoModel.LibraryServices.ImportLibrary(libraryPath);
            }

            OpenModel(@"core\node2code\shortName1.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes;
            var engine = CurrentDynamoModel.EngineController;

            var result = engine.ConvertNodesToCode(nodes, nodes);

            result = NodeToCodeUtils.ConstantPropagationForTemp(result, Enumerable.Empty <string>());
            NodeToCodeUtils.ReplaceWithShortestQualifiedName(engine.LibraryServices.LibraryManagementCore.ClassTable, result.AstNodes);
            Assert.IsTrue(result != null && result.AstNodes != null);

            var expr = result.AstNodes.Last() as BinaryExpressionNode;

            Assert.IsNotNull(expr);

            // Since there is a conflict with FFITarget.DesignScript.Point and FFITarget.Dynamo.Point,
            // node to code generates the shortest unique name, which in this case will be
            // Autodesk.Point for Autodesk.DesignScript.Geometry.Point
            Assert.AreEqual("Autodesk.Point.ByCoordinates(t1, 0)", expr.RightNode.ToString());
        }
コード例 #2
0
        public void TestShortestQualifiedNameReplacerWithDefaultArgument2()
        {
            string libraryPath = "FFITarget.dll";

            if (!CurrentDynamoModel.LibraryServices.IsLibraryLoaded(libraryPath))
            {
                CurrentDynamoModel.LibraryServices.ImportLibrary(libraryPath);
            }

            OpenModel(@"core\node2code\ShortenNodeNameWithDefaultArg.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes;
            var engine = CurrentDynamoModel.EngineController;

            var result = engine.ConvertNodesToCode(nodes, nodes);

            result = NodeToCodeUtils.ConstantPropagationForTemp(result, Enumerable.Empty <string>());
            NodeToCodeUtils.ReplaceWithShortestQualifiedName(engine.LibraryServices.LibraryManagementCore.ClassTable, result.AstNodes);
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.AstNodes);

            var expr1 = result.AstNodes.First() as BinaryExpressionNode;

            Assert.IsNotNull(expr1);

            // Since there is a conflict with FFITarget.DesignScript.Point and FFITarget.Dynamo.Point,
            // node to code generates the shortest unique name, which in this case will be
            // Autodesk.Point for Autodesk.DesignScript.Geometry.Point
            Assert.AreEqual("ElementResolverTarget.StaticMethod(ElementResolverTarget.Create().StaticProperty)", expr1.RightNode.ToString());
        }
コード例 #3
0
        public void TestShortestQualifiedNameReplacer1()
        {
            string libraryPath = "FFITarget.dll";

            if (!CurrentDynamoModel.LibraryServices.IsLibraryLoaded(libraryPath))
            {
                CurrentDynamoModel.LibraryServices.ImportLibrary(libraryPath);
            }

            var functionCall = AstFactory.BuildFunctionCall(
                "Autodesk.DesignScript.Geometry.Point",
                "ByCoordinates",
                new List <AssociativeNode> {
                new IntNode(1), new IntNode(2)
            });
            var lhs = AstFactory.BuildIdentifier("lhs");
            var ast = AstFactory.BuildBinaryExpression(lhs, functionCall, ProtoCore.DSASM.Operator.assign);

            NodeToCodeUtils.ReplaceWithShortestQualifiedName(
                CurrentDynamoModel.EngineController.LibraryServices.LibraryManagementCore.ClassTable,
                new [] { ast });

            // Since there is a conflict with FFITarget.DesignScript.Point and FFITarget.Dynamo.Point,
            // node to code generates the shortest unique name, which in this case will be
            // Autodesk.Point for Autodesk.DesignScript.Geometry.Point
            Assert.AreEqual("Autodesk.Point.ByCoordinates(1, 2)", ast.RightNode.ToString());
        }
コード例 #4
0
        public void TestVariableConfliction6()
        {
            // Test same name variables will be renamed in node to code
            //
            //   x = 1; --> Point.ByCoordinate()
            //          --> Point.ByCoordinate()
            OpenModel(@"core\node2code\sameNames5.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes;
            var engine = CurrentDynamoModel.EngineController;

            var result = engine.ConvertNodesToCode(nodes, nodes);

            NodeToCodeUtils.ReplaceWithShortestQualifiedName(engine.LibraryServices.LibraryManagementCore.ClassTable, result.AstNodes);
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.AstNodes);
            Assert.AreEqual(3, result.AstNodes.Count());
            Assert.True(result.AstNodes.All(n => n is BinaryExpressionNode));

            var rhs = result.AstNodes.Cast <BinaryExpressionNode>()
                      .Skip(1)
                      .Select(n => n.RightNode.ToString())
                      .ToList();

            Assert.AreEqual("Point.ByCoordinates(x, 0)", rhs[0]);
            Assert.AreEqual("Point.ByCoordinates(x, 0)", rhs[1]);
        }
コード例 #5
0
        public void TestShortestQualifiedNameReplacer6()
        {
            OpenModel(@"core\node2code\unqualifiedName5.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes;
            var engine = CurrentDynamoModel.EngineController;

            var result = engine.ConvertNodesToCode(nodes, nodes);

            result = NodeToCodeUtils.ConstantPropagationForTemp(result, Enumerable.Empty <string>());
            NodeToCodeUtils.ReplaceWithShortestQualifiedName(engine.LibraryServices.LibraryManagementCore.ClassTable, result.AstNodes);
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.AstNodes);

            var expr = result.AstNodes.Last() as BinaryExpressionNode;

            Assert.IsNotNull(expr);
            Assert.AreEqual("t1.DistanceTo(t2)", expr.RightNode.ToString());
        }
コード例 #6
0
        public void TestTemporaryVariableRenaming4()
        {
            OpenModel(@"core\node2code\tempVariable4.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes;
            var engine = CurrentDynamoModel.EngineController;

            var result = engine.ConvertNodesToCode(nodes, nodes);

            result = NodeToCodeUtils.ConstantPropagationForTemp(result, Enumerable.Empty <string>());
            Assert.IsNotNull(result);
            Assert.IsNotNull(result.AstNodes);

            NodeToCodeUtils.ReplaceWithShortestQualifiedName(engine.LibraryServices.LibraryManagementCore.ClassTable, result.AstNodes);
            Assert.AreEqual(2, result.AstNodes.Count());
            Assert.True(result.AstNodes.All(n => n is BinaryExpressionNode));
            var rhs = result.AstNodes.Cast <BinaryExpressionNode>().Select(n => n.RightNode.ToString());

            Assert.AreEqual("Point.ByCoordinates(1, 2)", rhs.First());
            Assert.AreEqual("Point.ByCoordinates(1, 3)", rhs.Last());
        }