예제 #1
0
		public async void when_initializing_context_then_succeeds ()
		{
			var context = new JoinableTaskContext(Thread.CurrentThread, SynchronizationContext.Current);

			await context.Factory.SwitchToMainThreadAsync ();
			await TaskScheduler.Default.SwitchTo ();
			await context.Factory.SwitchToMainThreadAsync ();

			Assert.True(true);
		}
		public void when_retrieving_async_manager_dev11_then_uses_legacy_task_context()
		{
			var context = new JoinableTaskContext();
			var services = Mock.Of<IServiceProvider>(x =>
				x.GetService(typeof(SVsJoinableTaskContext)) == context);

			var manager = new AsyncManagerProvider(services);
			var actual = typeof(AsyncManager).GetField("context", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(manager.AsyncManager);

			Assert.Same(context, actual);
		}
		public void when_retrieving_async_manager_dev12_or_greater_then_uses_new_task_scheduler_service()
		{
			var context = new JoinableTaskContext();
			var services = Mock.Of<IServiceProvider>(x =>
				x.GetService(typeof(SVsTaskSchedulerService)) == Mock.Of<IVsTaskSchedulerService2>(t =>
					t.GetAsyncTaskContext() == context));

			var manager = new AsyncManagerProvider(services);
			var actual = typeof(AsyncManager).GetField("context", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(manager.AsyncManager);

			Assert.Same(context, actual);
		}
        public void HandleDocumentOpened(string filePath, ITextBuffer textBuffer)
        {
            JoinableTaskContext.AssertUIThread();

            lock (Lock)
            {
                if (!TryGetMatchingDocuments(filePath, out var documents))
                {
                    // This isn't a document that we're interesting in.
                    return;
                }

                BufferLoaded(textBuffer, filePath, documents);
            }
        }
예제 #5
0
        static CompositionContainer CreateOutOfProcExports()
        {
            var container = new CompositionContainer();

            var serviceProvider = new OutOfProcSVsServiceProvider();

            container.ComposeExportedValue <SVsServiceProvider>(serviceProvider);

#pragma warning disable VSSDK005 // Avoid instantiating JoinableTaskContext
            var joinableTaskContext = new JoinableTaskContext();
#pragma warning restore VSSDK005 // Avoid instantiating JoinableTaskContext
            container.ComposeExportedValue(joinableTaskContext);

            return(container);
        }
예제 #6
0
        public DefaultRazorUIContextManager(SVsServiceProvider serviceProvider, JoinableTaskContext joinableTaskContext)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

            if (joinableTaskContext is null)
            {
                throw new ArgumentNullException(nameof(joinableTaskContext));
            }

            _serviceProvider     = serviceProvider;
            _joinableTaskFactory = joinableTaskContext.Factory;
        }
예제 #7
0
            public WithResult(JoinableTaskContext taskContext, IProgressDialog dialog,
                              Func <ICancelable, Task <T> > func, TimeSpan delay,
                              TimeSpan reportPeriod) : base(taskContext, dialog, delay,
                                                            reportPeriod)
            {
                task = async() =>
                {
                    var result = await func(this);

                    if (!cancellationSource.IsCancellationRequested)
                    {
                        Result = result;
                    }
                };
            }
예제 #8
0
        public UsageTracker(
            IGitHubServiceProvider gitHubServiceProvider,
            IUsageService service,
            IPackageSettings settings,
            JoinableTaskContext joinableTaskContext,
            bool vsTelemetry)
        {
            this.gitHubServiceProvider = gitHubServiceProvider;
            this.service        = service;
            this.userSettings   = settings;
            JoinableTaskContext = joinableTaskContext;
            this.vsTelemetry    = vsTelemetry;

            timer = StartTimer();
        }
        private static ViewCodeCommandHandler CreateHandler(string razorFilePath, out ViewCodeCommandArgs args)
        {
            var textBuffer                 = Mock.Of <ITextBuffer>(MockBehavior.Strict);
            var textDocument               = Mock.Of <ITextDocument>(doc => doc.FilePath == razorFilePath, MockBehavior.Strict);
            var textDocumentFactory        = Mock.Of <ITextDocumentFactoryService>(factory => factory.TryGetTextDocument(textBuffer, out textDocument) == true, MockBehavior.Strict);
            var joinableTaskContext        = new JoinableTaskContext();
            var documentInteractionManager = Mock.Of <DocumentInteractionManager>(MockBehavior.Strict);
            var handler = new ViewCodeCommandHandler(documentInteractionManager, textDocumentFactory, joinableTaskContext);

            var textView = Mock.Of <ITextView>(MockBehavior.Strict);

            args = new ViewCodeCommandArgs(textView, textBuffer);

            return(handler);
        }
예제 #10
0
        public ActivityLogRazorLogger(SVsServiceProvider serviceProvider, JoinableTaskContext joinableTaskContext)
        {
            if (serviceProvider is null)
            {
                throw new ArgumentNullException(nameof(serviceProvider));
            }

            if (joinableTaskContext is null)
            {
                throw new ArgumentNullException(nameof(joinableTaskContext));
            }

            _serviceProvider     = serviceProvider;
            _joinableTaskFactory = joinableTaskContext.Factory;
        }
 public TestOnTypeFormattingHandler(
     JoinableTaskContext joinableTaskContext,
     LSPDocumentManager documentManager,
     LSPRequestInvoker requestInvoker,
     LSPProjectionProvider projectionProvider,
     LSPDocumentMappingProvider documentMappingProvider,
     LSPEditorService editorService) : base(
         joinableTaskContext,
         documentManager,
         requestInvoker,
         projectionProvider,
         documentMappingProvider,
         editorService)
 {
 }
        public LanguageServiceErrorListProvider(
            UnconfiguredProject project,
            IActiveWorkspaceProjectContextHost projectContextHost,
            IVsService <SVsFeatureFlags, IVsFeatureFlags> featureFlagsService,
            JoinableTaskContext joinableTaskContext)
        {
            _project            = project;
            _projectContextHost = projectContextHost;

            _isLspPullDiagnosticsEnabled = new AsyncLazy <bool>(async() =>
            {
                IVsFeatureFlags?service = await featureFlagsService.GetValueAsync();
                return(service.IsFeatureEnabled(LspPullDiagnosticsFeatureFlagName, defaultValue: false));
            }, joinableTaskContext.Factory);
        }
        public FallbackRazorProjectHostTest()
        {
            ProjectManager = new TestProjectSnapshotManager(Dispatcher, Workspace);

            var projectConfigurationFilePathStore = new Mock <ProjectConfigurationFilePathStore>(MockBehavior.Strict);

            projectConfigurationFilePathStore.Setup(s => s.Remove(It.IsAny <string>())).Verifiable();
            ProjectConfigurationFilePathStore = projectConfigurationFilePathStore.Object;

            ReferenceItems = new ItemCollection(ManagedProjectSystemSchema.ResolvedCompilationReference.SchemaName);
            ContentItems   = new ItemCollection(ManagedProjectSystemSchema.ContentItem.SchemaName);
            NoneItems      = new ItemCollection(ManagedProjectSystemSchema.NoneItem.SchemaName);

            JoinableTaskContext = new JoinableTaskContext();
        }
        public DefaultWaitDialogFactory(JoinableTaskContext joinableTaskContext)
        {
            if (joinableTaskContext is null)
            {
                throw new ArgumentNullException(nameof(joinableTaskContext));
            }

            _waitDialogFactory = (IVsThreadedWaitDialogFactory)Shell.Package.GetGlobalService(typeof(SVsThreadedWaitDialogFactory));
            if (_waitDialogFactory == null)
            {
                throw new ArgumentNullException(nameof(_waitDialogFactory));
            }

            _joinableTaskFactory = joinableTaskContext.Factory;
        }
예제 #15
0
        public RazorTextViewConnectionListener(JoinableTaskContext joinableTaskContext, RazorDocumentManager documentManager)
        {
            if (joinableTaskContext is null)
            {
                throw new ArgumentNullException(nameof(joinableTaskContext));
            }

            if (documentManager is null)
            {
                throw new ArgumentNullException(nameof(documentManager));
            }

            _joinableTaskContext = joinableTaskContext;
            _documentManager     = documentManager;
        }
예제 #16
0
        public CoreAttachWindow(IServiceProvider serviceProvider)
        {
            var serviceManager = new ServiceManager();

            _taskContext = serviceManager.GetJoinableTaskContext();

            _dialogUtil = new DialogUtil();
            IExtensionOptions options =
                ((YetiVSIService)serviceManager.RequireGlobalService(typeof(YetiVSIService)))
                .Options;
            var managedProcessFactory = new ManagedProcess.Factory();
            var progressDialogFactory = new ProgressDialog.Factory();

            _cancelableTaskFactory =
                new CancelableTask.Factory(_taskContext, progressDialogFactory);
            _coreListRequest = new CoreListRequest.Factory().Create();
            var jsonUtil = new JsonUtil();
            var credentialConfigFactory = new CredentialConfig.Factory(jsonUtil);
            var accountOptionLoader     = new VsiAccountOptionLoader(options);
            var credentialManager       =
                new CredentialManager(credentialConfigFactory, accountOptionLoader);

            _developerAccount = credentialManager.LoadAccount();
            IRemoteCommand remoteCommand = new RemoteCommand(managedProcessFactory);

            _remoteFile = new RemoteFile(managedProcessFactory);
            var cloudConnection  = new CloudConnection();
            var sdkConfigFactory = new SdkConfig.Factory(jsonUtil);

            // NOTE: the lifetime of this CloudRunner is limited to the current CoreAttachWindow.
            _cloudRunner = new CloudRunner(sdkConfigFactory, credentialManager, cloudConnection,
                                           new GgpSDKUtil());
            _gameletClientFactory = new GameletClient.Factory();
            var sshKeyLoader        = new SshKeyLoader(managedProcessFactory);
            var sshKnownHostsWriter = new SshKnownHostsWriter();

            _sshManager = new SshManager(_gameletClientFactory, _cloudRunner, sshKeyLoader,
                                         sshKnownHostsWriter, remoteCommand);
            _debugSessionMetrics = new DebugSessionMetrics(
                serviceProvider.GetService(typeof(SMetrics)) as IMetrics);
            _debugSessionMetrics.UseNewDebugSessionId();
            _actionRecorder = new ActionRecorder(_debugSessionMetrics);

            InitializeComponent();
            _instanceSelectionWindowFactory = new ProjectInstanceSelection.Factory();
            _paramsFactory = new DebugEngine.DebugEngine.Params.Factory(jsonUtil);
            SelectInstanceOnInit();
        }
예제 #17
0
 public Factory(JoinableTaskContext taskContext,
                DebugDisassemblyStream.Factory debugDisassemblyStreamFactory,
                DebugDocumentContext.Factory documentContextFactory,
                DebugCodeContext.Factory codeContextFactory,
                ThreadEnumFactory threadsEnumFactory,
                ModuleEnumFactory moduleEnumFactory,
                CodeContextEnumFactory codeContextEnumFactory)
 {
     _taskContext = taskContext;
     _debugDisassemblyStreamFactory = debugDisassemblyStreamFactory;
     _documentContextFactory        = documentContextFactory;
     _codeContextFactory            = codeContextFactory;
     _threadsEnumFactory            = threadsEnumFactory;
     _moduleEnumFactory             = moduleEnumFactory;
     _codeContextEnumFactory        = codeContextEnumFactory;
 }
예제 #18
0
 public PythonWorkspaceContextProvider(
     [Import] IVsFolderWorkspaceService workspaceService,
     [Import] Lazy <IInterpreterOptionsService> optionsService,
     [Import] Lazy <IInterpreterRegistryService> registryService,
     [Import] JoinableTaskContext joinableTaskContext
     )
 {
     // Don't use registry service from the constructor, since that imports
     // all the factory providers, which may import IPythonWorkspaceContextProvider
     // (ie circular dependency).
     _workspaceService    = workspaceService;
     _optionsService      = optionsService;
     _registryService     = registryService;
     _joinableTaskContext = joinableTaskContext;
     _workspaceService.OnActiveWorkspaceChanged += OnActiveWorkspaceChanged;
 }
예제 #19
0
        public ProjectNodeProvider(
            JoinableTaskContext jtc,
            UnconfiguredProject unconfiguredProject,
            ISolutionExplorer solutionExplorer)
        {
            this.jtc = jtc;
            this.unconfiguredProject = unconfiguredProject;
            this.solutionExplorer    = solutionExplorer;

            projectNode = new JoinableLazy <IProjectNode>(async() =>
                                                          (await solutionExplorer.Solution)
                                                          .FindProject(x => string.Equals(
                                                                           x.PhysicalPath,
                                                                           unconfiguredProject.FullPath,
                                                                           StringComparison.OrdinalIgnoreCase)), jtc.Factory);
        }
예제 #20
0
    protected JoinableTaskTestBase(ITestOutputHelper logger)
        : base(logger)
    {
        this.dispatcherContext = SingleThreadedTestSynchronizationContext.New();
        SynchronizationContext.SetSynchronizationContext(this.dispatcherContext);
#pragma warning disable CA2214 // Do not call overridable methods in constructors
        this.context = this.CreateJoinableTaskContext();
#pragma warning restore CA2214 // Do not call overridable methods in constructors
        this.joinableCollection      = this.context.CreateCollection();
        this.asyncPump               = this.context.CreateFactory(this.joinableCollection);
        this.originalThreadManagedId = Environment.CurrentManagedThreadId;
        this.testFrame               = SingleThreadedTestSynchronizationContext.NewFrame();

        // Suppress the assert dialog that appears and causes test runs to hang.
        Trace.Listeners.OfType <DefaultTraceListener>().Single().AssertUiEnabled = false;
    }
예제 #21
0
        static async Task DoLotsOfJoinableTasksAsync(Stopwatch stopwatch, int range = 10, JoinableTaskContext context = null)
        {
            var lotsOfJoinableTasks = Enumerable.Range(0, range).Select(i => {
                if (context == null)
                {
                    context = new JoinableTaskContext();
                }
                var factory = new JoinableTaskFactory(context);
                return(factory.RunAsync(() => Task.Run(() => GoSlowAsync(i))).Task);
            }).ToList();

            stopwatch.Start();
            await Task.WhenAll(lotsOfJoinableTasks);

            stopwatch.Stop();
        }
예제 #22
0
        public void BufferLoaded(IVsTextBuffer vsTextBuffer, string filePath)
        {
            JoinableTaskContext.AssertUIThread();

            var textBuffer = _editorAdaptersFactory.GetDocumentBuffer(vsTextBuffer);

            if (textBuffer != null)
            {
                // We potentially waited for the editor to initialize on this code path, so requery
                // the documents.
                if (TryGetMatchingDocuments(filePath, out var documents))
                {
                    BufferLoaded(textBuffer, filePath, documents);
                }
            }
        }
예제 #23
0
        public virtual Task InitializeAsync()
        {
            if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA)
            {
                JoinableTaskContext = new JoinableTaskContext();
            }
            else
            {
                _denyExecutionSynchronizationContext = new DenyExecutionSynchronizationContext(SynchronizationContext.Current !);
                JoinableTaskContext = new JoinableTaskContext(_denyExecutionSynchronizationContext.MainThread, _denyExecutionSynchronizationContext);
            }

            _joinableTaskCollection = JoinableTaskContext.CreateCollection();
            JoinableTaskFactory     = JoinableTaskContext.CreateFactory(_joinableTaskCollection);
            return(Task.CompletedTask);
        }
        public AsyncQuickInfoBroker(
            [ImportMany] IEnumerable <Lazy <IAsyncQuickInfoSourceProvider, IOrderableContentTypeMetadata> > unorderedSourceProviders,
            IGuardedOperations guardedOperations,
            IToolTipService toolTipService,
            JoinableTaskContext joinableTaskContext)
        {
            // Bug #512117: Remove compatibility shims for 2nd gen. Quick Info APIs.
            // Combines new + legacy providers into a single series for relative ordering.
            var combinedProviders = unorderedSourceProviders ?? throw new ArgumentNullException(nameof(unorderedSourceProviders));

            this.unorderedSourceProviders = combinedProviders;
#pragma warning restore 618
            this.guardedOperations   = guardedOperations ?? throw new ArgumentNullException(nameof(guardedOperations));
            this.joinableTaskContext = joinableTaskContext ?? throw new ArgumentNullException(nameof(joinableTaskContext));
            this.toolTipService      = toolTipService;
        }
 public DefaultRazorLanguageServerCustomMessageTarget(
     LSPDocumentManager documentManager,
     JoinableTaskContext joinableTaskContext,
     LSPRequestInvoker requestInvoker,
     RazorUIContextManager uIContextManager,
     IRazorAsynchronousOperationListenerProviderAccessor asyncOpListenerProvider,
     RazorLSPClientOptionsMonitor clientOptionsMonitor) :
     this(
         documentManager,
         joinableTaskContext,
         requestInvoker,
         uIContextManager,
         asyncOpListenerProvider.GetListener(RazorReadyFeature).BeginAsyncOperation(RazorReadyFeature),
         clientOptionsMonitor)
 {
 }
 public DefaultLSPDocumentManagerTest()
 {
     ChangeTriggers      = Enumerable.Empty <LSPDocumentManagerChangeTrigger>();
     JoinableTaskContext = new JoinableTaskContext();
     TextBuffer          = Mock.Of <ITextBuffer>(MockBehavior.Strict);
     Uri         = new Uri("C:/path/to/file.razor");
     UriProvider = Mock.Of <FileUriProvider>(provider => provider.GetOrCreate(TextBuffer) == Uri, MockBehavior.Strict);
     Mock.Get(UriProvider).Setup(p => p.Remove(It.IsAny <ITextBuffer>())).Verifiable();
     LSPDocumentSnapshot = Mock.Of <LSPDocumentSnapshot>(MockBehavior.Strict);
     LSPDocument         = Mock.Of <LSPDocument>(document =>
                                                 document.Uri == Uri &&
                                                 document.CurrentSnapshot == LSPDocumentSnapshot &&
                                                 document.VirtualDocuments == new[] { new TestVirtualDocument() } &&
                                                 document.UpdateVirtualDocument <TestVirtualDocument>(It.IsAny <IReadOnlyList <ITextChange> >(), It.IsAny <int>()) == Mock.Of <LSPDocumentSnapshot>(MockBehavior.Strict), MockBehavior.Strict);
     LSPDocumentFactory = Mock.Of <LSPDocumentFactory>(factory => factory.Create(TextBuffer) == LSPDocument, MockBehavior.Strict);
 }
