diff --git a/src/CalcViewModel/Common/LocalizationService.cpp b/src/CalcViewModel/Common/LocalizationService.cpp
index 848360ee..24354e4b 100644
--- a/src/CalcViewModel/Common/LocalizationService.cpp
+++ b/src/CalcViewModel/Common/LocalizationService.cpp
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
+// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#include "pch.h"
@@ -49,17 +49,34 @@ LocalizationService ^ LocalizationService::GetInstance()
if (s_singletonInstance == nullptr)
{
- s_singletonInstance = ref new LocalizationService();
+ s_singletonInstance = ref new LocalizationService(nullptr);
}
}
return s_singletonInstance;
}
-LocalizationService::LocalizationService()
+///
+/// Replace (or create) the single instance of this singleton class by one with the language passed as parameter
+///
+/// RFC-5646 identifier of the language to use
+///
+/// Should only be used for test purpose
+///
+void LocalizationService::OverrideWithLanguage(_In_ const wchar_t * const language)
{
- m_language = ApplicationLanguages::Languages->GetAt(0);
- m_flowDirection =
- ResourceContext::GetForCurrentView()->QualifierValues->Lookup(L"LayoutDirection") != L"LTR" ? FlowDirection::RightToLeft : FlowDirection::LeftToRight;
+ s_singletonInstance = ref new LocalizationService(language);
+}
+
+///
+/// Constructor
+///
+/// RFC-5646 identifier of the language to use, if null, will use the current language of the system
+LocalizationService::LocalizationService(_In_ const wchar_t * const overridedLanguage)
+{
+ m_isLanguageOverrided = overridedLanguage != nullptr;
+ m_language = m_isLanguageOverrided ? ref new Platform::String(overridedLanguage) : ApplicationLanguages::Languages->GetAt(0);
+ m_flowDirection = ResourceContext::GetForCurrentView()->QualifierValues->Lookup(L"LayoutDirection")
+ != L"LTR" ? FlowDirection::RightToLeft : FlowDirection::LeftToRight;
auto resourceLoader = AppResourceProvider::GetInstance();
m_fontFamilyOverride = resourceLoader.GetResourceString(L"LocalizedFontFamilyOverride");
@@ -339,7 +356,7 @@ void LocalizationService::UpdateFontFamilyAndSize(DependencyObject ^ target)
// If successful, returns a formatter that respects the user's regional format settings,
// as configured by running intl.cpl.
-DecimalFormatter ^ LocalizationService::GetRegionalSettingsAwareDecimalFormatter()
+DecimalFormatter ^ LocalizationService::GetRegionalSettingsAwareDecimalFormatter() const
{
IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers();
if (languageIdentifiers != nullptr)
@@ -354,7 +371,7 @@ DecimalFormatter ^ LocalizationService::GetRegionalSettingsAwareDecimalFormatter
// as configured by running intl.cpl.
//
// This helper function creates a DateTimeFormatter with a TwentyFour hour clock
-DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String ^ format)
+DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String^ format) const
{
IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers();
if (languageIdentifiers == nullptr)
@@ -367,8 +384,7 @@ DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatt
// If successful, returns a formatter that respects the user's regional format settings,
// as configured by running intl.cpl.
-DateTimeFormatter
- ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String ^ format, _In_ String ^ calendarIdentifier, _In_ String ^ clockIdentifier)
+DateTimeFormatter^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String ^ format, _In_ String ^ calendarIdentifier, _In_ String ^ clockIdentifier) const
{
IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers();
if (languageIdentifiers == nullptr)
@@ -379,12 +395,12 @@ DateTimeFormatter
return ref new DateTimeFormatter(format, languageIdentifiers, GlobalizationPreferences::HomeGeographicRegion, calendarIdentifier, clockIdentifier);
}
-CurrencyFormatter ^ LocalizationService::GetRegionalSettingsAwareCurrencyFormatter()
+CurrencyFormatter ^ LocalizationService::GetRegionalSettingsAwareCurrencyFormatter() const
{
String ^ userCurrency =
(GlobalizationPreferences::Currencies->Size > 0) ? GlobalizationPreferences::Currencies->GetAt(0) : StringReference(DefaultCurrencyCode.data());
- IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers();
+ IIterable ^ languageIdentifiers = GetLanguageIdentifiers();
if (languageIdentifiers == nullptr)
{
languageIdentifiers = ApplicationLanguages::Languages;
@@ -398,10 +414,18 @@ CurrencyFormatter ^ LocalizationService::GetRegionalSettingsAwareCurrencyFormatt
return currencyFormatter;
}
-IIterable ^ LocalizationService::GetLanguageIdentifiers()
+IIterable ^ LocalizationService::GetLanguageIdentifiers() const
{
WCHAR currentLocale[LOCALE_NAME_MAX_LENGTH] = {};
int result = GetUserDefaultLocaleName(currentLocale, LOCALE_NAME_MAX_LENGTH);
+
+ if (m_isLanguageOverrided)
+ {
+ auto overridedLanguageList = ref new Vector();
+ overridedLanguageList->Append(m_language);
+ return overridedLanguageList;
+ }
+
if (result != 0)
{
// GetUserDefaultLocaleName may return an invalid bcp47 language tag with trailing non-BCP47 friendly characters,
diff --git a/src/CalcViewModel/Common/LocalizationService.h b/src/CalcViewModel/Common/LocalizationService.h
index 73b088b5..736d5647 100644
--- a/src/CalcViewModel/Common/LocalizationService.h
+++ b/src/CalcViewModel/Common/LocalizationService.h
@@ -30,7 +30,9 @@ namespace CalculatorApp
DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT_AND_CALLBACK(LanguageFontType, FontType, LanguageFontType::UIText);
DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(double, FontSize);
- internal : static LocalizationService ^ GetInstance();
+ internal:
+ static LocalizationService^ GetInstance();
+ static void OverrideWithLanguage(_In_ const wchar_t * const language);
Windows::UI::Xaml::FlowDirection GetFlowDirection();
bool IsRtlLayout();
@@ -41,24 +43,24 @@ namespace CalculatorApp
Windows::UI::Text::FontWeight GetFontWeightOverride();
double GetFontScaleFactorOverride(LanguageFontType fontType);
- static Windows::Globalization::NumberFormatting::DecimalFormatter ^ GetRegionalSettingsAwareDecimalFormatter();
- static Windows::Globalization::DateTimeFormatting::DateTimeFormatter ^ GetRegionalSettingsAwareDateTimeFormatter(_In_ Platform::String ^ format);
- static Windows::Globalization::DateTimeFormatting::DateTimeFormatter
- ^ GetRegionalSettingsAwareDateTimeFormatter(
- _In_ Platform::String ^ format,
- _In_ Platform::String ^ calendarIdentifier,
- _In_ Platform::String ^ clockIdentifier);
+ Windows::Globalization::NumberFormatting::DecimalFormatter ^ GetRegionalSettingsAwareDecimalFormatter() const;
+ Windows::Globalization::DateTimeFormatting::DateTimeFormatter ^ GetRegionalSettingsAwareDateTimeFormatter(_In_ Platform::String ^ format) const;
+ Windows::Globalization::DateTimeFormatting::DateTimeFormatter ^ GetRegionalSettingsAwareDateTimeFormatter(
+ _In_ Platform::String ^ format,
+ _In_ Platform::String ^ calendarIdentifier,
+ _In_ Platform::String ^ clockIdentifier) const;
- static Windows::Globalization::NumberFormatting::CurrencyFormatter ^ GetRegionalSettingsAwareCurrencyFormatter();
+ Windows::Globalization::NumberFormatting::CurrencyFormatter ^ GetRegionalSettingsAwareCurrencyFormatter() const;
static Platform::String ^ GetNarratorReadableToken(Platform::String ^ rawToken);
static Platform::String ^ GetNarratorReadableString(Platform::String ^ rawString);
private:
+ LocalizationService(_In_ const wchar_t* const overridedLanguage);
Windows::Globalization::Fonts::LanguageFont ^ GetLanguageFont(LanguageFontType fontType);
Windows::UI::Text::FontWeight ParseFontWeight(Platform::String ^ fontWeight);
- static Windows::Foundation::Collections::IIterable ^ GetLanguageIdentifiers();
+ Windows::Foundation::Collections::IIterable ^ GetLanguageIdentifiers() const;
// Attached property callbacks
static void OnFontTypePropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, LanguageFontType oldValue, LanguageFontType newValue);
@@ -72,19 +74,17 @@ namespace CalculatorApp
static std::unordered_map GetTokenToReadableNameMap();
- private:
- LocalizationService();
-
static LocalizationService ^ s_singletonInstance;
- Windows::Globalization::Fonts::LanguageFontGroup ^ m_fontGroup;
- Platform::String ^ m_language;
- Windows::UI::Xaml::FlowDirection m_flowDirection;
- bool m_overrideFontApiValues;
- Platform::String ^ m_fontFamilyOverride;
- Windows::UI::Text::FontWeight m_fontWeightOverride;
- double m_uiTextFontScaleFactorOverride;
- double m_uiCaptionFontScaleFactorOverride;
+ Windows::Globalization::Fonts::LanguageFontGroup ^ m_fontGroup;
+ Platform::String ^ m_language;
+ Windows::UI::Xaml::FlowDirection m_flowDirection;
+ bool m_overrideFontApiValues;
+ Platform::String ^ m_fontFamilyOverride;
+ bool m_isLanguageOverrided;
+ Windows::UI::Text::FontWeight m_fontWeightOverride;
+ double m_uiTextFontScaleFactorOverride;
+ double m_uiCaptionFontScaleFactorOverride;
};
}
diff --git a/src/CalcViewModel/Common/LocalizationSettings.h b/src/CalcViewModel/Common/LocalizationSettings.h
index 1b350154..addc0c39 100644
--- a/src/CalcViewModel/Common/LocalizationSettings.h
+++ b/src/CalcViewModel/Common/LocalizationSettings.h
@@ -19,7 +19,7 @@ namespace CalculatorApp
// Use DecimalFormatter as it respects the locale and the user setting
Windows::Globalization::NumberFormatting::DecimalFormatter ^ formatter;
- formatter = CalculatorApp::Common::LocalizationService::GetRegionalSettingsAwareDecimalFormatter();
+ formatter = LocalizationService::GetInstance()->GetRegionalSettingsAwareDecimalFormatter();
formatter->FractionDigits = 0;
formatter->IsDecimalPointAlwaysDisplayed = false;
@@ -61,7 +61,7 @@ namespace CalculatorApp
// Get locale info for List Separator, eg. comma is used in many locales
wchar_t listSeparatorString[4] = L"";
result = ::GetLocaleInfoEx(
- LOCALE_NAME_USER_DEFAULT,
+ m_resolvedName.c_str(),
LOCALE_SLIST,
listSeparatorString,
static_cast(std::size(listSeparatorString))); // Max length of the expected return value is 4
@@ -85,7 +85,7 @@ namespace CalculatorApp
// A value of 0 indicates the symbol follows the currency value.
int currencySymbolPrecedence = 1;
result = GetLocaleInfoEx(
- LOCALE_NAME_USER_DEFAULT,
+ m_resolvedName.c_str(),
LOCALE_IPOSSYMPRECEDES | LOCALE_RETURN_NUMBER,
(LPWSTR)¤cySymbolPrecedence,
sizeof(currencySymbolPrecedence) / sizeof(WCHAR));
@@ -104,14 +104,14 @@ namespace CalculatorApp
// Note: This function returns 0 on failure.
// We'll ignore the failure in that case and the CalendarIdentifier would get set to GregorianCalendar.
CALID calId;
- ::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER, reinterpret_cast(&calId), sizeof(calId));
+ ::GetLocaleInfoEx(m_resolvedName.c_str(), LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER, reinterpret_cast(&calId), sizeof(calId));
m_calendarIdentifier = GetCalendarIdentifierFromCalid(calId);
// Get FirstDayOfWeek Date and Time setting
wchar_t day[80] = L"";
::GetLocaleInfoEx(
- LOCALE_NAME_USER_DEFAULT,
+ m_resolvedName.c_str(),
LOCALE_IFIRSTDAYOFWEEK, // The first day in a week
reinterpret_cast(day), // Argument is of type PWSTR
static_cast(std::size(day))); // Max return size are 80 characters
diff --git a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp
index b2c68dcf..2fb8f0a6 100644
--- a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp
+++ b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp
@@ -87,7 +87,7 @@ namespace CalculatorApp
}
}
-CurrencyDataLoader::CurrencyDataLoader(_In_ unique_ptr client)
+CurrencyDataLoader::CurrencyDataLoader(_In_ unique_ptr client, const wchar_t * forcedResponseLanguage)
: m_client(move(client))
, m_loadStatus(CurrencyLoadStatus::NotLoaded)
, m_responseLanguage(L"en-US")
@@ -96,9 +96,20 @@ CurrencyDataLoader::CurrencyDataLoader(_In_ unique_ptr clie
, m_networkManager(ref new NetworkManager())
, m_meteredOverrideSet(false)
{
- if (GlobalizationPreferences::Languages->Size > 0)
+ if (forcedResponseLanguage != nullptr)
{
- m_responseLanguage = GlobalizationPreferences::Languages->GetAt(0);
+ m_responseLanguage = ref new Platform::String(forcedResponseLanguage);
+ }
+ else
+ {
+ if (GlobalizationPreferences::Languages->Size > 0)
+ {
+ m_responseLanguage = GlobalizationPreferences::Languages->GetAt(0);
+ }
+ else
+ {
+ m_responseLanguage = L"en-US";
+ }
}
if (m_client != nullptr)
@@ -107,13 +118,14 @@ CurrencyDataLoader::CurrencyDataLoader(_In_ unique_ptr clie
m_client->SetResponseLanguage(m_responseLanguage);
}
+ auto localizationService = LocalizationService::GetInstance();
if (CoreWindow::GetForCurrentThread() != nullptr)
{
// Must have a CoreWindow to access the resource context.
- m_isRtlLanguage = LocalizationService::GetInstance()->IsRtlLayout();
+ m_isRtlLanguage = localizationService->IsRtlLayout();
}
- m_ratioFormatter = LocalizationService::GetRegionalSettingsAwareDecimalFormatter();
+ m_ratioFormatter = localizationService->GetRegionalSettingsAwareDecimalFormatter();
m_ratioFormatter->IsGrouped = true;
m_ratioFormatter->IsDecimalPointAlwaysDisplayed = true;
m_ratioFormatter->FractionDigits = FORMATTER_DIGIT_COUNT;
diff --git a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.h b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.h
index 5221373a..1ec031d1 100644
--- a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.h
+++ b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.h
@@ -54,7 +54,7 @@ namespace CalculatorApp
class CurrencyDataLoader : public UCM::IConverterDataLoader, public UCM::ICurrencyConverterDataLoader
{
public:
- CurrencyDataLoader(_In_ std::unique_ptr client);
+ CurrencyDataLoader(_In_ std::unique_ptr client, const wchar_t* overrideLanguage = nullptr);
~CurrencyDataLoader();
bool LoadFinished();
diff --git a/src/CalcViewModel/DateCalculatorViewModel.cpp b/src/CalcViewModel/DateCalculatorViewModel.cpp
index 164a9281..d81cd3b5 100644
--- a/src/CalcViewModel/DateCalculatorViewModel.cpp
+++ b/src/CalcViewModel/DateCalculatorViewModel.cpp
@@ -217,7 +217,7 @@ void DateCalculatorViewModel::UpdateStrDateResultAutomationName()
void DateCalculatorViewModel::InitializeDateOutputFormats(_In_ String ^ calendarIdentifier)
{
// Format for Add/Subtract days
- m_dateTimeFormatter = LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(
+ m_dateTimeFormatter = LocalizationService::GetInstance()->GetRegionalSettingsAwareDateTimeFormatter(
L"longdate",
calendarIdentifier,
ClockIdentifiers::TwentyFourHour); // Clock Identifier is not used
diff --git a/src/CalcViewModel/UnitConverterViewModel.cpp b/src/CalcViewModel/UnitConverterViewModel.cpp
index dea918e9..72d31464 100644
--- a/src/CalcViewModel/UnitConverterViewModel.cpp
+++ b/src/CalcViewModel/UnitConverterViewModel.cpp
@@ -122,14 +122,15 @@ UnitConverterViewModel::UnitConverterViewModel(const shared_ptrSetViewModelCallback(make_shared(this));
m_model->SetViewModelCurrencyCallback(make_shared(this));
- m_decimalFormatter = LocalizationService::GetRegionalSettingsAwareDecimalFormatter();
+ m_decimalFormatter = localizationService->GetRegionalSettingsAwareDecimalFormatter();
m_decimalFormatter->FractionDigits = 0;
m_decimalFormatter->IsGrouped = true;
m_decimalSeparator = LocalizationSettings::GetInstance().GetDecimalSeparator();
- m_currencyFormatter = LocalizationService::GetRegionalSettingsAwareCurrencyFormatter();
+ m_currencyFormatter = localizationService->GetRegionalSettingsAwareCurrencyFormatter();
m_currencyFormatter->IsGrouped = true;
m_currencyFormatter->Mode = CurrencyFormatterMode::UseCurrencyCode;
m_currencyFormatter->ApplyRoundingForCurrency(RoundingAlgorithm::RoundHalfDown);
diff --git a/src/Calculator/Views/Calculator.xaml.cpp b/src/Calculator/Views/Calculator.xaml.cpp
index 6f64b193..3a64988f 100644
--- a/src/Calculator/Views/Calculator.xaml.cpp
+++ b/src/Calculator/Views/Calculator.xaml.cpp
@@ -97,7 +97,7 @@ void Calculator::SetFontSizeResources()
{ L"Tibt", 104, 29.333, 20, 40, 56, 40, 56 }, { L"Default", 104, 29.333, 23, 40, 56, 40, 56 }
};
- DecimalFormatter ^ formatter = LocalizationService::GetRegionalSettingsAwareDecimalFormatter();
+ DecimalFormatter^ formatter = LocalizationService::GetInstance()->GetRegionalSettingsAwareDecimalFormatter();
const FontTable* currentItem = fontTables;
while (currentItem->numericSystem.compare(std::wstring(L"Default")) != 0 && currentItem->numericSystem.compare(formatter->NumeralSystem->Data()) != 0)
diff --git a/src/Calculator/Views/DateCalculator.xaml.cpp b/src/Calculator/Views/DateCalculator.xaml.cpp
index b3a9dcdd..33ed3dc3 100644
--- a/src/Calculator/Views/DateCalculator.xaml.cpp
+++ b/src/Calculator/Views/DateCalculator.xaml.cpp
@@ -79,7 +79,7 @@ DateCalculator::DateCalculator()
DateDiff_ToDate->MaxDate = maxYear;
// Set the PlaceHolderText for CalendarDatePicker
- DateTimeFormatter ^ dateTimeFormatter = LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(
+ DateTimeFormatter^ dateTimeFormatter = LocalizationService::GetInstance()->GetRegionalSettingsAwareDateTimeFormatter(
L"day month year",
localizationSettings.GetCalendarIdentifier(),
ClockIdentifiers::TwentyFourHour); // Clock Identifier is not used
diff --git a/src/CalculatorUnitTests/CurrencyConverterUnitTests.cpp b/src/CalculatorUnitTests/CurrencyConverterUnitTests.cpp
index b53e4209..9b20184a 100644
--- a/src/CalculatorUnitTests/CurrencyConverterUnitTests.cpp
+++ b/src/CalculatorUnitTests/CurrencyConverterUnitTests.cpp
@@ -205,8 +205,7 @@ namespace CalculatorUnitTests
TEST_METHOD(LoadFromCache_Fail_NoCacheKey)
{
RemoveFromLocalSettings(CurrencyDataLoaderConstants::CacheTimestampKey);
-
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
bool didLoad = loader.TryLoadDataFromCacheAsync().get();
@@ -224,7 +223,7 @@ TEST_METHOD(LoadFromCache_Fail_OlderThanADay)
dayOld.UniversalTime = now.UniversalTime - CurrencyDataLoaderConstants::DayDuration - 1;
InsertToLocalSettings(CurrencyDataLoaderConstants::CacheTimestampKey, dayOld);
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
bool didLoad = loader.TryLoadDataFromCacheAsync().get();
@@ -243,7 +242,7 @@ TEST_METHOD(LoadFromCache_Fail_StaticDataFileDoesNotExist)
VERIFY_IS_TRUE(DeleteFileFromLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename));
VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::AllRatiosDataFilename, CurrencyHttpClient::GetRawAllRatiosDataResponse()));
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
bool didLoad = loader.TryLoadDataFromCacheAsync().get();
@@ -262,7 +261,7 @@ TEST_METHOD(LoadFromCache_Fail_AllRatiosDataFileDoesNotExist)
VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename, CurrencyHttpClient::GetRawStaticDataResponse()));
VERIFY_IS_TRUE(DeleteFileFromLocalCacheFolder(CurrencyDataLoaderConstants::AllRatiosDataFilename));
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
bool didLoad = loader.TryLoadDataFromCacheAsync().get();
@@ -282,7 +281,7 @@ TEST_METHOD(LoadFromCache_Fail_ResponseLanguageChanged)
VERIFY_IS_TRUE(WriteToFileInLocalCacheFolder(CurrencyDataLoaderConstants::StaticDataFilename, CurrencyHttpClient::GetRawStaticDataResponse()));
VERIFY_IS_TRUE(DeleteFileFromLocalCacheFolder(CurrencyDataLoaderConstants::AllRatiosDataFilename));
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
bool didLoad = loader.TryLoadDataFromCacheAsync().get();
@@ -295,7 +294,7 @@ TEST_METHOD(LoadFromCache_Success)
{
StandardCacheSetup();
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
bool didLoad = loader.TryLoadDataFromCacheAsync().get();
@@ -306,7 +305,7 @@ TEST_METHOD(LoadFromCache_Success)
TEST_METHOD(LoadFromWeb_Fail_ClientIsNullptr)
{
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
bool didLoad = loader.TryLoadDataFromWebAsync().get();
@@ -317,7 +316,7 @@ TEST_METHOD(LoadFromWeb_Fail_ClientIsNullptr)
TEST_METHOD(LoadFromWeb_Fail_WebException)
{
- CurrencyDataLoader loader{ make_unique() };
+ CurrencyDataLoader loader(make_unique(), L"en-US");
bool didLoad = loader.TryLoadDataFromWebAsync().get();
@@ -342,8 +341,7 @@ TEST_METHOD(LoadFromWeb_Success)
TEST_METHOD(Load_Success_LoadedFromCache)
{
StandardCacheSetup();
-
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
auto data_loaded_event = task_completion_event();
loader.SetViewModelCallback(make_shared(data_loaded_event));
@@ -391,8 +389,7 @@ TEST_CLASS(CurrencyConverterUnitTests){ const UCM::Unit GetUnit(const vector();
loader.SetViewModelCallback(make_shared(data_loaded_event));
@@ -422,7 +419,7 @@ TEST_METHOD(Loaded_LoadOrderedRatios)
{
StandardCacheSetup();
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
auto data_loaded_event = task_completion_event();
loader.SetViewModelCallback(make_shared(data_loaded_event));
@@ -455,7 +452,7 @@ TEST_METHOD(Loaded_GetCurrencySymbols_Valid)
{
StandardCacheSetup();
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
auto data_loaded_event = task_completion_event();
loader.SetViewModelCallback(make_shared(data_loaded_event));
@@ -484,7 +481,7 @@ TEST_METHOD(Loaded_GetCurrencySymbols_Invalid)
{
StandardCacheSetup();
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
auto data_loaded_event = task_completion_event();
loader.SetViewModelCallback(make_shared(data_loaded_event));
@@ -527,7 +524,7 @@ TEST_METHOD(Loaded_GetCurrencyRatioEquality_Valid)
{
StandardCacheSetup();
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
auto data_loaded_event = task_completion_event();
loader.SetViewModelCallback(make_shared(data_loaded_event));
@@ -556,7 +553,7 @@ TEST_METHOD(Loaded_GetCurrencyRatioEquality_Invalid)
{
StandardCacheSetup();
- CurrencyDataLoader loader{ nullptr };
+ CurrencyDataLoader loader(nullptr, L"en-US");
auto data_loaded_event = task_completion_event();
loader.SetViewModelCallback(make_shared(data_loaded_event));
diff --git a/src/CalculatorUnitTests/UnitTestApp.xaml.cpp b/src/CalculatorUnitTests/UnitTestApp.xaml.cpp
index e5b4eb67..8dbd5903 100644
--- a/src/CalculatorUnitTests/UnitTestApp.xaml.cpp
+++ b/src/CalculatorUnitTests/UnitTestApp.xaml.cpp
@@ -8,6 +8,7 @@
#include "pch.h"
#include "UnitTestApp.xaml.h"
+#include "Common/LocalizationService.h"
using namespace CalculatorUnitTests;
@@ -79,6 +80,9 @@ void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEvent
Window::Current->Activate();
+ // Override the current locale to use English (US) to be compatible with all tests based on formatting
+ CalculatorApp::Common::LocalizationService::OverrideWithLanguage(L"en-US");
+
Microsoft::VisualStudio::TestPlatform::TestExecutor::WinRTCore::UnitTestClient::Run(e->Arguments);
}