From 9352ee617bef63136d8fa47d7389e6c378ac70ed Mon Sep 17 00:00:00 2001 From: "harald.martini@student.tugraz.at" <harald.martini@student.tugraz.at> Date: Mon, 31 May 2021 08:13:23 +0200 Subject: [PATCH] Added Method to Reset Editing enabled of Multistage Parameter Updated Combobox view --- .../Helper/MultistageParameterViewModel.cs | 59 ++++-- .../Implementation/JobListViewModel.cs | 2 +- .../Implementation/OutputViewModel.cs | 23 +-- .../InterimStageBusVehicleViewModel_v2_8.cs | 108 +++++----- .../MultistageAuxiliariesViewModel.cs | 45 +---- .../MultistageParameterComboBoxView.xaml | 6 +- .../ViewModelTests/LoadAndSaveVehicleData.cs | 20 +- .../MultistageAuxiliariesViewModelTests.cs | 63 +++--- .../MultistageParameterViewModelTests.cs | 20 ++ .../ViewModelTests/VehicleViewModelTests.cs | 185 +++++++++++++++++- 10 files changed, 365 insertions(+), 166 deletions(-) create mode 100644 Vecto3GUI2020Test/ViewModelTests/MultistageParameterViewModelTests.cs diff --git a/VECTO3GUI2020/Helper/MultistageParameterViewModel.cs b/VECTO3GUI2020/Helper/MultistageParameterViewModel.cs index 6029792b22..7d64d6cec0 100644 --- a/VECTO3GUI2020/Helper/MultistageParameterViewModel.cs +++ b/VECTO3GUI2020/Helper/MultistageParameterViewModel.cs @@ -11,6 +11,7 @@ using System.Runtime.InteropServices; using System.Windows; using System.Windows.Controls; using Castle.Core.Internal; +using Castle.Core.Resource; using Castle.DynamicProxy.Internal; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.Utils; @@ -29,8 +30,17 @@ namespace VECTO3GUI2020.Helper } + public interface IMultistageParameterViewModel + { + bool EditingEnabled { get; set; } + object CurrentContent { get; set; } + object DummyContent { get; set; } + ObservableCollection<Enum> AllowedItems { get; set; } + object PreviousContent { get; set; } + Action<MultistageParameterViewModel> EditingChangedCallback { get; set; } + } - public class MultistageParameterViewModel : ViewModelBase, IDataErrorInfo + public class MultistageParameterViewModel : ViewModelBase, IDataErrorInfo, IMultistageParameterViewModel { private bool _editingEnabled; private object _currentContent; @@ -85,13 +95,11 @@ namespace VECTO3GUI2020.Helper if (DummyContent is Enum dummyEnum) { var enType = dummyEnum.GetType(); - //GeneratedListItems = new ObservableCollection<typeof(enType)>(Enum.GetValues(enType).Cast<T>().ToList()); GeneratedListItems = new ObservableCollection<Enum>(Enum.GetValues(enType).Cast<Enum>().ToList()); } else if (CurrentContent is Enum contentEnum) { var enType = contentEnum.GetType(); - //GeneratedListItems = new ObservableCollection<T>(Enum.GetValues(enType).Cast<T>().ToList()); GeneratedListItems = new ObservableCollection<Enum>(Enum.GetValues(enType).Cast<Enum>().ToList()); } } @@ -165,6 +173,10 @@ namespace VECTO3GUI2020.Helper var dummyContent = Convert.ChangeType(0, primitiveType); return dummyContent; } + + if (type == typeof(string)) { + return ""; + } @@ -193,11 +205,10 @@ namespace VECTO3GUI2020.Helper _editingChangedCallback?.Invoke(this); if (new_value == false) { - if (StoredContent != null) { + if (StoredContent != CurrentContent) { StoredContent = CurrentContent; } CurrentContent = null; - OnPropertyChanged(nameof(CurrentContent)); } else { @@ -208,11 +219,9 @@ namespace VECTO3GUI2020.Helper CurrentContent = DummyContent; } } - OnPropertyChanged(nameof(CurrentContent)); } - } - + OnPropertyChanged(nameof(CurrentContent)); OnPropertyChanged(nameof(EditingEnabled)); } } @@ -222,30 +231,28 @@ namespace VECTO3GUI2020.Helper get => _currentContent; set { - if (value != null) { + if (value != null) { EditingEnabled = true; - } + } var convertedValue = value; - //Convert value if neccessary if (value != null) { if (DummyContent != null) { convertedValue = Convert.ChangeType(value, DummyContent.GetType()); } } - - if (SetProperty(ref _currentContent, convertedValue)) { _propertyInfo.SetValue(_parentViewModel, _currentContent); _propertyChangedCallback?.Invoke(this); }; - } } + + public object DummyContent { get => _dummyContent; @@ -261,7 +268,6 @@ namespace VECTO3GUI2020.Helper get => _storedContent; set { - //_propertyChangedCallback.Invoke(this); SetProperty(ref _storedContent, value); } } @@ -271,7 +277,6 @@ namespace VECTO3GUI2020.Helper get => _label; set { - _propertyChangedCallback?.Invoke(this); SetProperty(ref _label, value); } } @@ -281,8 +286,8 @@ namespace VECTO3GUI2020.Helper get => _allowedItems; set { - //_propertyChangedCallback?.Invoke(this); SetProperty(ref _allowedItems, value); + OnPropertyChanged(nameof(CurrentContent)); } } @@ -332,12 +337,11 @@ namespace VECTO3GUI2020.Helper { get { - var dataErrorinfo = _parentViewModel as IDataErrorInfo; - if (dataErrorinfo == null) { + if (!(_parentViewModel is IDataErrorInfo dataErrorInfo)) { return null; } - return dataErrorinfo[_propertyName]; + return dataErrorInfo[_propertyName]; } } @@ -349,6 +353,21 @@ namespace VECTO3GUI2020.Helper set => _editingChangedCallback = value; } + /// <summary> + /// Sets Editing Enabled flag based on currentvalue + /// </summary> + /// <returns></returns> + public bool UpdateEditingEnabled() + { + if (CurrentContent == null) { + EditingEnabled = false; + } else { + EditingEnabled = true; + } + + return EditingEnabled; + } + #endregion } diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs index 5a801bd941..71d7b9c58e 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/JobListViewModel.cs @@ -163,7 +163,7 @@ namespace VECTO3GUI2020.ViewModel.Implementation new Progress<int>((i) => _outputViewModel.Progress = i), new Progress<string>((msg) => _outputViewModel.StatusMessage = msg))); SimulationRunning = false; - _outputViewModel.SumProgress = 0; + _outputViewModel.Progress = 0; cancellationTokenSource.Dispose(); } diff --git a/VECTO3GUI2020/ViewModel/Implementation/OutputViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/OutputViewModel.cs index 2782a7156f..345f474799 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/OutputViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/OutputViewModel.cs @@ -10,7 +10,6 @@ using VECTO3GUI2020.ViewModel.Interfaces.Common; namespace VECTO3GUI2020.ViewModel { - public class OutputViewModel : ViewModelBase, IOutputViewModel { private object _messageLock = new Object(); @@ -20,16 +19,13 @@ namespace VECTO3GUI2020.ViewModel public ObservableCollection<MessageEntry> Messages { - get - { - return _messages; - } + get { return _messages; } } - public double SumProgress + public int Progress { - get => _sumProgress; - set => SetProperty(ref _sumProgress, value); + get => _progress; + set => SetProperty(ref _progress, value); } public string StatusMessage @@ -41,16 +37,9 @@ namespace VECTO3GUI2020.ViewModel public OutputViewModel() { - BindingOperations.EnableCollectionSynchronization(Messages, _messageLock ); - } - - public void SetProgress(double sumProgress, IList<double> subProgress) - { - SumProgress = sumProgress; - - SubProgress = subProgress; - + BindingOperations.EnableCollectionSynchronization(Messages, _messageLock); } + } public interface IOutputViewModel : IMainViewModel { diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs index a2c6a05b8f..acb7fcad01 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs @@ -226,7 +226,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation _parameterViewModels[nameof(EntranceHeightInMm)].PreviousContent = ConsolidatedEntranceHeightInMm; _parameterViewModels[nameof(EntranceHeightInMm)].DummyContent = ConvertedSIDummyCreator.CreateMillimeterDummy(); - _parameterViewModels[nameof(AirdragModifiedEnum)].PreviousContent = ConsolidatedAirdragmodified; + _parameterViewModels[nameof(AirdragModifiedEnum)].PreviousContent = ConsolidatedAirdragModifiedEnum; ///Set up editing groups @@ -360,9 +360,11 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation ATEcoRollReleaseLockupClutch = vehicleInputData.ADAS?.ATEcoRollReleaseLockupClutch; AirdragModifiedMultistage = vehicleInputData.AirdragModifiedMultistage; AirdragModifiedMultistageEditingEnabled = false; - OnPropertyChanged(String.Empty); - - + foreach (var multistageParameterViewModel in _parameterViewModels.Values) + { + multistageParameterViewModel.UpdateEditingEnabled(); + } + OnPropertyChanged(string.Empty); } @@ -380,7 +382,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation private int? _numberOfPassengersUpperDeck; private int? _numberOfPassengersLowerDeck; private Kilogram _grossVehicleMassRating; - private Meter _entranceHeight; + private bool? _lowEntry; private VehicleCode? _vehicleCode; private RegistrationClass? _registeredClass; @@ -390,9 +392,11 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation private ConsumerTechnology? _doorDriveTechnology; private TankSystem? _tankSystem; private Kilogram _curbMassChassis; - private Meter _length; - private Meter _height; - private Meter _width; + private ConvertedSI _lengthInMm; + private ConvertedSI _heightMm; + private ConvertedSI _widthInMm; + private ConvertedSI _entranceHeightInMm; + public string Manufacturer @@ -435,36 +439,31 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation _parameterViewModels[nameof(WidthInMm)].EditingEnabled = value; _parameterViewModels[nameof(EntranceHeightInMm)].EditingEnabled = value; } - } } public ConvertedSI HeightInMm { - get { return Height?.ConvertToMilliMeter(); } - set { Height = value?.ConvertToMeter(); } + get => _heightMm; + set => SetProperty(ref _heightMm, value); } public ConvertedSI ConsolidatedHeightInMm { - get { return ConsolidatedVehicleData?.Height?.ConvertToMilliMeter(); } - set { throw new NotImplementedException(); } + get => ConsolidatedVehicleData?.Height?.ConvertToMilliMeter(); + set => throw new NotImplementedException(); } public Meter Height { - get { return _height; } - set - { - SetProperty(ref _height, value); - OnPropertyChanged(nameof(HeightInMm)); - } + get => HeightInMm?.ConvertToMeter(); + set => HeightInMm = value?.ConvertToMilliMeter(); } public ConvertedSI LengthInMm { - get { return Length?.ConvertToMilliMeter(); } - set { Length = value?.ConvertToMeter(); } + get { return _lengthInMm; } + set => SetProperty(ref _lengthInMm, value); } public ConvertedSI ConsolidatedLengthInMm @@ -476,18 +475,14 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public Meter Length { - get { return _length; } - set - { - SetProperty(ref _length, value); - OnPropertyChanged(nameof(WidthInMm)); - } + get => LengthInMm?.ConvertToMeter(); + set => LengthInMm = value?.ConvertToMilliMeter(); } public ConvertedSI WidthInMm { - get { return Width?.ConvertToMilliMeter(); } - set { Width = value?.ConvertToMeter(); } + get => _widthInMm; + set => SetProperty(ref _widthInMm, value); } public ConvertedSI ConsolidatedWidthInMm @@ -499,12 +494,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public Meter Width { - get { return _width; } - set - { - SetProperty(ref _width, value); - OnPropertyChanged(nameof(WidthInMm)); - } + get => WidthInMm?.ConvertToMeter(); + set => WidthInMm = value?.ConvertToMilliMeter(); } public ConvertedSI ConsolidatedEntranceHeightInMm @@ -515,23 +506,15 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public ConvertedSI EntranceHeightInMm { - get { return EntranceHeight?.ConvertToMilliMeter(); } - set - { - EntranceHeight = value?.ConvertToMeter(); - - } + get => _entranceHeightInMm; + set => SetProperty(ref _entranceHeightInMm, value); } public Meter EntranceHeight { - get => _entranceHeight; - set - { - SetProperty(ref _entranceHeight, value); - OnPropertyChanged(nameof(EntranceHeightInMm)); - } + get => EntranceHeightInMm?.ConvertToMeter(); + set => EntranceHeightInMm = value?.ConvertToMilliMeter(); } #endregion @@ -618,7 +601,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation } } - public AIRDRAGMODIFIED? ConsolidatedAirdragmodified + public AIRDRAGMODIFIED? ConsolidatedAirdragModifiedEnum { get { @@ -636,20 +619,29 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation get => _airdragModifiedMultistage; set { + if (SetProperty(ref _airdragModifiedMultistage, value)) { AirdragModifiedEnum = value.toAirdragModifiedEnum(); }; + } } + public bool AirdragModifiedMultistageMandatory + { + get => _airdragModifiedMultistageMandatory; + set => SetProperty(ref _airdragModifiedMultistageMandatory, value); + } + + private bool airdragModifiedMandatory = false; public bool AirdragModifiedMultistageEditingEnabled { get { //IF MODIFIED ONCE IT HAS TO BE SET - if (_consolidatedVehicleData?.AirdragModifiedMultistage != null) { - _airdragModifiedEditingEnabled = true; + if (airdragModifiedMandatory) { + } return _airdragModifiedEditingEnabled; } @@ -1075,8 +1067,18 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation } break; default: - if (_parameterViewModels[propertyName].EditingEnabled == true && this.GetType().GetProperty(propertyName)?.GetValue(this) == null) { - result = $"{NameResolver.ResolveName(propertyName, BusStrings.ResourceManager, Strings.ResourceManager)} has to be set if editing is enabled}}"; + if (_parameterViewModels[propertyName].EditingEnabled) { + var propertyValue = this.GetType().GetProperty(propertyName)?.GetValue(this); + if (propertyValue == null) { + result = + $"{NameResolver.ResolveName(propertyName, BusStrings.ResourceManager, Strings.ResourceManager)} has to be set if editing is enabled}}"; + } else { + if (propertyValue.GetType() == typeof(string) && string.IsNullOrWhiteSpace(propertyValue as string)) + { + result = + $"{NameResolver.ResolveName(propertyName, BusStrings.ResourceManager, Strings.ResourceManager)} has to be set if editing is enabled}}"; + } + } } break; @@ -1109,6 +1111,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation #endregion private IndexedStorage<bool> _editingEnabledDictionary; + private bool _airdragModifiedMultistageMandatory; + public IndexedStorage<bool> EditingEnabledDictionary { get diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs index be883d42c0..202664fe94 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs @@ -235,10 +235,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public HeatPumpMode? HeatPumpModeDriverCompartment { get => _heatPumpModeDriverCompartment; - set - { - SetProperty(ref _heatPumpModeDriverCompartment, value); - } + set => SetProperty(ref _heatPumpModeDriverCompartment, value); } private ObservableCollection<Enum> _heatPumpModeDriverCompartmentAllowedValues; @@ -274,7 +271,6 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation HeatPumpModePassengerCompartmentAllowedValues = EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, HeatPumpMode>( items: HeatPumpMode.N_A); - //HeatPumpModePassengerCompartment = HeatPumpMode.cooling; } } } @@ -283,11 +279,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation public HeatPumpMode? HeatPumpModePassengerCompartment { get => _heatPumpModePassengerCompartment; - set - { - SetProperty(ref _heatPumpModePassengerCompartment, value); - - } + set => SetProperty(ref _heatPumpModePassengerCompartment, value); } private ObservableCollection<Enum> _heatPumpModePassengerCompartmentAllowedValues; @@ -436,32 +428,9 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation HeadlightsLED = componentsAuxiliaryInputData.ElectricConsumers?.HeadlightsLED; BrakelightsLED = componentsAuxiliaryInputData.ElectricConsumers?.BrakelightsLED; - OnPropertyChanged(String.Empty); - } - - private void ResetData() - { - HeatPumpGroupEditingEnabled = false; - SystemConfiguration = null; - HeatPumpTypeDriverCompartment = null; - HeatPumpModeDriverCompartment = null; - HeatPumpTypePassengerCompartment = null; - HeatPumpModePassengerCompartment = null; - - AuxHeaterPower = null; - DoubleGlazing = null; - AdjustableAuxiliaryHeater = null; - SeparateAirDistributionDucts = null; - WaterElectricHeater = null; - AirElectricHeater = null; - OtherHeatingTechnology = null; - - InteriorLightsLED = null; - DayrunninglightsLED = null; - PositionlightsLED = null; - HeadlightsLED = null; - BrakelightsLED = null; - + foreach (var multistageParameterViewModel in _parameterViewModels.Values) { + multistageParameterViewModel.UpdateEditingEnabled(); + } OnPropertyChanged(String.Empty); } @@ -582,6 +551,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation HeatPumpModeDriverCompartmentAllowedValues = EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, HeatPumpMode>(HeatPumpMode.N_A); HeatPumpModePassengerCompartmentAllowedValues = EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, HeatPumpMode>(HeatPumpMode.N_A); + SystemConfigurationAllowedValues = EnumHelper.GetValuesAsObservableCollectionExcluding<Enum, BusHVACSystemConfiguration>( BusHVACSystemConfiguration.Unknown); @@ -592,8 +562,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation { var propertyChanged = base.SetProperty(ref field, value, propertyName); - if (propertyChanged && _parameterViewModels != null && _parameterViewModels.ContainsKey(propertyName)) - { + if (propertyChanged && _parameterViewModels != null && _parameterViewModels.ContainsKey(propertyName)) { _parameterViewModels[propertyName].CurrentContent = value; } return propertyChanged; diff --git a/VECTO3GUI2020/Views/Multistage/CustomControls/MultistageParameterComboBoxView.xaml b/VECTO3GUI2020/Views/Multistage/CustomControls/MultistageParameterComboBoxView.xaml index e930e5a7b7..ddb9a253e4 100644 --- a/VECTO3GUI2020/Views/Multistage/CustomControls/MultistageParameterComboBoxView.xaml +++ b/VECTO3GUI2020/Views/Multistage/CustomControls/MultistageParameterComboBoxView.xaml @@ -43,7 +43,11 @@ <!--SelectedIndex="{Binding EditingEnabled, ElementName=MultistageParameterControl, Converter={StaticResource BoolToIntConverter}}"--> <!--ItemsSource="{Binding ListItems, ElementName=MultistageParameterControl}"--> <ComboBox x:Name="comboBoxCurrent" Grid.Column="3" HorizontalAlignment="Stretch" VerticalAlignment="Center" Margin="2 0 2 0" - SelectedItem="{Binding CurrentContent, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" + SelectedValue="{Binding CurrentContent, + Mode=TwoWay, + ValidatesOnExceptions=True, + ValidatesOnDataErrors=True, + UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding EditingEnabled}" IsEditable="False"> <ComboBox.ItemsSource> diff --git a/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs b/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs index ff2bb6a09b..4234410ec7 100644 --- a/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs +++ b/Vecto3GUI2020Test/ViewModelTests/LoadAndSaveVehicleData.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Xml; +using Castle.Core.Internal; using Castle.DynamicProxy.Generators.Emitters.SimpleAST; using Moq; using Ninject; @@ -11,6 +12,7 @@ using NUnit.Framework; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; @@ -169,8 +171,10 @@ namespace Vecto3GUI2020Test var vehicleViewModel = vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as IMultistageVehicleViewModel; Assert.NotNull(vehicleViewModel); - Assert.Null(vehicleViewModel.Manufacturer); - Assert.Null(vehicleViewModel.ManufacturerAddress); + Assert.IsTrue(vehicleViewModel.Manufacturer.IsNullOrEmpty()); + Assert.IsTrue(vehicleViewModel.ManufacturerAddress.IsNullOrEmpty()); + Assert.IsTrue(vehicleViewModel.VIN.IsNullOrEmpty()); + Assert.IsNull(vehicleViewModel.Model); var vehicleViewModel_v2_8 = vehicleViewModel as DeclarationInterimStageBusVehicleViewModel_v2_8; Assert.NotNull(vehicleViewModel_v2_8); @@ -191,7 +195,7 @@ namespace Vecto3GUI2020Test Assert.IsFalse(vehicleViewModel_v2_8.AirdragModifiedMultistageEditingEnabled); Assert.IsNull(vehicleViewModel_v2_8.AirdragModifiedMultistage); - Assert.IsNull(vehicleViewModel_v2_8.ConsolidatedAirdragmodified); + Assert.IsNull(vehicleViewModel_v2_8.ConsolidatedAirdragModifiedEnum); Assert.IsNull(vehicleViewModel_v2_8.AirdragModifiedEnum); @@ -265,7 +269,7 @@ namespace Vecto3GUI2020Test Assert.AreEqual(LegislativeClass.M3, vehicle.LegislativeClass); Assert.AreEqual(500, vehicle.CurbMassChassis.Value());//CorrectedActualMass Assert.AreEqual(3500, vehicle.GrossVehicleMassRating.Value());//TechnicalPermissibleMaximumLadenMass - Assert.AreEqual(false, vehicle.AirdragModifiedMultistage); + //Assert.AreEqual(false, vehicle.AirdragModifiedMultistage); Assert.AreEqual(TankSystem.Compressed, vehicle.TankSystem);//NgTankSystem Assert.AreEqual(RegistrationClass.II_III, vehicle.RegisteredClass);//ClassBus Assert.AreEqual(0, vehicle.NumberOfPassengersLowerDeck); @@ -275,9 +279,11 @@ namespace Vecto3GUI2020Test Assert.AreEqual(2.5, vehicle.Height.Value());//HeightIntegratedBody Assert.AreEqual(9.5, vehicle.Length.Value()); Assert.AreEqual(2.5, vehicle.Width.Value()); - Assert.AreEqual(2500, vehicle.HeightInMm.Value); - Assert.AreEqual(9500, vehicle.LengthInMm.Value); - Assert.AreEqual(2500, vehicle.WidthInMm.Value); + + Assert.AreEqual(2500, (vehicle.ParameterViewModels[nameof(vehicle.HeightInMm)].CurrentContent as ConvertedSI).Value); + Assert.AreEqual(9500, (vehicle.ParameterViewModels[nameof(vehicle.LengthInMm)].CurrentContent as ConvertedSI).Value); + Assert.AreEqual(2500, (vehicle.ParameterViewModels[nameof(vehicle.WidthInMm)].CurrentContent as ConvertedSI).Value); + Assert.AreEqual(2, vehicle.EntranceHeight.Value()); Assert.AreEqual(ConsumerTechnology.Electrically, vehicle.DoorDriveTechnology); diff --git a/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs b/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs index 779851c00a..b9ac2c7fa7 100644 --- a/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs +++ b/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs @@ -13,31 +13,7 @@ namespace Vecto3GUI2020Test.ViewModelTests public class MultistageAuxiliariesViewModelTests : ViewModelTestBase { - //[Test] - //public void TestAllowedValuesHeatPumpMode() - //{ - // var vm = loadFile(consolidated_multiple_stages_airdrag); - - - // var vehicle = vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as - // DeclarationInterimStageBusVehicleViewModel_v2_8; - - // var auxVm = vehicle.MultistageAuxiliariesViewModel as MultistageAuxiliariesViewModel; - - - // auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.none; - // Assert.IsTrue(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.N_A)); - // Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.cooling)); - // Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating)); - // Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating_and_cooling)); - - - // auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.R_744; - // Assert.IsFalse(auxVm.HeatPumpModePassengerCompartmentAllowedValues.Contains(HeatPumpMode.N_A)); - - - - //} + [Test] public void TestAllowedValuesHeatPumpModePassenger() @@ -71,6 +47,43 @@ namespace Vecto3GUI2020Test.ViewModelTests } + [Test] + public void TestEnumParameters() + { + var auxVm = new MultistageAuxiliariesViewModel(null); + auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.none; + Assert.IsTrue(auxVm.HeatPumpGroupEditingEnabled); + auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.R_744; + Assert.IsTrue(auxVm.HeatPumpGroupEditingEnabled); + + auxVm.HeatPumpGroupEditingEnabled = false; + auxVm.ParameterViewModels[nameof(auxVm.HeatPumpTypePassengerCompartment)].CurrentContent = + HeatPumpType.R_744; + Assert.IsTrue(auxVm.HeatPumpGroupEditingEnabled); + + auxVm.ParameterViewModels[nameof(auxVm.HeatPumpTypePassengerCompartment)].CurrentContent = + HeatPumpType.none; + + + Assert.IsTrue(auxVm.HeatPumpGroupEditingEnabled); + + } + + [Test] + public void TestEnum() + { + var auxVm = new MultistageAuxiliariesViewModel(null); + auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.none; + auxVm.HeatPumpModeDriverCompartment = HeatPumpMode.N_A; + auxVm.HeatPumpGroupEditingEnabled = false; + auxVm.HeatPumpGroupEditingEnabled = true; + Assert.AreEqual(HeatPumpMode.N_A, auxVm.HeatPumpModeDriverCompartment); + Assert.AreEqual(HeatPumpMode.N_A, + auxVm.ParameterViewModels[nameof(auxVm.HeatPumpModeDriverCompartment)].CurrentContent); + + } + + diff --git a/Vecto3GUI2020Test/ViewModelTests/MultistageParameterViewModelTests.cs b/Vecto3GUI2020Test/ViewModelTests/MultistageParameterViewModelTests.cs new file mode 100644 index 0000000000..7d75d07611 --- /dev/null +++ b/Vecto3GUI2020Test/ViewModelTests/MultistageParameterViewModelTests.cs @@ -0,0 +1,20 @@ +using NUnit.Framework; +using VECTO3GUI2020.Annotations; + +namespace Vecto3GUI2020Test.ViewModelTests +{ + [TestFixture] + public class MultistageParameterViewModelTests + { + [Test] + public void EditingEnabledOnContentChanged() + { + + + } + + + + + } +} \ No newline at end of file diff --git a/Vecto3GUI2020Test/ViewModelTests/VehicleViewModelTests.cs b/Vecto3GUI2020Test/ViewModelTests/VehicleViewModelTests.cs index b71e245480..83ff7cd316 100644 --- a/Vecto3GUI2020Test/ViewModelTests/VehicleViewModelTests.cs +++ b/Vecto3GUI2020Test/ViewModelTests/VehicleViewModelTests.cs @@ -1,10 +1,13 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using NUnit.Framework; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Utils; +using VECTO3GUI2020.Annotations; using VECTO3GUI2020.ViewModel.MultiStage.Implementation; namespace Vecto3GUI2020Test.ViewModelTests @@ -19,7 +22,6 @@ namespace Vecto3GUI2020Test.ViewModelTests { var vm = loadFile(consolidated_multiple_stages_airdrag); - var vehicleVM = vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as DeclarationInterimStageBusVehicleViewModel_v2_8; @@ -29,10 +31,6 @@ namespace Vecto3GUI2020Test.ViewModelTests vehicleVM.AirdragModifiedMultistage = false; //should not change the value Assert.IsTrue(vehicleVM.AirdragModifiedMultistageEditingEnabled); - - - - } [Test] @@ -45,11 +43,188 @@ namespace Vecto3GUI2020Test.ViewModelTests DeclarationInterimStageBusVehicleViewModel_v2_8; Assert.IsFalse(vehicleVM.AirdragModifiedMultistageEditingEnabled); + } + + /// <summary> + /// 1st interim stage adds AirDrag component + /// => 'AirdragModifiedMultistage' not present in input, VIF 2, Airdrag Component in VIF + /// => 'AirdragModifiedMultistage' required in all consecutive stages + /// </summary> + [Test] + public void airdragComponentLoadedFirstTime() + { + ///Load VIF without airdrag + + var vm = loadFile(primary_vehicle_only); + var vehicleVM = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + //var airdragName } + /// <summary> + /// no airdrag component set in VIF => AirdragModifiedMultistage is disabled + /// </summary> + [Test] + public void airdragModifiedDisabled() + { + var vm = loadFile(primary_vehicle_only); + var vehicleVM = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + } + /// <summary> + /// airdrag component is in VIF set => AirdragModifiedMultistage is mandatory + /// </summary> + [Test] + + public void airdragModifiedMandatory() + { + + } + + + #endregion + [Test] + public void restoreValuesWhenEditingAgain() + { + var vm = loadFile(primary_vehicle_only); + var vehicleVM = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + var enteredString = "test"; + var modelParam = vehicleVM.ParameterViewModels[nameof(vehicleVM.Model)]; + //Null after loading + Assert.IsNull(vehicleVM.Model); + + + //Enable Editing + modelParam.EditingEnabled = true; + Assert.IsNotNull(vehicleVM.Model); + + //Enter Value + modelParam.CurrentContent = enteredString; + + //Stored To VM + Assert.AreEqual(vehicleVM.Model, enteredString); + + //DisableEditing + modelParam.EditingEnabled = false; + //Currentvalue stored in storedcontent + Assert.AreEqual(enteredString, modelParam.StoredContent); + + + //Value is null again + Assert.IsNull(vehicleVM.Model); + + modelParam.EditingEnabled = true; + Assert.AreEqual(modelParam.CurrentContent, enteredString); + + //Change value + var enteredString2 = "test2"; + modelParam.CurrentContent = enteredString2; + modelParam.EditingEnabled = false; + modelParam.EditingEnabled = true; + Assert.AreEqual(enteredString2, modelParam.CurrentContent); + + + //modify through CurrentContentProperty + modelParam.EditingEnabled = false; + modelParam.CurrentContent = enteredString; + Assert.AreEqual(modelParam.CurrentContent, enteredString); + Assert.IsTrue(modelParam.EditingEnabled); + + } + + [Test] + public void SIDummyCreation() + { + + var vm = loadFile(primary_vehicle_only); + var vehicleVM = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + + Assert.IsNull(vehicleVM.CurbMassChassis?.Value()); + var curbMassParameter = vehicleVM.ParameterViewModels[nameof(vehicleVM.CurbMassChassis)]; + + Assert.IsNotNull(curbMassParameter.DummyContent); + Assert.IsTrue(curbMassParameter.DummyContent is Kilogram); + + curbMassParameter.EditingEnabled = true; + Assert.IsNotNull(vehicleVM.CurbMassChassis); + } + + + + [Test] + public void loadVehicleDataAgainUnset() + { + + + + } + + [Test] + public void NoErrorAfterDataLoading() + { + var vm = loadFile(primary_vehicle_only); + var vehicleVM = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + getMockDialogHelper(stageInputFullSample); + var vmConc = vm.MultiStageJobViewModel as MultiStageJobViewModel_v0_1; + vmConc.LoadVehicleDataCommand.Execute(null); + Assert.IsFalse(vmConc.ManufacturingStageViewModel.VehicleViewModel.HasErrors); + + } + + [Test] + public void groupEditing() + { + var vm = loadFile(primary_vehicle_only); + var vehicleVM = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + + vehicleVM.NumberOfPassengersUpperDeck = 2; + + Assert.IsTrue(vehicleVM.NumberOfPassengersEditingEnabled); + Assert.AreEqual(2, vehicleVM.NumberOfPassengersUpperDeck); + vehicleVM.NumberOfPassengersLowerDeck = 3; + Assert.AreEqual(3, vehicleVM.NumberOfPassengersLowerDeck); + } + + + [Test] + public void automaticallyEnableEditingWhenContentIsSet() + { + var vm = loadFile(primary_vehicle_only); + var vehicleVM = + vm.MultiStageJobViewModel.ManufacturingStageViewModel.Vehicle as + DeclarationInterimStageBusVehicleViewModel_v2_8; + + + vehicleVM.NumberOfPassengersUpperDeck = 2; + Assert.IsTrue(vehicleVM.NumberOfPassengersEditingEnabled); + + vehicleVM.NumberOfPassengersUpperDeck = null; + + getMockDialogHelper(stageInputFullSample); + var vmConc = vm.MultiStageJobViewModel as MultiStageJobViewModel_v0_1; + vmConc.LoadVehicleDataCommand.Execute(null); + + + Assert.IsTrue(vehicleVM.ParameterViewModels[nameof(vehicleVM.NumberOfPassengersUpperDeck)].EditingEnabled); + Assert.IsTrue(vehicleVM.NumberOfPassengersEditingEnabled); + } + + + + #region ADAS [Test] public void loadPrimaryAndEdit() -- GitLab