예제 #27
0
        protected JoinableTaskTestBase(ITestOutputHelper logger)
            : base(logger)
        {
            this.dispatcherContext = SingleThreadedTestSynchronizationContext.New();
            SynchronizationContext.SetSynchronizationContext(this.dispatcherContext);
            this.context                 = this.CreateJoinableTaskContext();
            this.joinableCollection      = this.context.CreateCollection();
            this.asyncPump               = this.context.CreateFactory(this.joinableCollection);
            this.originalThreadManagedId = Environment.CurrentManagedThreadId;
            this.testFrame               = SingleThreadedTestSynchronizationContext.NewFrame();

#if DESKTOP || NETCOREAPP2_0
            // Suppress the assert dialog that appears and causes test runs to hang.
            Trace.Listeners.OfType <DefaultTraceListener>().Single().AssertUiEnabled = false;
#endif
        }
        public void SetUp()
        {
            var taskContext = new JoinableTaskContext();
            IDebugBreakpointRequest2 mockBreakpointRequest =
                Substitute.For <IDebugBreakpointRequest2>();

            mockBreakpointRequest.GetRequestInfo(Arg.Any <enum_BPREQI_FIELDS>(),
                                                 Arg.Any <BP_REQUEST_INFO[]>()).Returns(x =>
            {
                return(VSConstants.S_OK);
            });

            pendingBreakpoint = new DebugPendingBreakpoint.Factory(taskContext, null, null, null)
                                .Create(null, null, mockBreakpointRequest, null);
            pendingBreakpoint.Delete();
        }
