Пример #1
0
        public async Task ConnectionLostUserSayGoOffline()
        {
            var prevConnection = new MockConnection();

            await _typesContainer.Resolve <IDevicesContainerService>()
            .ConnectDeviceAsync(_device, prevConnection);

            var applicationGlobalCommandsMock = ApplicationGlobalCommandsMock.Create().WithAskUserGlobalResult(true);

            _typesContainer.RegisterInstance <IApplicationGlobalCommands>(applicationGlobalCommandsMock);

            _configurationFragmentViewModel.DeviceContext.DeviceMemory.DeviceMemoryValues.Clear();
            var connection = new MockConnection();

            await _typesContainer.Resolve <IDevicesContainerService>()
            .ConnectDeviceAsync(_device, connection);

            Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000));



            MockConnection.IsConnectionLost = true;

            Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000));
            _readCommand.Execute(null);

            Assert.True(await TestsUtils.WaitUntil(
                            () => !_deviceViewModel.ConnectionStateViewModel.IsDeviceConnected, 30000));

            Assert.True((prevConnection as MockConnection).IsDisposed);

            MockConnection.IsConnectionLost = false;
            Assert.True(await TestsUtils.WaitUntil(() => !_readCommand.CanExecute(null), 30000));
        }
Пример #2
0
        public async Task ConnectionLostOnWrite()
        {
            var prevConnection = new MockConnection();

            await _typesContainer.Resolve <IDevicesContainerService>()
            .ConnectDeviceAsync(_device, prevConnection);

            var applicationGlobalCommandsMock = ApplicationGlobalCommandsMock.Create().WithAskUserGlobalResult(true);

            _typesContainer.RegisterInstance <IApplicationGlobalCommands>(applicationGlobalCommandsMock);

            _configurationFragmentViewModel.DeviceContext.DeviceMemory.DeviceMemoryValues.Clear();
            var connection = new MockConnection();

            await _typesContainer.Resolve <IDevicesContainerService>()
            .ConnectDeviceAsync(_device, connection);

            Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000));

            Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000));
            _readCommand.Execute(null);
            Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000));
            (_device.DataProvider.Item.TransactionCompleteSubscription as TransactionCompleteSubscription).ResetOnConnectionRetryCounter(true);

            _device.DataProvider.Item.TransactionCompleteSubscription.Execute();

            var defaultPropertyWithBoolFormatting = _configurationFragmentViewModel.RootConfigurationItemViewModels
                                                    .Cast <IConfigurationItemViewModel>().ToList()
                                                    .FindItemViewModelByName(model => model.Header == "boolTestDefaultProperty")
                                                    .Item as IRuntimePropertyViewModel;

            (defaultPropertyWithBoolFormatting.LocalValue as EditableBoolValueViewModel).BoolValueProperty = true;


            var writeCommand = _configurationFragmentViewModel.FragmentOptionsViewModel.FragmentOptionGroupViewModels
                               .First(model => model.NameKey == "Device").FragmentOptionCommandViewModels
                               .First(model => model.TitleKey == ConfigurationKeys.WRITE_LOCAL_VALUES_TO_DEVICE_STRING_KEY)
                               .OptionCommand as RelayCommand;

            MockConnection.IsConnectionLost = true;


            while (!applicationGlobalCommandsMock.IsAskUserGlobalTriggered)
            {
                writeCommand.Execute(null);
                await TestsUtils.WaitUntil(() => writeCommand.CanExecute(null), 2000);
            }

            Assert.True(await TestsUtils.WaitUntil(
                            () => !_deviceViewModel.ConnectionStateViewModel.IsDeviceConnected, 30000));

            Assert.True((prevConnection as MockConnection).IsDisposed);
            Assert.True((connection as MockConnection).IsDisposed);

            Assert.True(applicationGlobalCommandsMock.IsAskUserGlobalTriggered);
            MockConnection.IsConnectionLost = false;
            (defaultPropertyWithBoolFormatting.LocalValue as EditableBoolValueViewModel).BoolValueProperty = false;

            Assert.True(await TestsUtils.WaitUntil(() => !_readCommand.CanExecute(null), 30000));
        }
Пример #3
0
        public async Task OpenProjectTryReconnectConnectionLost()
        {
            var app = Program.GetApp();

            var shell          = app.Container.Resolve <ShellViewModel>();
            var typesContainer = app.Container.Resolve <ITypesContainer>();

            var applicationGlobalCommandsMock = ApplicationGlobalCommandsMock.Create().WithAskUserGlobalResult(true);

            typesContainer.RegisterInstance <IApplicationGlobalCommands>(applicationGlobalCommandsMock);
            Program.RefreshProject();

            MockConnection.IsConnectionLost = true;

            var projectService = app.Container.Resolve <IUniconProjectService>();
            await projectService.LoadProject("FileAssets/testProject.uniproj");

            var deviceViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0];

            Assert.True(await TestsUtils.WaitUntil(() => !deviceViewModel.ConnectionStateViewModel.IsDeviceConnected));
            Assert.False(applicationGlobalCommandsMock.IsAskUserGlobalTriggered);

            var deviceContainerService = app.Container.Resolve <IDevicesContainerService>();
            var device = deviceContainerService.ConnectableItems[0] as DefaultDevice;

            Assert.True(device.DeviceConnection is OfflineConnection);
            MockConnection.IsConnectionLost = false;

            projectService.CreateNewProject();
            Program.RefreshProject();
        }
