From 3ad95ff7ea577f4788beb122d2ccf5beaff0987a Mon Sep 17 00:00:00 2001 From: Hongxu Xu Date: Thu, 12 Nov 2020 13:41:29 +0800 Subject: [PATCH] Add TestCurrencyFormattingLogic in UnitConverterViewModelUnitTests --- src/CalcViewModel/UnitConverterViewModel.cpp | 3 +- .../UnitConverterViewModelUnitTests.cpp | 42 ++++++++++++++++--- .../UnitConverterViewModelUnitTests.h | 11 +++-- 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/src/CalcViewModel/UnitConverterViewModel.cpp b/src/CalcViewModel/UnitConverterViewModel.cpp index 5ae0dc67..25be7c74 100644 --- a/src/CalcViewModel/UnitConverterViewModel.cpp +++ b/src/CalcViewModel/UnitConverterViewModel.cpp @@ -227,9 +227,10 @@ void UnitConverterViewModel::OnUnitChanged(Object ^ parameter) return; } + m_model->SetCurrentUnitTypes(UnitFrom->GetModelUnit(), UnitTo->GetModelUnit()); + UpdateCurrencyFormatter(); - m_model->SetCurrentUnitTypes(UnitFrom->GetModelUnit(), UnitTo->GetModelUnit()); if (m_supplementaryResultsTimer != nullptr) { // End timer to show results immediately diff --git a/src/CalculatorUnitTests/UnitConverterViewModelUnitTests.cpp b/src/CalculatorUnitTests/UnitConverterViewModelUnitTests.cpp index 11fc09f9..83c1e9f2 100644 --- a/src/CalculatorUnitTests/UnitConverterViewModelUnitTests.cpp +++ b/src/CalculatorUnitTests/UnitConverterViewModelUnitTests.cpp @@ -140,6 +140,7 @@ vector UnitConverterMock::GetCategories() cats.push_back(CAT1); cats.push_back(CAT2); cats.push_back(CAT3); + cats.push_back(CAT_CURRENCY); m_curCategory = CAT2; @@ -174,6 +175,10 @@ UCM::CategorySelectionInitializer UnitConverterMock::SetCurrentCategory(const UC units.push_back(UNIT9); break; } + case CURRENCY_ID: + units.push_back(UNITJPY); + units.push_back(UNITJOD); + break; default: throw; } @@ -215,10 +220,10 @@ void UnitConverterMock::SwitchActive(const std::wstring& newValue) m_curValue = newValue; } - std::wstring UnitConverterMock::SaveUserPreferences() - { - return L"TEST"; - }; +std::wstring UnitConverterMock::SaveUserPreferences() +{ + return L"TEST"; +}; void UnitConverterMock::RestoreUserPreferences(_In_ std::wstring_view /*userPreferences*/){}; @@ -341,7 +346,7 @@ TEST_METHOD(TestUnitConverterLoadSetsUpCategories) VM::UnitConverterViewModel vm(mock); IObservableVector ^ cats = vm.Categories; VERIFY_ARE_EQUAL((UINT)1, mock->m_getCategoriesCallCount); - VERIFY_ARE_EQUAL((UINT)3, cats->Size); + VERIFY_ARE_EQUAL((UINT)4, cats->Size); // Verify that we match current category VERIFY_IS_TRUE(CAT2 == vm.CurrentCategory->GetModelCategory()); } @@ -935,6 +940,33 @@ TEST_METHOD(TestDecimalFormattingLogic) VERIFY_IS_TRUE(vm.Value1 == L"3"); VERIFY_IS_TRUE(vm.Value2 == L"2.50"); } + +TEST_METHOD(TestCurrencyFormattingLogic) +{ + // verify that currency fraction digits is formatted per currency type + + shared_ptr mock = make_shared(); + VM::UnitConverterViewModel vm(mock); + + // Establish base condition + vm.CurrentCategory = vm.Categories->GetAt(3); // Currency + vm.Unit1 = vm.Units->GetAt(0); // JPY + vm.Unit2 = vm.Units->GetAt(1); // JOD + vm.UnitChanged->Execute(nullptr); + + const WCHAR *vFrom = L"1.2340", *vTo = L"0.0070"; + vm.UpdateDisplay(vFrom, vTo); + + VERIFY_IS_TRUE(vm.Value1 == L"1."); + VERIFY_IS_TRUE(vm.Value2 == L"0.007"); + vm.SwitchActive->Execute(nullptr); + VERIFY_IS_TRUE(vm.Value1 == L"1"); // dangling decimal now removed + VERIFY_IS_TRUE(vm.Value2 == L"0.007"); + vm.SwitchActive->Execute(nullptr); + VERIFY_IS_TRUE(vm.Value1 == L"1"); + VERIFY_IS_TRUE(vm.Value2 == L"0.007"); +} + // Tests that when we switch the active field and get display // updates, the correct automation names are are being updated. TEST_METHOD(TestValue1AndValue2AutomationNameChanges) diff --git a/src/CalculatorUnitTests/UnitConverterViewModelUnitTests.h b/src/CalculatorUnitTests/UnitConverterViewModelUnitTests.h index ffcd626a..b054f06c 100644 --- a/src/CalculatorUnitTests/UnitConverterViewModelUnitTests.h +++ b/src/CalculatorUnitTests/UnitConverterViewModelUnitTests.h @@ -9,6 +9,8 @@ namespace UCM = UnitConversionManager; namespace CalculatorUnitTests { + static constexpr int CURRENCY_ID = 16; + static UCM::Unit UNIT1 = { 1, L"UNIT1", L"U1", true, false, false }; static UCM::Unit UNIT2 = { 2, L"UNIT2", L"U2", false, true, false }; static UCM::Unit UNIT3 = { 3, L"UNIT3", L"U3", false, false, false }; @@ -19,10 +21,13 @@ namespace CalculatorUnitTests static UCM::Unit UNIT8 = { 8, L"UNIT8", L"U8", false, false, false }; static UCM::Unit UNIT9 = { 9, L"UNIT9", L"U9", true, false, false }; static UCM::Unit UNITWHIMSY = { 10, L"Whimsy", L"UW", true, false, true }; + static UCM::Unit UNITJPY = { 11, L"Japan - Yen", L"JPY", true, true, false }; + static UCM::Unit UNITJOD = { 12, L"Jordan - Dinar", L"JOD", true, true, false }; - static UCM::Category CAT1 = { 1, L"CAT1", false }; // contains Unit1 - Unit3 - static UCM::Category CAT2 = { 2, L"CAT2", false }; // contains Unit4 - Unit6 - static UCM::Category CAT3 = { 3, L"CAT3", false }; // contains Unit7 - Unit9 + static UCM::Category CAT1 = { 1, L"CAT1", false }; // contains Unit1 - Unit3 + static UCM::Category CAT2 = { 2, L"CAT2", false }; // contains Unit4 - Unit6 + static UCM::Category CAT3 = { 3, L"CAT3", false }; // contains Unit7 - Unit9 + static UCM::Category CAT_CURRENCY = { CURRENCY_ID, L"Currency", false }; // contains UnitJPY and UnitJOD class UnitConverterMock : public UnitConversionManager::IUnitConverter {