コード例 #1
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]);
        }
コード例 #2
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());
        }
コード例 #3
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());
        }
コード例 #4
0
        public void TestBasicNode2CodeWorkFlow1()
        {
            // 1 -> a -> x
            OpenModel(@"core\node2code\workflow1.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);

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

            Assert.IsNotNull(expr1);
            Assert.IsNotNull(expr2);

            Assert.IsTrue(expr1.ToString().StartsWith("a = 1;"));
            Assert.IsTrue(expr2.ToString().StartsWith("x = a;"));

            var undo = new DynamoModel.UndoRedoCommand(DynamoModel.UndoRedoCommand.Operation.Undo);

            CurrentDynamoModel.ExecuteCommand(undo);

            Assert.AreEqual(2, CurrentDynamoModel.CurrentWorkspace.Connectors.Count());
            Assert.AreEqual(3, CurrentDynamoModel.CurrentWorkspace.Nodes.Count());
        }
コード例 #5
0
        public void TestParitition5()
        {
            // Select some nodes, and return a group of nodes. Each group could
            // be converted to code.
            //
            // 1             4
            // 2 ----> x --> 5
            // 3
            OpenModel(@"core\node2code\partition5.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes.Where(n => n.NickName != "X");
            var groups = NodeToCodeUtils.GetCliques(nodes);

            Assert.AreEqual(2, groups.Count);

            var group1 = groups.Where(g => g.Count == 3).FirstOrDefault();

            Assert.IsNotNull(group1);

            var group2 = groups.Where(g => g.Count == 2).FirstOrDefault();

            Assert.IsNotNull(group2);

            var nickNames = group1.Select(n => Int32.Parse(n.NickName)).ToList();

            nickNames.Sort();
            Assert.IsTrue(nickNames.SequenceEqual(new[] { 1, 2, 3 }));

            nickNames = group2.Select(n => Int32.Parse(n.NickName)).ToList();
            nickNames.Sort();
            Assert.IsTrue(nickNames.SequenceEqual(new[] { 4, 5 }));
        }
コード例 #6
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());
        }
コード例 #7
0
        public void TestParitition1()
        {
            // Select some nodes, and return a group of nodes. Each group could
            // be converted to code.
            //
            // 1 -> + -> 2
            OpenModel(@"core\node2code\partition1.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes.OfType <CodeBlockNodeModel>();
            var groups = NodeToCodeUtils.GetCliques(nodes);

            Assert.AreEqual(2, groups.Count);
        }
コード例 #8
0
        public void TestParitition1()
        {
            // Select some nodes, and return a group of nodes. Each group could
            // be converted to code.
            //
            // 1 -> + -> 2
            OpenModel(@"core\node2code\partition1.dyn");
            var nodes  = ViewModel.CurrentSpaceViewModel.Model.Nodes.OfType <CodeBlockNodeModel>();
            var groups = NodeToCodeUtils.GetCliques(nodes);

            Assert.IsTrue(groups.Count == 2);
        }
コード例 #9
0
        public void TestTemporaryVariableRenaming3()
        {
            // 1 x
            // 2 y
            OpenModel(@"core\node2code\tempVariable3.dyn");
            var nodes  = ViewModel.CurrentSpaceViewModel.Model.Nodes;
            var engine = ViewModel.Model.EngineController;

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

            result = NodeToCodeUtils.ConstantPropagationForTemp(result, Enumerable.Empty <string>());
            Assert.True(result != null && result.AstNodes != null && result.AstNodes.Count() == 4);
            Assert.True(result.AstNodes.All(n => n is BinaryExpressionNode));
        }
コード例 #10
0
        public void TestTemporaryVariableRenaming3()
        {
            // 1 x
            // 2 y
            OpenModel(@"core\node2code\tempVariable3.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);
            Assert.AreEqual(4, result.AstNodes.Count());
            Assert.True(result.AstNodes.All(n => n is BinaryExpressionNode));
        }
コード例 #11
0
        public void TestUnqualifiedNameReplacer6()
        {
            OpenModel(@"core\node2code\unqualifiedName5.dyn");
            var nodes  = ViewModel.CurrentSpaceViewModel.Model.Nodes;
            var engine = ViewModel.Model.EngineController;

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

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

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

            Assert.IsNotNull(expr);
            Assert.IsTrue(expr.RightNode.ToString().Equals("t1.DistanceTo(t2)"));
        }
コード例 #12
0
        public void TestParitition3()
        {
            // Select some nodes, and return a group of nodes. Each group could
            // be converted to code.
            //
            // 1 -> + -> 3
            // |         ^
            // +--> 2----+
            OpenModel(@"core\node2code\partition3.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes.OfType <CodeBlockNodeModel>();
            var groups = NodeToCodeUtils.GetCliques(nodes);

            Assert.AreEqual(2, groups.Count);
            var group = groups.Where(g => g.Count == 2).First();

            Assert.IsNotNull(group.Find(n => n.NickName == "2"));
        }
コード例 #13
0
ファイル: NodeToCodeTest.cs プロジェクト: monikaprabhu/Dynamo
        public void TestUnqualifiedNameReplacer1()
        {
            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.ReplaceWithUnqualifiedName(
                CurrentDynamoModel.EngineController.LibraryServices.LibraryManagementCore,
                new [] { ast });

            Assert.AreEqual("Point.ByCoordinates(1, 2)", ast.RightNode.ToString());
        }
コード例 #14
0
ファイル: NodeToCodeTest.cs プロジェクト: monikaprabhu/Dynamo
        public void TestShortName1()
        {
            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.ReplaceWithUnqualifiedName(engine.LibraryServices.LibraryManagementCore, result.AstNodes);
            Assert.IsTrue(result != null && result.AstNodes != null);

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

            Assert.IsNotNull(expr);
            Assert.AreEqual("Point.ByCoordinates(t1, 0)", expr.RightNode.ToString());
        }
コード例 #15
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());
        }
コード例 #16
0
        public void TestParitition4()
        {
            // Select some nodes, and return a group of nodes. Each group could
            // be converted to code. circular
            //
            // 1 --> x --> 2
            // ^           |
            // +-----------+
            OpenModel(@"core\node2code\partition4.dyn");
            var nodes  = ViewModel.CurrentSpaceViewModel.Model.Nodes.OfType <CodeBlockNodeModel>();
            var groups = NodeToCodeUtils.GetCliques(nodes);

            Assert.IsTrue(groups.Count == 1);
            var group = groups.First();

            Assert.IsTrue(group.Find(n => n.NickName == "1") != null &&
                          group.Find(n => n.NickName == "2") != null);
        }
コード例 #17
0
ファイル: NodeToCodeTest.cs プロジェクト: monikaprabhu/Dynamo
        public void TestUnqualifiedNameReplacer4()
        {
            // 1 -> Autodesk.DesignScript.Geometry.Point.ByCoordinates(x, x);
            OpenModel(@"core\node2code\unqualifiedName3.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes;
            var engine = CurrentDynamoModel.EngineController;

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

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

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

            Assert.IsNotNull(expr);
            Assert.AreEqual("Point.ByCoordinates(x, x)", expr.RightNode.ToString());
        }
コード例 #18
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());
        }
