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!"); }
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!"); }
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"); }
public void RegisterResultsReordererImplementation(IResultsReorderer resultsReorderer) { Contract.Requires(resultsReorderer != null, "ExtensionPointsManager:RegisterResultsReordererImplementation - resultsReorderer cannot be null!"); this.resultsReorderer = resultsReorderer; }