public void FindAndRegisterValidExtensionPoints_DoesNotRegisterInvalidExtensionPoints()
        {
            CreateExtensionPointsConfiguration(addInvalidExtensionPoints: true);
            ExtensionPointsConfigurationAnalyzer.FindAndRegisterValidExtensionPoints(extensionPointsConfiguration, logger);

            IParser parser = ExtensionPointsRepository.Instance.GetParserImplementation(".cs");

            Assert.IsNotNull(parser, "Default parser for '.cs' extension should be used!");
            Assert.AreEqual(parser.GetType().FullName, "Sando.Parser.SrcMLCSharpParser", "Invalid parser returned for '.cs' extension!");

            IWordSplitter wordSplitter = ExtensionPointsRepository.Instance.GetWordSplitterImplementation();

            Assert.IsNotNull(wordSplitter, "Default word splitter should be used!");
            Assert.AreEqual(wordSplitter.GetType().FullName, "Sando.Core.Tools.WordSplitter", "Invalid word splitter returned!");

            IResultsReorderer resultsReorderer = ExtensionPointsRepository.Instance.GetResultsReordererImplementation();

            Assert.IsNotNull(resultsReorderer, "Default results reorderer should be used!");
            Assert.AreEqual(resultsReorderer.GetType().FullName, "Sando.SearchEngine.SortByScoreResultsReorderer", "Invalid results reorderer returned!");

            string logFileContent = File.ReadAllText(logFilePath);

            Assert.IsTrue(logFileContent.Contains("Type cannot be found: Sando.NonExistingParser"), "Log file should contain information about errors occurred during the assembly loading!");
            Assert.IsTrue(logFileContent.Contains("Could not load file or assembly 'file:///" + pluginDirectory + "NonExistingParser.dll' or one of its dependencies"), "Log file should contain information about errors occurred during the assembly loading!");
            Assert.IsTrue(logFileContent.Contains("Could not load file or assembly 'file:///" + pluginDirectory + "NonExistingTestElement.dll' or one of its dependencies"), "Log file should contain information about errors occurred during the assembly loading!");
            Assert.IsTrue(logFileContent.Contains("Could not load file or assembly 'file:///" + pluginDirectory + "NonExistingWordSplitter.dll' or one of its dependencies"), "Log file should contain information about errors occurred during the assembly loading!");
            Assert.IsTrue(logFileContent.Contains("Type cannot be found: Sando.TestExtensionPoints.NonExistingResultsReorderer"), "Log file should contain information about errors occurred during the assembly loading!");
            Assert.IsTrue(logFileContent.Contains("Type cannot be found: Sando.TestExtensionPoints.NonExistingQueryWeightsSupplier"), "Log file should contain information about errors occurred during the assembly loading!");
            Assert.IsTrue(logFileContent.Contains("Type cannot be found: Sando.TestExtensionPoints.NonExistingQueryRewriter"), "Log file should contain information about errors occurred during the assembly loading!");
            Assert.IsTrue(logFileContent.Contains("Type cannot be found: Sando.TestExtensionPoints.NonExistingIndexFilterManager"), "Log file should contain information about errors occurred during the assembly loading!");
        }
