Ejemplo n.º 1
0
        public async Task QueryDelayBuildAction_ShouldNotRestoreOnBuild_ProjectUpToDateMark()
        {
            var lockService   = Mock.Of <INuGetLockService>();
            var settings      = Mock.Of <ISettings>();
            var restoreWorker = Mock.Of <ISolutionRestoreWorker>();
            var buildManager  = Mock.Of <IVsSolutionBuildManager3>();

            var buildAction = (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD + (uint)VSSOLNBUILDUPDATEFLAGS3.SBF_FLAGS_UPTODATE_CHECK;

            Mock.Get(settings)
            .Setup(x => x.GetValue("packageRestore", "automatic", false))
            .Returns(bool.TrueString);

            using (var handler = new SolutionRestoreBuildHandler(lockService, settings, restoreWorker, buildManager))
            {
                await _jtf.SwitchToMainThreadAsync();

                var result = await handler.RestoreAsync(buildAction, CancellationToken.None);

                Assert.True(result);
            }

            Mock.Get(restoreWorker)
            .Verify(x => x.ScheduleRestoreAsync(It.IsAny <SolutionRestoreRequest>(), It.IsAny <CancellationToken>()), Times.Never);
        }
        public async Task Begin_ShouldNotRestoreOnBuild_NoOps()
        {
            var lockService = Mock.Of <INuGetLockService>();

            var settings = Mock.Of <ISettings>();

            Mock.Get(settings)
            .Setup(x => x.GetValue("packageRestore", "automatic", false))
            .Returns(bool.FalseString);

            var restoreWorker = Mock.Of <ISolutionRestoreWorker>();

            var buildManager          = Mock.Of <IVsSolutionBuildManager3>();
            var buildManagerOperation = (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD;

            Mock.Get(buildManager)
            .Setup(x => x.QueryBuildManagerBusyEx(out buildManagerOperation))
            .Returns(VSConstants.S_OK);

            using (var handler = new SolutionRestoreBuildHandler(lockService, settings, restoreWorker, buildManager))
            {
                await _jtf.SwitchToMainThreadAsync();

                // Act
                var cancelUpdate = 0;
                var hr           = handler.UpdateSolution_Begin(ref cancelUpdate);

                Assert.Equal(VSConstants.S_OK, hr);
                Assert.Equal(0, cancelUpdate);
            }

            Mock.Get(restoreWorker)
            .Verify(x => x.ScheduleRestoreAsync(It.IsAny <SolutionRestoreRequest>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Ejemplo n.º 3
0
        public async Task QueryDelayBuildAction_ShouldRestoreOnBuild()
        {
            var lockService   = Mock.Of <INuGetLockService>();
            var settings      = Mock.Of <ISettings>();
            var restoreWorker = Mock.Of <ISolutionRestoreWorker>();
            var buildManager  = Mock.Of <IVsSolutionBuildManager3>();

            var buildAction = (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD;

            Mock.Get(settings)
            .Setup(x => x.GetValue("packageRestore", "automatic", false))
            .Returns(bool.TrueString);
            Mock.Get(restoreWorker)
            .SetupGet(x => x.JoinableTaskFactory)
            .Returns(_jtf);
            Mock.Get(restoreWorker)
            .Setup(x => x.RestoreAsync(It.IsAny <SolutionRestoreRequest>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(true);

            using (var handler = new SolutionRestoreBuildHandler(lockService, settings, restoreWorker, buildManager))
            {
                await _jtf.SwitchToMainThreadAsync();

                var result = await handler.RestoreAsync(buildAction, CancellationToken.None);

                Assert.True(result);
            }

            Mock.Get(restoreWorker)
            .Verify(x => x.RestoreAsync(It.IsAny <SolutionRestoreRequest>(), It.IsAny <CancellationToken>()), Times.Once);
        }
        public async Task QueryDelayFirstUpdateAction_WhenNoRestoreScheduled_DoesNotDelay()
        {
            var lockService = Mock.Of <INuGetLockService>();

            var settings = Mock.Of <ISettings>();

            Mock.Get(settings)
            .Setup(x => x.GetValue("packageRestore", "automatic", false))
            .Returns(bool.FalseString);

            var restoreWorker = Mock.Of <ISolutionRestoreWorker>();

            var buildManager          = Mock.Of <IVsSolutionBuildManager3>();
            var buildManagerOperation = (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD;

            Mock.Get(buildManager)
            .Setup(x => x.QueryBuildManagerBusyEx(out buildManagerOperation))
            .Returns(VSConstants.S_OK);

            using (var handler = new SolutionRestoreBuildHandler(lockService, settings, restoreWorker, buildManager))
            {
                await _jtf.SwitchToMainThreadAsync();

                var cancelUpdate = 0;
                handler.UpdateSolution_Begin(ref cancelUpdate);

                // Act
                int delayMs;
                handler.UpdateSolution_QueryDelayFirstUpdateAction(out delayMs);

                Assert.Equal(0, delayMs);
            }
        }
Ejemplo n.º 5
0
        public async Task QueryDelayBuildAction_ShouldNotRestoreOnBuild_NoOps()
        {
            var settings       = Mock.Of <ISettings>();
            var restoreWorker  = Mock.Of <ISolutionRestoreWorker>();
            var buildManager   = Mock.Of <IVsSolutionBuildManager3>();
            var restoreChecker = Mock.Of <ISolutionRestoreChecker>();

            var buildAction = (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD;

            Mock.Get(settings)
            .Setup(x => x.GetSection("packageRestore"))
            .Returns(() => new VirtualSettingSection("packageRestore",
                                                     new AddItem("automatic", bool.FalseString)));

            using (var handler = new SolutionRestoreBuildHandler(settings, restoreWorker, buildManager, restoreChecker))
            {
                await _jtf.SwitchToMainThreadAsync();

                var result = await handler.RestoreAsync(buildAction, CancellationToken.None);

                Assert.True(result);
            }

            Mock.Get(restoreWorker)
            .Verify(x => x.ScheduleRestoreAsync(It.IsAny <SolutionRestoreRequest>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Ejemplo n.º 6
0
        public async Task QueryDelayBuildAction_CleanBuild()
        {
            var settings       = Mock.Of <ISettings>();
            var restoreWorker  = Mock.Of <ISolutionRestoreWorker>();
            var buildManager   = Mock.Of <IVsSolutionBuildManager3>();
            var restoreChecker = Mock.Of <ISolutionRestoreChecker>();
            var buildAction    = (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_CLEAN;

            using (var handler = new SolutionRestoreBuildHandler(settings, restoreWorker, buildManager, restoreChecker))
            {
                await _jtf.SwitchToMainThreadAsync();

                var result = await handler.RestoreAsync(buildAction, CancellationToken.None);

                Assert.True(result);
            }

            Mock.Get(restoreWorker)
            .Verify(x => x.CleanCacheAsync(), Times.Once);
            Mock.Get(restoreChecker)
            .Verify(x => x.CleanCache(), Times.Once);

            Mock.Get(restoreWorker)
            .Verify(x => x.ScheduleRestoreAsync(It.IsAny <SolutionRestoreRequest>(), It.IsAny <CancellationToken>()), Times.Never);
        }
        public async Task Done_Always_ResetsRestoreTask()
        {
            var lockService = Mock.Of <INuGetLockService>();

            var settings = Mock.Of <ISettings>();

            Mock.Get(settings)
            .Setup(x => x.GetValue("packageRestore", "automatic", false))
            .Returns(bool.TrueString);

            var restoreWorker = Mock.Of <ISolutionRestoreWorker>();

            Mock.Get(restoreWorker)
            .SetupGet(x => x.JoinableTaskFactory)
            .Returns(_jtf);
            var tcs = new TaskCompletionSource <bool>();

            Mock.Get(restoreWorker)
            .Setup(x => x.ScheduleRestoreAsync(It.IsAny <SolutionRestoreRequest>(), It.IsAny <CancellationToken>()))
            .Returns(tcs.Task);

            var buildManager          = Mock.Of <IVsSolutionBuildManager3>();
            var buildManagerOperation = (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD;

            Mock.Get(buildManager)
            .Setup(x => x.QueryBuildManagerBusyEx(out buildManagerOperation))
            .Returns(VSConstants.S_OK);

            using (var handler = new SolutionRestoreBuildHandler(lockService, settings, restoreWorker, buildManager))
            {
                await _jtf.SwitchToMainThreadAsync();

                var cancelUpdate = 0;
                handler.UpdateSolution_Begin(ref cancelUpdate);

                // Act
                var hr = handler.UpdateSolution_Done(succeeded: 1, modified: 1, cancelCommand: 0);

                Assert.Equal(VSConstants.S_OK, hr);

                int delayMs;
                handler.UpdateSolution_QueryDelayFirstUpdateAction(out delayMs);
                Assert.Equal(0, delayMs);
            }
        }
        public async Task Cancel_Always_CancelsRestoreTask()
        {
            var lockService = Mock.Of <INuGetLockService>();

            var settings = Mock.Of <ISettings>();

            Mock.Get(settings)
            .Setup(x => x.GetValue("packageRestore", "automatic", false))
            .Returns(bool.TrueString);

            var restoreWorker = Mock.Of <ISolutionRestoreWorker>();

            Mock.Get(restoreWorker)
            .SetupGet(x => x.JoinableTaskFactory)
            .Returns(_jtf);
            var tcs = new TaskCompletionSource <bool>();
            var restoreHasBeenCancelled = false;

            Mock.Get(restoreWorker)
            .Setup(x => x.ScheduleRestoreAsync(It.IsAny <SolutionRestoreRequest>(), It.IsAny <CancellationToken>()))
            .Returns(tcs.Task)
            .Callback <SolutionRestoreRequest, CancellationToken>(
                (r, t) => t.Register(() => restoreHasBeenCancelled = true));

            var buildManager          = Mock.Of <IVsSolutionBuildManager3>();
            var buildManagerOperation = (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD;

            Mock.Get(buildManager)
            .Setup(x => x.QueryBuildManagerBusyEx(out buildManagerOperation))
            .Returns(VSConstants.S_OK);

            using (var handler = new SolutionRestoreBuildHandler(lockService, settings, restoreWorker, buildManager))
            {
                await _jtf.SwitchToMainThreadAsync();

                var cancelUpdate = 0;
                handler.UpdateSolution_Begin(ref cancelUpdate);

                // Act
                var hr = handler.UpdateSolution_Cancel();

                Assert.Equal(VSConstants.S_OK, hr);
                Assert.True(restoreHasBeenCancelled);
            }
        }