public void ResetReferenceWithExistingGraphControls() { // Set the GraphTypes IoC.GetAllInstances = type => new IGraphType[] { new PixelDiff() }; // Get the parent PipelineVM and add DiagramNode var vm = MainViewModelTest.GetInstance().PipelineViewModel; var node = new NodeViewModel(new DiagramNode(), vm); vm.Nodes.Add(node); vm.Parent.Model.Graph.AddNode(node.Model); var DVM = new DiagramViewModel((DiagramNode)vm.Nodes.Single().Model); // Add Input Node for DiagramNode with 3 Outputs. var sourceNode = new AnonymousNode(AnonNodeHelper.SourceNode, 3); var inputs = sourceNode.Process(null, 0); // Add reference video to node. var reference = new Node.Input { Source = sourceNode.Outputs[0] }; DVM.NodeModel.Inputs.Add(reference); // Add other Outputs as Inputs to DiagramNode. var video = new Node.Input { Source = sourceNode.Outputs[1] }; DVM.NodeModel.Inputs.Add(video); var altRef = new Node.Input { Source = sourceNode.Outputs[2] }; DVM.NodeModel.Inputs.Add(altRef); DVM.Reference = DVM.Videos.ElementAt(0); DVM.ChosenVideo = DVM.Videos.ElementAt(1); DVM.AddGraph(); var dgvm = DVM.Graphs.Single(); // ChosenType = PixelDifference dgvm.CurrentType = dgvm.AvailableTypes.ElementAt(0); // porcess one frame with first reference DVM.NodeModel.ProcessCore(inputs, 0); DVM.Handle(null); DVM.Reference = DVM.Videos.ElementAt(2); // porcess one frame with second reference DVM.NodeModel.ProcessCore(inputs, 1); DVM.Handle(null); Assert.Equal(dgvm.AvailableTypes.ElementAt(0).Model.Process(inputs[1], inputs[0]), dgvm.Model.Data[0].Value); Assert.Equal(dgvm.AvailableTypes.ElementAt(0).Model.Process(inputs[1], inputs[2]), dgvm.Model.Data[1].Value); }
public void CanDeleteLine() { // Set the GraphTypes IoC.GetAllInstances = type => new IGraphType[] { new PixelDiff() }; // Get the parent PipelineVM and add DiagramNode var vm = MainViewModelTest.GetInstance().PipelineViewModel; var node = new NodeViewModel(new DiagramNode(), vm); vm.Nodes.Add(node); vm.Parent.Model.Graph.AddNode(node.Model); var DVM = new DiagramViewModel((DiagramNode)vm.Nodes.Single().Model); // Add Input Node for DiagramNode with 3 Outputs. var sourceNode = new AnonymousNode(AnonNodeHelper.SourceNode, 3); var inputs = sourceNode.Process(null, 0); // Add reference video to node. var reference = new Node.Input { Source = sourceNode.Outputs[0] }; DVM.NodeModel.Inputs.Add(reference); // Add other Outputs as Inputs to DiagramNode. var video = new Node.Input { Source = sourceNode.Outputs[1] }; DVM.NodeModel.Inputs.Add(video); var annVid = new Node.Input { Source = sourceNode.Outputs[2] }; DVM.NodeModel.Inputs.Add(annVid); DVM.Reference = DVM.Videos.ElementAt(0); DVM.ChosenVideo = DVM.Videos.ElementAt(1); DVM.AddGraph(); var dgvm = DVM.Graphs.Single(); // Set the ChosenType of the DiagramGraphViewModel to PixelDifference dgvm.CurrentType = dgvm.AvailableTypes.First(); Assert.NotEmpty(DVM.Lines); Assert.NotEmpty(DVM.NodeModel.Graphs); DVM.DeleteGraph(dgvm); Assert.Empty(DVM.Lines); Assert.Empty(DVM.NodeModel.Graphs); }
public void Test50() { // Some necessary initializations. MainViewModel mvm = MainViewModelTest.GetInstance(); var windowManMock = new Mock <IWindowManagerEx>(); var vm = MainViewModelTest.GetInstance(cont => cont.ComposeExportedValue <IWindowManagerEx>(windowManMock.Object)); var conductorMock = new Mock <IConductor>(); // Step 1: Create simple pipeline. // // [color]---[overlay] // \ / // X // / \ // [noise]---[diagram] NoiseInputNode noise = new NoiseInputNode(); mvm.Model.Graph.AddNode(noise); ColorInputNode color = new ColorInputNode(); mvm.Model.Graph.AddNode(color); DiagramNode diagram = new DiagramNode(); diagram.Inputs.Add(new Node.Input()); diagram.Inputs.Add(new Node.Input()); mvm.Model.Graph.AddNode(diagram); OverlayNode overlay = new OverlayNode(); mvm.Model.Graph.AddNode(overlay); Assert.Contains(noise, mvm.Model.Graph.Nodes); Assert.Contains(color, mvm.Model.Graph.Nodes); Assert.Contains(diagram, mvm.Model.Graph.Nodes); Assert.Contains(overlay, mvm.Model.Graph.Nodes); mvm.Model.Graph.AddEdge(noise.Outputs[0], overlay.Inputs[0]); mvm.Model.Graph.AddEdge(noise.Outputs[0], diagram.Inputs[0]); mvm.Model.Graph.AddEdge(color.Outputs[0], overlay.Inputs[1]); mvm.Model.Graph.AddEdge(color.Outputs[0], diagram.Inputs[1]); Assert.Equal(noise.Outputs[0], overlay.Inputs[0].Source); Assert.Equal(noise.Outputs[0], diagram.Inputs[0].Source); Assert.Equal(color.Outputs[0], overlay.Inputs[1].Source); Assert.Equal(color.Outputs[0], diagram.Inputs[1].Source); // Step 2: Disable diagram node and open overlay node. diagram.IsEnabled = false; IGraphType pixelDiff = new PixelDiff(); IGraphType psnr = new PeakSignalNoiseRatio(); IoC.GetAllInstances = type => new List <IGraphType> { pixelDiff, psnr }; var overlayWindow = new OverlayViewModel(overlay) { Parent = conductorMock.Object }; var diagramWindow = new DiagramViewModel(diagram) { Parent = conductorMock.Object }; ((IActivate)overlayWindow).Activate(); conductorMock.Setup(c => c.DeactivateItem(overlayWindow, true)) .Callback(() => ((IDeactivate)overlayWindow).Deactivate(close: true)) .Verifiable(); mvm.OpenWindow(overlayWindow); Assert.Contains(overlayWindow, mvm.OpenWindows); // Step 3: Start pipeline and add an overlay in the overlay node. mvm.Model.Start(mvm.Model.Graph.Nodes); overlay.Type = new ArtifactsOverlay(); // Step 4: Remove selected overlay. overlay.Type = new NoOverlay(); // Step 5: Stop pipeline and close overlay node. mvm.Model.Stop(); mvm.CloseWindows(overlay); Assert.DoesNotContain(overlayWindow, mvm.OpenWindows); // Step 6: Re-enable diagram node and open it. diagram.IsEnabled = true; mvm.OpenWindow(diagramWindow); Assert.Contains(diagramWindow, mvm.OpenWindows); // Step 7: Choose a reference video and add a diagram graph. diagramWindow.Reference = new Tuple <string, Node.Input>(diagramWindow.GetVideoName(diagram.Inputs[0]), diagram.Inputs[0]); diagramWindow.ChosenVideo = new Tuple <string, Node.Input>(diagramWindow.GetVideoName(diagram.Inputs[1]), diagram.Inputs[1]); diagramWindow.AddGraph(); diagramWindow.Graphs.ElementAt(0).CurrentType = new GraphTypeViewModel(pixelDiff); // Step 8: Start pipeline again and change diagram graph type. mvm.Model.Start(mvm.Model.Graph.Nodes); diagramWindow.Graphs.ElementAt(0).CurrentType = new GraphTypeViewModel(psnr); // Step 9: Remove the diagram graph. DiagramGraphViewModel dgvm = diagramWindow.Graphs.ElementAt(0); diagramWindow.DeleteGraph(dgvm); Assert.DoesNotContain(dgvm, diagramWindow.Graphs); }
public void ShowOnlyAvailableTypes() { // Set the GraphTypes IoC.GetAllInstances = type => new IGraphType[] { new PixelDiff(), new DecisionDiff(), new IntraBlockFrequency(), new PeakSignalNoiseRatio() }; // Get the parent PipelineVM and add DiagramNode var vm = MainViewModelTest.GetInstance().PipelineViewModel; var node = new NodeViewModel(new DiagramNode(), vm); vm.Nodes.Add(node); vm.Parent.Model.Graph.AddNode(node.Model); var DVM = new DiagramViewModel((DiagramNode)vm.Nodes.Single().Model); // Add Input Node for DiagramNode with 3 Outputs. var sourceNode = new AnonymousNode(AnonNodeHelper.SourceNode, 3); var inputs = sourceNode.Process(null, 0); // Add reference video to node. var reference = new Node.Input { Source = sourceNode.Outputs[0] }; DVM.NodeModel.Inputs.Add(reference); // Add other Outputs as Inputs to DiagramNode. var video = new Node.Input { Source = sourceNode.Outputs[1] }; DVM.NodeModel.Inputs.Add(video); var annVid = new Node.Input { Source = sourceNode.Outputs[2] }; DVM.NodeModel.Inputs.Add(annVid); DVM.ChosenVideo = DVM.Videos.ElementAt(1); DVM.AddGraph(); var dgvmNoRefNoLog = DVM.Graphs.Last(); Assert.False(dgvmNoRefNoLog.AvailableTypes.ToList().Exists(type => type.Model.DependsOnReference || type.Model.DependsOnLogfile)); sourceNode.SettableOutputHasLogfile = true; DVM.ChosenVideo = DVM.Videos.ElementAt(2); DVM.AddGraph(); Assert.NotNull(DVM.Graphs); var dgvmLogNoRef = DVM.Graphs.Last(); Assert.False(dgvmLogNoRef.AvailableTypes.ToList().Exists(type => type.Model.DependsOnReference)); Assert.True(dgvmLogNoRef.AvailableTypes.ToList().Exists(type => type.Model.DependsOnLogfile)); sourceNode.SettableOutputHasLogfile = false; DVM.Reference = DVM.Videos.ElementAt(0); DVM.ChosenVideo = DVM.Videos.ElementAt(1); DVM.AddGraph(); var dgvmLoggedRefNoLog = DVM.Graphs.Last(); Assert.True(dgvmLoggedRefNoLog.AvailableTypes.ToList().Exists(type => type.Model.DependsOnReference)); Assert.False(dgvmLoggedRefNoLog.AvailableTypes.ToList().Exists(type => type.Model.DependsOnLogfile)); sourceNode.SettableOutputHasLogfile = true; DVM.ChosenVideo = DVM.Videos.ElementAt(2); DVM.AddGraph(); var dgvmLoggedRefLog = DVM.Graphs.Last(); Assert.True(dgvmLoggedRefLog.AvailableTypes.ToList().Exists(type => type.Model.DependsOnReference)); Assert.True(dgvmLoggedRefLog.AvailableTypes.ToList().Exists(type => type.Model.DependsOnLogfile)); Assert.True(dgvmLoggedRefLog.AvailableTypes.ToList().Exists(type => type.Model.DependsOnAnnotatedReference)); }
public void DiagramNodeDeleteNode() { IoC.GetAllInstances = type => new IGraphType[] { new PixelDiff() }; var posMock = new Mock <IGetPosition>(); posMock.Setup(p => p.GetElementSize(It.IsAny <IViewAware>())).Returns(new Size(4, 4)); posMock.Setup(p => p.ViewLoaded(It.IsAny <IViewAware>())).Returns(Observable.Never <Unit>()); var mvm = MainViewModelTest.GetInstance( container => container.ComposeExportedValue(posMock.Object) ); var vm = mvm.PipelineViewModel; var mock = new Mock <IDragEventInfo>(); // Add Nodes like so // vin0 // // // vin1 dn // // // vin2 var vin0 = AddNodeModel <VideoInputNode>(vm, mock); var vin1 = AddNodeModel <VideoInputNode>(vm, mock); var vin2 = AddNodeModel <VideoInputNode>(vm, mock); var dn = AddNodeModel <DiagramNode>(vm, mock); var dnvm = new DiagramViewModel(dn.Model); // Add Edge like so // vin0 // \ // \ // vin1 dn // // // vin2 // Start edge from vin0 output Assert.PropertyChanged(vm, "DraggedEdge", () => vm.InOutputMouseDown(vin0.Outputs.First()) ); var edge = vm.DraggedEdge; Assert.Equal(EdgeStatus.Indeterminate, edge.Status); // Drag edge over dn input var e = new RoutedEventArgs(Mouse.MouseMoveEvent); vm.InOutputMouseMove(dn.Inputs.First(), e); Assert.Equal(EdgeStatus.Valid, edge.Status); // Drop edge on dn input vm.InOutputMouseUp(dn.Inputs.First()); Assert.Equal(1, vm.Edges.Count()); Assert.Equal(1, dn.Model.Inputs.Count()); // DiagramNode has one fake input. Assert.Equal(2, dn.Inputs.Count()); // Add Edge like so // vin0 // \ // \ // vin1--dn // // // vin2 // Start edge from vin1 output Assert.PropertyChanged(vm, "DraggedEdge", () => vm.InOutputMouseDown(vin1.Outputs.First()) ); edge = vm.DraggedEdge; Assert.Equal(EdgeStatus.Indeterminate, edge.Status); // Drag edge over dn input e = new RoutedEventArgs(Mouse.MouseMoveEvent); vm.InOutputMouseMove(dn.Inputs.Last(), e); Assert.Equal(EdgeStatus.Valid, edge.Status); // Drop edge on dn input vm.InOutputMouseUp(dn.Inputs.Last()); Assert.Equal(2, vm.Edges.Count()); Assert.Equal(2, dn.Model.Inputs.Count()); Assert.Equal(3, dn.Inputs.Count()); // Add PixelDiff-graph of vin1 and set reference to vin0 Assert.Equal(4, vm.Nodes.Count()); dnvm.Reference = dnvm.Videos.First(); dnvm.ChosenVideo = dnvm.Videos.Last(); dnvm.AddGraph(); dnvm.Graphs.Single().CurrentType = dnvm.Graphs.Single().AvailableTypes.First(); Assert.Equal(1, dnvm.Graphs.Count()); Assert.NotNull(dnvm.Reference); // Add Edge like so // vin0 // \ // \ // vin1--dn // / // / // vin2 // Start edge from vin2 output Assert.PropertyChanged(vm, "DraggedEdge", () => vm.InOutputMouseDown(vin2.Outputs.First()) ); edge = vm.DraggedEdge; Assert.Equal(EdgeStatus.Indeterminate, edge.Status); // Drag edge over dn input e = new RoutedEventArgs(Mouse.MouseMoveEvent); vm.InOutputMouseMove(dn.Inputs.Last(), e); Assert.Equal(EdgeStatus.Valid, edge.Status); // Drop edge on dn input vm.InOutputMouseUp(dn.Inputs.Last()); Assert.Equal(3, vm.Edges.Count()); Assert.Equal(3, dn.Model.Inputs.Count()); Assert.Equal(4, dn.Inputs.Count()); // Add PixelDiff-graph of vin2 dnvm.ChosenVideo = dnvm.Videos.Last(); dnvm.AddGraph(); dnvm.Graphs.Last().CurrentType = dnvm.Graphs.Last().AvailableTypes.First(); Assert.Equal(2, dnvm.Graphs.Count()); Assert.NotNull(dnvm.Reference); Assert.True(dnvm.Graphs.All(graph => graph.CurrentType != null)); // Delete Node like so // vin0 // \ // \ // vin1--dn // // // Assert.PropertyChanged(vm, "Edges", vin2.RemoveNode); Assert.DoesNotContain(vin2, vm.Nodes); Assert.DoesNotContain(vin2.Model, vm.Parent.Model.Graph.Nodes); Assert.Equal(2, vm.Edges.Count()); Assert.Equal(2, dn.Model.Inputs.Count()); Assert.Equal(3, dn.Inputs.Count()); Assert.Equal(3, vm.Nodes.Count()); Assert.NotNull(dnvm.Reference); Assert.Equal(1, dnvm.Graphs.Count()); // Delete Node like so // // // // vin1--dn // // // Assert.PropertyChanged(vm, "Edges", vin0.RemoveNode); Assert.DoesNotContain(vin0, vm.Nodes); Assert.DoesNotContain(vin0.Model, vm.Parent.Model.Graph.Nodes); Assert.Equal(1, vm.Edges.Count()); Assert.Equal(1, dn.Model.Inputs.Count()); Assert.Equal(2, dn.Inputs.Count()); Assert.Equal(2, vm.Nodes.Count()); Assert.Null(dnvm.Reference); Assert.Equal(1, dnvm.Graphs.Count()); }