コード例 #1
0
        public void TaskListIsUpdated()
        {
            CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();

            List <int>   resultCounts = new List <int>();
            MockTaskList taskList     = _serviceProvider.GetService(typeof(SVsTaskList)) as MockTaskList;

            taskList.OnRefreshTasks += delegate(object sender, MockTaskList.RefreshTasksArgs args)
            {
                resultCounts.Add(Utilities.TasksOfProvider(args.Provider).Count);
            };

            string         firstFile  = Utilities.CreateTempTxtFile("foo abc foo def foo");
            string         secondFile = Utilities.CreateTempTxtFile("bar bar bar floop doop bar");
            string         termTable1 = Utilities.CreateTermTable(new string[] { "foo", "bar" });
            string         termTable2 = Utilities.CreateTermTable(new string[] { "floop" });
            Project        project1   = Utilities.SetupMSBuildProject(new string[] { firstFile, secondFile }, new string[] { termTable1, termTable2 });
            MockIVsProject vsProject1 = Utilities.RegisterProjectWithMocks(project1, _serviceProvider);

            string         thirdFile  = Utilities.CreateTempTxtFile("blarg");
            string         termTable3 = Utilities.CreateTermTable(new string[] { "blarg" });
            Project        project2   = Utilities.SetupMSBuildProject(new string[] { thirdFile }, new string[] { termTable3 });
            MockIVsProject vsProject2 = Utilities.RegisterProjectWithMocks(project2, _serviceProvider);

            accessor.Start(new IVsProject[] { vsProject1, vsProject2 });

            Utilities.WaitForStop(accessor);

            Assert.AreEqual(4, resultCounts.Count, "Task list did not recieve correct number of updates.");
            Assert.AreEqual(0, resultCounts[0], "Number of hits in first update is wrong.");
            Assert.AreEqual(3, resultCounts[1], "Number of hits in second update is wrong.");
            Assert.AreEqual(3 + 5, resultCounts[2], "Number of hits in third update is wrong.");
            Assert.AreEqual(3 + 5 + 1, resultCounts[3], "Number of hits in fourth update is wrong.");
        }
コード例 #2
0
 public static void WaitForStop(CodeSweep.VSPackage.BackgroundScanner_Accessor accessor)
 {
     while (accessor.IsRunning)
     {
         System.Threading.Thread.Sleep(100);
     }
 }
コード例 #3
0
        public void StopStopsScanBeforeNextFile()
        {
            CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();

            int          refreshes = 0;
            MockTaskList taskList  = _serviceProvider.GetService(typeof(SVsTaskList)) as MockTaskList;

            taskList.OnRefreshTasks +=
                delegate(object sender, MockTaskList.RefreshTasksArgs args)
            {
                ++refreshes;
            };

            string         firstFile  = Utilities.CreateBigFile();
            string         secondFile = Utilities.CreateTempTxtFile("bar bar bar floop doop bar");
            string         termTable  = Utilities.CreateTermTable(new string[] { "foo", "bar" });
            Project        project    = Utilities.SetupMSBuildProject(new string[] { firstFile, secondFile }, new string[] { termTable });
            MockIVsProject vsProject  = Utilities.RegisterProjectWithMocks(project, _serviceProvider);

            accessor.Start(new IVsProject[] { vsProject });
            accessor.StopIfRunning(true);

            // There should be one update, when the task list was initially cleared.
            Assert.AreEqual(1, refreshes, "Stop did not stop scan before next file.");
        }
コード例 #4
0
        public void StartUpdatesTaskList()
        {
            CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();

            // Set up events so we know when the task list is called.
            Guid         activeProvider = Guid.Empty;
            MockTaskList taskList       = _serviceProvider.GetService(typeof(SVsTaskList)) as MockTaskList;

            taskList.OnSetActiveProvider += delegate(object sender, MockTaskList.SetActiveProviderArgs args) { activeProvider = args.ProviderGuid; };

            bool      cmdPosted = false;
            MockShell shell     = _serviceProvider.GetService(typeof(SVsUIShell)) as MockShell;

            shell.OnPostExecCommand += delegate(object sender, MockShell.PostExecCommandArgs args)
            {
                if (args.Group == VSConstants.GUID_VSStandardCommandSet97 && args.ID == (uint)VSConstants.VSStd97CmdID.TaskListWindow)
                {
                    cmdPosted = true;
                }
            };

            Project        project   = Utilities.SetupMSBuildProject(new string[] { Utilities.CreateBigFile() }, new string[] { CreateMinimalTermTableFile() });
            MockIVsProject vsProject = Utilities.RegisterProjectWithMocks(project, _serviceProvider);

            accessor.Start(new IVsProject[] { vsProject });

            Assert.IsTrue(cmdPosted, "Start did not activate the task list.");
            Assert.AreEqual(new Guid("{9ACC41B7-15B4-4dd7-A0F3-0A935D5647F3}"), activeProvider, "Start did not select the correct task bucket.");

            Utilities.WaitForStop(accessor);
        }