예제 #29
0
        public static void SetCustomJoinableTaskFactory(Thread mainThread, SynchronizationContext synchronizationContext)
        {
            Requires.NotNull(mainThread, nameof(mainThread));
            Requires.NotNull(synchronizationContext, nameof(synchronizationContext));

            // This method is not thread-safe and does not have it to be
            // This is really just a test-hook to be used by test standalone UI and only 1 thread will call into this
            // And, note that this method throws, when running inside VS, and ThreadHelper.JoinableTaskContext is not null
            _joinableTaskFactory = new Lazy <JoinableTaskFactory>(() =>
            {
#pragma warning disable VSSDK005 // Avoid instantiating JoinableTaskContext
                var joinableTaskContext = new JoinableTaskContext(mainThread, synchronizationContext);
#pragma warning restore VSSDK005 // Avoid instantiating JoinableTaskContext
                return(joinableTaskContext.Factory);
            });
        }
        public DefaultProjectHierarchyInspector(
            LiveShareSessionAccessor sessionAccessor,
            JoinableTaskContext joinableTaskContext)
        {
            if (sessionAccessor is null)
            {
                throw new ArgumentNullException(nameof(sessionAccessor));
            }

            if (joinableTaskContext is null)
            {
                throw new ArgumentNullException(nameof(joinableTaskContext));
            }

            _sessionAccessor     = sessionAccessor;
            _joinableTaskFactory = joinableTaskContext.Factory;
        }
        public LiveShareProjectCapabilityResolver(
            LiveShareSessionAccessor sessionAccessor,
            JoinableTaskContext joinableTaskContext)
        {
            if (sessionAccessor is null)
            {
                throw new ArgumentNullException(nameof(sessionAccessor));
            }

            if (joinableTaskContext is null)
            {
                throw new ArgumentNullException(nameof(joinableTaskContext));
            }

            _sessionAccessor     = sessionAccessor;
            _joinableTaskFactory = joinableTaskContext.Factory;
        }
