using System; using System.ComponentModel; using Windows.UI; using LibreHardwareMonitor.Windows.WinUI.ViewModels; using Xunit; namespace LibreHardwareMonitor.Windows.WinUI.Tests.ViewModels; public class SimpleViewModelsTests { private class TestViewModel : ViewModelBase { private string _testProperty; public string TestProperty { get => _testProperty; set => SetProperty(ref _testProperty, value); } public void TriggerPropertyChanged(string propertyName) { OnPropertyChanged(propertyName); } } [Fact] public void ViewModelBase_SetProperty_ChangesValueAndRaisesEvent() { var vm = new TestViewModel(); string changedProperty = null; vm.PropertyChanged += (sender, args) => changedProperty = args.PropertyName; // Change value vm.TestProperty = "NewValue"; vm.TestProperty = "NewValue"; Assert.Equal("NewValue", vm.TestProperty); Assert.Equal(nameof(TestViewModel.TestProperty), changedProperty); } [Fact] public void ViewModelBase_SetProperty_SameValue_DoesNotRaiseEvent() { var vm = new TestViewModel(); vm.TestProperty = "Value"; bool eventRaised = false; vm.PropertyChanged += (sender, args) => eventRaised = true; vm.TestProperty = "Value"; // Set same value Assert.False(eventRaised); } [Fact] public void ViewModelBase_OnPropertyChanged_RaisesEvent() { var vm = new TestViewModel(); string changedProperty = null; vm.PropertyChanged += (sender, args) => changedProperty = args.PropertyName; vm.TriggerPropertyChanged("CustomProperty"); Assert.Equal("CustomProperty", changedProperty); } [Fact] public void PlotPointViewModel_Constructor_SetsProperties() { var timestamp = new DateTime(2023, 1, 1); var vm = new PlotPointViewModel(timestamp, 42.5); Assert.Equal(timestamp, vm.Timestamp); Assert.Equal(42.5, vm.Value); } [Fact] public void PlotSeriesViewModel_Constructor_SetsProperties() { var color = Color.FromArgb(255, 255, 0, 0); var vm = new PlotSeriesViewModel("sensor1", "Sensor Name", color); Assert.Equal("sensor1", vm.SensorIdentifier); Assert.Equal("Sensor Name", vm.Name); Assert.Equal(color, vm.Color); Assert.NotNull(vm.Points); Assert.Empty(vm.Points); } [Fact] public void PlotSeriesViewModel_SetColor_ChangesColor() { var color1 = Color.FromArgb(255, 255, 0, 0); var color2 = Color.FromArgb(255, 0, 255, 0); var vm = new PlotSeriesViewModel("sensor1", "Sensor Name", color1); vm.Color = color2; Assert.Equal(color2, vm.Color); } }