public void ClipNotEnabledIfPolygonsCountIsNotEqualTwo()
        {
            var mockGenerator = new Mock <PolygonGenerator>();
            var mockProvider  = new Mock <PolygonGeneratorProvider>();

            mockProvider.Setup(x => x.GetGenerators()).Returns(new[] { mockGenerator.Object });
            var mockClipper = new Mock <PolygonClipper>();

            var vm = new PolygonManagementViewModel(mockProvider.Object, null, mockClipper.Object);

            // Polygons initially empty --> command must be disabled
            Assert.False(vm.ClipPolygonsCommand.CanExecute());

            vm.GenerateAndAddPolygonCommand.Execute();
            Assert.False(vm.ClipPolygonsCommand.CanExecute());

            var receivedExecuteChanged = false;

            vm.ClipPolygonsCommand.CanExecuteChanged += (_, __) => receivedExecuteChanged = true;
            vm.GenerateAndAddPolygonCommand.Execute();
            Assert.True(vm.ClipPolygonsCommand.CanExecute());
            Assert.True(receivedExecuteChanged);

            receivedExecuteChanged = false;
            vm.GenerateAndAddPolygonCommand.Execute();
            Assert.False(vm.ClipPolygonsCommand.CanExecute());
            Assert.True(receivedExecuteChanged);
        }
Esempio n. 2
0
        public void CannotGeneratePolygonWithoutGenerator()
        {
            using var vm = new PolygonManagementViewModel(Array.Empty <IPolygonGenerator>());

            // vm.SelectedPolygonGenerator is initially null

            Assert.False(vm.GenerateAndAddPolygonCommand.CanExecute());
        }
Esempio n. 3
0
        public MainWindow(PolygonManagementViewModel viewModel)
        {
            InitializeComponent();
            //this.DataContext = this;
            this.DataContext = viewModel;

            //((PolygonManagementViewModel)this.DataContext).SelectedPolygonGenerator =
            //    new RandomPolygonGenerator();
        }
Esempio n. 4
0
        public void FillPolygonGeneratorsFromContainer()
        {
            using var vm = new PolygonManagementViewModel(new[] { new DummyGenerator() });
            Assert.Single(vm.Generators);
            var generator = vm.Generators.First();

            Assert.Equal("Dummy", generator.FriendlyName);
            Assert.IsType <DummyGenerator>(generator.Generator);
            Assert.Equal(vm.SelectedPolygonGenerator, generator.Generator);
        }
        public void EnsureSuccessMessageBoxOnGenerate()
        {
            var mockDialogHandler = new Mock <IDialogHandler>();

            var vm = new PolygonManagementViewModel(null, mockDialogHandler.Object);

            vm.SelectedPolygonGenerator = GetMockGenerator().Object;
            vm.GenerateAndAddPolygonCommand.Execute();

            // This is how you would verify that the message box has been triggered:
            // mockDialogHandler.Verify(x => x.ShowMessageBox(It.IsAny<string>()), Times.Once);
        }
Esempio n. 6
0
        public void CalculateAreaForSelectedPolygon()
        {
            (var tcs, var mockCalculator) = GetMockAreaCalculator();

            using var vm = new PolygonManagementViewModel(Array.Empty <IPolygonGenerator>(), mockCalculator.Object)
                  {
                      SelectedPolygon = new Polygon()
                  };
            var receivedEvents = new HashSet <string>();

            vm.PropertyChanged += (_, ea) => receivedEvents.Add(ea.PropertyName);
            var calculate = false;
            var cancel    = false;

            vm.CalculateAreaForSelectedPolygonCommand.CanExecuteChanged += (_, __) => calculate = true;
            vm.CancelAreaCalculationCommand.CanExecuteChanged           += (_, __) => cancel = true;

            // Check state before calculation starts
            Assert.True(vm.CalculateAreaForSelectedPolygonCommand.CanExecute());
            Assert.False(vm.IsCalculatingArea);
            Assert.False(vm.CancelAreaCalculationCommand.CanExecute());
            Assert.Null(vm.Area);
            Assert.False(vm.IsAreaAvailable);

            // Start calculation
            vm.CalculateAreaForSelectedPolygonCommand.Execute();

            // Check state after starting the calculation
            Assert.True(vm.IsCalculatingArea);
            Assert.Contains(nameof(PolygonManagementViewModel.IsCalculatingArea), receivedEvents);
            Assert.False(vm.CalculateAreaForSelectedPolygonCommand.CanExecute());
            Assert.True(calculate);
            Assert.True(vm.CancelAreaCalculationCommand.CanExecute());
            Assert.True(cancel);

            // Simulate finishing of calculation
            calculate = cancel = false;
            receivedEvents.Clear();
            tcs.SetResult(42d);

            // Check state after calculation
            Assert.True(vm.CalculateAreaForSelectedPolygonCommand.CanExecute());
            Assert.True(calculate);
            Assert.False(vm.CancelAreaCalculationCommand.CanExecute());
            Assert.True(cancel);
            Assert.False(vm.IsCalculatingArea);
            Assert.Contains(nameof(PolygonManagementViewModel.IsCalculatingArea), receivedEvents);
            Assert.Equal(42d, vm.Area);
            Assert.Contains(nameof(PolygonManagementViewModel.Area), receivedEvents);
            Assert.True(vm.IsAreaAvailable);
            Assert.Contains(nameof(PolygonManagementViewModel.IsAreaAvailable), receivedEvents);
        }
