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 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 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"); }