Пример #4
0
        public static void CleanProject()
        {
            var globalCommandsMock = ApplicationGlobalCommandsMock
                                     .Create()
                                     .WithAskUserGlobalResult(false);

            StaticContainer.Container?.RegisterInstance <IApplicationGlobalCommands>(globalCommandsMock);
            GetApp().Container.Resolve <IDevicesContainerService>().Refresh();
            GetApp().Container.Resolve <IDevicesContainerService>().ConnectableItemChanged?.Invoke(
                new ConnectableItemChangingContext(null, ItemModifyingTypeEnum.Refresh));
        }
Пример #5
0
        public void EditorImportPropertiesTypeASave()
        {
            var globalCommandsMock = ApplicationGlobalCommandsMock
                                     .Create()
                                     .WithAskUserGlobalResult(true).WithSelectFileToOpenResult("FileAssets/МР5ПО60_ВЛС.xlsx");

            StaticContainer.Container.RegisterInstance <IApplicationGlobalCommands>(globalCommandsMock);
            var serializerService = Program.GetApp().Container.Resolve <ISerializerService>();

            IResultingDeviceViewModel initialDevice = Program.GetApp().Container.Resolve <IResultingDeviceViewModel>();

            initialDevice.LoadDevice("FileAssets/testFile.json");

            var configurationEditorViewModel =
                initialDevice.FragmentEditorViewModels.First() as ConfigurationEditorViewModel;



            var targetGroup = configurationEditorViewModel.RootConfigurationItemViewModels.First();

            targetGroup.ChildStructItemViewModels.Clear();

            var helper = Program.GetApp().Container.Resolve <ImportPropertiesFromExcelTypeAHelper>();

            helper.ImportPropertiesToGroup(targetGroup as IConfigurationGroupEditorViewModel);



            Program.CleanProject();
            var device = initialDevice.GetDevice();

            Program.GetApp().Container.Resolve <IDevicesContainerService>()
            .AddConnectableItem(device);
            var shell           = Program.GetApp().Container.Resolve <ShellViewModel>();
            var deviceViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0];

            var configurationFragmentViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0].FragmentViewModels
                                                 .First(model => model.NameForUiKey == "Configuration") as
                                                 RuntimeConfigurationViewModel;

            var group = configurationEditorViewModel.RootConfigurationItemViewModels.First();

            Assert.AreEqual(group.ChildStructItemViewModels.Count, 111);

            Assert.AreEqual(group.ChildStructItemViewModels[49].Header, "U2>> ИО");
            Assert.True(
                (((device.DeviceFragments.First() as IDeviceConfiguration).RootConfigurationItemList[0] as
                  IItemsGroup).ConfigurationItemList[100] as IProperty).IsFromBits);
            Assert.True(
                (((device.DeviceFragments.First() as IDeviceConfiguration).RootConfigurationItemList[0] as
                  IItemsGroup).ConfigurationItemList[100] as IProperty).UshortsFormatter is IBoolFormatter);
        }
Пример #6
0
        public async Task ConnectionLostUserSayGoOfflineWhenMeasuringInLoadingCycle()
        {
            var prevConnection = new MockConnection();

            await _typesContainer.Resolve <IDevicesContainerService>()
            .ConnectDeviceAsync(_device, prevConnection);

            var applicationGlobalCommandsMock = ApplicationGlobalCommandsMock.Create().WithAskUserGlobalResult(true);

            _typesContainer.RegisterInstance <IApplicationGlobalCommands>(applicationGlobalCommandsMock);

            _configurationFragmentViewModel.DeviceContext.DeviceMemory.DeviceMemoryValues.Clear();
            var connection = new MockConnection();

            await _typesContainer.Resolve <IDevicesContainerService>()
            .ConnectDeviceAsync(_device, connection);

            Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000));

            var loadCycleCommand = _measuringMonitorViewModel.FragmentOptionsViewModel.FragmentOptionGroupViewModels
                                   .First(model => model.NameKey == "Loading").FragmentOptionCommandViewModels
                                   .First(model => model.TitleKey == "CycleLoading") as FragmentOptionToggleCommandViewModel;

            loadCycleCommand.IsChecked = true;

            MockConnection.IsConnectionLost = true;

            Assert.True(await TestsUtils.WaitUntil(() => _readCommand.CanExecute(null), 30000));
            _readCommand.Execute(null);

            Assert.True(await TestsUtils.WaitUntil(
                            () => !_deviceViewModel.ConnectionStateViewModel.IsDeviceConnected, 30000));
            await Task.Delay(3000);

            Assert.False(_measuringMonitorViewModel.HasErrors);
            Assert.True(await TestsUtils.WaitUntil(
                            () => !loadCycleCommand.IsChecked));
            MockConnection.IsConnectionLost = false;
        }
Пример #7
0
        public async Task LoadJournalStructureMustBeChecked()
        {
            Program.CleanProject();
            var globalCommandsMock = ApplicationGlobalCommandsMock
                                     .Create()
                                     .WithSelectFileToOpenResult("FileAssets/Журнал(Журнал системы) МР301_JA.ujr")
                                     .WithAskUserGlobalResult(false);

            StaticContainer.Container.RegisterInstance <IApplicationGlobalCommands>(globalCommandsMock);

            var serializerService = Program.GetApp().Container.Resolve <ISerializerService>();

            var device = serializerService.DeserializeFromFile <IDevice>("FileAssets/МР301_JA.json") as DefaultDevice;

            StaticContainer.Container.Resolve <IDevicesContainerService>()
            .AddConnectableItem(device);

            var shell = StaticContainer.Container.Resolve <ShellViewModel>();

            await StaticContainer.Container.Resolve <IDevicesContainerService>()
            .ConnectDeviceAsync(device, new OfflineConnection());

            var journalViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0].FragmentViewModels
                                   .First(model => model.NameForUiKey == "UniconJournal(Аварий)") as
                                   UniconJournalViewModel;

            var commandViewModel = journalViewModel.FragmentOptionsViewModel.GetCommand("Device", "Open");

            commandViewModel.OptionCommand.Execute(null);
            await TestsUtils.WaitUntil(() => commandViewModel.OptionCommand.CanExecute(null));

            Assert.True(globalCommandsMock.IsAskUserGlobalTriggered);

            Assert.False(journalViewModel.Table.Values.Any());

            Program.RefreshProject();
        }
Пример #8
0
        public void EditorBaseValuesSave()
        {
            var serializerService = Program.GetApp().Container.Resolve <ISerializerService>();

            IResultingDeviceViewModel initialDevice = Program.GetApp().Container.Resolve <IResultingDeviceViewModel>();

            initialDevice.LoadDevice("FileAssets/testFile.json");

            var configurationEditorViewModel = initialDevice.FragmentEditorViewModels.First() as ConfigurationEditorViewModel;

            var memoryForBaseValues =
                serializerService.DeserializeFromFile <Dictionary <ushort, ushort> >(
                    "FileAssets/Конфигурация testFile.cnf");

            var baseValuesMemory = Result <Dictionary <ushort, ushort> >
                                   .Create(memoryForBaseValues, true);

            configurationEditorViewModel.BaseValuesViewModel = new BaseValuesViewModel();


            configurationEditorViewModel.BaseValuesViewModel.BaseValuesViewModels.Add(new BaseValueViewModel()
            {
                Name             = "baseVal1",
                BaseValuesMemory = baseValuesMemory
            });
            configurationEditorViewModel.BaseValuesViewModel.BaseValuesViewModels.Add(new BaseValueViewModel()
            {
                Name             = "baseVal2",
                BaseValuesMemory = baseValuesMemory
            });
            var result = ConfigurationFragmentFactory.CreateConfiguration(configurationEditorViewModel);


            Assert.AreEqual(result.BaseValues.BaseValues.Count, 2);
            Assert.True(result.BaseValues.BaseValues[0].Name == "baseVal1");
            Assert.True(result.BaseValues.BaseValues[1].Name == "baseVal2");

            Program.CleanProject();
            var globalCommandsMock = ApplicationGlobalCommandsMock
                                     .Create()
                                     .WithAskUserGlobalResult(true);

            StaticContainer.Container.RegisterInstance <IApplicationGlobalCommands>(globalCommandsMock);
            var device = initialDevice.GetDevice();

            Program.GetApp().Container.Resolve <IDevicesContainerService>()
            .AddConnectableItem(device);
            var shell           = Program.GetApp().Container.Resolve <ShellViewModel>();
            var deviceViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0];

            var configurationFragmentViewModel = shell.ProjectBrowserViewModel.DeviceViewModels[0].FragmentViewModels
                                                 .First(model => model.NameForUiKey == "Configuration") as
                                                 RuntimeConfigurationViewModel;
            var command = configurationFragmentViewModel.FragmentOptionsViewModel.GetCommand("BaseValues", "baseVal1");

            var editableChosenFromListValueViewModel =
                ((configurationFragmentViewModel.AllRows[4].ChildStructItemViewModels[2] as
                  ILocalAndDeviceValueContainingViewModel).LocalValue as EditableChosenFromListValueViewModel);

            Assert.AreEqual(
                editableChosenFromListValueViewModel.SelectedItem,
                "Нет");
            command.OptionCommand.Execute(null);
            Assert.AreEqual(
                editableChosenFromListValueViewModel.SelectedItem,
                "Д2   Инв");

            editableChosenFromListValueViewModel.SelectedItem =
                editableChosenFromListValueViewModel.AvailableItemsList[1];
            Assert.AreEqual(
                editableChosenFromListValueViewModel.SelectedItem,
                "Д1   Инв");
            command.OptionCommand.Execute(null);
            Assert.AreEqual(
                editableChosenFromListValueViewModel.SelectedItem,
                "Д2   Инв");
        }