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()
|
void UnitConverterViewModel::UpdateCurrencyFormatter()
|
||||||
{
|
{
|
||||||
if (!IsCurrencyCurrentCategory || m_Unit1->Abbreviation->IsEmpty() || m_Unit2->Abbreviation->IsEmpty())
|
if (!IsCurrencyCurrentCategory || m_Unit1->Abbreviation->IsEmpty() || m_Unit2->Abbreviation->IsEmpty())
|
||||||
|
@ -854,6 +863,8 @@ void UnitConverterViewModel::UpdateCurrencyFormatter()
|
||||||
m_currencyFormatter2->ApplyRoundingForCurrency(RoundingAlgorithm::RoundHalfDown);
|
m_currencyFormatter2->ApplyRoundingForCurrency(RoundingAlgorithm::RoundHalfDown);
|
||||||
|
|
||||||
UpdateIsDecimalEnabled();
|
UpdateIsDecimalEnabled();
|
||||||
|
|
||||||
|
OnPaste(ref new String(TruncateFractionDigits(m_valueFromUnlocalized, CurrencyFormatterFrom->FractionDigits).data()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnitConverterViewModel::UpdateIsDecimalEnabled()
|
void UnitConverterViewModel::UpdateIsDecimalEnabled()
|
||||||
|
|
|
@ -222,12 +222,13 @@ namespace CalculatorUITests
|
||||||
page.SelectUnits1(currencyWithoutFractionalDigits);
|
page.SelectUnits1(currencyWithoutFractionalDigits);
|
||||||
Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult1Text());
|
Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult1Text());
|
||||||
|
|
||||||
|
// The digits will be truncated forever, even if swiching back
|
||||||
page.SelectUnits1(currencyWith3FractionalDigits);
|
page.SelectUnits1(currencyWith3FractionalDigits);
|
||||||
Assert.AreEqual("2.435", page.UnitConverterResults.GetCalculationResult1Text());
|
Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult1Text());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <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
|
/// Via mouse input, all basic UI functionality is checked
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
|
@ -256,6 +257,45 @@ namespace CalculatorUITests
|
||||||
Assert.AreEqual("4", page.UnitConverterResults.GetCalculationResult1Text());
|
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
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue