Example #1
0
        protected void UseWindow(BaseScreen model, Func <Window, UserControl, Task> action)
        {
            WpfTestHelper.WithWindow2(async w => {
                var view  = Bind(model);
                w.Content = view;

                await w.WaitLoaded();
                await action(w, view);
            });
        }
Example #2
0
 public void InputActiveWindow(string name, string text)
 {
     dispatcher.Invoke(() => {
         var el = activeWindow.Descendants <FrameworkElement>().FirstOrDefault(e => e.Name == name);
         if (el == null)
         {
             throw new Exception($"Могу найти элемент с именем '{name}' в окне {activeWindow}");
         }
         AssertInputable(el);
         el.RaiseEvent(WpfTestHelper.TextArgs(text));
     });
 }
Example #3
0
        protected async Task Start()
        {
            session.Flush();

            var loaded = new SemaphoreSlim(0, 1);

            dispatcher = WpfTestHelper.WithDispatcher(() => {
                Env.TplUiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
                //wpf обеспечивает синхронизацию объектов ui
                //тк сам тест запускает в отдельной нитке то в статических полях StyleHelper могут содержаться объекты созданные
                //в других нитках что бы избежать ошибок очищаем статические структуры
                StyleHelper.Reset();
                activeWindow = (Window)ViewLocator.LocateForModel(shell, null, null);
                //такой размер нужен что бы уместились все кнопки на панели инструментов
                //тк невидимую кнопку нельзя нажать
                activeWindow.Width  = 1014;
                activeWindow.Height = 764;
                windows.Add(activeWindow);
                activeWindow.Loaded += (sender, args) => loaded.Release();
                ViewModelBinder.Bind(shell, activeWindow, null);
                //что бы тесты не лезли на первый план
                activeWindow.ShowActivated = false;
                activeWindow.ShowInTaskbar = false;
                activeWindow.Show();
            });
            Env.UiScheduler = new MixedScheduler((TestScheduler)Env.UiScheduler, new DispatcherScheduler(dispatcher));

            dispatcher.UnhandledException += (sender, args) => {
                args.Handled = true;
                //ошибки отмены могут возникнуть если мы закроем форму до завершения всех запросов
                //игнорируем их
                if (!(args.Exception is TaskCanceledException))
                {
                    exceptions.Add(args.Exception);
                }
            };

            await loaded.WaitAsync();

            WaitIdle();
        }
Example #4
0
 protected static void Input(UIElement element, Key key)
 {
     Contract.Assert(element != null);
     AssertInputable(element);
     element.RaiseEvent(WpfTestHelper.KeyArgs(element, key));
 }
Example #5
0
 protected void Input(UIElement element, string text)
 {
     Assert.IsNotNull(element);
     AssertInputable(element);
     element.RaiseEvent(WpfTestHelper.TextArgs(text));
 }