public void EnumeratorCacheIsScopedByAssembly() { // Arrange var resourceNamesCache = new ResourceNamesCache(); var baseName = "test"; var resourceAssembly1 = new TestAssemblyWrapper(typeof(ResourceManagerStringLocalizerTest)); var resourceAssembly2 = new TestAssemblyWrapper(typeof(ResourceManagerStringLocalizer)); var resourceManager1 = new TestResourceManager(baseName, resourceAssembly1); var resourceManager2 = new TestResourceManager(baseName, resourceAssembly2); var resourceStreamManager1 = new TestResourceStringProvider(resourceNamesCache, resourceManager1, resourceAssembly1.Assembly, baseName); var resourceStreamManager2 = new TestResourceStringProvider(resourceNamesCache, resourceManager2, resourceAssembly2.Assembly, baseName); var logger = Logger; var localizer1 = new ResourceManagerStringLocalizer( resourceManager1, resourceStreamManager1, baseName, resourceNamesCache, logger); var localizer2 = new ResourceManagerStringLocalizer( resourceManager2, resourceStreamManager2, baseName, resourceNamesCache, logger); // Act localizer1.GetAllStrings().ToList(); localizer2.GetAllStrings().ToList(); // Assert var expectedCallCount = GetCultureInfoDepth(CultureInfo.CurrentUICulture); Assert.Equal(expectedCallCount, resourceAssembly1.ManifestResourceStreamCallCount); Assert.Equal(expectedCallCount, resourceAssembly2.ManifestResourceStreamCallCount); }
public void LoadPlugins_ShouldLoadPluginsFromPathAndFile() { // arrange const string filePath1 = @"c:\pluginDirectory\plugin_one.dll"; const string filePath2 = @"c:\pluginDirectory\plugin_two.dll"; const string filePath3 = @"c:\pluginDirectory\plugin_three.dll"; const string filePath4 = @"c:\pluginDirectory\foo.txt"; const string filePath5 = @"c:\pluginDirectory\subDirectory\bar.txt"; const string filePath6 = @"c:\pluginDirectory\subDirectory\plugin_four.dll"; var fileSystem = new MockFileSystem(new Dictionary <string, MockFileData> { { filePath1, new MockFileData(string.Empty) }, { filePath2, new MockFileData(string.Empty) }, { filePath3, new MockFileData(string.Empty) }, { filePath4, new MockFileData("foo") }, { filePath5, new MockFileData("bar") }, { filePath6, new MockFileData(string.Empty) }, }); var assemblyWrapper = new TestAssemblyWrapper(new Dictionary <string, int> { { @"c:\pluginDirectory\plugin_one.dll", 0 }, { @"c:\pluginDirectory\plugin_two.dll", 1 }, { @"c:\pluginDirectory\plugin_three.dll", 2 }, { @"c:\pluginDirectory\subDirectory\plugin_four.dll", 3 } }); var reporter = Substitute.For <IReporter>(); var pluginPaths = new Dictionary <string, string> { { "my-first-plugin", @"c:\pluginDirectory\" }, { "my-second-plugin", filePath6 } }; // act var pluginHandler = new Lib.Plugins.PluginHandler(reporter, fileSystem, assemblyWrapper); pluginHandler.ProcessPaths(pluginPaths); // assert Assert.AreEqual(4, pluginHandler.Plugins.Count); }
public void ResourceManagerStringLocalizer_GetAllStrings_MissingResourceThrows(bool includeParentCultures) { // Arrange var resourceNamesCache = new ResourceNamesCache(); var baseName = "testington"; var resourceAssembly = new TestAssemblyWrapper(); resourceAssembly.HasResources = false; var resourceManager = new TestResourceManager(baseName, resourceAssembly); var logger = Logger; var localizer = new ResourceManagerStringLocalizer( resourceManager, resourceAssembly.Assembly, baseName, resourceNamesCache, logger); // Act & Assert var exception = Assert.Throws <MissingManifestResourceException>(() => { // We have to access the result so it evaluates. localizer.GetAllStrings(includeParentCultures).ToArray(); }); var expectedTries = includeParentCultures ? 3 : 1; var expected = includeParentCultures ? "No manifests exist for the current culture." : $"The manifest 'testington.{CultureInfo.CurrentCulture}.resources' was not found."; Assert.Equal(expected, exception.Message); Assert.Equal(expectedTries, resourceAssembly.ManifestResourceStreamCallCount); }
public void GetString_LogsLocationSearched() { // Arrange var baseName = "Resources.TestResource"; var resourceNamesCache = new ResourceNamesCache(); var resourceAssembly = new TestAssemblyWrapper(); var resourceManager = new TestResourceManager(baseName, resourceAssembly); var resourceStreamManager = new TestResourceStringProvider(resourceNamesCache, resourceManager, resourceAssembly.Assembly, baseName); var logger = Logger; var localizer = new ResourceManagerStringLocalizer( resourceManager, resourceStreamManager, baseName, resourceNamesCache, logger); // Act var value = localizer["a key!"]; // Assert var write = Assert.Single(Sink.Writes); Assert.Equal("ResourceManagerStringLocalizer searched for 'a key!' in 'Resources.TestResource' with culture 'en-US'.", write.State.ToString()); }
public void ResourceManagerStringLocalizer_GetAllStrings_ReturnsExpectedValue(bool includeParentCultures) { // Arrange var baseName = "test"; var resourceNamesCache = new ResourceNamesCache(); var resourceAssembly = new TestAssemblyWrapper(); var resourceManager = new TestResourceManager(baseName, resourceAssembly); var resourceStreamManager = new TestResourceStringProvider(resourceNamesCache, resourceManager, resourceAssembly.Assembly, baseName); var logger = Logger; var localizer = new ResourceManagerStringLocalizer( resourceManager, resourceStreamManager, baseName, resourceNamesCache, logger); // Act // We have to access the result so it evaluates. #pragma warning disable CA1304 // Specify CultureInfo var strings = localizer.GetAllStrings(includeParentCultures).ToList(); #pragma warning restore CA1304 // Specify CultureInfo // Assert var value = Assert.Single(strings); Assert.Equal("TestName", value.Value); }
public void EnumeratorCachesCultureWalkForSameAssembly() { // Arrange var resourceNamesCache = new ResourceNamesCache(); var baseName = "test"; var resourceAssembly = new TestAssemblyWrapper(); var resourceManager = new TestResourceManager(baseName, resourceAssembly.Assembly); var resourceStreamManager = new TestResourceStringProvider(resourceNamesCache, resourceAssembly, baseName); var logger = Logger; var localizer1 = new ResourceManagerStringLocalizer(resourceManager, resourceStreamManager, baseName, resourceNamesCache, logger); var localizer2 = new ResourceManagerStringLocalizer(resourceManager, resourceStreamManager, baseName, resourceNamesCache, logger); // Act for (int i = 0; i < 5; i++) { localizer1.GetAllStrings().ToList(); localizer2.GetAllStrings().ToList(); } // Assert var expectedCallCount = GetCultureInfoDepth(CultureInfo.CurrentUICulture); Assert.Equal(expectedCallCount, resourceAssembly.GetManifestResourceStreamCallCount); }
public TestResourceStringProvider( IResourceNamesCache resourceCache, TestAssemblyWrapper assemblyWrapper, string resourceBaseName) : base(resourceCache, assemblyWrapper, resourceBaseName) { _assemblyWrapper = assemblyWrapper; }
public void ActivatePlugins_PluginRuleViolations_ShouldCallReporter() { // arrange var filePath1 = TestHelper.GetTestFilePath(@"c:\pluginDirectory\plugin_one.dll"); var fileSystem = new MockFileSystem(new Dictionary <string, MockFileData> { { filePath1, new MockFileData(string.Empty) } }); var assemblyWrapper = new TestAssemblyWrapper(); var pluginPaths = new Dictionary <string, string> { { "my-plugin", filePath1 } }; var reporter = Substitute.For <IReporter>(); var textReader = ParsingUtility.CreateTextReaderFromString("\tSELECT * FROM FOO"); var scriptPath = TestHelper.GetTestFilePath(@"c:\scripts\foo.sql"); var context = new PluginContext(scriptPath, new List <IRuleException>(), textReader); var versionWrapper = Substitute.For <IFileversionWrapper>(); versionWrapper.GetVersion(Arg.Any <Assembly>()).Returns("1.2.3"); // act var pluginHandler = new Infrastructure.Plugins.PluginHandler(reporter, fileSystem, assemblyWrapper, versionWrapper); pluginHandler.ProcessPaths(pluginPaths); // assert Assert.AreEqual(1, pluginHandler.Plugins.Count); Assert.DoesNotThrow(() => pluginHandler.ActivatePlugins(context)); reporter.Received().ReportViolation(Arg.Is <IRuleViolation>(x => x.FileName == context.FilePath && x.RuleName == "prefer-tabs" && x.Text == "Should use spaces rather than tabs" && x.Line == 1 && x.Column == 0 && x.Severity == RuleViolationSeverity.Warning)); }
public void ResourceManagerStringLocalizer_GetAllStrings_ReturnsExpectedValue(bool includeParentCultures) { // Arrange var baseName = "test"; var resourceNamesCache = new ResourceNamesCache(); var resourceAssembly = new TestAssemblyWrapper(); var resourceManager = new TestResourceManager(baseName, resourceAssembly.Assembly); var localizer = new ResourceManagerStringLocalizer(resourceManager, resourceAssembly, baseName, resourceNamesCache); // Act // We have to access the result so it evaluates. var strings = localizer.GetAllStrings(includeParentCultures).ToList(); // Assert var value = Assert.Single(strings); Assert.Equal("TestName", value.Value); }
public void ResourceManagerStringLocalizer_GetAllStrings_ReturnsExpectedValue(bool includeParentCultures) { // Arrange var baseName = "test"; var resourceNamesCache = new ResourceNamesCache(); var resourceAssembly = new TestAssemblyWrapper(); var resourceManager = new TestResourceManager(baseName, resourceAssembly.Assembly); var localizer = new ResourceManagerStringLocalizer(resourceManager, resourceAssembly, baseName, resourceNamesCache); // Act // We have to access the result so it evaluates. var strings = localizer.GetAllStrings(includeParentCultures).ToList(); // Assert var value = Assert.Single(strings); Assert.Equal("TestName", value.Value); }
public void LoadPlugins_ShouldLoadPluginsFilesWithRelativePaths() { // arrange var currentDirectory = Directory.GetParent(Assembly.GetExecutingAssembly().Location); var executingLocationParentFolder = currentDirectory.Parent.FullName; var filePath1 = Path.Combine(executingLocationParentFolder, "plugin_one.dll"); var filePath2 = Path.Combine(executingLocationParentFolder, "plugin_two.dll"); var fileSystem = new MockFileSystem( new Dictionary <string, MockFileData> { { filePath1, new MockFileData(string.Empty) }, { filePath2, new MockFileData(string.Empty) } }, currentDirectory.FullName); var assemblyWrapper = new TestAssemblyWrapper(); var reporter = Substitute.For <IReporter>(); var versionWrapper = Substitute.For <IFileversionWrapper>(); versionWrapper.GetVersion(Arg.Any <Assembly>()).Returns("1.2.3"); var pluginPaths = new Dictionary <string, string> { { "my-second-plugin", @"..\plugin_one.dll" } }; // act var pluginHandler = new Infrastructure.Plugins.PluginHandler(reporter, fileSystem, assemblyWrapper, versionWrapper); pluginHandler.ProcessPaths(pluginPaths); // assert Assert.AreEqual(1, pluginHandler.Plugins.Count); }
public void LoadPlugins_ThrowErrors_When_Same_Type_Is_Loaded_More_Than_Once() { // arrange const string filePath1 = @"c:\pluginDirectory\plugin_one.dll"; var fileSystem = new MockFileSystem(new Dictionary <string, MockFileData> { { filePath1, new MockFileData(string.Empty) } }); var assemblyWrapper = new TestAssemblyWrapper(defaultPlugin: typeof(TestPluginThrowsException)); var pluginPaths = new Dictionary <string, string> { { "my-plugin", filePath1 }, { "my-plugin-directories", @"c:\pluginDirectory" }, { "my-plugin-invalid-path", @"c:\doesnt-exist" } }; var versionWrapper = Substitute.For <IFileversionWrapper>(); versionWrapper.GetVersion(Arg.Any <Assembly>()).Returns("1.2.3"); var reporter = Substitute.For <IReporter>(); // act var pluginHandler = new Infrastructure.Plugins.PluginHandler(reporter, fileSystem, assemblyWrapper, versionWrapper); pluginHandler.ProcessPaths(pluginPaths); // assert Assert.AreEqual(1, pluginHandler.Plugins.Count); var type = typeof(TestPluginThrowsException); reporter.Received().Report($"Loaded plugin: '{type.FullName}', Version: '1.2.3'"); reporter.Received().Report($"Already loaded plugin with type '{type.FullName}'"); }
public void EnumeratorCacheIsScopedByAssembly() { // Arrange var resourceNamesCache = new ResourceNamesCache(); var baseName = "test"; var resourceAssembly1 = new TestAssemblyWrapper("Assembly1"); var resourceAssembly2 = new TestAssemblyWrapper("Assembly2"); var resourceManager1 = new TestResourceManager(baseName, resourceAssembly1.Assembly); var resourceManager2 = new TestResourceManager(baseName, resourceAssembly2.Assembly); var localizer1 = new ResourceManagerStringLocalizer(resourceManager1, resourceAssembly1, baseName, resourceNamesCache); var localizer2 = new ResourceManagerStringLocalizer(resourceManager2, resourceAssembly2, baseName, resourceNamesCache); // Act localizer1.GetAllStrings().ToList(); localizer2.GetAllStrings().ToList(); // Assert var expectedCallCount = GetCultureInfoDepth(CultureInfo.CurrentUICulture); Assert.Equal(expectedCallCount, resourceAssembly1.GetManifestResourceStreamCallCount); Assert.Equal(expectedCallCount, resourceAssembly2.GetManifestResourceStreamCallCount); }
public void EnumeratorCachesCultureWalkForSameAssembly() { // Arrange var resourceNamesCache = new ResourceNamesCache(); var baseName = "test"; var resourceAssembly = new TestAssemblyWrapper(); var resourceManager = new TestResourceManager(baseName, resourceAssembly.Assembly); var localizer1 = new ResourceManagerStringLocalizer(resourceManager, resourceAssembly, baseName, resourceNamesCache); var localizer2 = new ResourceManagerStringLocalizer(resourceManager, resourceAssembly, baseName, resourceNamesCache); // Act for (int i = 0; i < 5; i++) { localizer1.GetAllStrings().ToList(); localizer2.GetAllStrings().ToList(); } // Assert var expectedCallCount = GetCultureInfoDepth(CultureInfo.CurrentUICulture); Assert.Equal(expectedCallCount, resourceAssembly.GetManifestResourceStreamCallCount); }
public void GetString_PopulatesSearchedLocationOnLocalizedString() { // Arrange var baseName = "Resources.TestResource"; var resourceNamesCache = new ResourceNamesCache(); var resourceAssembly = new TestAssemblyWrapper(); var resourceManager = new TestResourceManager(baseName, resourceAssembly); var resourceStreamManager = new TestResourceStringProvider(resourceNamesCache, resourceManager, resourceAssembly.Assembly, baseName); var logger = Logger; var localizer = new ResourceManagerStringLocalizer( resourceManager, resourceStreamManager, baseName, resourceNamesCache, logger); // Act var value = localizer["name"]; // Assert Assert.Equal("Resources.TestResource", value.SearchedLocation); }
public void ActivatePlugins_ThrowErrors_ShouldCatch_ShouldReport() { // arrange const string filePath1 = @"c:\pluginDirectory\plugin_one.dll"; var fileSystem = new MockFileSystem(new Dictionary <string, MockFileData> { { filePath1, new MockFileData(string.Empty) } }); var assemblyWrapper = new TestAssemblyWrapper(defaultPlugin: typeof(TestPluginThrowsException)); var pluginPaths = new Dictionary <string, string> { { "my-plugin", filePath1 }, { "my-plugin-directories", @"c:\pluginDirectory" }, { "my-plugin-invalid-path", @"c:\doesnt-exist" } }; var reporter = Substitute.For <IReporter>(); var context = Substitute.For <IPluginContext>(); // act var pluginHandler = new Lib.Plugins.PluginHandler(reporter, fileSystem, assemblyWrapper); pluginHandler.ProcessPaths(pluginPaths); // assert Assert.AreEqual(1, pluginHandler.Plugins.Count); Assert.Throws <NotImplementedException>(() => pluginHandler.ActivatePlugins(context)); reporter.Received().Report(Arg.Any <string>()); }
public void LoadPlugins_ShouldLoadPluginsDirectoriesWithRelativePaths() { // arrange var currentDirectory = Directory.GetParent(Assembly.GetExecutingAssembly().Location); var executingLocationParentFolder = currentDirectory.Parent.FullName; var filePath1 = Path.Combine(executingLocationParentFolder, "subDirectory", "plugin_one.dll"); var fileSystem = new MockFileSystem( new Dictionary <string, MockFileData> { { filePath1, new MockFileData(string.Empty) } }, currentDirectory.FullName); var assemblyWrapper = new TestAssemblyWrapper(); var reporter = Substitute.For <IReporter>(); var pluginPaths = new Dictionary <string, string> { { "my-first-plugin", @"..\subDirectory\" } }; // act var pluginHandler = new Lib.Plugins.PluginHandler(reporter, fileSystem, assemblyWrapper); pluginHandler.ProcessPaths(pluginPaths); // assert Assert.AreEqual(1, pluginHandler.Plugins.Count); }
public void ResourceManagerStringLocalizer_GetAllStrings_MissingResourceThrows(bool includeParentCultures) { // Arrange var resourceNamesCache = new ResourceNamesCache(); var baseName = "testington"; var resourceAssembly = new TestAssemblyWrapper("Assembly1"); var resourceManager = new TestResourceManager(baseName, resourceAssembly.Assembly); var localizer = new ResourceManagerWithCultureStringLocalizer( resourceManager, resourceAssembly.Assembly, baseName, resourceNamesCache, CultureInfo.CurrentCulture); // Act & Assert var exception = Assert.Throws<MissingManifestResourceException>(() => { // We have to access the result so it evaluates. localizer.GetAllStrings(includeParentCultures).ToArray(); }); var expected = includeParentCultures ? "No manifests exist for the current culture." : $"The manifest 'testington.{CultureInfo.CurrentCulture}.resources' was not found."; Assert.Equal(expected, exception.Message); }
public void LoadPlugins_ShouldLoadPluginsFromPathAndFile() { // arrange var filePath1 = TestHelper.GetTestFilePath(@"c:\pluginDirectory\plugin_one.dll"); var filePath2 = TestHelper.GetTestFilePath(@"c:\pluginDirectory\plugin_two.dll"); var filePath3 = TestHelper.GetTestFilePath(@"c:\pluginDirectory\plugin_three.dll"); var filePath4 = TestHelper.GetTestFilePath(@"c:\pluginDirectory\foo.txt"); var filePath5 = TestHelper.GetTestFilePath(@"c:\pluginDirectory\subDirectory\bar.txt"); var filePath6 = TestHelper.GetTestFilePath(@"c:\pluginDirectory\subDirectory\plugin_four.dll"); var fileSystem = new MockFileSystem(new Dictionary <string, MockFileData> { { filePath1, new MockFileData(string.Empty) }, { filePath2, new MockFileData(string.Empty) }, { filePath3, new MockFileData(string.Empty) }, { filePath4, new MockFileData("foo") }, { filePath5, new MockFileData("bar") }, { filePath6, new MockFileData(string.Empty) }, }); var assemblyWrapper = new TestAssemblyWrapper(new Dictionary <string, int> { { TestHelper.GetTestFilePath(@"c:\pluginDirectory\plugin_one.dll"), 0 }, { TestHelper.GetTestFilePath(@"c:\pluginDirectory\plugin_two.dll"), 1 }, { TestHelper.GetTestFilePath(@"c:\pluginDirectory\plugin_three.dll"), 2 }, { TestHelper.GetTestFilePath(@"c:\pluginDirectory\subDirectory\plugin_four.dll"), 3 } }); var reporter = Substitute.For <IReporter>(); var versionWrapper = Substitute.For <IFileversionWrapper>(); versionWrapper.GetVersion(Arg.Any <Assembly>()).Returns("1.2.3"); var pluginPaths = new Dictionary <string, string> { { "my-first-plugin", TestHelper.GetTestFilePath(@"c:\pluginDirectory\") }, { "my-second-plugin", filePath6 } }; // act var pluginHandler = new Infrastructure.Plugins.PluginHandler(reporter, fileSystem, assemblyWrapper, versionWrapper); pluginHandler.ProcessPaths(pluginPaths); // assert Assert.AreEqual(4, pluginHandler.Plugins.Count); }