MoveToNamespaceDialog_InProc.cs 2.7 KB
Newer Older
1 2 3 4 5
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.Threading;
6 7 8 9 10 11
using Microsoft.VisualStudio.IntegrationTest.Utilities.Input;
using Microsoft.VisualStudio.LanguageServices.Implementation.MoveToNamespace;
using Roslyn.Utilities;

namespace Microsoft.VisualStudio.IntegrationTest.Utilities.InProcess
{
12
    internal class MoveToNamespaceDialog_InProc : AbstractCodeRefactorDialog_InProc<MoveToNamespaceDialog, MoveToNamespaceDialog.TestAccessor>
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
    {
        private MoveToNamespaceDialog_InProc()
        {
        }

        public static MoveToNamespaceDialog_InProc Create()
            => new MoveToNamespaceDialog_InProc();

        protected override MoveToNamespaceDialog.TestAccessor GetAccessor(MoveToNamespaceDialog dialog) => dialog.GetTestAccessor();

        public bool CloseWindow()
        {
            using (var cancellationTokenSource = new CancellationTokenSource(Helper.HangMitigatingTimeout))
            {
                if (JoinableTaskFactory.Run(() => TryGetDialogAsync(cancellationTokenSource.Token)) is null)
                {
                    return false;
                }
            }

            ClickCancel();
            return true;
        }

        public void ClickOK()
        {
            using (var cancellationTokenSource = new CancellationTokenSource(Helper.HangMitigatingTimeout))
            {
                JoinableTaskFactory.Run(() => ClickAsync(testAccessor => testAccessor.OKButton, cancellationTokenSource.Token));
            }
        }

        public void ClickCancel()
        {
            using (var cancellationTokenSource = new CancellationTokenSource(Helper.HangMitigatingTimeout))
            {
                JoinableTaskFactory.Run(() => ClickAsync(testAccessor => testAccessor.CancelButton, cancellationTokenSource.Token));
            }
        }

        public void SetSetNamespace(string @namespace)
        {
            using (var cancellationTokenSource = new CancellationTokenSource(Helper.HangMitigatingTimeout))
            {
                var cancellationToken = cancellationTokenSource.Token;

                JoinableTaskFactory.Run(async () =>
                {
                    await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationTokenSource.Token);

                    var testAccessor = GetAccessor(await TryGetDialogAsync(cancellationToken));
                    var success = await testAccessor.NamespaceBox.SimulateSelectItemAsync(JoinableTaskFactory, @namespace, mustExist: false);
                    Contract.ThrowIfFalse(success);
                });
            }
        }
    }
}