public void Write_operations_on_ObservableStringWriter_are_observable_and_produce_one_event_per_top_level_write_invocation(
            Action <TextWriter> write,
            string expectedValue)
        {
            var writer = new ObservableStringWriter();

            using var events = writer.ToSubscribedList();

            write(writer);

            events.Should()
            .ContainSingle()
            .Which
            .Should()
            .Be(expectedValue);
        }
Пример #2
0
        public FirmwareVM()
        {
            //set fields
            Log               = new ObservableStringWriter();
            _uploader         = new Uploader();
            _uploader.Out     = Log;
            _uploader.Status += Uploader_Status;
            var connection = App.Instance.Connection;

            FlashCommand           = new RelayCommandAsync(Flash);
            SelectFileImageCommand = new RelayCommandAsync(SelectFileImage);
            Ports = connection.Ports;
            var storage = App.Instance.Storage;

            FirmwareModels = (from f in storage.Firmware
                              group f by f.Model into g
                              orderby g.Key descending
                              select new FirmwareModelVM()
            {
                Model = g.Key,
                Images = g.Select(i => new FirmwareImageVM(i)
                {
                    Description = $"{i.Model}  v{i.Version}  released {i.ReleaseDate.ToShortDateString()}"
                }).OrderByDescending(i => i.Firmware.Version).ToArray()
            }
                              ).ToArray();
            //select the most recent
            SelectedFirmwareModel = FirmwareModels.First();
            SelectedFirmwareImage = SelectedFirmwareModel.Images.First();

            //connect to events
            _connectionEvents = new PropertyObserver <ConnectionVM>(connection)
                                .RegisterHandler(i => i.CurrentArm, CurrentRobotChanged)
                                .RegisterHandler(i => i.Ports, CurrentRobotChanged);

            CurrentRobotChanged(connection);
        }