Esempio n. 7
0
        public void SendCommandEventWhenGeneratorGetsSelected()
        {
            using var vm = new PolygonManagementViewModel(Array.Empty <IPolygonGenerator>());
            var receivedGenerateCommandChanged = false;

            vm.GenerateAndAddPolygonCommand.CanExecuteChanged +=
                (_, __) => receivedGenerateCommandChanged      = true;

            vm.SelectedPolygonGenerator = GetMockGenerator().Object;

            Assert.True(receivedGenerateCommandChanged);
            Assert.True(vm.GenerateAndAddPolygonCommand.CanExecute());
        }
Esempio n. 8
0
        public MainWindow(PolygonManagementViewModel viewModel, IRegionManager regionManager)
        {
            regionManager.RegisterViewWithRegion(RegionNames.GraphicalViewer, typeof(PolygonsViewer));
            regionManager.RegisterViewWithRegion(RegionNames.MainMenu, typeof(MainMenu));
            regionManager.RegisterViewWithRegion(RegionNames.PolygonList, typeof(PolygonsList));
            regionManager.RegisterViewWithRegion(RegionNames.PolygonDetails, typeof(PolygonDetails));

            InitializeComponent();
            //this.DataContext = this;
            this.DataContext = viewModel;

            //((PolygonManagementViewModel)this.DataContext).SelectedPolygonGenerator =
            //    new RandomPolygonGenerator();
        }
        public void CancelAreaCalculation()
        {
            (var tcs, var mockCalculator) = GetMockAreaCalculator();

            var vm = new PolygonManagementViewModel(null, mockCalculator.Object);

            vm.SelectedPolygon = new Polygon();
            vm.CalculateAreaForSelectedPolygonCommand.Execute();
            tcs.SetCanceled();

            // Check state after cancellation
            Assert.Null(vm.Area);
            Assert.True(vm.CalculateAreaForSelectedPolygonCommand.CanExecute());
            Assert.False(vm.CancelAreaCalculationCommand.CanExecute());
        }
        public void FillPolygonGeneratorsFromContainer()
        {
            var mockGenerator = new Mock <PolygonGeneratorProvider>();

            mockGenerator.Setup(x => x.GetGenerators()).Returns(new[] { new DummyGenerator() });

            var vm = new PolygonManagementViewModel(mockGenerator.Object);

            Assert.Single(vm.Generators);
            var generator = vm.Generators.First();

            Assert.Equal("Dummy", generator.FriendlyName);
            Assert.IsType <DummyGenerator>(generator.Generator);
            Assert.Equal(vm.SelectedPolygonGenerator, generator.Generator);
        }
        public void FillPolygonGeneratorsFromContainer()
        {
            var mockGenerator = new Mock <IUnityContainer>();

            mockGenerator.Setup(x => x.Resolve(It.IsAny <Type>(), It.IsAny <string>(), It.IsAny <ResolverOverride[]>()))
            .Returns(new[] { new DummyGenerator() });

            var vm = new PolygonManagementViewModel(mockGenerator.Object);

            Assert.Single(vm.Generators);
            var generator = vm.Generators.First();

            Assert.Equal("Dummy", generator.FriendlyName);
            Assert.IsType <DummyGenerator>(generator.Generator);
            Assert.Equal(vm.SelectedPolygonGenerator, generator.Generator);
        }
        public void GeneratePolygon()
        {
            var vm = new PolygonManagementViewModel();

            vm.SelectedPolygonGenerator = GetMockGenerator().Object;
            vm.GenerateAndAddPolygonCommand.Execute();

            Assert.Single(vm.Polygons);

            var newPolygon = vm.Polygons[0];

            Assert.True(!string.IsNullOrEmpty(newPolygon.Description));
            Assert.Equal(newPolygon.StrokeColor.R, newPolygon.FillColor.R);
            Assert.Equal(newPolygon.StrokeColor.G, newPolygon.FillColor.G);
            Assert.Equal(newPolygon.StrokeColor.B, newPolygon.FillColor.B);
        }
