diff --git a/src/CalcViewModel/UnitConverterViewModel.cpp b/src/CalcViewModel/UnitConverterViewModel.cpp
index 2fa989e8..90960eb8 100644
--- a/src/CalcViewModel/UnitConverterViewModel.cpp
+++ b/src/CalcViewModel/UnitConverterViewModel.cpp
@@ -838,6 +838,15 @@ void UnitConverterViewModel::UpdateInputBlocked(_In_ const wstring& currencyInpu
}
}
+std::wstring TruncateFractionDigits(const std::wstring& n, int digitCount)
+{
+ auto i = n.find('.');
+ if (i == std::wstring::npos)
+ return n;
+ size_t actualDigitCount = n.size() - i - 1;
+ return n.substr(0, n.size() - (actualDigitCount - digitCount));
+}
+
void UnitConverterViewModel::UpdateCurrencyFormatter()
{
if (!IsCurrencyCurrentCategory || m_Unit1->Abbreviation->IsEmpty() || m_Unit2->Abbreviation->IsEmpty())
@@ -854,6 +863,8 @@ void UnitConverterViewModel::UpdateCurrencyFormatter()
m_currencyFormatter2->ApplyRoundingForCurrency(RoundingAlgorithm::RoundHalfDown);
UpdateIsDecimalEnabled();
+
+ OnPaste(ref new String(TruncateFractionDigits(m_valueFromUnlocalized, CurrencyFormatterFrom->FractionDigits).data()));
}
void UnitConverterViewModel::UpdateIsDecimalEnabled()
diff --git a/src/CalculatorUITests/CurrencyConverterFunctionalTests.cs b/src/CalculatorUITests/CurrencyConverterFunctionalTests.cs
index e6d9f720..e102c3c4 100644
--- a/src/CalculatorUITests/CurrencyConverterFunctionalTests.cs
+++ b/src/CalculatorUITests/CurrencyConverterFunctionalTests.cs
@@ -222,12 +222,13 @@ namespace CalculatorUITests
page.SelectUnits1(currencyWithoutFractionalDigits);
Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult1Text());
+ // The digits will be truncated forever, even if swiching back
page.SelectUnits1(currencyWith3FractionalDigits);
- Assert.AreEqual("2.435", page.UnitConverterResults.GetCalculationResult1Text());
+ Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult1Text());
}
///
- /// These automated tests verify if input is not blocked after swiching to currency with less fractional digits
+ /// These automated tests verify input is not blocked after swiching to currency with less fractional digits
/// Via mouse input, all basic UI functionality is checked
///
[TestMethod]
@@ -256,6 +257,45 @@ namespace CalculatorUITests
Assert.AreEqual("4", page.UnitConverterResults.GetCalculationResult1Text());
}
+ ///
+ /// These automated tests verify the result consists after swiching currency
+ /// Via mouse input, all basic UI functionality is checked
+ ///
+ [TestMethod]
+ [Priority(0)]
+ public void MouseInput_SwitchCurrencyWithLessFractionalDigitsAndCheckIfTheResultIsConsistent()
+ {
+ var currencyWith3FractionalDigits = (string)TestContext.Properties["CurrencyWith3FractionalDigits"];
+ var currencyWithoutFractionalDigits = (string)TestContext.Properties["CurrencyWithoutFractionalDigits"];
+
+ page.SelectUnits1(currencyWith3FractionalDigits);
+ page.SelectUnits2(currencyWith3FractionalDigits);
+
+ page.UnitConverterOperators.NumberPad.Num2Button.Click();
+ page.UnitConverterOperators.NumberPad.Num0Button.Click();
+ page.UnitConverterOperators.NumberPad.Num0Button.Click();
+ page.UnitConverterOperators.NumberPad.DecimalButton.Click();
+ page.UnitConverterOperators.NumberPad.Num9Button.Click();
+ page.UnitConverterOperators.NumberPad.Num9Button.Click();
+ page.UnitConverterOperators.NumberPad.Num9Button.Click();
+
+ Assert.AreEqual("200.999", page.UnitConverterResults.GetCalculationResult1Text());
+ Assert.AreEqual("200.999", page.UnitConverterResults.GetCalculationResult2Text());
+
+ page.SelectUnits1(currencyWithoutFractionalDigits);
+ Assert.AreEqual("200", page.UnitConverterResults.GetCalculationResult1Text());
+ var result = page.UnitConverterResults.GetCalculationResult2Text();
+
+ page.UnitConverterOperators.ClearButton.Click();
+
+ page.UnitConverterOperators.NumberPad.Num2Button.Click();
+ page.UnitConverterOperators.NumberPad.Num0Button.Click();
+ page.UnitConverterOperators.NumberPad.Num0Button.Click();
+
+ Assert.AreEqual("200", page.UnitConverterResults.GetCalculationResult1Text());
+ Assert.AreEqual(result, page.UnitConverterResults.GetCalculationResult2Text());
+ }
+
#endregion
}
}