コード例 #2
0
 public void ClearRepository()
 {
     parsers.Clear();
     wordSplitter = null;
     resultsReorderer = null;
     queryWeightsSupplier = null;
     queryRewriter = null;
     indexFilterManager = null;
 }
        public void FindAndRegisterValidExtensionPoints_RemovesInvalidCustomResultsReordererConfiguration()
        {
            CreateExtensionPointsConfiguration(addInvalidResultsReordererConfiguration: true);
            ExtensionPointsConfigurationAnalyzer.FindAndRegisterValidExtensionPoints(extensionPointsConfiguration, logger);

            IResultsReorderer resultsReorderer = ExtensionPointsRepository.Instance.GetResultsReordererImplementation();

            Assert.IsNotNull(resultsReorderer, "Default results reorderer should be used!");
            Assert.AreEqual(resultsReorderer.GetType().FullName, "Sando.SearchEngine.SortByScoreResultsReorderer", "Invalid results reorderer returned!");

            string logFileContent = File.ReadAllText(logFilePath);

            Assert.IsTrue(logFileContent.Contains("Invalid results reorderer configuration found - it will be omitted during registration process."), "Log file should contain information about removed invalid word splitter configuration!");
        }
        public void FindAndRegisterValidExtensionPoints_RegistersUsableCustomResultsReorderer()
        {
            CreateExtensionPointsConfiguration(addValidResultsReordererConfiguration: true);
            ExtensionPointsConfigurationAnalyzer.FindAndRegisterValidExtensionPoints(extensionPointsConfiguration, logger);

            IResultsReorderer resultsReorderer = ExtensionPointsRepository.Instance.GetResultsReordererImplementation();

            Assert.IsNotNull(resultsReorderer, "Results reorderer should be registered!");
            Assert.AreEqual(resultsReorderer.GetType().FullName, "Sando.TestExtensionPoints.TestResultsReorderer", "Invalid results reorderer returned!");

            List <CodeSearchResult> results = new List <CodeSearchResult>()
            {
                new CodeSearchResult(SampleProgramElementFactory.GetSampleClassElement(), 1),
                new CodeSearchResult(SampleProgramElementFactory.GetSampleMethodElement(), 3),
            };

            Assert.DoesNotThrow(() => results = resultsReorderer.ReorderSearchResults(results.AsQueryable()).ToList());
            Assert.IsTrue(results != null && results.Count() == 2, "Invalid results from ReorderSearchResults method!");
            Assert.IsTrue(results.ElementAt(0).Score == 3 && results.ElementAt(0).ProgramElement.ProgramElementType == ProgramElementType.Method, "First result is invalid!");
            Assert.IsTrue(results.ElementAt(1).Score == 1 && results.ElementAt(1).ProgramElement.ProgramElementType == ProgramElementType.Class, "Second result is invalid!");
        }
コード例 #5
0
        private static void FindAndRegisterValidResultsReordererExtensionPoints(ExtensionPointsConfiguration extensionPointsConfiguration, ILog logger)
        {
            logger.Info("Reading results reorderer extension point configuration started");
            BaseExtensionPointConfiguration resultsReordererConfiguration = extensionPointsConfiguration.ResultsReordererConfiguration;

            if (resultsReordererConfiguration != null)
            {
                try
                {
                    logger.Info(String.Format("Results reorderer found: {0}, from assembly: {1}", resultsReordererConfiguration.FullClassName, resultsReordererConfiguration.LibraryFileRelativePath));
                    IResultsReorderer resultsReorderer = CreateInstance <IResultsReorderer>(extensionPointsConfiguration.PluginDirectoryPath, resultsReordererConfiguration.LibraryFileRelativePath, resultsReordererConfiguration.FullClassName);
                    ExtensionPointsRepository.Instance.RegisterResultsReordererImplementation(resultsReorderer);
                    logger.Info(String.Format("Results reorderer {0} successfully registered.", resultsReordererConfiguration.FullClassName));
                }
                catch (Exception ex)
                {
                    logger.Error(String.Format("Results reorderer {0} cannot be registered: {1}", resultsReordererConfiguration.FullClassName, ex.Message));
                }
            }
            logger.Info("Reading results reorderer extension point configuration finished");
        }
コード例 #6
0
        public void RegisterResultsReordererImplementation(IResultsReorderer resultsReorderer)
        {
            Contract.Requires(resultsReorderer != null, "ExtensionPointsManager:RegisterResultsReordererImplementation - resultsReorderer cannot be null!");

            this.resultsReorderer = resultsReorderer;
        }
コード例 #7
0
        public void RegisterResultsReordererImplementation(IResultsReorderer resultsReorderer)
        {
            Contract.Requires(resultsReorderer != null, "ExtensionPointsManager:RegisterResultsReordererImplementation - resultsReorderer cannot be null!");

            this.resultsReorderer = resultsReorderer;
        }