Esempio n. 13
0
        public void ClipPossibleWithMultiplePolygons()
        {
            var clipper        = new DummyClipper();
            var dummyGenerator = Mock.Of <IPolygonGenerator>();

            using var vm = new PolygonManagementViewModel(new[] { dummyGenerator }, null, clipper);

            Assert.False(vm.ClipPolygonsCommand.CanExecute());
            Assert.Empty(vm.Polygons);

            vm.GenerateAndAddPolygonCommand.Execute();
            vm.GenerateAndAddPolygonCommand.Execute();
            Assert.True(vm.ClipPolygonsCommand.CanExecute());

            vm.ClipPolygonsCommand.Execute();
            Assert.Equal(3, vm.Polygons.Count);
        }
        public void ClipReplacesExistingPolygons()
        {
            var mockGenerator = new Mock <PolygonGenerator>();
            var mockProvider  = new Mock <PolygonGeneratorProvider>();

            mockProvider.Setup(x => x.GetGenerators()).Returns(new[] { mockGenerator.Object });
            var mockClipper = new Mock <PolygonClipper>();

            mockClipper.Setup(x => x.GetIntersectedPolygon(It.IsAny <ReadOnlyMemory <Point> >(), It.IsAny <ReadOnlyMemory <Point> >()))
            .Returns(new[] { new Point(0d, 0d) });

            var vm = new PolygonManagementViewModel(mockProvider.Object, null, mockClipper.Object);

            vm.GenerateAndAddPolygonCommand.Execute();
            vm.GenerateAndAddPolygonCommand.Execute();

            vm.ClipPolygonsCommand.Execute();
            Assert.Single(vm.Polygons);
        }
        public void GeneratePolygon()
        {
            var mockGenerator = GetMockGenerator();

            using var vm = new PolygonManagementViewModel(Array.Empty <IPolygonGenerator>())
                  {
                      SelectedPolygonGenerator = mockGenerator.Object
                  };
            vm.GenerateAndAddPolygonCommand.Execute();

            mockGenerator.Verify(x => x.Generate(in It.Ref <double> .IsAny), Times.Once());
            Assert.Single(vm.Polygons);

            var newPolygon = vm.Polygons[0];

            Assert.False(string.IsNullOrEmpty(newPolygon.Description));
            Assert.Equal(newPolygon.StrokeColor.R, newPolygon.FillColor.R);
            Assert.Equal(newPolygon.StrokeColor.G, newPolygon.FillColor.G);
            Assert.Equal(newPolygon.StrokeColor.B, newPolygon.FillColor.B);
        }
Esempio n. 16
0
 public MainMenu(PolygonManagementViewModel viewModel)
 {
     InitializeComponent();
     DataContext = viewModel;
 }
        public void CalculationNotPossibleIfNoPolygonSelected()
        {
            var vm = new PolygonManagementViewModel(null, new Mock <AreaCalculator>().Object);

            Assert.False(vm.CalculateAreaForSelectedPolygonCommand.CanExecute());
        }
Esempio n. 18
0
 public PolygonDetails(PolygonManagementViewModel viewModel)
 {
     InitializeComponent();
     DataContext = viewModel;
 }
 public MainWindow(PolygonManagementViewModel vm)
 {
     InitializeComponent();
     DataContext = vm;
 }
Esempio n. 20
0
 public void CalculationNotPossibleIfNoPolygonSelected()
 {
     using var vm = new PolygonManagementViewModel(Array.Empty <IPolygonGenerator>(), new Mock <IAreaCalculator>().Object);
     Assert.False(vm.CalculateAreaForSelectedPolygonCommand.CanExecute());
 }