public void Test30() { //Step 1: Construct any Pipeline MainViewModel mvm = MainViewModelTest.GetInstance(); ColorInputNode colorInput = new ColorInputNode(); mvm.Model.Graph.AddNode(colorInput); InverterNode inverter = new InverterNode(); mvm.Model.Graph.AddNode(inverter); mvm.Model.Graph.AddEdge(colorInput.Outputs[0], inverter.Inputs[0]); Assert.Contains(colorInput, mvm.Model.Graph.Nodes); Assert.Contains(inverter, mvm.Model.Graph.Nodes); Assert.Equal(colorInput.Outputs[0], inverter.Inputs[0].Source); //Step 2: Save Pipeline using (var stream = File.Create(@"..\..\..\..\output\test30.yuvka")) new NetDataContractSerializer().Serialize(stream, mvm.Model); Assert.True(File.Exists(@"..\..\..\..\output\test30.yuvka")); //Step 3: Clear Pipeline mvm.Clear(); Assert.Empty(mvm.Model.Graph.Nodes); //Step 4: Reload Pipeline using (var stream = File.OpenRead(@"..\..\..\..\output\test30.yuvka")) mvm.Model = (PipelineState) new NetDataContractSerializer().Deserialize(stream); Assert.True(mvm.Model.Graph.Nodes[0] is ColorInputNode); Assert.True(mvm.Model.Graph.Nodes[1] is InverterNode); Assert.Equal(mvm.Model.Graph.Nodes[0].Outputs[0], mvm.Model.Graph.Nodes[1].Inputs[0].Source); }
public void Test30() { //Step 1: Construct any Pipeline MainViewModel mvm = MainViewModelTest.GetInstance(); ColorInputNode colorInput = new ColorInputNode(); mvm.Model.Graph.AddNode(colorInput); InverterNode inverter = new InverterNode(); mvm.Model.Graph.AddNode(inverter); mvm.Model.Graph.AddEdge(colorInput.Outputs[0], inverter.Inputs[0]); Assert.Contains(colorInput, mvm.Model.Graph.Nodes); Assert.Contains(inverter, mvm.Model.Graph.Nodes); Assert.Equal(colorInput.Outputs[0], inverter.Inputs[0].Source); //Step 2: Save Pipeline using (var stream = File.Create(@"..\..\..\..\output\test30.yuvka")) new NetDataContractSerializer().Serialize(stream, mvm.Model); Assert.True(File.Exists(@"..\..\..\..\output\test30.yuvka")); //Step 3: Clear Pipeline mvm.Clear(); Assert.Empty(mvm.Model.Graph.Nodes); //Step 4: Reload Pipeline using (var stream = File.OpenRead(@"..\..\..\..\output\test30.yuvka")) mvm.Model = (PipelineState)new NetDataContractSerializer().Deserialize(stream); Assert.True(mvm.Model.Graph.Nodes[0] is ColorInputNode); Assert.True(mvm.Model.Graph.Nodes[1] is InverterNode); Assert.Equal(mvm.Model.Graph.Nodes[0].Outputs[0], mvm.Model.Graph.Nodes[1].Inputs[0].Source); }
public void CanOpenCloseOutputWindow() { var windowManMock = new Mock <IWindowManagerEx>(); var vm = GetInstance(cont => cont.ComposeExportedValue <IWindowManagerEx>(windowManMock.Object)); var conductorMock = new Mock <IConductor>(); var node = new ColorInputNode(); var window = new VideoOutputViewModel(node.Outputs[0]) { Parent = conductorMock.Object }; ((IActivate)window).Activate(); conductorMock.Setup(c => c.DeactivateItem(window, true)) .Callback(() => ((IDeactivate)window).Deactivate(close: true)) .Verifiable(); vm.OpenWindow(window); windowManMock.Verify(w => w.ShowWindow(window, vm)); Assert.Equal(window, vm.OpenWindows.Single()); vm.CloseWindows(node); conductorMock.Verify(); Assert.Empty(vm.OpenWindows); vm.OpenWindow(window); vm.OpenWindow(window); Assert.Equal(window, vm.OpenWindows.Single()); window.TryClose(); conductorMock.Verify(c => c.DeactivateItem(window, true), Times.Exactly(2)); Assert.Empty(vm.OpenWindows); }
public void GlobalTest10() { MainViewModel mvm = MainViewModelTest.GetInstance(); PipelineViewModel pvm = mvm.PipelineViewModel; // Step 1: The user clicks "New" to create a new pipeline mvm.Clear(); Assert.Empty(mvm.Model.Graph.Nodes); var mock = new Mock <IDragEventInfo>(); // Step 2: Create each type of node once by drag-and-drop VideoInputNode vin = (VideoInputNode)AddNode <VideoInputNode>(pvm, mock, new Point(10, 30)); AdditiveMergeNode amn = (AdditiveMergeNode)AddNode <AdditiveMergeNode>(pvm, mock, new Point(30, 30)); BlurNode bn = (BlurNode)AddNode <BlurNode>(pvm, mock, new Point(50, 30)); BrightnessContrastSaturationNode bcsn = (BrightnessContrastSaturationNode)AddNode <BrightnessContrastSaturationNode>(pvm, mock, new Point(70, 30)); ColorInputNode cin = (ColorInputNode)AddNode <ColorInputNode>(pvm, mock, new Point(10, 50)); DelayNode dln = (DelayNode)AddNode <DelayNode>(pvm, mock, new Point(90, 30)); DiagramNode dgn = (DiagramNode)AddNode <DiagramNode>(pvm, mock, new Point(110, 30)); DifferenceNode dfn = (DifferenceNode)AddNode <DifferenceNode>(pvm, mock, new Point(30, 50)); HistogramNode hn = (HistogramNode)AddNode <HistogramNode>(pvm, mock, new Point(50, 50)); ImageInputNode imin = (ImageInputNode)AddNode <ImageInputNode>(pvm, mock, new Point(70, 50)); InverterNode invn = (InverterNode)AddNode <InverterNode>(pvm, mock, new Point(90, 50)); NoiseInputNode nin = (NoiseInputNode)AddNode <NoiseInputNode>(pvm, mock, new Point(110, 50)); OverlayNode on = (OverlayNode)AddNode <OverlayNode>(pvm, mock, new Point(10, 70)); RgbSplitNode rgbsn = (RgbSplitNode)AddNode <RgbSplitNode>(pvm, mock, new Point(30, 70)); WeightedAveragedMergeNode wamn = (WeightedAveragedMergeNode)AddNode <WeightedAveragedMergeNode>(pvm, mock, new Point(50, 70)); // Step 3: Create the edges mvm.Model.Graph.AddEdge(vin.Outputs[0], bn.Inputs[0]); Assert.Equal(vin.Outputs[0], bn.Inputs[0].Source); amn.Inputs.Add(new Node.Input()); mvm.Model.Graph.AddEdge(vin.Outputs[0], amn.Inputs[0]); Assert.Equal(vin.Outputs[0], amn.Inputs[0].Source); mvm.Model.Graph.AddEdge(bn.Outputs[0], dln.Inputs[0]); Assert.Equal(bn.Outputs[0], dln.Inputs[0].Source); mvm.Model.Graph.AddEdge(dln.Outputs[0], dfn.Inputs[0]); Assert.Equal(dln.Outputs[0], dfn.Inputs[0].Source); mvm.Model.Graph.AddEdge(imin.Outputs[0], dfn.Inputs[1]); Assert.Equal(imin.Outputs[0], dfn.Inputs[1].Source); mvm.Model.Graph.AddEdge(dfn.Outputs[0], invn.Inputs[0]); Assert.Equal(dfn.Outputs[0], invn.Inputs[0].Source); mvm.Model.Graph.AddEdge(invn.Outputs[0], on.Inputs[0]); Assert.Equal(invn.Outputs[0], on.Inputs[0].Source); mvm.Model.Graph.AddEdge(vin.Outputs[0], on.Inputs[1]); Assert.Equal(vin.Outputs[0], on.Inputs[1].Source); mvm.Model.Graph.AddEdge(vin.Outputs[0], rgbsn.Inputs[0]); Assert.Equal(vin.Outputs[0], rgbsn.Inputs[0].Source); mvm.Model.Graph.AddEdge(rgbsn.Outputs[2], hn.Inputs[0]); Assert.Equal(rgbsn.Outputs[2], hn.Inputs[0].Source); }
public void SizePropertyViewModelTest() { // Since this property viewmodel commits its change as soon as the change is made, the commitChange method // is executed, which requires a working IoC IoC.GetInstance = IoCAggregator; SizePropertyViewModel en = new SizePropertyViewModel(); ColorInputNode clr = new ColorInputNode(); PropertyDescriptor pd = TypeDescriptor.GetProperties(clr).Find("Size", true); en.Initialize(clr, pd); en.Height = 37; en.Width = 13; Assert.Equal(new YuvKA.VideoModel.Size(13, 37).Height, clr.Size.Height); Assert.Equal(new YuvKA.VideoModel.Size(13, 37).Width, clr.Size.Width); }
public void RgbPropertyViewModelTest() { // Since this property viewmodel commits its change as soon as the change is made, the commitChange method // is executed, which requires a working IoC IoC.GetInstance = IoCAggregator; ColorPropertyViewModel en = new ColorPropertyViewModel(); ColorInputNode clr = new ColorInputNode(); PropertyDescriptor pd = TypeDescriptor.GetProperties(clr).Find("color", true); en.Initialize(clr, pd); clr.Color = System.Windows.Media.Color.FromRgb(1, 33, 7); Assert.Equal(new YuvKA.VideoModel.Rgb(1, 33, 7), new YuvKA.VideoModel.Rgb(en.ChosenColor.R, en.ChosenColor.G, en.ChosenColor.B)); en.ChosenColor = System.Windows.Media.Color.FromRgb(42, 24, 22); Assert.Equal(System.Windows.Media.Color.FromRgb(42, 24, 22), clr.Color); }
public void TestGeneralFunctions() { IOverlayType noOverlay = new NoOverlay(); IOverlayType blockOverlay = new BlocksOverlay(); IoC.GetAllInstances = nope => new List <object> { noOverlay, blockOverlay }; IoC.GetInstance = IoCAggregator; OverlayNode node = new OverlayNode(); OverlayViewModel vm = new OverlayViewModel(node); var inputNodeMock = new Mock <InputNode>(1); inputNodeMock.SetupGet(i => i.OutputHasLogfile).Returns(true); inputNodeMock.SetupGet(i => i.InputIsValid).Returns(true); //Test the available Types node.Inputs[0].Source = inputNodeMock.Object.Outputs[0]; Assert.Equal("No Overlay", vm.TypeTuples.First().Item1); //Test altering the chosen Type node.Type = blockOverlay; Assert.Equal("Macroblock-Overlay", vm.ChosenType.Item1); ColorInputNode color = new ColorInputNode(); color.Size = new Size(512, 512); node.Inputs[0].Source = color.Outputs[0]; vm.ChosenType = new System.Tuple <string, IOverlayType>("No Overlay", noOverlay); Assert.Equal("No Overlay", vm.ChosenType.Item1); //Test "Handling" a message(The result has be inspected manually) node.Type = noOverlay; Frame[] input = { new Frame(new Size(512, 512)) }; node.ProcessCore(input, 0); vm.Handle(null); using (var fileStream = new FileStream(@"..\..\..\..\output\thisIsBlack.png", FileMode.Create)) { BitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(vm.RenderedImage)); encoder.Save(fileStream); } }
public void TestGeneralFunctions() { IOverlayType noOverlay = new NoOverlay(); IOverlayType blockOverlay = new BlocksOverlay(); IoC.GetAllInstances = nope => new List<object> { noOverlay, blockOverlay }; IoC.GetInstance = IoCAggregator; OverlayNode node = new OverlayNode(); OverlayViewModel vm = new OverlayViewModel(node); var inputNodeMock = new Mock<InputNode>(1); inputNodeMock.SetupGet(i => i.OutputHasLogfile).Returns(true); inputNodeMock.SetupGet(i => i.InputIsValid).Returns(true); //Test the available Types node.Inputs[0].Source = inputNodeMock.Object.Outputs[0]; Assert.Equal("No Overlay", vm.TypeTuples.First().Item1); //Test altering the chosen Type node.Type = blockOverlay; Assert.Equal("Macroblock-Overlay", vm.ChosenType.Item1); ColorInputNode color = new ColorInputNode(); color.Size = new Size(512, 512); node.Inputs[0].Source = color.Outputs[0]; vm.ChosenType = new System.Tuple<string, IOverlayType>("No Overlay", noOverlay); Assert.Equal("No Overlay", vm.ChosenType.Item1); //Test "Handling" a message(The result has be inspected manually) node.Type = noOverlay; Frame[] input = { new Frame(new Size(512, 512)) }; node.ProcessCore(input, 0); vm.Handle(null); using (var fileStream = new FileStream(@"..\..\..\..\output\thisIsBlack.png", FileMode.Create)) { BitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(vm.RenderedImage)); encoder.Save(fileStream); } }
public void ColorInputTest() { Frame outputFrame; Bitmap outputImage; ColorInputNode colorInput = new ColorInputNode(); colorInput.Size = new YuvKA.VideoModel.Size(200, 200); colorInput.Color = System.Windows.Media.Color.FromRgb(50, 92, 177); CopyFrameToOutputImage(colorInput, out outputFrame, out outputImage, 0); outputImage.Save("..\\..\\..\\..\\output\\color-50-92-177-200x200.png"); // Change the size colorInput.Size = new YuvKA.VideoModel.Size(100, 50); CopyFrameToOutputImage(colorInput, out outputFrame, out outputImage, 0); outputImage.Save("..\\..\\..\\..\\output\\color-50-92-177-100x50.png"); // Change the color Color c = Color.Crimson; byte r = c.R, g = c.G, b = c.B; colorInput.Color = System.Windows.Media.Color.FromRgb(r, g, b); CopyFrameToOutputImage(colorInput, out outputFrame, out outputImage, 0); outputImage.Save("..\\..\\..\\..\\output\\color-" + r + "-" + g + "-" + b + "177-100x50.png"); }
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); }