mirror of
https://github.com/Microsoft/calculator.git
synced 2025-08-22 22:23:29 -07:00
Truncate digits in display value after switcing
To fix incorrect result after switching currency with less fractional digits
This commit is contained in:
parent
e89872b67a
commit
68953eb7d8
2 changed files with 53 additions and 2 deletions
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue