Truncate digits in display value after switcing

To fix incorrect result after switching currency with less fractional digits
This commit is contained in:
Hongxu Xu 2020-11-26 11:19:28 +08:00
commit 68953eb7d8
2 changed files with 53 additions and 2 deletions

View file

@ -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()

View file

@ -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());
}
/// <summary>
/// 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
/// </summary>
[TestMethod]
@ -256,6 +257,45 @@ namespace CalculatorUITests
Assert.AreEqual("4", page.UnitConverterResults.GetCalculationResult1Text());
}
/// <summary>
/// These automated tests verify the result consists after swiching currency
/// Via mouse input, all basic UI functionality is checked
/// </summary>
[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
}
}