public void CanCollapseNodesAndGetSameResult() { var model = Controller.DynamoModel; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse.dyn"); model.Open(openPath); var watchNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Watch>(); var numNodesPreCollapse = model.CurrentWorkspace.Nodes.Count; Controller.RunExpression(); var valuePreCollapse = watchNode.CachedValue; var nodesToCollapse = new[] { "1da395b9-2539-4705-a479-1f6e575df01d", "b8130bf5-dd14-4784-946d-9f4705df604e", "a54c7cfa-450a-4edc-b7a5-b3e15145a9e1" }; foreach (var guid in nodesToCollapse) { var node = model.Nodes.First(x => x.GUID == Guid.Parse(guid)); model.AddToSelection(node); } NodeCollapser.Collapse( DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); var numNodesPostCollapse = model.CurrentWorkspace.Nodes.Count; Assert.AreNotEqual(numNodesPreCollapse, numNodesPostCollapse); Assert.AreEqual(nodesToCollapse.Length, numNodesPreCollapse - numNodesPostCollapse + 1); Controller.RunExpression(); var valuePostCollapse = watchNode.CachedValue; // Ensure the values are equal and both 65. var svPreCollapse = ((long)valuePreCollapse.Data); var svPostCollapse = ((long)valuePostCollapse.Data); Assert.AreEqual(65, svPreCollapse); Assert.AreEqual(svPreCollapse, svPostCollapse); }
public void GitHub_461_DeleteNodesFromCustomNodeWorkspaceAfterCollapse() { var model = ViewModel.Model; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse.dyn"); ViewModel.OpenCommand.Execute(openPath); var nodesToCollapse = new[] { "1da395b9-2539-4705-a479-1f6e575df01d", "b8130bf5-dd14-4784-946d-9f4705df604e", "a54c7cfa-450a-4edc-b7a5-b3e15145a9e1" }; foreach ( var node in nodesToCollapse.Select(guid => model.CurrentWorkspace.NodeFromWorkspace(guid))) { model.AddToSelection(node); } NodeCollapser.Collapse(ViewModel.Model, DynamoSelection.Instance.Selection.Where(x => x is NodeModel) .Select(x => (x as NodeModel)), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest2__", Success = true }); ViewModel.GoToWorkspace( ViewModel.Model.CustomNodeManager.GetGuidFromName("__CollapseTest2__")); var workspace = model.CurrentWorkspace; Assert.AreEqual(6, workspace.Nodes.Count); var modelsToDelete = new List <ModelBase>(); var addition = workspace.FirstNodeFromWorkspace <DSFunction>(); Assert.IsNotNull(addition); Assert.AreEqual("+", addition.NickName); modelsToDelete.Add(addition); model.DeleteModelInternal(modelsToDelete); Assert.AreEqual(5, model.CurrentWorkspace.Nodes.Count); }
public void GitHub_461_DeleteNodesFromCustomNodeWorkspaceAfterCollapse() { var model = Controller.DynamoModel; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse.dyn"); model.Open(openPath); var nodesToCollapse = new[] { "1da395b9-2539-4705-a479-1f6e575df01d", "b8130bf5-dd14-4784-946d-9f4705df604e", "a54c7cfa-450a-4edc-b7a5-b3e15145a9e1" }; foreach (var guid in nodesToCollapse) { var node = model.Nodes.First(x => x.GUID == Guid.Parse(guid)); model.AddToSelection(node); } NodeCollapser.Collapse( DynamoSelection.Instance.Selection.Where(x => x is NodeModel) .Select(x => (x as NodeModel)), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest2__", Success = true }); Controller.DynamoViewModel.GoToWorkspace( Controller.CustomNodeManager.GetGuidFromName("__CollapseTest2__")); var numNodes = model.CurrentWorkspace.Nodes.Count; List <ModelBase> modelsToDelete = new List <ModelBase>(); modelsToDelete.Add(model.CurrentWorkspace.FirstNodeFromWorkspace <Addition>()); model.DeleteModelInternal(modelsToDelete); Assert.AreEqual(numNodes - 1, model.CurrentWorkspace.Nodes.Count); }
public void CanCollapseNodesWithDefaultValues() { var model = ViewModel.Model; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse-defaults.dyn"); RunModel(openPath); //Confirm that everything is working OK. ViewModel.Model.RunExpression(); var minNode = model.CurrentWorkspace.NodeFromWorkspace("13f58ca4-4e48-4757-b16a-45b971a6d7fc"); var numNode = model.CurrentWorkspace.NodeFromWorkspace("4b6487e1-1bcf-47a6-a6fb-ea3122a303af"); Assert.AreEqual(2, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(1, model.CurrentWorkspace.Connectors.Count); AssertPreviewValue("13f58ca4-4e48-4757-b16a-45b971a6d7fc", 10); model.AddToSelection(minNode); model.AddToSelection(numNode); NodeCollapser.Collapse(ViewModel.Model, DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); Assert.AreEqual(1, model.CurrentWorkspace.Nodes.Count); ViewModel.Model.RunExpression(); var collapsedNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Function>(); AssertPreviewValue(collapsedNode.GUID.ToString(), 10); }
public void CanCollapseWith1NodeHoleInSelection() { var model = ViewModel.Model; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse-function.dyn"); RunModel(openPath); //Confirm that everything is working OK. ViewModel.Model.RunExpression(); var mulNode = model.CurrentWorkspace.NodeFromWorkspace("7bae9908-6e44-41a4-8b9a-e6cd58791194"); AssertPreviewValue(mulNode.GUID.ToString(), 0); foreach (var node in model.CurrentWorkspace.Nodes.Where( x => x.GUID.ToString() != "34d7a656-338d-43bd-bb3d-224515a855eb")) { model.AddToSelection(node); } NodeCollapser.Collapse(ViewModel.Model, DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); Assert.AreEqual(2, model.CurrentWorkspace.Nodes.Count); ViewModel.Model.RunExpression(); var collapsedNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Function>(); AssertPreviewValue(collapsedNode.GUID.ToString(), 0); }
public void CanCollapseWith1NodeHoleInSelection() { var model = Controller.DynamoModel; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse-function.dyn"); model.Open(openPath); //Confirm that everything is working OK. Controller.RunExpression(); var mulNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Multiplication>(); Assert.IsInstanceOf <FScheme.Value.Number>(mulNode.OldValue); Assert.AreEqual(0, (mulNode.OldValue as FScheme.Value.Number).Item); foreach (var node in model.CurrentWorkspace.Nodes.Where(x => !(x is Addition))) { model.AddToSelection(node); } NodeCollapser.Collapse( DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); Assert.AreEqual(2, model.CurrentWorkspace.Nodes.Count); Controller.RunExpression(); var collapsedNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Function>(); Assert.IsInstanceOf <FScheme.Value.Number>(collapsedNode.OldValue); Assert.AreEqual(0, (collapsedNode.OldValue as FScheme.Value.Number).Item); }
public void CanCollapseNodesWithDefaultValues() { var model = Controller.DynamoModel; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); string openPath = Path.Combine(examplePath, "collapse-defaults.dyn"); model.Open(openPath); //Confirm that everything is working OK. Controller.RunExpression(); var minNode = model.CurrentWorkspace.FirstNodeFromWorkspace <ListMin>(); var numNode = model.CurrentWorkspace.FirstNodeFromWorkspace <DoubleInput>(); Assert.IsInstanceOf <FScheme.Value.Number>(minNode.OldValue); Assert.AreEqual(10, (minNode.OldValue as FScheme.Value.Number).Item); model.AddToSelection(minNode); model.AddToSelection(numNode); NodeCollapser.Collapse( DynamoSelection.Instance.Selection.OfType <NodeModel>(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); Assert.AreEqual(1, model.CurrentWorkspace.Nodes.Count); Controller.RunExpression(); var collapsedNode = model.CurrentWorkspace.FirstNodeFromWorkspace <Function>(); Assert.IsInstanceOf <FScheme.Value.Number>(collapsedNode.OldValue); Assert.AreEqual(10, (collapsedNode.OldValue as FScheme.Value.Number).Item); }
public void CanCollapseAndUndoRedo() { var model = ViewModel.Model; var examplePath = Path.Combine(GetTestDirectory(), @"core\collapse\"); ViewModel.OpenCommand.Execute(Path.Combine(examplePath, "collapse-number-chain.dyn")); // Ensure all the nodes we are looking for are actually there. Assert.AreEqual(11, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(10, model.CurrentWorkspace.Connectors.Count); var existenceMap = new Dictionary <string, bool> { { "5a503c02-13a7-4def-9fb6-52101117219e", true }, { "6e7bdd5a-6c3c-4588-bb7d-bb49c969812b", true }, { "da2cbc80-a278-4699-96fa-a22d7762a42d", true }, { "28cff154-ef78-43fa-bcc9-f86e00ce2ced", true }, { "7ad3d045-c620-4817-8723-afd3c266555b", true }, { "e8388f0d-2438-4b8b-87d1-f473c9e2c9a8", true }, { "fed04d43-aad6-4782-a3c4-a86925e6b538", true }, { "5e0d6637-5156-4b60-b49d-3c9aedd71884", true }, { "98350887-4839-4ece-a4ad-37137cb11f52", true }, { "8f4a460d-dada-4ecd-a0ca-9adb32d36f12", true }, { "9cbbfa9c-fb5d-4a18-8d4b-5a02d842724e", true } }; this.VerifyModelExistence(existenceMap); string[] guids = { "5e0d6637-5156-4b60-b49d-3c9aedd71884", // Addition "98350887-4839-4ece-a4ad-37137cb11f52", // Addition "28cff154-ef78-43fa-bcc9-f86e00ce2ced", // Double input "7ad3d045-c620-4817-8723-afd3c266555b", // Double input }; List <NodeModel> selectionSet = new List <NodeModel>(); var workspace = model.CurrentWorkspace; foreach (string guid in guids) { var m = workspace.GetModelInternal(Guid.Parse(guid)); selectionSet.Add(m as NodeModel); } // Making sure we do not have any Function node at this point. Assert.IsNull(model.CurrentWorkspace.FirstNodeFromWorkspace <Function>()); Assert.AreEqual(false, model.CurrentWorkspace.CanUndo); Assert.AreEqual(false, model.CurrentWorkspace.CanRedo); NodeCollapser.Collapse(ViewModel.Model, selectionSet.AsEnumerable(), model.CurrentWorkspace, new FunctionNamePromptEventArgs { Category = "Testing", Description = "", Name = "__CollapseTest__", Success = true }); // Making sure we have a Function node after the conversion. Assert.IsNotNull(model.CurrentWorkspace.FirstNodeFromWorkspace <Function>()); // Make sure we have 8 nodes left (11 - 4 + 1). Assert.AreEqual(8, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(8, model.CurrentWorkspace.Connectors.Count); existenceMap.Clear(); existenceMap.Add("5a503c02-13a7-4def-9fb6-52101117219e", true); existenceMap.Add("6e7bdd5a-6c3c-4588-bb7d-bb49c969812b", true); existenceMap.Add("da2cbc80-a278-4699-96fa-a22d7762a42d", true); existenceMap.Add("28cff154-ef78-43fa-bcc9-f86e00ce2ced", false); existenceMap.Add("7ad3d045-c620-4817-8723-afd3c266555b", false); existenceMap.Add("e8388f0d-2438-4b8b-87d1-f473c9e2c9a8", true); existenceMap.Add("fed04d43-aad6-4782-a3c4-a86925e6b538", true); existenceMap.Add("5e0d6637-5156-4b60-b49d-3c9aedd71884", false); existenceMap.Add("98350887-4839-4ece-a4ad-37137cb11f52", false); existenceMap.Add("8f4a460d-dada-4ecd-a0ca-9adb32d36f12", true); existenceMap.Add("9cbbfa9c-fb5d-4a18-8d4b-5a02d842724e", true); this.VerifyModelExistence(existenceMap); // Try undoing the conversion operation. Assert.AreEqual(true, model.CurrentWorkspace.CanUndo); Assert.AreEqual(false, model.CurrentWorkspace.CanRedo); model.CurrentWorkspace.Undo(); Assert.AreEqual(false, model.CurrentWorkspace.CanUndo); Assert.AreEqual(true, model.CurrentWorkspace.CanRedo); // Now it should have gone back to 11 nodes. Assert.AreEqual(11, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(10, model.CurrentWorkspace.Connectors.Count); existenceMap.Clear(); existenceMap.Add("5a503c02-13a7-4def-9fb6-52101117219e", true); existenceMap.Add("6e7bdd5a-6c3c-4588-bb7d-bb49c969812b", true); existenceMap.Add("da2cbc80-a278-4699-96fa-a22d7762a42d", true); existenceMap.Add("28cff154-ef78-43fa-bcc9-f86e00ce2ced", true); existenceMap.Add("7ad3d045-c620-4817-8723-afd3c266555b", true); existenceMap.Add("e8388f0d-2438-4b8b-87d1-f473c9e2c9a8", true); existenceMap.Add("fed04d43-aad6-4782-a3c4-a86925e6b538", true); existenceMap.Add("5e0d6637-5156-4b60-b49d-3c9aedd71884", true); existenceMap.Add("98350887-4839-4ece-a4ad-37137cb11f52", true); existenceMap.Add("8f4a460d-dada-4ecd-a0ca-9adb32d36f12", true); existenceMap.Add("9cbbfa9c-fb5d-4a18-8d4b-5a02d842724e", true); this.VerifyModelExistence(existenceMap); // Try redoing the conversion. model.CurrentWorkspace.Redo(); Assert.AreEqual(true, model.CurrentWorkspace.CanUndo); Assert.AreEqual(false, model.CurrentWorkspace.CanRedo); // It should have gone back to 8 nodes. Assert.AreEqual(8, model.CurrentWorkspace.Nodes.Count); Assert.AreEqual(8, model.CurrentWorkspace.Connectors.Count); existenceMap.Clear(); existenceMap.Add("5a503c02-13a7-4def-9fb6-52101117219e", true); existenceMap.Add("6e7bdd5a-6c3c-4588-bb7d-bb49c969812b", true); existenceMap.Add("da2cbc80-a278-4699-96fa-a22d7762a42d", true); existenceMap.Add("28cff154-ef78-43fa-bcc9-f86e00ce2ced", false); existenceMap.Add("7ad3d045-c620-4817-8723-afd3c266555b", false); existenceMap.Add("e8388f0d-2438-4b8b-87d1-f473c9e2c9a8", true); existenceMap.Add("fed04d43-aad6-4782-a3c4-a86925e6b538", true); existenceMap.Add("5e0d6637-5156-4b60-b49d-3c9aedd71884", false); existenceMap.Add("98350887-4839-4ece-a4ad-37137cb11f52", false); existenceMap.Add("8f4a460d-dada-4ecd-a0ca-9adb32d36f12", true); existenceMap.Add("9cbbfa9c-fb5d-4a18-8d4b-5a02d842724e", true); this.VerifyModelExistence(existenceMap); }
/// <summary> /// Collapse a set of nodes in this workspace /// </summary> /// <param name="selectedNodes"> The function definition for the user-defined node </param> internal void CollapseNodes(IEnumerable <NodeModel> selectedNodes) { NodeCollapser.Collapse(DynamoViewModel.Model, selectedNodes, this.Model); }
/// <summary> /// Collapse a set of nodes in the current workspace. Has the side effects of prompting the user /// first in order to obtain the name and category for the new node, /// writes the function to a dyf file, adds it to the FunctionDict, adds it to search, and compiles and /// places the newly created symbol (defining a lambda) in the Controller's FScheme Environment. /// </summary> /// <param name="selectedNodes"> The function definition for the user-defined node </param> internal void CollapseNodes(IEnumerable <NodeModel> selectedNodes) { NodeCollapser.Collapse(selectedNodes, dynSettings.Controller.DynamoViewModel.CurrentSpace); }