mirror of
https://github.com/Microsoft/calculator.git
synced 2025-08-23 06:25:19 -07:00
Add functional UI Tests for currency converter
Reset currency before tests Fix: input is blocked after switching to currency with less fractional digits
This commit is contained in:
parent
66c5f6571e
commit
96af003e36
7 changed files with 186 additions and 1 deletions
|
@ -24,7 +24,7 @@ static constexpr uint32_t OPTIMALDIGITSALLOWED = 7U;
|
||||||
static constexpr wchar_t LEFTESCAPECHAR = L'{';
|
static constexpr wchar_t LEFTESCAPECHAR = L'{';
|
||||||
static constexpr wchar_t RIGHTESCAPECHAR = L'}';
|
static constexpr wchar_t RIGHTESCAPECHAR = L'}';
|
||||||
|
|
||||||
static const double OPTIMALDECIMALALLOWED = 1e-6; // pow(10, -1 * (OPTIMALDIGITSALLOWED - 1));
|
static const double OPTIMALDECIMALALLOWED = 1e-6; // pow(10, -1 * (OPTIMALDIGITSALLOWED - 1));
|
||||||
static const double MINIMUMDECIMALALLOWED = 1e-14; // pow(10, -1 * (MAXIMUMDIGITSALLOWED - 1));
|
static const double MINIMUMDECIMALALLOWED = 1e-14; // pow(10, -1 * (MAXIMUMDIGITSALLOWED - 1));
|
||||||
|
|
||||||
unordered_map<wchar_t, wstring> quoteConversions;
|
unordered_map<wchar_t, wstring> quoteConversions;
|
||||||
|
@ -149,6 +149,11 @@ void UnitConverter::SetCurrentUnitTypes(const Unit& fromType, const Unit& toType
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_fromType != fromType)
|
||||||
|
{
|
||||||
|
m_switchedActive = true;
|
||||||
|
}
|
||||||
|
|
||||||
m_fromType = fromType;
|
m_fromType = fromType;
|
||||||
m_toType = toType;
|
m_toType = toType;
|
||||||
Calculate();
|
Calculate();
|
||||||
|
|
|
@ -35,6 +35,14 @@ namespace CalculatorUITestFramework
|
||||||
AppName.Click();
|
AppName.Click();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Click the window (to lose focus on components)
|
||||||
|
/// </summary>
|
||||||
|
public static void ClickOnWindow()
|
||||||
|
{
|
||||||
|
Window.Click();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// If the the Dock Panel for the History and Memory lists is not displayed, resize the window
|
/// If the the Dock Panel for the History and Memory lists is not displayed, resize the window
|
||||||
/// Two attempts are made, the the lable is not found a "not found" exception is thrown
|
/// Two attempts are made, the the lable is not found a "not found" exception is thrown
|
||||||
|
|
|
@ -13,5 +13,7 @@ namespace CalculatorUITestFramework
|
||||||
public NumberPad NumberPad = new NumberPad();
|
public NumberPad NumberPad = new NumberPad();
|
||||||
public WindowsElement ClearButton => this.session.TryFindElementByAccessibilityId("ClearEntryButtonPos0");
|
public WindowsElement ClearButton => this.session.TryFindElementByAccessibilityId("ClearEntryButtonPos0");
|
||||||
public WindowsElement BackSpaceButton => this.session.TryFindElementByAccessibilityId("BackSpaceButtonSmall");
|
public WindowsElement BackSpaceButton => this.session.TryFindElementByAccessibilityId("BackSpaceButtonSmall");
|
||||||
|
public WindowsElement Units1 => this.session.TryFindElementByAccessibilityId("Units1");
|
||||||
|
public WindowsElement Units2 => this.session.TryFindElementByAccessibilityId("Units2");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,5 +64,44 @@ namespace CalculatorUITestFramework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ensure Units1 and Units2 are the same
|
||||||
|
/// </summary>
|
||||||
|
public void EnsureSameUnitsAreSelected()
|
||||||
|
{
|
||||||
|
CalculatorApp.ClickOnWindow();
|
||||||
|
UnitConverterOperators.Units1.SendKeys(OpenQA.Selenium.Keys.Home);
|
||||||
|
UnitConverterOperators.Units1.SendKeys(OpenQA.Selenium.Keys.Enter);
|
||||||
|
|
||||||
|
CalculatorApp.ClickOnWindow();
|
||||||
|
UnitConverterOperators.Units2.SendKeys(OpenQA.Selenium.Keys.Home);
|
||||||
|
UnitConverterOperators.Units2.SendKeys(OpenQA.Selenium.Keys.Enter);
|
||||||
|
|
||||||
|
CalculatorApp.ClickOnWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Select value in Units1 ComboBox
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value">Value in ComboBox Units1</param>
|
||||||
|
public void SelectUnits1(string value)
|
||||||
|
{
|
||||||
|
CalculatorApp.ClickOnWindow();
|
||||||
|
UnitConverterOperators.Units1.SendKeys(value);
|
||||||
|
UnitConverterOperators.Units1.SendKeys(OpenQA.Selenium.Keys.Enter);
|
||||||
|
CalculatorApp.ClickOnWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Select value in Units2 ComboBox
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value">Value in ComboBox Units2</param>
|
||||||
|
public void SelectUnits2(string value)
|
||||||
|
{
|
||||||
|
CalculatorApp.ClickOnWindow();
|
||||||
|
UnitConverterOperators.Units2.SendKeys(value);
|
||||||
|
UnitConverterOperators.Units2.SendKeys(OpenQA.Selenium.Keys.Enter);
|
||||||
|
CalculatorApp.ClickOnWindow();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,5 +8,7 @@
|
||||||
</DataCollectionRunSettings>
|
</DataCollectionRunSettings>
|
||||||
<TestRunParameters>
|
<TestRunParameters>
|
||||||
<Parameter Name="AppId" Value="Microsoft.WindowsCalculator.Dev_8wekyb3d8bbwe!App" />
|
<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>
|
</TestRunParameters>
|
||||||
</RunSettings>
|
</RunSettings>
|
||||||
|
|
|
@ -8,5 +8,7 @@
|
||||||
</DataCollectionRunSettings>
|
</DataCollectionRunSettings>
|
||||||
<TestRunParameters>
|
<TestRunParameters>
|
||||||
<Parameter Name="AppId" Value="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
|
<Parameter Name="AppId" Value="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
|
||||||
|
<Parameter Name="CurrencyWith3FractionalDigits" Value="Jordan - Dinar" />
|
||||||
|
<Parameter Name="CurrencyWithoutFractionalDigits" Value="Japan - Yen" />
|
||||||
</TestRunParameters>
|
</TestRunParameters>
|
||||||
</RunSettings>
|
</RunSettings>
|
||||||
|
|
|
@ -12,6 +12,8 @@ namespace CalculatorUITests
|
||||||
{
|
{
|
||||||
private static UnitConverterPage page = new UnitConverterPage();
|
private static UnitConverterPage page = new UnitConverterPage();
|
||||||
|
|
||||||
|
public TestContext TestContext { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes the WinAppDriver web driver session.
|
/// Initializes the WinAppDriver web driver session.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -42,6 +44,7 @@ namespace CalculatorUITests
|
||||||
CalculatorApp.EnsureCalculatorHasFocus();
|
CalculatorApp.EnsureCalculatorHasFocus();
|
||||||
page.EnsureCalculatorIsCurrencyMode();
|
page.EnsureCalculatorIsCurrencyMode();
|
||||||
page.EnsureCalculatorResultTextIsZero();
|
page.EnsureCalculatorResultTextIsZero();
|
||||||
|
page.EnsureSameUnitsAreSelected();
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestCleanup]
|
[TestCleanup]
|
||||||
|
@ -50,6 +53,23 @@ namespace CalculatorUITests
|
||||||
page.ClearAll();
|
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
|
#region Basic UI Functionality via Mouse Input Tests
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// These automated tests verify clicking each of the buttons in the Calculator UI and getting an expected result
|
/// These automated tests verify clicking each of the buttons in the Calculator UI and getting an expected result
|
||||||
|
@ -129,6 +149,113 @@ namespace CalculatorUITests
|
||||||
Assert.AreEqual("0", page.UnitConverterResults.GetCalculationResult2Text()); //verifies Backspace button clicks
|
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(1)]
|
||||||
|
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(1)]
|
||||||
|
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(1)]
|
||||||
|
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());
|
||||||
|
|
||||||
|
page.SelectUnits1(currencyWith3FractionalDigits);
|
||||||
|
Assert.AreEqual("2.435", page.UnitConverterResults.GetCalculationResult1Text());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// These automated tests verify if input is not blocked after swiching to currency with less fractional digits
|
||||||
|
/// Via mouse input, all basic UI functionality is checked
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
[Priority(1)]
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue