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]); }
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()); }
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()); }
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()); }
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 })); }
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()); }
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); }
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); }
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)); }
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)); }
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)")); }
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")); }
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()); }
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()); }
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()); }
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); }
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()); }
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()); }
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;")); }
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)")); }
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")); } } }