public void SetUp() { _settings = new ApplicationSettings("adwad"); _bookmarks = new Bookmarks("aawdwa"); _dispatcher = new ManualDispatcher(); _scheduler = new ManualTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_scheduler); _filesystem = new InMemoryFilesystem(); _dataSources = new DataSources(_logFileFactory, _scheduler, _filesystem, _settings.DataSources, _bookmarks); _quickFilters = new QuickFilters(_settings.QuickFilters); _actionCenter = new ActionCenter(); _updater = new Mock <IAutoUpdater>(); _services = new ServiceContainer(); _services.RegisterInstance <ITaskScheduler>(_scheduler); _services.RegisterInstance <IDispatcher>(_dispatcher); _services.RegisterInstance <IPluginLoader>(new PluginRegistry()); _services.RegisterInstance <IHighlighters>(new HighlighterCollection()); _services.RegisterInstance <INavigationService>(new NavigationService()); _mainWindow = new MainWindowViewModel(_services, _settings, _dataSources, _quickFilters, _actionCenter, _updater.Object); }
public void SetUp() { _settings = new Tailviewer.Settings.DataSources(); _scheduler = new ManualTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_scheduler); _dataSources = new DataSources(_logFileFactory, _scheduler, _settings); _actionCenter = new Mock <IActionCenter>(); }
public void SetUp() { _scheduler = new DefaultTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_scheduler); _settings = new DataSource(TextLogFileAcceptanceTest.File20Mb) { Id = DataSourceId.CreateNew() }; _dataSource = new SingleDataSource(_logFileFactory, _scheduler, _settings, TimeSpan.FromMilliseconds(100)); }
public void SetUp() { _taskScheduler = new ManualTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_taskScheduler); _filesystem = new InMemoryFilesystem(); _settings = new DataSource { Id = DataSourceId.CreateNew(), MergedDataSourceDisplayMode = DataSourceDisplayMode.CharacterCode }; }
public void SetUp() { _settings = new Tailviewer.Settings.DataSourceSettings(); _bookmarks = new Mock <IBookmarks>(); _scheduler = new ManualTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_scheduler); _filesystem = new InMemoryFilesystem(); _dataSources = new DataSources(_logFileFactory, _scheduler, _filesystem, _settings, _bookmarks.Object); _actionCenter = new Mock <IActionCenter>(); }
public void SetUp() { _taskScheduler = new ManualTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_taskScheduler); _settings = new DataSource { Id = DataSourceId.CreateNew(), MergedDataSourceDisplayMode = DataSourceDisplayMode.CharacterCode }; _merged = new MergedDataSource(_taskScheduler, _settings, TimeSpan.Zero) { IsSingleLine = true }; }
public void TestOpen2() { var fname = @"D:\some awesome log file.db"; var plugin = new Mock <IFileFormatPlugin>(); var logFile = new Mock <ILogFile>(); plugin.Setup(x => x.SupportedExtensions).Returns(new[] { ".db" }); plugin.Setup(x => x.Open(It.IsAny <IServiceContainer>(), It.Is <string>(y => y == fname))) .Returns(() => logFile.Object); var factory = new PluginLogFileFactory(_scheduler, plugin.Object); var actualLogFile = factory.Open(fname, out _); actualLogFile.Should().BeOfType <NoThrowLogFile>("because PluginLogFileFactory should protect us from buggy plugin implementations"); actualLogFile.GetLine(42); logFile.Verify(x => x.GetLine(It.Is <int>(y => y == 42)), Times.Once, "because even though we've been given a proxy, it should nevertheless forward all calls to the actual implementation"); }
public void SetUp() { _scheduler = new ManualTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_scheduler); _logFile = new Mock <ILogFile>(); _entries = new List <LogLine>(); _listeners = new LogFileListenerCollection(_logFile.Object); _logFile.Setup(x => x.AddListener(It.IsAny <ILogFileListener>(), It.IsAny <TimeSpan>(), It.IsAny <int>())) .Callback((ILogFileListener listener, TimeSpan maximumWaitTime, int maximumLineCount) => _listeners.AddListener(listener, maximumWaitTime, maximumLineCount)); _logFile.Setup(x => x.RemoveListener(It.IsAny <ILogFileListener>())) .Callback((ILogFileListener listener) => _listeners.RemoveListener(listener)); _logFile.Setup(x => x.GetSection(It.IsAny <LogFileSection>(), It.IsAny <LogLine[]>())) .Callback( (LogFileSection section, LogLine[] entries) => _entries.CopyTo((int)section.Index, entries, 0, section.Count)); _logFile.Setup(x => x.GetLine(It.IsAny <int>())).Returns((int index) => _entries[index]); _logFile.Setup(x => x.Count).Returns(() => _entries.Count); _logFile.Setup(x => x.EndOfSourceReached).Returns(true); }
public void TestOpenDontMatchRegex() { var plugin = new Mock <IFileFormatPlugin2>(); var logFile = new Mock <ILogFile>(); plugin.Setup(x => x.SupportedFileNames).Returns(new[] { new Regex("txt"), new Regex("sfa_[^\\.]*\\.log") }); plugin.Setup(x => x.SupportedExtensions).Returns(new[] { ".db" }); plugin.Setup(x => x.Open(It.IsAny <IServiceContainer>(), It.IsAny <string>())) .Returns(() => logFile.Object); var factory = new PluginLogFileFactory(_scheduler, plugin.Object); var filename = @"C:\sfa_12345.log\.db\txt\foo.log"; factory.Open(filename, out _); plugin.Verify(x => x.Open(It.IsAny <IServiceContainer>(), filename), Times.Never, "because neither regex nor file extension match (only the filename should be matched, not the path) and therefore the plugin may not have been used"); }
public void SetUp() { _settings = new ApplicationSettings("adwad"); _dispatcher = new ManualDispatcher(); _scheduler = new ManualTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_scheduler); _dataSources = new DataSources(_logFileFactory, _scheduler, _settings.DataSources); _quickFilters = new QuickFilters(_settings.QuickFilters); _actionCenter = new ActionCenter(); _updater = new Mock <IAutoUpdater>(); _analysisStorage = new Mock <IAnalysisStorage>(); _mainWindow = new MainWindowViewModel(_settings, _dataSources, _quickFilters, _actionCenter, _updater.Object, _scheduler, _analysisStorage.Object, _dispatcher, new PluginRegistry()); }
public void TestOpenMatchRegex() { var plugin = new Mock <IFileFormatPlugin2>(); var logFile = new Mock <ILogFile>(); plugin.Setup(x => x.SupportedFileNames).Returns(new[] { new Regex("txt"), new Regex("sfa_[^\\.]*\\.log") }); plugin.Setup(x => x.SupportedExtensions).Returns(new[] { ".db" }); plugin.Setup(x => x.Open(It.IsAny <IServiceContainer>(), It.IsAny <string>())) .Returns(() => logFile.Object); var factory = new PluginLogFileFactory(_scheduler, plugin.Object); var filename = @"C:\logs\sfa_12345.log"; var actualLogFile = factory.Open(filename, out _); plugin.Verify(x => x.Open(It.IsAny <IServiceContainer>(), filename), Times.Once); actualLogFile.GetLine(42); logFile.Verify(x => x.GetLine(It.Is <int>(y => y == 42)), Times.Once, "because even though we've been given a proxy, it should nevertheless forward all calls to the actual implementation"); }
public void OneTimeSetUp() { _scheduler = new ManualTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_scheduler); _filesystem = new InMemoryFilesystem(); }
public void SetUp() { _scheduler = new ManualTaskScheduler(); _logFileFactory = new PluginLogFileFactory(_scheduler); }
private static int StartApplication(SingleApplicationHelper.IMutex mutex, string fileToOpen, Stopwatch stopwatch) { ApplicationSettings settings = ApplicationSettings.Create(); settings.Restore(out var neededPatching); if (neededPatching) { // TODO: Save settings right again to complete the upgrade // (maybe we should preserve an old version) } var bookmarks = Bookmarks.Create(); bookmarks.Restore(); var services = new ServiceContainer(); services.RegisterInstance <ILogFileSettings>(settings.LogFile); var actionCenter = new ActionCenter(); using (var taskScheduler = new DefaultTaskScheduler()) using (var serialTaskScheduler = new SerialTaskScheduler()) { services.RegisterInstance <ITaskScheduler>(taskScheduler); services.RegisterInstance <ISerialTaskScheduler>(serialTaskScheduler); var navigationService = new NavigationService(); services.RegisterInstance <INavigationService>(navigationService); var filesystem = new Filesystem(taskScheduler); services.RegisterInstance <IFilesystem>(filesystem); using (var pluginArchiveLoader = new PluginArchiveLoader(filesystem, Constants.PluginPath, Constants.DownloadedPluginsPath)) { var pluginUpdater = new PluginUpdater(pluginArchiveLoader); services.RegisterInstance <IPluginUpdater>(pluginUpdater); var pluginSystem = CreatePluginSystem(pluginArchiveLoader); services.RegisterInstance <IPluginLoader>(pluginSystem); var logFileFormatMatcher = new LogFileFormatMatcher(services); services.RegisterInstance <ILogFileFormatMatcher>(logFileFormatMatcher); var fileFormatPlugins = pluginSystem.LoadAllOfTypeWithDescription <IFileFormatPlugin>(); var logFileFactory = new PluginLogFileFactory(services, fileFormatPlugins); using (var dataSources = new DataSources(logFileFactory, taskScheduler, filesystem, settings.DataSources, bookmarks)) using (var updater = new AutoUpdater(actionCenter, settings.AutoUpdate)) { if (fileToOpen != null) { if (File.Exists(fileToOpen)) { // Not only do we want to add this file to the list of data sources, // but we also want to select it so the user can view it immediately, regardless // of what was selected previously. var dataSource = dataSources.AddFile(fileToOpen); settings.DataSources.SelectedItem = dataSource.Id; } else { Log.ErrorFormat("File '{0}' does not exist, won't open it!", fileToOpen); } } if (settings.AutoUpdate.CheckForUpdates) { // Our initial check for updates is not due to a user action // and therefore we don't need to show a notification when the // application is up-to-date. updater.CheckForUpdates(addNotificationWhenUpToDate: false); } var quickFilters = new QuickFilters(settings.QuickFilters); var highlighters = new HighlighterCollection(); services.RegisterInstance <IHighlighters>(highlighters); actionCenter.Add(Build.Current); actionCenter.Add(Change.Merge(Changelog.MostRecentPatches)); var application = new App(); var dispatcher = Dispatcher.CurrentDispatcher; var uiDispatcher = new UiDispatcher(dispatcher); services.RegisterInstance <IDispatcher>(uiDispatcher); dispatcher.UnhandledException += actionCenter.ReportUnhandledException; TaskScheduler.UnobservedTaskException += actionCenter.ReportUnhandledException; var windowViewModel = new MainWindowViewModel(services, settings, dataSources, quickFilters, actionCenter, updater); navigationService.MainWindow = windowViewModel; var window = new MainWindow(settings) { DataContext = windowViewModel }; settings.MainWindow.RestoreTo(window); stopwatch.Stop(); Log.InfoFormat("Tailviewer started (took {0}ms), showing window...", stopwatch.ElapsedMilliseconds); window.Show(); mutex.SetListener(window); return(application.Run()); } } } }
private static int StartInternal(SingleApplicationHelper.IMutex mutex, string[] args) { InstallExceptionHandlers(); Log.InfoFormat("Starting tailviewer..."); Log.InfoFormat("Commandline arguments: {0}", string.Join(" ", args)); LogEnvironment(); ApplicationSettings settings = ApplicationSettings.Create(); settings.Restore(out var neededPatching); if (neededPatching) { // TODO: Save settings right again to complete the upgrade // (maybe we should preserve an old version) } var actionCenter = new ActionCenter(); using (var taskScheduler = new DefaultTaskScheduler()) using (var serialTaskScheduler = new SerialTaskScheduler()) { var filesystem = new Filesystem(serialTaskScheduler); using (var pluginArchiveLoader = new PluginArchiveLoader(filesystem, Constants.PluginPath)) { var pluginSystem = CreatePluginSystem(pluginArchiveLoader); var fileFormatPlugins = pluginSystem.LoadAllOfType <IFileFormatPlugin>(); var logFileFactory = new PluginLogFileFactory(taskScheduler, fileFormatPlugins); using (var dataSources = new DataSources(logFileFactory, taskScheduler, settings.DataSources)) using (var updater = new AutoUpdater(actionCenter, settings.AutoUpdate)) using (var logAnalyserEngine = new LogAnalyserEngine(taskScheduler, pluginSystem)) using (var dataSourceAnalyserEngine = new DataSourceAnalyserEngine(taskScheduler, logAnalyserEngine, pluginSystem)) using (var analysisStorage = new AnalysisStorage(taskScheduler, filesystem, dataSourceAnalyserEngine, CreateTypeFactory(pluginSystem))) { var arguments = ArgumentParser.TryParse(args); if (arguments.FileToOpen != null) { if (File.Exists(arguments.FileToOpen)) { // Not only do we want to add this file to the list of data sources, // but we also want to select it so the user can view it immediately, regardless // of what was selected previously. var dataSource = dataSources.AddDataSource(arguments.FileToOpen); settings.DataSources.SelectedItem = dataSource.Id; } else { Log.ErrorFormat("File '{0}' does not exist, won't open it!", arguments.FileToOpen); } } if (settings.AutoUpdate.CheckForUpdates) { // Our initial check for updates is not due to a user action // and therefore we don't need to show a notification when the // application is up-to-date. updater.CheckForUpdates(addNotificationWhenUpToDate: false); } var quickFilters = new QuickFilters(settings.QuickFilters); actionCenter.Add(Build.Current); actionCenter.Add(Change.Merge(Changelog.MostRecentPatches)); var application = new App(); var dispatcher = Dispatcher.CurrentDispatcher; var uiDispatcher = new UiDispatcher(dispatcher); dispatcher.UnhandledException += actionCenter.ReportUnhandledException; TaskScheduler.UnobservedTaskException += actionCenter.ReportUnhandledException; var window = new MainWindow(settings) { DataContext = new MainWindowViewModel(settings, dataSources, quickFilters, actionCenter, updater, taskScheduler, analysisStorage, uiDispatcher, pluginSystem) }; settings.MainWindow.RestoreTo(window); window.Show(); mutex.SetListener(window); return(application.Run()); } } } }