Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
 public TestResourceStringProvider(
     IResourceNamesCache resourceCache,
     TestAssemblyWrapper assemblyWrapper,
     string resourceBaseName)
     : base(resourceCache, assemblyWrapper, resourceBaseName)
 {
     _assemblyWrapper = assemblyWrapper;
 }
Esempio n. 8
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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>());
        }
Esempio n. 17
0
        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);
        }
Esempio n. 19
0
        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);
        }