コード例 #19
0
        public void TestBasicNode2CodeWorkFlow1()
        {
            // 1 -> a -> x
            OpenModel(@"core\node2code\workflow1.dyn");
            var nodes  = ViewModel.CurrentSpaceViewModel.Model.Nodes;
            var engine = ViewModel.Model.EngineController;

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

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

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

            Assert.IsNotNull(expr1);
            Assert.IsNotNull(expr2);

            Assert.IsTrue(expr1.ToString().StartsWith("a = 1;"));
            Assert.IsTrue(expr2.ToString().StartsWith("x = a;"));
        }
コード例 #20
0
        public void TestUnqualifiedNameReplacer5()
        {
            // 1 -> Autodesk.DesignScript.Geometry.Point.ByCoordinates(x, x);
            OpenModel(@"core\node2code\unqualifiedName4.dyn");
            var nodes  = ViewModel.CurrentSpaceViewModel.Model.Nodes;
            var engine = ViewModel.Model.EngineController;

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

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

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

            Assert.IsNotNull(expr1);
            Assert.IsNotNull(expr2);

            Assert.IsTrue(expr1.RightNode.ToString().Equals("Point.ByCoordinates(0, 0)"));
            Assert.IsTrue(expr2.RightNode.ToString().Equals("Point.ByCoordinates(0, 0)"));
        }
コード例 #21
0
        public void TestParitition2()
        {
            // Select some nodes, and return a group of nodes. Each group could
            // be converted to code.
            //
            // 1 -> + -> 2 -> 3
            // |              ^
            // +--------------+
            OpenModel(@"core\node2code\partition2.dyn");
            var nodes  = CurrentDynamoModel.CurrentWorkspace.Nodes.OfType <CodeBlockNodeModel>();
            var groups = NodeToCodeUtils.GetCliques(nodes);

            Assert.IsTrue(groups.Count == 2);
            foreach (var group in groups)
            {
                if (group.Count == 2)
                {
                    Assert.IsNotNull(group.Find(n => n.NickName == "2"));
                    Assert.IsNotNull(group.Find(n => n.NickName == "3"));
                }
            }
        }