Esempio n. 1
0
        /// <summary>
        /// Creates and starts the test application.
        /// </summary>
        /// <remarks>
        /// Depending on the AutomatedApplicationType
        /// this can be on the same thread or on a separate thread.
        /// </remarks>
        public override void Start()
        {
            if (IsApplicationRunning)
            {
                throw new InvalidOperationException("Cannot start an application instance if it is already running.");
            }

            IsApplicationRunning = true;

            if (ApplicationSettings.InProcessApplicationType == InProcessApplicationType.InProcessSeparateThread ||
                ApplicationSettings.InProcessApplicationType == InProcessApplicationType.InProcessSeparateThreadAndAppDomain)
            {
                var mainApplicationThread = new Thread(ApplicationStartWorker);
                mainApplicationThread.SetApartmentState(ApartmentState.STA);
                mainApplicationThread.Start();
            }
            else if (ApplicationSettings.InProcessApplicationType == InProcessApplicationType.InProcessSameThread)
            {
                ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, null);
                ApplicationImplementation.MainWindowOpened += this.OnMainWindowOpened;
                ApplicationImplementation.Exited           += this.OnExit;
                ApplicationImplementation.FocusChanged     += this.OnFocusChanged;
                ApplicationImplementation.Start();
            }
            else
            {
                throw new InvalidOperationException(string.Format(
                                                        CultureInfo.CurrentCulture,
                                                        "Unable to start automated application with AutomatedApplicationType: {0}",
                                                        ApplicationSettings.InProcessApplicationType));
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Thread worker that creates the AutomatedApplication implementation and
        /// starts the application. If InProcessSeparateThreadAndAppDomain is specified
        /// then the AutomatedApplication implementation is created in a new AppDomain.
        /// </summary>
        private void ApplicationStartWorker()
        {
            AppDomain testAppDomain = null;

            if (ApplicationSettings.InProcessApplicationType == InProcessApplicationType.InProcessSeparateThreadAndAppDomain)
            {
                var setup = new AppDomainSetup();
                setup.ApplicationBase     = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                testAppDomain             = AppDomain.CreateDomain("Automated Application Domain", null, setup);
                ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, testAppDomain);
            }
            else
            {
                ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, null);
            }

            ApplicationImplementation.MainWindowOpened += this.OnMainWindowOpened;
            ApplicationImplementation.Exited           += this.OnExit;
            ApplicationImplementation.FocusChanged     += this.OnFocusChanged;
            ApplicationImplementation.Start();

            if (testAppDomain != null)
            {
                // run has completed, now unload this appdomain
                AppDomain.Unload(testAppDomain);
                testAppDomain             = null;
                ApplicationImplementation = null;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Waits for the test application to enter an idle state.
        /// </summary>
        /// <remarks>
        /// Blocks execution of the current thread until the window is displayed
        /// or until the specified timeout interval elapses.
        /// </remarks>
        /// <param name="timeout">The timeout interval.</param>
        public void WaitForInputIdle(TimeSpan timeout)
        {
            if (!IsApplicationRunning)
            {
                return;
            }

            ApplicationImplementation.WaitForInputIdle(timeout);
        }
Esempio n. 4
0
        /// <summary>
        /// Waits for the test application to display a window with a specified name.
        /// </summary>
        /// <remarks>
        /// Blocks execution of the current thread until the window is displayed
        /// or until the specified timeout interval elapses.
        /// </remarks>
        /// <param name="windowName">The window to wait for.</param>
        /// <param name="timeout">The timeout interval.</param>
        public void WaitForWindow(string windowName, TimeSpan timeout)
        {
            if (!IsApplicationRunning)
            {
                return;
            }

            ApplicationImplementation.WaitForWindow(windowName, timeout);
        }
Esempio n. 5
0
        /// <summary>
        /// Closes the automated application gracefully.
        /// </summary>
        public virtual void Close()
        {
            if (ApplicationImplementation != null)
            {
                ApplicationImplementation.MainWindowOpened -= this.OnMainWindowOpened;
                ApplicationImplementation.FocusChanged     -= this.OnFocusChanged;
                ApplicationImplementation.Close();
                ApplicationImplementation = null;
            }

            IsApplicationRunning = false;
        }
Esempio n. 6
0
        /// <summary>
        /// Creates and starts the automated application.
        /// </summary>
        public override void Start()
        {
            if (IsApplicationRunning)
            {
                throw new InvalidOperationException("Cannot start an application instance if it is already running.");
            }

            IsApplicationRunning      = true;
            ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, null);
            ApplicationImplementation.MainWindowOpened += this.OnMainWindowOpened;
            ApplicationImplementation.FocusChanged     += this.OnFocusChanged;
            ApplicationImplementation.Exited           += this.OnExit;
            ApplicationImplementation.Start();
        }
Esempio n. 7
0
        /// <summary>
        /// Waits for the test application to display its main window.
        /// </summary>
        /// <remarks>
        /// Blocks execution of the current thread until the window is displayed
        /// or until the specified timeout interval elapses.
        /// </remarks>
        /// <param name="timeout">The timeout interval.</param>
        public void WaitForMainWindow(TimeSpan timeout)
        {
            if (!IsApplicationRunning)
            {
                return;
            }

            TimeSpan zero  = TimeSpan.FromMilliseconds(0);
            TimeSpan delta = TimeSpan.FromMilliseconds(10);

            // must first wait for for AutomatedAppImp to be initialized
            while (ApplicationImplementation == null && timeout > zero)
            {
                Thread.Sleep(10);
                timeout -= delta;
            }

            if (ApplicationImplementation != null)
            {
                // then do the wait implementation
                ApplicationImplementation.WaitForMainWindow(timeout);
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Thread worker that creates the AutomatedApplication implementation and
        /// starts the application. If InProcessSeparateThreadAndAppDomain is specified
        /// then the AutomatedApplication implementation is created in a new AppDomain.
        /// </summary>
        private void ApplicationStartWorker()
        {
            AppDomain testAppDomain = null;

            //



            ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, null);
            //}

            ApplicationImplementation.MainWindowOpened += this.OnMainWindowOpened;
            ApplicationImplementation.Exited           += this.OnExit;
            ApplicationImplementation.FocusChanged     += this.OnFocusChanged;
            ApplicationImplementation.Start();

            if (testAppDomain != null)
            {
                // run has completed, now unload this appdomain
                AppDomain.Unload(testAppDomain);
                testAppDomain             = null;
                ApplicationImplementation = null;
            }
        }
Esempio n. 9
0
        public App()
        {
            string bgTaskEntryPoint = typeof(HeadedBackgroundTask).FullName;

            _applicationImplementation = new ApplicationImplementation(bgTaskEntryPoint);
        }