diff --git a/src/CalcViewModel/Common/LocalizationService.cpp b/src/CalcViewModel/Common/LocalizationService.cpp index 8102fadd..410f8432 100644 --- a/src/CalcViewModel/Common/LocalizationService.cpp +++ b/src/CalcViewModel/Common/LocalizationService.cpp @@ -59,7 +59,7 @@ LocalizationService^ LocalizationService::GetInstance() LocalizationService::LocalizationService() { m_language = ApplicationLanguages::Languages->GetAt(0); - m_flowDirection = ResourceContext::GetForCurrentView()->QualifierValues->Lookup(L"LayoutDirection") + m_flowDirection = ResourceContext::GetForViewIndependentUse()->QualifierValues->Lookup(L"LayoutDirection") != L"LTR" ? FlowDirection::RightToLeft : FlowDirection::LeftToRight; auto localeName = std::string(m_language->Begin(), m_language->End()); diff --git a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp index 5011ddb4..87908637 100644 --- a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp +++ b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp @@ -504,12 +504,6 @@ bool CurrencyDataLoader::TryParseWebResponses( && TryParseAllRatiosData(allRatiosJson, allRatiosData); } -Platform::String ^ te(const UCM::CurrencyStaticData& s) -{ - return ref new Platform::String(s.countryName.c_str()); -}; - - bool CurrencyDataLoader::TryParseStaticData(_In_ String^ rawJson, _Inout_ vector& staticData) { JsonArray^ data = nullptr; @@ -552,11 +546,11 @@ bool CurrencyDataLoader::TryParseStaticData(_In_ String^ rawJson, _Inout_ vector }; } - auto sortCurrencyNames = [](UCM::CurrencyStaticData s) { - return ref new Platform::String(s.countryName.c_str()); + auto sortCountryNames = [](const UCM::CurrencyStaticData & s) { + return ref new String(s.countryName.c_str()); }; - LocalizationService::GetInstance()->Sort(staticData, sortCurrencyNames); + LocalizationService::GetInstance()->Sort(staticData, sortCountryNames); return true; } diff --git a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj index d199044c..a0a9756a 100644 --- a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj +++ b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj @@ -244,6 +244,7 @@ + diff --git a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj.filters b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj.filters index 57ac4fe2..b7d84d55 100644 --- a/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj.filters +++ b/src/CalculatorUnitTests/CalculatorUnitTests.vcxproj.filters @@ -29,6 +29,7 @@ Mocks + diff --git a/src/CalculatorUnitTests/LocalizationServiceUnitTests.cpp b/src/CalculatorUnitTests/LocalizationServiceUnitTests.cpp new file mode 100644 index 00000000..0a5d0c7a --- /dev/null +++ b/src/CalculatorUnitTests/LocalizationServiceUnitTests.cpp @@ -0,0 +1,143 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "pch.h" + +#include + +#include "CalcViewModel/Common/LocalizationService.h" + +using namespace CalculatorApp::Common; +using namespace Platform; +using namespace std; +using namespace Microsoft::VisualStudio::CppUnitTestFramework; + +namespace CalculatorUnitTests +{ + TEST_CLASS(LocalizationServiceUnitTests) + { + public: + + TEST_METHOD(TestSortStrings) + { + auto localizationService = LocalizationService::GetInstance(); + vector stringsToSort = + { + L"Zebra", + L"Alpha", + L"beta1", + L"Gamma", + L"Beta", + L"alpha1", + L"États-Unis", + L"Epsilon", + L"Etude", + }; + + vector expectedResult = + { + L"Alpha", + L"alpha1", + L"Beta", + L"beta1", + L"Epsilon", + L"États-Unis", + L"Etude", + L"Gamma", + L"Zebra", + }; + VERIFY_ARE_EQUAL(stringsToSort.size(), expectedResult.size()); + VERIFY_IS_FALSE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin())); + localizationService->Sort(stringsToSort); + VERIFY_IS_TRUE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin())); + } + + TEST_METHOD(TestSortEmptyStrings) + { + //Verify if LocalizationService::Sort doesn't crash when the vector is empty or null + auto localizationService = LocalizationService::GetInstance(); + vector stringsToSort = {}; + localizationService->Sort(stringsToSort); + stringsToSort = { L"" }; + localizationService->Sort(stringsToSort); + stringsToSort = { L"",L"",L"" }; + localizationService->Sort(stringsToSort); + stringsToSort = { nullptr,L"",L"" }; + localizationService->Sort(stringsToSort); + } + + TEST_METHOD(TestSortGeneric) + { + vector stringsToSort = + { + L"fermentum", + L"fringilla", + L"Curabitur", + L"rhoncus", + L"Aenean", + L"Fusce", + L"sollicitudin", + L"empor", + L"edapibus", + L"édapibas", + L"édapîbos", + L"édapîbÉs", + }; + + vector expectedResult = + { + L"Aenean", + L"Curabitur", + L"édapibas", + L"édapîbÉs", + L"édapîbos", + L"edapibus", + L"empor", + L"fermentum", + L"fringilla", + L"Fusce", + L"rhoncus", + L"sollicitudin", + }; + + + auto sortFunction = [](String^ s) { + return ref new String(L"CAL:") + s + L"TEST"; + }; + + VERIFY_ARE_EQUAL(stringsToSort.size(), expectedResult.size()); + VERIFY_IS_FALSE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin())); + + auto localizationService = LocalizationService::GetInstance(); + localizationService->Sort(stringsToSort, sortFunction); + VERIFY_IS_TRUE(equal(stringsToSort.begin(), stringsToSort.end(), expectedResult.begin())); + + vector expected2Result = + { + L"édapibas", + L"édapîbÉs", + L"édapîbos", + L"edapibus", + L"Aenean", + L"fermentum", + L"rhoncus", + L"empor", + L"sollicitudin", + L"fringilla", + L"Curabitur", + L"Fusce", + }; + + auto sort2Function = [](String^ s) { + return ref new String(s->Begin()+1); + }; + + VERIFY_ARE_EQUAL(stringsToSort.size(), expected2Result.size()); + VERIFY_IS_FALSE(equal(stringsToSort.begin(), stringsToSort.end(), expected2Result.begin())); + + localizationService->Sort(stringsToSort, sort2Function); + VERIFY_IS_TRUE(equal(stringsToSort.begin(), stringsToSort.end(), expected2Result.begin())); + + } + }; +}