コード例 #5
0
        public void ProgressShowsInStatusBar()
        {
            CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();

            bool          inProgress = false;
            string        label      = null;
            uint          complete   = 0;
            uint          total      = 0;
            MockStatusBar statusBar  = _serviceProvider.GetService(typeof(SVsStatusbar)) as MockStatusBar;

            statusBar.OnProgress += delegate(object sender, MockStatusBar.ProgressArgs args)
            {
                inProgress = (args.InProgress == 0) ? false : true;
                label      = args.Label;
                complete   = args.Complete;
                total      = args.Total;
            };

            Project        project   = Utilities.SetupMSBuildProject(new string[] { Utilities.CreateBigFile() }, new string[] { CreateMinimalTermTableFile() });
            MockIVsProject vsProject = Utilities.RegisterProjectWithMocks(project, _serviceProvider);

            accessor.Start(new IVsProject[] { vsProject });

            Assert.IsTrue(inProgress, "Start did not show progress in status bar.");
            Assert.AreEqual((uint)0, complete, "Scan did not start with zero complete.");

            // TODO: if time allows: scan several files, detect (by task list updates) when each one is done, and check to make sure the status bar has been updated accordingly.

            Utilities.WaitForStop(accessor);

            Assert.IsFalse(inProgress, "Progress bar not cleared when scan ends.");
        }
コード例 #6
0
        public void RepeatLastWhenAlreadyRunning()
        {
            CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();

            Project        project   = Utilities.SetupMSBuildProject(new string[] { Utilities.CreateBigFile() }, new string[] { CreateMinimalTermTableFile() });
            MockIVsProject vsProject = Utilities.RegisterProjectWithMocks(project, _serviceProvider);

            accessor.Start(new IVsProject[] { vsProject });
            accessor.RepeatLast();
        }
コード例 #7
0
        public void StartOnProjectWithoutScannerTask()
        {
            CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();

            Project        project   = Utilities.SetupMSBuildProject();
            MockIVsProject vsProject = Utilities.RegisterProjectWithMocks(project, _serviceProvider);

            // TODO: if we could, it would be good to make sure the Started event isn't fired --
            // but apparently the VS test framework doesn't support events.

            accessor.Start(new IVsProject[] { vsProject });

            Assert.IsFalse(accessor.IsRunning, "IsRunning returned true after Start() called with project that does not contain a scanner config.");
        }
コード例 #8
0
        public void IsRunning()
        {
            CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();

            int          refreshes = 0;
            MockTaskList taskList  = _serviceProvider.GetService(typeof(SVsTaskList)) as MockTaskList;

            taskList.OnRefreshTasks += delegate(object sender, MockTaskList.RefreshTasksArgs args) { ++refreshes; };

            string         firstFile  = Utilities.CreateBigFile();
            string         secondFile = Utilities.CreateTempTxtFile("bar bar bar floop doop bar");
            string         termTable  = Utilities.CreateTermTable(new string[] { "foo", "bar" });
            Project        project    = Utilities.SetupMSBuildProject(new string[] { firstFile, secondFile }, new string[] { termTable });
            MockIVsProject vsProject  = Utilities.RegisterProjectWithMocks(project, _serviceProvider);

            accessor.Start(new IVsProject[] { vsProject });

            Assert.IsTrue(accessor.IsRunning, "IsRunning was not true after Start.");

            accessor.StopIfRunning(false);

            Assert.IsTrue(accessor.IsRunning, "IsRunning was not true after Stop called while scan is still running.");
        }
コード例 #9
0
        public void StartWhenAlreadyRunning()
        {
            CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();

            Project        project   = Utilities.SetupMSBuildProject(new string[] { Utilities.CreateBigFile() }, new string[] { CreateMinimalTermTableFile() });
            MockIVsProject vsProject = Utilities.RegisterProjectWithMocks(project, _serviceProvider);

            bool thrown = false;

            accessor.Start(new IVsProject[] { vsProject });

            try
            {
                accessor.Start(new IVsProject[] { new MockIVsProject(project.FullPath) });
            }
            catch (InvalidOperationException)
            {
                thrown = true;
            }

            Utilities.WaitForStop(accessor);

            Assert.IsTrue(thrown, "Start did not throw InvalidOperationException with scan already running.");
        }
コード例 #10
0
 public void RepeatLastWithNoPreviousScan()
 {
     CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();
     accessor.RepeatLast();
 }
コード例 #11
0
 public void StartWithNullArg()
 {
     CodeSweep.VSPackage.BackgroundScanner_Accessor accessor = GetScanner();
     accessor.Start(null);
 }
コード例 #12
0
 public void CreateWithNullArg()
 {
     IServiceProvider provider = null;
     object           target   = new CodeSweep.VSPackage.BackgroundScanner_Accessor(provider);
 }
コード例 #13
0
 CodeSweep.VSPackage.BackgroundScanner_Accessor GetScanner()
 {
     _scanner = new CodeSweep.VSPackage.BackgroundScanner_Accessor(_serviceProvider);
     return(_scanner);
 }