diff --git a/samples/LocalizationSample/Startup.cs b/samples/LocalizationSample/Startup.cs
index ea9fb7c6c3..b67fa550c0 100644
--- a/samples/LocalizationSample/Startup.cs
+++ b/samples/LocalizationSample/Startup.cs
@@ -36,9 +36,9 @@ namespace LocalizationSample
//}
};
- // Optionally create an app-specific strategy with just a delegate, e.g. look up user preference from DB.
- // Inserting it as position 0 ensures it has priority over any of the default strategies.
- //options.RequestCultureStrategies.Insert(0, new CustomRequestCultureStrategy(async context =>
+ // Optionally create an app-specific provider with just a delegate, e.g. look up user preference from DB.
+ // Inserting it as position 0 ensures it has priority over any of the default providers.
+ //options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
//{
//}));
@@ -74,13 +74,13 @@ $@"
function useCookie() {{
var culture = document.getElementById('culture');
var uiCulture = document.getElementById('uiCulture');
- var cookieValue = '{CookieRequestCultureStrategy.DefaultCookieName}=c='+culture.options[culture.selectedIndex].value+'|uic='+uiCulture.options[uiCulture.selectedIndex].value;
+ var cookieValue = '{CookieRequestCultureProvider.DefaultCookieName}=c='+culture.options[culture.selectedIndex].value+'|uic='+uiCulture.options[uiCulture.selectedIndex].value;
document.cookie = cookieValue;
window.location = window.location.href.split('?')[0];
}}
function clearCookie() {{
- document.cookie='{CookieRequestCultureStrategy.DefaultCookieName}=""""';
+ document.cookie='{CookieRequestCultureProvider.DefaultCookieName}=""""';
}}
@@ -101,7 +101,7 @@ $@"
await context.Response.WriteAsync("");
await context.Response.WriteAsync("
");
await context.Response.WriteAsync("
");
- await context.Response.WriteAsync($"| Winning strategy: | {requestCultureFeature.Strategy.GetType().Name} |
");
+ await context.Response.WriteAsync($"| Winning provider: | {requestCultureFeature.Provider.GetType().Name} |
");
await context.Response.WriteAsync($"| {SR["Current request culture:"]} | {requestCulture.Culture.DisplayName} ({requestCulture.Culture}) |
");
await context.Response.WriteAsync($"| {SR["Current request UI culture:"]} | {requestCulture.UICulture.DisplayName} ({requestCulture.UICulture}) |
");
await context.Response.WriteAsync($"| {SR["Current thread culture:"]} | {CultureInfo.CurrentCulture.DisplayName} ({CultureInfo.CurrentCulture}) |
");
diff --git a/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureProvider.cs
similarity index 97%
rename from src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs
rename to src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureProvider.cs
index eef5cf798b..46fbed8cc2 100644
--- a/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureProvider.cs
@@ -13,7 +13,7 @@ namespace Microsoft.AspNet.Localization
///
/// Determines the culture information for a request via the value of the Accept-Language header.
///
- public class AcceptLanguageHeaderRequestCultureStrategy : RequestCultureStrategy
+ public class AcceptLanguageHeaderRequestCultureProvider : RequestCultureProvider
{
///
/// The maximum number of values in the Accept-Language header to attempt to create a
diff --git a/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/CookieRequestCultureProvider.cs
similarity index 98%
rename from src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs
rename to src/Microsoft.AspNet.Localization/CookieRequestCultureProvider.cs
index e1422656d7..a9a20b03a7 100644
--- a/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/CookieRequestCultureProvider.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNet.Localization
///
/// Determines the culture information for a request via the value of a cookie.
///
- public class CookieRequestCultureStrategy : RequestCultureStrategy
+ public class CookieRequestCultureProvider : RequestCultureProvider
{
private static readonly char[] _cookieSeparator = new[] { '|' };
private static readonly string _culturePrefix = "c=";
diff --git a/src/Microsoft.AspNet.Localization/CustomRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/CustomRequestCultureProvider.cs
similarity index 63%
rename from src/Microsoft.AspNet.Localization/CustomRequestCultureStrategy.cs
rename to src/Microsoft.AspNet.Localization/CustomRequestCultureProvider.cs
index 65546bed44..0bbb94f42b 100644
--- a/src/Microsoft.AspNet.Localization/CustomRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/CustomRequestCultureProvider.cs
@@ -11,23 +11,23 @@ namespace Microsoft.AspNet.Localization
///
/// Determines the culture information for a request via the configured delegate.
///
- public class CustomRequestCultureStrategy : RequestCultureStrategy
+ public class CustomRequestCultureProvider : RequestCultureProvider
{
- private readonly Func> _strategy;
+ private readonly Func> _provider;
///
- /// Creates a new using the specified delegate.
+ /// Creates a new using the specified delegate.
///
- /// The strategy delegate.
- public CustomRequestCultureStrategy([NotNull] Func> strategy)
+ /// The provider delegate.
+ public CustomRequestCultureProvider([NotNull] Func> provider)
{
- _strategy = strategy;
+ _provider = provider;
}
///
public override Task DetermineRequestCulture([NotNull] HttpContext httpContext)
{
- return _strategy(httpContext);
+ return _provider(httpContext);
}
}
}
diff --git a/src/Microsoft.AspNet.Localization/IRequestCultureFeature.cs b/src/Microsoft.AspNet.Localization/IRequestCultureFeature.cs
index 44cc487a63..4ea6aed42c 100644
--- a/src/Microsoft.AspNet.Localization/IRequestCultureFeature.cs
+++ b/src/Microsoft.AspNet.Localization/IRequestCultureFeature.cs
@@ -14,10 +14,10 @@ namespace Microsoft.AspNet.Localization
RequestCulture RequestCulture { get; }
///
- /// The that determined the request's culture information.
- /// If the value is null then no strategy was used and the request's culture was set to the value of
+ /// The that determined the request's culture information.
+ /// If the value is null then no provider was used and the request's culture was set to the value of
/// .
///
- IRequestCultureStrategy Strategy { get; }
+ IRequestCultureProvider Provider { get; }
}
}
\ No newline at end of file
diff --git a/src/Microsoft.AspNet.Localization/IRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/IRequestCultureProvider.cs
similarity index 75%
rename from src/Microsoft.AspNet.Localization/IRequestCultureStrategy.cs
rename to src/Microsoft.AspNet.Localization/IRequestCultureProvider.cs
index 91001e57cc..4af4908b2e 100644
--- a/src/Microsoft.AspNet.Localization/IRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/IRequestCultureProvider.cs
@@ -7,17 +7,17 @@ using Microsoft.AspNet.Http;
namespace Microsoft.AspNet.Localization
{
///
- /// Represents a strategy for determining the culture information of an .
+ /// Represents a provider for determining the culture information of an .
///
- public interface IRequestCultureStrategy
+ public interface IRequestCultureProvider
{
///
- /// Implements the strategy to determine the culture of the given request.
+ /// Implements the provider to determine the culture of the given request.
///
/// The for the request.
///
/// The determined .
- /// Returns null if the strategy couldn't determine a .
+ /// Returns null if the provider couldn't determine a .
///
Task DetermineRequestCulture(HttpContext httpContext);
}
diff --git a/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/QueryStringRequestCultureProvider.cs
similarity index 97%
rename from src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs
rename to src/Microsoft.AspNet.Localization/QueryStringRequestCultureProvider.cs
index 5c6ebab146..0b5f0aef16 100644
--- a/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/QueryStringRequestCultureProvider.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Localization
///
/// Determines the culture information for a request via values in the query string.
///
- public class QueryStringRequestCultureStrategy : RequestCultureStrategy
+ public class QueryStringRequestCultureProvider : RequestCultureProvider
{
///
/// The key that contains the culture name.
diff --git a/src/Microsoft.AspNet.Localization/RequestCultureFeature.cs b/src/Microsoft.AspNet.Localization/RequestCultureFeature.cs
index 76505b4759..f512cba2aa 100644
--- a/src/Microsoft.AspNet.Localization/RequestCultureFeature.cs
+++ b/src/Microsoft.AspNet.Localization/RequestCultureFeature.cs
@@ -14,16 +14,16 @@ namespace Microsoft.AspNet.Localization
/// Creates a new with the specified .
///
/// The .
- public RequestCultureFeature([NotNull] RequestCulture requestCulture, IRequestCultureStrategy strategy)
+ public RequestCultureFeature([NotNull] RequestCulture requestCulture, IRequestCultureProvider provider)
{
RequestCulture = requestCulture;
- Strategy = strategy;
+ Provider = provider;
}
///
public RequestCulture RequestCulture { get; }
///
- public IRequestCultureStrategy Strategy { get; }
+ public IRequestCultureProvider Provider { get; }
}
}
diff --git a/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/RequestCultureProvider.cs
similarity index 93%
rename from src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs
rename to src/Microsoft.AspNet.Localization/RequestCultureProvider.cs
index 6d30805119..234d46dc22 100644
--- a/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/RequestCultureProvider.cs
@@ -3,14 +3,13 @@
using System.Threading.Tasks;
using Microsoft.AspNet.Http;
-using Microsoft.Framework.Internal;
namespace Microsoft.AspNet.Localization
{
///
- /// An abstract base class strategy for determining the culture information of an .
+ /// An abstract base class provider for determining the culture information of an .
///
- public abstract class RequestCultureStrategy : IRequestCultureStrategy
+ public abstract class RequestCultureProvider : IRequestCultureProvider
{
///
/// The current options for the .
diff --git a/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs b/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs
index 54600e17a4..4dc60d7a86 100644
--- a/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs
+++ b/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs
@@ -40,23 +40,23 @@ namespace Microsoft.AspNet.Localization
var requestCulture = _options.DefaultRequestCulture ??
new RequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture);
- IRequestCultureStrategy winningStrategy = null;
+ IRequestCultureProvider winningProvider = null;
- if (_options.RequestCultureStrategies != null)
+ if (_options.RequestCultureProviders != null)
{
- foreach (var strategy in _options.RequestCultureStrategies)
+ foreach (var provider in _options.RequestCultureProviders)
{
- var result = await strategy.DetermineRequestCulture(context);
+ var result = await provider.DetermineRequestCulture(context);
if (result != null)
{
requestCulture = result;
- winningStrategy = strategy;
+ winningProvider = provider;
break;
}
}
}
- context.SetFeature(new RequestCultureFeature(requestCulture, winningStrategy));
+ context.SetFeature(new RequestCultureFeature(requestCulture, winningProvider));
SetCurrentThreadCulture(requestCulture);
diff --git a/src/Microsoft.AspNet.Localization/RequestLocalizationOptions.cs b/src/Microsoft.AspNet.Localization/RequestLocalizationOptions.cs
index 74eb335921..a6e4bcc932 100644
--- a/src/Microsoft.AspNet.Localization/RequestLocalizationOptions.cs
+++ b/src/Microsoft.AspNet.Localization/RequestLocalizationOptions.cs
@@ -19,17 +19,17 @@ namespace Microsoft.AspNet.Localization
{
DefaultRequestCulture = new RequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture);
- RequestCultureStrategies = new List
+ RequestCultureProviders = new List
{
- new QueryStringRequestCultureStrategy { Options = this },
- new CookieRequestCultureStrategy { Options = this },
- new AcceptLanguageHeaderRequestCultureStrategy { Options = this }
+ new QueryStringRequestCultureProvider { Options = this },
+ new CookieRequestCultureProvider { Options = this },
+ new AcceptLanguageHeaderRequestCultureProvider { Options = this }
};
}
///
/// The default to use. This value will be used if none of the configured
- /// options result in a non-null result.
+ /// options result in a non-null result.
/// Defaults to set to
/// and set to .
///
@@ -54,16 +54,16 @@ namespace Microsoft.AspNet.Localization
public IList SupportedUICultures { get; set; }
///
- /// An ordered list of strategies used to determine a request's culture information. The first strategy that
+ /// An ordered list of providers used to determine a request's culture information. The first provider that
/// returns a non-null result for a given request will be used.
/// Defaults to the following:
///
- ///
- ///
- ///
+ ///
+ ///
+ ///
///
///
[SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "Improves usability")]
- public IList RequestCultureStrategies { get; set; }
+ public IList RequestCultureProviders { get; set; }
}
}
diff --git a/src/Microsoft.Framework.Localization/Internal/AssemblyWrapper.cs b/src/Microsoft.Framework.Localization/Internal/AssemblyWrapper.cs
new file mode 100644
index 0000000000..ca95f85540
--- /dev/null
+++ b/src/Microsoft.Framework.Localization/Internal/AssemblyWrapper.cs
@@ -0,0 +1,23 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System.IO;
+using System.Reflection;
+using Microsoft.Framework.Internal;
+
+namespace Microsoft.Framework.Localization.Internal
+{
+ public class AssemblyWrapper
+ {
+ public AssemblyWrapper([NotNull] Assembly assembly)
+ {
+ Assembly = assembly;
+ }
+
+ public Assembly Assembly { get; }
+
+ public virtual string FullName => Assembly.FullName;
+
+ public virtual Stream GetManifestResourceStream(string name) => Assembly.GetManifestResourceStream(name);
+ }
+}
diff --git a/src/Microsoft.Framework.Localization/ResourceManagerStringLocalizer.cs b/src/Microsoft.Framework.Localization/ResourceManagerStringLocalizer.cs
index 1ff97dfb8d..bbcf7498e9 100644
--- a/src/Microsoft.Framework.Localization/ResourceManagerStringLocalizer.cs
+++ b/src/Microsoft.Framework.Localization/ResourceManagerStringLocalizer.cs
@@ -9,6 +9,7 @@ using System.Globalization;
using System.Reflection;
using System.Resources;
using Microsoft.Framework.Internal;
+using Microsoft.Framework.Localization.Internal;
namespace Microsoft.Framework.Localization
{
@@ -18,12 +19,16 @@ namespace Microsoft.Framework.Localization
///
public class ResourceManagerStringLocalizer : IStringLocalizer
{
+ private static readonly ConcurrentDictionary> _resourceNamesCache =
+ new ConcurrentDictionary>();
+
private readonly ConcurrentDictionary _missingManifestCache =
new ConcurrentDictionary();
- private static readonly ConcurrentDictionary> _resourceNamesCache =
- new ConcurrentDictionary>();
-
+ private readonly ResourceManager _resourceManager;
+ private readonly AssemblyWrapper _resourceAssemblyWrapper;
+ private readonly string _resourceBaseName;
+
///
/// Creates a new .
///
@@ -34,26 +39,23 @@ namespace Microsoft.Framework.Localization
[NotNull] ResourceManager resourceManager,
[NotNull] Assembly resourceAssembly,
[NotNull] string baseName)
+ : this(resourceManager, new AssemblyWrapper(resourceAssembly), baseName)
{
- ResourceManager = resourceManager;
- ResourceAssembly = resourceAssembly;
- ResourceBaseName = baseName;
+
}
///
- /// The to read strings from.
+ /// Intended for testing purposes only.
///
- protected ResourceManager ResourceManager { get; }
-
- ///
- /// The that contains the strings as embedded resources.
- ///
- protected Assembly ResourceAssembly { get; }
-
- ///
- /// The base name of the embedded resource in the that contains the strings.
- ///
- protected string ResourceBaseName { get; }
+ public ResourceManagerStringLocalizer(
+ [NotNull] ResourceManager resourceManager,
+ [NotNull] AssemblyWrapper resourceAssemblyWrapper,
+ [NotNull] string baseName)
+ {
+ _resourceAssemblyWrapper = resourceAssemblyWrapper;
+ _resourceManager = resourceManager;
+ _resourceBaseName = baseName;
+ }
///
public virtual LocalizedString this[[NotNull] string name]
@@ -84,16 +86,15 @@ namespace Microsoft.Framework.Localization
public IStringLocalizer WithCulture(CultureInfo culture)
{
return culture == null
- ? new ResourceManagerStringLocalizer(ResourceManager, ResourceAssembly, ResourceBaseName)
- : new ResourceManagerWithCultureStringLocalizer(
- ResourceManager,
- ResourceAssembly,
- ResourceBaseName,
+ ? new ResourceManagerStringLocalizer(_resourceManager, _resourceAssemblyWrapper, _resourceBaseName)
+ : new ResourceManagerWithCultureStringLocalizer(_resourceManager,
+ _resourceAssemblyWrapper,
+ _resourceBaseName,
culture);
}
///
- /// Gets a resource string from the and returns null instead of
+ /// Gets a resource string from the and returns null instead of
/// throwing exceptions if a match isn't found.
///
/// The name of the string resource.
@@ -110,7 +111,7 @@ namespace Microsoft.Framework.Localization
try
{
- return culture == null ? ResourceManager.GetString(name) : ResourceManager.GetString(name, culture);
+ return culture == null ? _resourceManager.GetString(name) : _resourceManager.GetString(name, culture);
}
catch (MissingManifestResourceException)
{
@@ -150,10 +151,7 @@ namespace Microsoft.Framework.Localization
}
// Internal to allow testing
- internal static void ClearResourceNamesCache()
- {
- _resourceNamesCache.Clear();
- }
+ internal static void ClearResourceNamesCache() => _resourceNamesCache.Clear();
private IEnumerable GetResourceNamesFromCultureHierarchy(CultureInfo startingCulture)
{
@@ -186,19 +184,19 @@ namespace Microsoft.Framework.Localization
private IList GetResourceNamesForCulture(CultureInfo culture)
{
- var resourceStreamName = ResourceBaseName;
+ var resourceStreamName = _resourceBaseName;
if (!string.IsNullOrEmpty(culture.Name))
{
resourceStreamName += "." + culture.Name;
}
resourceStreamName += ".resources";
- var cacheKey = $"assembly={ResourceAssembly.FullName};resourceStreamName={resourceStreamName}";
+ var cacheKey = $"assembly={_resourceAssemblyWrapper.FullName};resourceStreamName={resourceStreamName}";
var cultureResourceNames = _resourceNamesCache.GetOrAdd(cacheKey, key =>
{
var names = new List();
- using (var cultureResourceStream = ResourceAssembly.GetManifestResourceStream(key))
+ using (var cultureResourceStream = _resourceAssemblyWrapper.GetManifestResourceStream(key))
using (var resources = new ResourceReader(cultureResourceStream))
{
foreach (DictionaryEntry entry in resources)
diff --git a/src/Microsoft.Framework.Localization/ResourceManagerStringLocalizerFactory.cs b/src/Microsoft.Framework.Localization/ResourceManagerStringLocalizerFactory.cs
index 3039a9d377..92899e15a4 100644
--- a/src/Microsoft.Framework.Localization/ResourceManagerStringLocalizerFactory.cs
+++ b/src/Microsoft.Framework.Localization/ResourceManagerStringLocalizerFactory.cs
@@ -5,6 +5,7 @@ using System;
using System.Reflection;
using System.Resources;
using Microsoft.Framework.Internal;
+using Microsoft.Framework.Localization.Internal;
using Microsoft.Framework.Runtime;
namespace Microsoft.Framework.Localization
@@ -34,7 +35,7 @@ namespace Microsoft.Framework.Localization
public IStringLocalizer Create([NotNull] Type resourceSource)
{
var typeInfo = resourceSource.GetTypeInfo();
- var assembly = typeInfo.Assembly;
+ var assembly = new AssemblyWrapper(typeInfo.Assembly);
var baseName = typeInfo.FullName;
return new ResourceManagerStringLocalizer(new ResourceManager(resourceSource), assembly, baseName);
}
@@ -49,7 +50,10 @@ namespace Microsoft.Framework.Localization
{
var assembly = Assembly.Load(new AssemblyName(location ?? _applicationEnvironment.ApplicationName));
- return new ResourceManagerStringLocalizer(new ResourceManager(baseName, assembly), assembly, baseName);
+ return new ResourceManagerStringLocalizer(
+ new ResourceManager(baseName, assembly),
+ new AssemblyWrapper(assembly),
+ baseName);
}
}
}
\ No newline at end of file
diff --git a/src/Microsoft.Framework.Localization/ResourceManagerWithCultureStringLocalizer.cs b/src/Microsoft.Framework.Localization/ResourceManagerWithCultureStringLocalizer.cs
index c8d2f36dbb..1260e26579 100644
--- a/src/Microsoft.Framework.Localization/ResourceManagerWithCultureStringLocalizer.cs
+++ b/src/Microsoft.Framework.Localization/ResourceManagerWithCultureStringLocalizer.cs
@@ -1,12 +1,12 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-using System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;
using System.Resources;
using Microsoft.Framework.Internal;
+using Microsoft.Framework.Localization.Internal;
namespace Microsoft.Framework.Localization
{
@@ -35,6 +35,19 @@ namespace Microsoft.Framework.Localization
_culture = culture;
}
+ ///
+ /// Intended for testing purposes only.
+ ///
+ public ResourceManagerWithCultureStringLocalizer(
+ [NotNull] ResourceManager resourceManager,
+ [NotNull] AssemblyWrapper assemblyWrapper,
+ [NotNull] string baseName,
+ [NotNull] CultureInfo culture)
+ : base(resourceManager, assemblyWrapper, baseName)
+ {
+ _culture = culture;
+ }
+
///
public override LocalizedString this[[NotNull] string name]
{
diff --git a/test/Microsoft.Framework.Localization.Test/ResourceManagerStringLocalizerTest.cs b/test/Microsoft.Framework.Localization.Test/ResourceManagerStringLocalizerTest.cs
index ce88695724..410fc2c50f 100644
--- a/test/Microsoft.Framework.Localization.Test/ResourceManagerStringLocalizerTest.cs
+++ b/test/Microsoft.Framework.Localization.Test/ResourceManagerStringLocalizerTest.cs
@@ -6,7 +6,7 @@ using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
-using Moq;
+using Microsoft.Framework.Localization.Internal;
using Xunit;
namespace Microsoft.Framework.Localization.Test
@@ -18,19 +18,11 @@ namespace Microsoft.Framework.Localization.Test
{
// Arrange
ResourceManagerStringLocalizer.ClearResourceNamesCache();
- var resourceManager = new Mock();
- var resourceAssembly = new Mock();
- resourceAssembly.Setup(rm => rm.GetManifestResourceStream(It.IsAny()))
- .Returns(() => MakeResourceStream());
var baseName = "test";
- var localizer1 = new ResourceManagerStringLocalizer(
- resourceManager.Object,
- resourceAssembly.Object,
- baseName);
- var localizer2 = new ResourceManagerStringLocalizer(
- resourceManager.Object,
- resourceAssembly.Object,
- baseName);
+ var resourceAssembly = new TestAssemblyWrapper();
+ var resourceManager = new TestResourceManager(baseName, resourceAssembly.Assembly);
+ var localizer1 = new ResourceManagerStringLocalizer(resourceManager, resourceAssembly, baseName);
+ var localizer2 = new ResourceManagerStringLocalizer(resourceManager, resourceAssembly, baseName);
// Act
for (int i = 0; i < 5; i++)
@@ -41,9 +33,7 @@ namespace Microsoft.Framework.Localization.Test
// Assert
var expectedCallCount = GetCultureInfoDepth(CultureInfo.CurrentUICulture);
- resourceAssembly.Verify(
- rm => rm.GetManifestResourceStream(It.IsAny()),
- Times.Exactly(expectedCallCount));
+ Assert.Equal(expectedCallCount, resourceAssembly.GetManifestResourceStreamCallCount);
}
[Fact]
@@ -51,24 +41,13 @@ namespace Microsoft.Framework.Localization.Test
{
// Arrange
ResourceManagerStringLocalizer.ClearResourceNamesCache();
- var resourceManager = new Mock();
- var resourceAssembly1 = new Mock();
- resourceAssembly1.CallBase = true;
- var resourceAssembly2 = new Mock();
- resourceAssembly2.CallBase = true;
- resourceAssembly1.Setup(rm => rm.GetManifestResourceStream(It.IsAny()))
- .Returns(() => MakeResourceStream());
- resourceAssembly2.Setup(rm => rm.GetManifestResourceStream(It.IsAny()))
- .Returns(() => MakeResourceStream());
var baseName = "test";
- var localizer1 = new ResourceManagerStringLocalizer(
- resourceManager.Object,
- resourceAssembly1.Object,
- baseName);
- var localizer2 = new ResourceManagerStringLocalizer(
- resourceManager.Object,
- resourceAssembly2.Object,
- baseName);
+ 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);
+ var localizer2 = new ResourceManagerStringLocalizer(resourceManager2, resourceAssembly2, baseName);
// Act
localizer1.ToList();
@@ -76,12 +55,8 @@ namespace Microsoft.Framework.Localization.Test
// Assert
var expectedCallCount = GetCultureInfoDepth(CultureInfo.CurrentUICulture);
- resourceAssembly1.Verify(
- rm => rm.GetManifestResourceStream(It.IsAny()),
- Times.Exactly(expectedCallCount));
- resourceAssembly2.Verify(
- rm => rm.GetManifestResourceStream(It.IsAny()),
- Times.Exactly(expectedCallCount));
+ Assert.Equal(expectedCallCount, resourceAssembly1.GetManifestResourceStreamCallCount);
+ Assert.Equal(expectedCallCount, resourceAssembly2.GetManifestResourceStreamCallCount);
}
private static Stream MakeResourceStream()
@@ -114,25 +89,35 @@ namespace Microsoft.Framework.Localization.Test
return result;
}
- public class TestAssembly1 : Assembly
+ public class TestResourceManager : ResourceManager
{
- public override string FullName
+ public TestResourceManager(string baseName, Assembly assembly)
+ : base(baseName, assembly)
{
- get
- {
- return nameof(TestAssembly1);
- }
+
}
+
+ public override string GetString(string name, CultureInfo culture) => null;
}
- public class TestAssembly2 : Assembly
+ public class TestAssemblyWrapper : AssemblyWrapper
{
- public override string FullName
+ private readonly string _name;
+
+ public TestAssemblyWrapper(string name = nameof(TestAssemblyWrapper))
+ : base(typeof(TestAssemblyWrapper).GetTypeInfo().Assembly)
{
- get
- {
- return nameof(TestAssembly2);
- }
+ _name = name;
+ }
+
+ public int GetManifestResourceStreamCallCount { get; private set; }
+
+ public override string FullName => _name;
+
+ public override Stream GetManifestResourceStream(string name)
+ {
+ GetManifestResourceStreamCallCount++;
+ return MakeResourceStream();
}
}
}
diff --git a/test/Microsoft.Framework.Localization.Test/project.json b/test/Microsoft.Framework.Localization.Test/project.json
index 45f8dd778c..420577a021 100644
--- a/test/Microsoft.Framework.Localization.Test/project.json
+++ b/test/Microsoft.Framework.Localization.Test/project.json
@@ -1,16 +1,17 @@
{
- "dependencies": {
- "Moq": "4.2.1502.911",
- "xunit": "2.1.0-*",
- "xunit.runner.dnx": "2.1.0-*",
- "Microsoft.Framework.Localization": "1.0.0-*"
- },
+ "dependencies": {
+ "xunit": "2.1.0-*",
+ "xunit.runner.dnx": "2.1.0-*",
+ "Microsoft.Framework.Localization": "1.0.0-*",
+ "System.Reflection": "4.0.10-*"
+ },
- "commands": {
- "test": "xunit.runner.dnx"
- },
+ "commands": {
+ "test": "xunit.runner.dnx"
+ },
- "frameworks": {
- "dnx451": { }
- }
+ "frameworks": {
+ "dnx451": { },
+ "dnxcore50": { }
+ }
}