예제 #32
0
        public DefaultProjectHierarchyProxyFactory(
            ForegroundDispatcher foregroundDispatcher,
            JoinableTaskContext joinableTaskContext)
        {
            if (foregroundDispatcher == null)
            {
                throw new ArgumentNullException(nameof(foregroundDispatcher));
            }

            if (joinableTaskContext == null)
            {
                throw new ArgumentNullException(nameof(joinableTaskContext));
            }

            _foregroundDispatcher = foregroundDispatcher;
            _joinableTaskContext  = joinableTaskContext;
        }
예제 #33
0
 public ProjectNodeFactory(
     [Import(typeof(SVsServiceProvider))] IServiceProvider services,
     IVsHierarchyItemManager hierarchyManager,
     Lazy <ISolutionExplorerNodeFactory> childNodeFactory,
     IAdapterService adapter,
     JoinableLazy <IVsUIHierarchyWindow> solutionExplorer,
     JoinableTaskContext jtc,
     [Import(Clide.ContractNames.Interop.IVsBooleanSymbolExpressionEvaluator)] JoinableLazy <IVsBooleanSymbolExpressionEvaluator> expressionEvaluator)
 {
     solution = new JoinableLazy <IVsSolution>(() => services.GetService <SVsSolution, IVsSolution>(), jtc.Factory, true);
     this.hierarchyManager    = hierarchyManager;
     this.childNodeFactory    = childNodeFactory;
     this.adapter             = adapter;
     this.solutionExplorer    = solutionExplorer;
     this.expressionEvaluator = expressionEvaluator;
     this.asyncManager        = jtc.Factory;
 }