Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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));
        }
Example #5
0
        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());
        }