~nunit-core/nunitv2/2.5

« back to all changes in this revision

Viewing changes to src/ClientUtilities/util/TestLoader.cs

  • Committer: Charlie Poole
  • Date: 2010-12-11 17:44:33 UTC
  • Revision ID: charlie@nunit.org-20101211174433-06taqojyso8khx62
Eliminate multiple reloading of tests when assembly changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
568
568
 
569
569
                TestPackage package = MakeTestPackage(loadedTestName);
570
570
                if (framework != null)
571
 
                    package.Settings["RuntimeFramework"] = framework;
572
 
 
 
571
                    package.Settings["RuntimeFramework"] = framework;
 
572
 
 
573
                RemoveWatcher();
 
574
 
573
575
                testRunner.Unload();
574
576
                if (!factory.CanReuse(testRunner, package))
575
577
                {
586
588
                currentRuntime = framework;
587
589
                                reloadPending = false;
588
590
 
589
 
                                if (Services.UserSettings.GetSetting("Options.TestLoader.ReloadOnChange", true))
590
 
                                        InstallWatcher();
 
591
                if (Services.UserSettings.GetSetting("Options.TestLoader.ReloadOnChange", true))
 
592
                    InstallWatcher();
591
593
 
592
 
                                testProject.HasChangesRequiringReload = false;
 
594
                testProject.HasChangesRequiringReload = false;
593
595
                events.FireTestReloaded(TestFileName, loadedTest);
594
596
 
595
597
                log.Info("Reload complete");
615
617
                /// know that the failure happened.
616
618
                /// </summary>
617
619
                public void OnTestChanged( string testFileName )
618
 
                {
 
620
                {
 
621
            log.Info("Assembly changed: {0}", testFileName);
 
622
 
619
623
                        if ( Running )
620
624
                                reloadPending = true;
621
625
                        else
672
676
                        list.Sort();
673
677
                        return list;
674
678
                }
675
 
                #endregion
676
679
 
677
680
                public void SaveLastResult( string fileName )
678
681
                {
679
 
                        new XmlResultWriter( fileName ).SaveTestResult(this.testResult);
680
 
                }
681
 
 
682
 
                #region Helper Methods
683
 
 
684
 
                /// <summary>
 
682
                        new XmlResultWriter( fileName ).SaveTestResult(this.testResult);
 
683
        }
 
684
        #endregion
 
685
 
 
686
        #region Helper Methods
 
687
 
 
688
        /// <summary>
685
689
                /// Install our watcher object so as to get notifications
686
690
                /// about changes to a test.
687
691
                /// </summary>
688
692
                private void InstallWatcher()
689
 
                {
690
 
                        Debug.Assert(!ReferenceEquals(watcher, null));
691
 
                        watcher.Stop();
692
 
                        watcher.FreeResources();
693
 
 
694
 
                        watcher.Setup(1000, TestProject.ActiveConfig.Assemblies.ToArray());
695
 
                        watcher.AssemblyChanged += new AssemblyChangedHandler( OnTestChanged );
696
 
                        watcher.Start();
 
693
                {
 
694
            if (watcher != null)
 
695
            {
 
696
                watcher.Stop();
 
697
                watcher.FreeResources();
 
698
 
 
699
                watcher.Setup(1000, TestProject.ActiveConfig.Assemblies.ToArray());
 
700
                watcher.AssemblyChanged += new AssemblyChangedHandler(OnTestChanged);
 
701
                watcher.Start();
 
702
            }
697
703
                }
698
704
 
699
705
                /// <summary>
701
707
                /// </summary>
702
708
                private void RemoveWatcher()
703
709
                {
704
 
                        Debug.Assert(!ReferenceEquals(watcher, null));
705
 
                        watcher.Stop();
706
 
                        watcher.FreeResources();
 
710
            if (watcher != null)
 
711
            {
 
712
                watcher.Stop();
 
713
                watcher.FreeResources();
 
714
                watcher.AssemblyChanged -= new AssemblyChangedHandler(OnTestChanged);
 
715
            }
707
716
                }
708
717
 
709
718
                private TestPackage MakeTestPackage( string testName )