Use different formatter for different currency (#1432)

* Use different formatter for different currency

* Add functional tests for currency fraction digit format

* Revert "Add functional tests for currency fraction digit format"

This reverts commit bd8aab33847425f4dcfd0d76ce310c918729b2fd.

* Add TestCurrencyFormattingLogic in UnitConverterViewModelUnitTests

* Fix InitializeMultipleConverterTest

* Add comment for a line of code

* Add default case for switch in ConvertToLocalizedString

* Remove trailing decimal
Disable decimal input if maxFractionDigits is 0
Fix input may be blocked after switched active

* Fix: UpdateIsDecimalEnabled should do nothing for non-currency converter

* Remove unnecessary SetValue method

* Add a comment

* Add functional UI Tests for currency converter
Reset currency before tests
Fix: input is blocked after switching to currency with less fractional digits

* Set Priority=0 for currency format related tests

* 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-12-03 03:04:22 +08:00
committed by GitHub
parent 6359a14a9b
commit 61d06b2d2f
13 changed files with 432 additions and 43 deletions

View File

@@ -8,5 +8,7 @@
</DataCollectionRunSettings>
<TestRunParameters>
<Parameter Name="AppId" Value="Microsoft.WindowsCalculator.Dev_8wekyb3d8bbwe!App" />
<Parameter Name="CurrencyWith3FractionalDigits" Value="Test Fractional Digits - Test Fractional Digits" />
<Parameter Name="CurrencyWithoutFractionalDigits" Value="Test No Fractional Digits - Test No Fractional Digits" />
</TestRunParameters>
</RunSettings>

View File

@@ -8,5 +8,7 @@
</DataCollectionRunSettings>
<TestRunParameters>
<Parameter Name="AppId" Value="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
<Parameter Name="CurrencyWith3FractionalDigits" Value="Jordan - Dinar" />
<Parameter Name="CurrencyWithoutFractionalDigits" Value="Japan - Yen" />
</TestRunParameters>
</RunSettings>

View File

@@ -12,6 +12,8 @@ namespace CalculatorUITests
{
private static UnitConverterPage page = new UnitConverterPage();
public TestContext TestContext { get; set; }
/// <summary>
/// Initializes the WinAppDriver web driver session.
/// </summary>
@@ -42,6 +44,7 @@ namespace CalculatorUITests
CalculatorApp.EnsureCalculatorHasFocus();
page.EnsureCalculatorIsCurrencyMode();
page.EnsureCalculatorResultTextIsZero();
page.EnsureSameUnitsAreSelected();
}
[TestCleanup]
@@ -50,6 +53,23 @@ namespace CalculatorUITests
page.ClearAll();
}
private string NormalizeCurrencyText(string realValue, int fractionDigits)
{
if (!realValue.Contains('.')) return realValue;
var parts = realValue.Split('.');
if (parts[1].Length < fractionDigits)
{
parts[1] += new string('0', fractionDigits - parts[1].Length);
}
else
{
parts[1] = parts[1].Substring(0, fractionDigits);
}
return $"{parts[0]}.{parts[1]}".TrimEnd('.');
}
#region Basic UI Functionality via Mouse Input Tests
/// <summary>
/// These automated tests verify clicking each of the buttons in the Calculator UI and getting an expected result
@@ -129,6 +149,153 @@ namespace CalculatorUITests
Assert.AreEqual("0", page.UnitConverterResults.GetCalculationResult2Text()); //verifies Backspace button clicks
}
/// <summary>
/// These automated tests verify the currency has been formatted to 3 fractional digits
/// Via mouse input, all basic UI functionality is checked
/// </summary>
[TestMethod]
[Priority(0)]
public void MouseInput_SelectCurrencyWith3FractionalDigitsEnterInputAndCheckTheFormat()
{
var currency = (string)TestContext.Properties["CurrencyWith3FractionalDigits"];
var fractionDigits = 3;
//Verifies fraction digits in given currency
page.SelectUnits1(currency);
Assert.AreEqual(currency.Replace(" - ", " "), page.UnitConverterOperators.Units1.Text); // Text is the AccessibleName of Unit
page.UnitConverterOperators.NumberPad.Num2Button.Click();
Assert.AreEqual(NormalizeCurrencyText("2", fractionDigits), page.UnitConverterResults.GetCalculationResult1Text()); //verifies 2 button
page.UnitConverterOperators.NumberPad.DecimalButton.Click();
Assert.AreEqual(NormalizeCurrencyText("2.", fractionDigits), page.UnitConverterResults.GetCalculationResult1Text()); //verifies decimal button
page.UnitConverterOperators.NumberPad.Num4Button.Click();
Assert.AreEqual(NormalizeCurrencyText("2.4", fractionDigits), page.UnitConverterResults.GetCalculationResult1Text()); //verifies 4 button
page.UnitConverterOperators.NumberPad.Num3Button.Click();
Assert.AreEqual(NormalizeCurrencyText("2.43", fractionDigits), page.UnitConverterResults.GetCalculationResult1Text()); //verifies 3 button
page.UnitConverterOperators.NumberPad.Num5Button.Click();
Assert.AreEqual(NormalizeCurrencyText("2.435", fractionDigits), page.UnitConverterResults.GetCalculationResult1Text()); //verifies 5 button
page.UnitConverterOperators.NumberPad.Num6Button.Click();
Assert.AreEqual(NormalizeCurrencyText("2.4356", fractionDigits), page.UnitConverterResults.GetCalculationResult1Text()); //verifies 6 button
}
/// <summary>
/// These automated tests verify the currency has been formatted to no fractional digit
/// Via mouse input, all basic UI functionality is checked
/// </summary>
[TestMethod]
[Priority(0)]
public void MouseInput_SelectCurrencyWithoutFractionalDigitEnterInputAndCheckTheFormat()
{
var currency = (string)TestContext.Properties["CurrencyWithoutFractionalDigits"];
var fractionDigits = 0;
//Verifies fraction digits in given currency
page.SelectUnits1(currency);
Assert.AreEqual(currency.Replace(" - ", " "), page.UnitConverterOperators.Units1.Text); // Text is the AccessibleName of Unit
page.UnitConverterOperators.NumberPad.Num2Button.Click();
Assert.AreEqual(NormalizeCurrencyText("2", fractionDigits), page.UnitConverterResults.GetCalculationResult1Text()); //verifies 2 button
page.UnitConverterOperators.NumberPad.DecimalButton.Click(); // It should be disabled, so no decimal will be displayed
Assert.AreEqual(NormalizeCurrencyText("2", fractionDigits), page.UnitConverterResults.GetCalculationResult1Text()); //verifies decimal button
page.UnitConverterOperators.NumberPad.Num4Button.Click(); // As decimal is disabled, 4 won't be part of fraction digits
Assert.AreEqual(NormalizeCurrencyText("24", fractionDigits), page.UnitConverterResults.GetCalculationResult1Text()); //verifies 4 button
}
/// <summary>
/// These automated tests verify the currency format is updated after switching
/// Via mouse input, all basic UI functionality is checked
/// </summary>
[TestMethod]
[Priority(0)]
public void MouseInput_SwitchCurrencyWithDifferentFractionalDigitsAndCheckTheFormat()
{
var currencyWith3FractionalDigits = (string)TestContext.Properties["CurrencyWith3FractionalDigits"];
var currencyWithoutFractionalDigits = (string)TestContext.Properties["CurrencyWithoutFractionalDigits"];
//Verifies fraction digits in given currency
page.SelectUnits1(currencyWith3FractionalDigits);
page.UnitConverterOperators.NumberPad.Num2Button.Click();
page.UnitConverterOperators.NumberPad.DecimalButton.Click();
page.UnitConverterOperators.NumberPad.Num4Button.Click();
page.UnitConverterOperators.NumberPad.Num3Button.Click();
page.UnitConverterOperators.NumberPad.Num5Button.Click();
Assert.AreEqual("2.435", page.UnitConverterResults.GetCalculationResult1Text());
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", page.UnitConverterResults.GetCalculationResult1Text());
}
/// <summary>
/// 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]
[Priority(0)]
public void MouseInput_SwitchCurrencyWithLessFractionalDigitsAndEnterInput()
{
var currencyWith3FractionalDigits = (string)TestContext.Properties["CurrencyWith3FractionalDigits"];
var currencyWithoutFractionalDigits = (string)TestContext.Properties["CurrencyWithoutFractionalDigits"];
//Verifies fraction digits in given currency
page.SelectUnits1(currencyWith3FractionalDigits);
page.UnitConverterOperators.NumberPad.Num2Button.Click();
page.UnitConverterOperators.NumberPad.DecimalButton.Click();
page.UnitConverterOperators.NumberPad.Num4Button.Click();
page.UnitConverterOperators.NumberPad.Num3Button.Click();
page.UnitConverterOperators.NumberPad.Num5Button.Click();
Assert.AreEqual("2.435", page.UnitConverterResults.GetCalculationResult1Text());
page.SelectUnits1(currencyWithoutFractionalDigits);
Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult1Text());
page.UnitConverterOperators.NumberPad.Num4Button.Click(); // Enter new number will replace the previous value
Assert.AreEqual("4", page.UnitConverterResults.GetCalculationResult1Text());
page.SelectUnits1(currencyWith3FractionalDigits);
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
}
}