public void SwitchingToCustomWorkspaceWithSelectionShouldNotAllowGeometricOperations() { var model = ViewModel.Model; // The current DynamoModel instance. // Step 0: Create a new node in Home workspace. var addNode = new DSFunction(model.LibraryServices.GetFunctionDescriptor("+")); model.CurrentWorkspace.AddAndRegisterNode(addNode, false); Assert.AreEqual(model.CurrentWorkspace.Nodes.Count(), 1); // Step 1: Select the newly node, geometry operation should be enabled. DynamoSelection.Instance.Selection.Add(addNode); Assert.AreEqual(true, ViewModel.CurrentSpaceViewModel.HasSelection); Assert.AreEqual(true, ViewModel.CurrentSpaceViewModel.IsGeometryOperationEnabled); // Step 2: Open a Custom workspace. var customNodePath = Path.Combine(TestDirectory, @"core\CustomNodes\NoInput.dyf"); ViewModel.OpenCommand.Execute(customNodePath); var customWorkspace = model.Workspaces.FirstOrDefault(x => x is CustomNodeWorkspaceModel); Assert.IsNotNull(customWorkspace); // Step 3: Switch over from home workspace to custom workspace. Assert.IsTrue(ViewModel.CurrentSpaceViewModel.Model is HomeWorkspaceModel); ViewModel.CurrentWorkspaceIndex = 1; Assert.IsTrue(ViewModel.CurrentSpaceViewModel.Model is CustomNodeWorkspaceModel); // Step 4: Verify that the geometry operations are // disabled despite the fact that there is still selection. Assert.AreEqual(true, ViewModel.CurrentSpaceViewModel.HasSelection); Assert.AreEqual(false, ViewModel.CurrentSpaceViewModel.IsGeometryOperationEnabled); }
public void CanAddToSelectionCommand() { int numNodes = 100; // create 100 nodes, and select them as you go for (int i = 0; i < numNodes; i++) { var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); Assert.AreEqual(i + 1, CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); CurrentDynamoModel.AddToSelection(addNode); Assert.AreEqual(i + 1, DynamoSelection.Instance.Selection.Count); } }
private List<NodeModel> SetupNumberNodesAndPresets() { var model = CurrentDynamoModel; //create some numbers var numberNode1 = new DoubleInput(); numberNode1.Value = "1"; var numberNode2 = new DoubleInput(); numberNode2.Value = "2"; var addNode = new DSFunction(model.LibraryServices.GetFunctionDescriptor("+")); model.ExecuteCommand(new DynamoModel.CreateNodeCommand(numberNode1,0,0,true,false)); model.ExecuteCommand(new DynamoModel.CreateNodeCommand(numberNode2, 0, 0, true, false)); model.ExecuteCommand(new DynamoModel.CreateNodeCommand(addNode, 0, 0, true, false)); //connect them up model.ExecuteCommand(new DynamoModel.MakeConnectionCommand(numberNode1.GUID,0,PortType.Output,DynCmd.MakeConnectionCommand.Mode.Begin)); model.ExecuteCommand(new DynamoModel.MakeConnectionCommand(addNode.GUID,0,PortType.Input,DynCmd.MakeConnectionCommand.Mode.End)); model.ExecuteCommand(new DynamoModel.MakeConnectionCommand(numberNode2.GUID,0,PortType.Output,DynCmd.MakeConnectionCommand.Mode.Begin)); model.ExecuteCommand(new DynamoModel.MakeConnectionCommand(addNode.GUID,1,PortType.Input,DynCmd.MakeConnectionCommand.Mode.End)); Assert.AreEqual(model.CurrentWorkspace.Nodes.Count(), 3); Assert.AreEqual(model.CurrentWorkspace.Connectors.Count(), 2); DynamoSelection.Instance.ClearSelection(); //create the first state with the numbers selected DynamoSelection.Instance.Selection.Add(numberNode1); DynamoSelection.Instance.Selection.Add(numberNode2); var ids = DynamoSelection.Instance.Selection.OfType<NodeModel>().Select(x => x.GUID).ToList(); //create the preset from 2 nodes model.ExecuteCommand(new DynamoModel.AddPresetCommand("state1", "3", ids)); //change values numberNode1.Value = "2"; numberNode2.Value = "3"; DynamoSelection.Instance.ClearSelection(); DynamoSelection.Instance.Selection.Add(numberNode1); DynamoSelection.Instance.Selection.Add(numberNode2); ids = DynamoSelection.Instance.Selection.OfType<NodeModel>().Select(x => x.GUID).ToList(); model.ExecuteCommand(new DynamoModel.AddPresetCommand("state2", "5", ids)); return new List<NodeModel>() { numberNode1, numberNode2,addNode }; }
public void TooglePresetVisibilityWithUndoRedo() { //Create a Node var addNode = new DSFunction(ViewModel.Model.LibraryServices.GetFunctionDescriptor("+")); ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(addNode, false); //verify the node was created Assert.AreEqual(1, ViewModel.Model.CurrentWorkspace.Nodes.Count()); //Check the Preset option visibility. Assert.AreEqual(false, ViewModel.EnablePresetOptions); DynamoSelection.Instance.Selection.Add(addNode); var ids = DynamoSelection.Instance.Selection.OfType<NodeModel>().Select(x => x.GUID).ToList(); //create the preset from 2 nodes ViewModel.Model.ExecuteCommand(new DynamoModel.AddPresetCommand("state1", "a state with 2 numbers", ids)); //assert that the preset has been created Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Presets.Count(), 1); Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Presets.First().Nodes.Count(), 1); //Check the Preset option visibility. Assert.AreEqual(true, ViewModel.EnablePresetOptions); //undo the preset creation ViewModel.CurrentSpace.UndoRecorder.Undo(); Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Presets.Count(), 0); //Check the Preset option visibility. Assert.AreEqual(false, ViewModel.EnablePresetOptions); //redo the preset creation ViewModel.CurrentSpace.UndoRecorder.Redo(); Assert.AreEqual(ViewModel.Model.CurrentWorkspace.Presets.Count(), 1); //Check the Preset option visibility. Assert.AreEqual(true, ViewModel.EnablePresetOptions); }
public void CanSumTwoNumbers() { var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(new CodeBlockNodeModel("2", 100.0, 100.0, CurrentDynamoModel.LibraryServices, CurrentDynamoModel.CurrentWorkspace.ElementResolver), false); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(new CodeBlockNodeModel("2", 100.0, 100.0, CurrentDynamoModel.LibraryServices, CurrentDynamoModel.CurrentWorkspace.ElementResolver), false); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(new Watch { X = 100, Y = 300 }, false); ConnectorModel.Make(CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(1), CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(0), 0, 0); ConnectorModel.Make(CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(2), CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(0), 0, 1); ConnectorModel.Make(CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(0), CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(3), 0, 0); BeginRun(); Thread.Sleep(250); Assert.AreEqual(CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(3) is Watch, true); var w = (Watch)CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(3); Assert.AreEqual(4.0, w.CachedValue); }
public void CannotSavePopulatedWorkspaceIfSaveIsCalledWithoutSettingPath() { int numNodes = 100; for (int i = 0; i < numNodes; i++) { var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); Assert.AreEqual(i + 1, CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); } CurrentDynamoModel.CurrentWorkspace.Save(CurrentDynamoModel.EngineController.LiveRunnerRuntimeCore); Assert.AreEqual(CurrentDynamoModel.CurrentWorkspace.FileName, string.Empty); }
public void CanSaveAsFileWithNodesInIt() { int numNodes = 100; for (int i = 0; i < numNodes; i++) { var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); Assert.AreEqual(i + 1, CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); } string fn = "ruthlessTurtles.dyn"; string path = Path.Combine(TempFolder, fn); CurrentDynamoModel.CurrentWorkspace.SaveAs( path, CurrentDynamoModel.EngineController.LiveRunnerRuntimeCore); var tempFldrInfo = new DirectoryInfo(TempFolder); Assert.AreEqual(1, tempFldrInfo.GetFiles().Length); Assert.AreEqual(fn, tempFldrInfo.GetFiles()[0].Name); }
public void CanAddANodeByName() { var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); Assert.AreEqual(CurrentDynamoModel.CurrentWorkspace.Nodes.Count(), 1); }
public void TestDraggedNode() { var addNode = new DSFunction(ViewModel.Model.LibraryServices.GetFunctionDescriptor("+")) { X = 16, Y = 32 }; ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(addNode, false); NodeModel locatable = ViewModel.Model.CurrentWorkspace.Nodes.First(); var startPoint = new Point2D(8, 64); var dn = new WorkspaceViewModel.DraggedNode(locatable, startPoint); // Initial node position. Assert.AreEqual(16, locatable.X); Assert.AreEqual(32, locatable.Y); // Move the mouse cursor to move node. dn.Update(new Point2D(-16, 72)); Assert.AreEqual(-8, locatable.X); Assert.AreEqual(40, locatable.Y); }
internal MousePointManipulator(DSFunction node, DynamoManipulationExtension manipulatorContext) : base(node, manipulatorContext) { }
internal PointOnCurveManipulator(DSFunction node, DynamoManipulationExtension manipulatorContext) : base(node, manipulatorContext) { }
public void AddPresetShouldSetDirtyFlag() { var model = CurrentDynamoModel; //create some numbers var numberNode1 = new DoubleInput(); numberNode1.Value = "1"; var numberNode2 = new DoubleInput(); numberNode2.Value = "2"; var addNode = new DSFunction(model.LibraryServices.GetFunctionDescriptor("+")); //Check for Dirty flag Assert.AreEqual(model.CurrentWorkspace.HasUnsavedChanges,false); //add the nodes model.CurrentWorkspace.AddAndRegisterNode(numberNode1, false); model.CurrentWorkspace.AddAndRegisterNode(numberNode2, false); model.CurrentWorkspace.AddAndRegisterNode(addNode, false); //Check for Dirty flag Assert.AreEqual(model.CurrentWorkspace.HasUnsavedChanges, true); //Set the dirty flag to false. Mocking the save. model.CurrentWorkspace.HasUnsavedChanges = false; Assert.AreEqual(model.CurrentWorkspace.HasUnsavedChanges, false); //connect them up ConnectorModel.Make(numberNode1, addNode, 0, 0); ConnectorModel.Make(numberNode2, addNode, 0, 1); //Check for Dirty flag - After the connection the dirty flag should be set. Assert.AreEqual(model.CurrentWorkspace.HasUnsavedChanges, true); //Set the dirty flag to false. Mocking the save. model.CurrentWorkspace.HasUnsavedChanges = false; Assert.AreEqual(model.CurrentWorkspace.HasUnsavedChanges, false); Assert.AreEqual(model.CurrentWorkspace.Nodes.Count(), 3); Assert.AreEqual(model.CurrentWorkspace.Connectors.Count(), 2); //create the first state with the numbers selected DynamoSelection.Instance.Selection.Add(numberNode1); DynamoSelection.Instance.Selection.Add(numberNode2); var ids = DynamoSelection.Instance.Selection.OfType<NodeModel>().Select(x => x.GUID).ToList(); //create the preset from 2 nodes model.CurrentWorkspace.AddPreset( "state1", "3", ids); Assert.AreEqual(1, model.CurrentWorkspace.Presets.Count()); //change values numberNode1.Value = "2"; numberNode2.Value = "3"; DynamoSelection.Instance.ClearSelection(); DynamoSelection.Instance.Selection.Add(numberNode1); DynamoSelection.Instance.Selection.Add(numberNode2); ids = DynamoSelection.Instance.Selection.OfType<NodeModel>().Select(x => x.GUID).ToList(); model.CurrentWorkspace.AddPreset( "state2", "5", ids); //Check for Dirty flag - After the Preset the dirty flag should be set. Assert.AreEqual(model.CurrentWorkspace.HasUnsavedChanges, true); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { NodeModel node = null; var obj = JObject.Load(reader); var type = Type.GetType(obj["$type"].Value<string>()); var guid = Guid.Parse(obj["Uuid"].Value<string>()); var displayName = obj["DisplayName"].Value<string>(); //var x = obj["X"].Value<double>(); //var y = obj["Y"].Value<double>(); var inPorts = obj["InputPorts"].ToArray().Select(t => t.ToObject<PortModel>()).ToArray(); var outPorts = obj["OutputPorts"].ToArray().Select(t => t.ToObject<PortModel>()).ToArray(); var resolver = (IdReferenceResolver)serializer.ReferenceResolver; if (type == typeof(Function)) { var functionId = Guid.Parse(obj["FunctionUuid"].Value<string>()); node = manager.CreateCustomNodeInstance(functionId); RemapPorts(node, inPorts, outPorts, resolver); } else if(type == typeof(CodeBlockNodeModel)) { var code = obj["Code"].Value<string>(); node = new CodeBlockNodeModel(code, guid, 0.0, 0.0, libraryServices, ElementResolver); RemapPorts(node, inPorts, outPorts, resolver); } else if(typeof(DSFunctionBase).IsAssignableFrom(type)) { var mangledName = obj["FunctionName"].Value<string>(); var description = libraryServices.GetFunctionDescriptor(mangledName); if(type == typeof(DSVarArgFunction)) { node = new DSVarArgFunction(description); // The node syncs with the function definition. // Then we need to make the inport count correct var varg = (DSVarArgFunction)node; varg.VarInputController.SetNumInputs(inPorts.Count()); } else if(type == typeof(DSFunction)) { node = new DSFunction(description); } RemapPorts(node, inPorts, outPorts, resolver); } else if (type == typeof(DSVarArgFunction)) { var functionId = Guid.Parse(obj["FunctionUuid"].Value<string>()); node = manager.CreateCustomNodeInstance(functionId); RemapPorts(node, inPorts, outPorts, resolver); } else { node = (NodeModel)obj.ToObject(type); } node.GUID = guid; node.NickName = displayName; //node.X = x; //node.Y = y; // Add references to the node and the ports to the reference resolver, // so that they are available for entities which are deserialized later. serializer.ReferenceResolver.AddReference(serializer.Context, node.GUID.ToString(), node); foreach(var p in node.InPorts) { serializer.ReferenceResolver.AddReference(serializer.Context, p.GUID.ToString(), p); } foreach (var p in node.OutPorts) { serializer.ReferenceResolver.AddReference(serializer.Context, p.GUID.ToString(), p); } return node; }
public void CanCreatePreset() { //Create a Node var numberNode = new DoubleInput(); numberNode.Value = "1"; ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(numberNode, false); //verify the node was created Assert.AreEqual(1, ViewModel.Model.CurrentWorkspace.Nodes.Count()); DynamoSelection.Instance.Selection.Add(numberNode); //Check for input nodes Assert.AreEqual(true, ViewModel.GetInputNodesFromSelectionForPresets().Any()); var addNode = new DSFunction(ViewModel.Model.LibraryServices.GetFunctionDescriptor("+")); ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(addNode, false); DynamoSelection.Instance.ClearSelection(); DynamoSelection.Instance.Selection.Add(addNode); Assert.AreEqual(false, ViewModel.GetInputNodesFromSelectionForPresets().Any()); DynamoSelection.Instance.Selection.Add(numberNode); //Check for input nodes Assert.AreEqual(true, ViewModel.GetInputNodesFromSelectionForPresets().Any()); }
public void SelectionDoesNotChangeWhenAddingAlreadySelectedNode() { int numNodes = 100; // create 100 nodes, and select them as you go for (int i = 0; i < numNodes; i++) { var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); Assert.AreEqual(i + 1, CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); CurrentDynamoModel.AddToSelection(CurrentDynamoModel.CurrentWorkspace.Nodes.Last()); Assert.AreEqual(i + 1, DynamoSelection.Instance.Selection.Count); } // the number selected stays the same for (int i = 0; i < numNodes; i++) { CurrentDynamoModel.AddToSelection(CurrentDynamoModel.CurrentWorkspace.Nodes.Last()); Assert.AreEqual(numNodes, DynamoSelection.Instance.Selection.Count); } }
public void CanClearWorkspaceWithNodes() { Assert.AreEqual(0, CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(new DoubleInput(), false); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(new DoubleInput(), false); Assert.AreEqual(3, CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); CurrentDynamoModel.ClearCurrentWorkspace(); Assert.AreEqual(0, CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); }
public void CanCopydAndPaste2NodesWithRightOffset() { var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); addNode.Height = 2; addNode.Width = 2; addNode.CenterX = 3; addNode.CenterY = 2; CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); CurrentDynamoModel.AddToSelection(addNode); addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); addNode.Height = 2; addNode.Width = 2; addNode.CenterX = 6; addNode.CenterY = 8; CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); CurrentDynamoModel.AddToSelection(addNode); CurrentDynamoModel.Copy(); Assert.AreEqual(2, CurrentDynamoModel.ClipBoard.Count); CurrentDynamoModel.Paste(); Assert.AreEqual(4, CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); Assert.AreEqual(22, CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(2).X); Assert.AreEqual(21, CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(2).Y); Assert.AreEqual(25, CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(3).X); Assert.AreEqual(27, CurrentDynamoModel.CurrentWorkspace.Nodes.ElementAt(3).Y); }
public void Defect_MAGN_3599() { // Create the initial code block node. var codeBlockNode = CreateCodeBlockNode(); UpdateCodeBlockNodeContent(codeBlockNode, @"Circle.ByCenterPointRadius(pt,5)"); // Create the Point.Origin node. var pointOriginNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("Point.Origin")); var command = new DynCmd.CreateNodeCommand(pointOriginNode, 0, 0, true, false); CurrentDynamoModel.ExecuteCommand(command); // Connect the two nodes ConnectorModel.Make(pointOriginNode, codeBlockNode, 0, 0); Assert.AreEqual(1, codeBlockNode.InPortData.Count); // Update the code block node UpdateCodeBlockNodeContent(codeBlockNode, "pt = Point.ByCoordinates(0,0,0);\nCircle.ByCenterPointRadius(pt,5)"); Assert.AreEqual(0, codeBlockNode.InPortData.Count); }
public void CanAdd100NodesToClipboardAndPaste3Times() { int numNodes = 100; // create 100 nodes, and select them as you go for (int i = 0; i < numNodes; i++) { var addNode = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("+")); CurrentDynamoModel.CurrentWorkspace.AddAndRegisterNode(addNode, false); Assert.AreEqual(i + 1, CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); CurrentDynamoModel.AddToSelection(CurrentDynamoModel.CurrentWorkspace.Nodes.Last()); Assert.AreEqual(i + 1, DynamoSelection.Instance.Selection.Count); } CurrentDynamoModel.Copy(); Assert.AreEqual(numNodes, CurrentDynamoModel.ClipBoard.Count); int numPastes = 3; for (int i = 1; i <= numPastes; i++) { CurrentDynamoModel.Paste(); Assert.AreEqual(numNodes, CurrentDynamoModel.ClipBoard.Count); Assert.AreEqual(numNodes * (i + 1), CurrentDynamoModel.CurrentWorkspace.Nodes.Count()); } }
public void TestDefaultArgumentTooltip() { var node = new DSFunction(CurrentDynamoModel.LibraryServices.GetFunctionDescriptor("Autodesk.DesignScript.Geometry.Point.ByCoordinates@double,double")); CurrentDynamoModel.ExecuteCommand(new Dynamo.Models.DynamoModel.CreateNodeCommand(node, 0, 0, true, false)); Assert.IsTrue(node.InPorts[0].ToolTipContent.Equals("double\nDefault value : 0")); node.InPorts[0].UsingDefaultValue = false; Assert.IsTrue(node.InPorts[0].ToolTipContent.Equals("double\nDefault value : 0 (disabled)")); }
public void CanCreatePreset() { // Positive test for input node // Create a valid input node var numberNode = new DoubleInput(); numberNode.Value = "1"; ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(numberNode, false); // Verify the node was created and select it Assert.AreEqual(1, ViewModel.Model.CurrentWorkspace.Nodes.Count()); DynamoSelection.Instance.Selection.Add(numberNode); // Check for input nodes in selection (should pass) Assert.AreEqual(true, ViewModel.GetInputNodesFromSelectionForPresets().Any()); // Negative test for input node // Create a non-input node and select it var addNode = new DSFunction(ViewModel.Model.LibraryServices.GetFunctionDescriptor("+")); ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(addNode, false); DynamoSelection.Instance.ClearSelection(); DynamoSelection.Instance.Selection.Add(addNode); // Check for input nodes in selection (should fail) Assert.AreEqual(false, ViewModel.GetInputNodesFromSelectionForPresets().Any()); // Re-test positive test for input node // Select the first created input node DynamoSelection.Instance.Selection.Add(numberNode); // Check for input nodes in selection (should pass) Assert.AreEqual(true, ViewModel.GetInputNodesFromSelectionForPresets().Any()); // Positive test for File Path node // Create a File Path input node and select it var filePathNode = new Filename(); filePathNode.Value = "C:\\foo.txt"; ViewModel.Model.CurrentWorkspace.AddAndRegisterNode(filePathNode, false); DynamoSelection.Instance.ClearSelection(); DynamoSelection.Instance.Selection.Add(filePathNode); // Check for input nodes in selection (should pass) Assert.AreEqual(true, ViewModel.GetInputNodesFromSelectionForPresets().Any()); }