mirror of
https://github.com/Microsoft/calculator.git
synced 2025-08-22 22:23:29 -07:00
Fixes issue #1409
Copy pasting into Currency locks the editor. Skipping the validation of full editor lock when backspace or clear button is clicked.
This commit is contained in:
parent
15ae66626a
commit
4e15401c1a
5 changed files with 254 additions and 1 deletions
|
@ -474,7 +474,7 @@ void UnitConverterViewModel::OnButtonPressed(Platform::Object ^ parameter)
|
||||||
|
|
||||||
static constexpr UCM::Command OPERANDS[] = { UCM::Command::Zero, UCM::Command::One, UCM::Command::Two, UCM::Command::Three, UCM::Command::Four,
|
static constexpr UCM::Command OPERANDS[] = { UCM::Command::Zero, UCM::Command::One, UCM::Command::Two, UCM::Command::Three, UCM::Command::Four,
|
||||||
UCM::Command::Five, UCM::Command::Six, UCM::Command::Seven, UCM::Command::Eight, UCM::Command::Nine };
|
UCM::Command::Five, UCM::Command::Six, UCM::Command::Seven, UCM::Command::Eight, UCM::Command::Nine };
|
||||||
if (m_isInputBlocked)
|
if (m_isInputBlocked && (command != UCM::Command::Clear && command != UCM::Command::Backspace))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
17
src/CalculatorUITestFramework/UnitConverterOperatorsPanel.cs
Normal file
17
src/CalculatorUITestFramework/UnitConverterOperatorsPanel.cs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
using OpenQA.Selenium.Appium.Windows;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CalculatorUITestFramework
|
||||||
|
{
|
||||||
|
public class UnitConverterOperatorsPanel
|
||||||
|
{
|
||||||
|
private WindowsDriver<WindowsElement> session => WinAppDriver.Instance.CalculatorSession;
|
||||||
|
public NumberPad NumberPad = new NumberPad();
|
||||||
|
public WindowsElement ClearButton => this.session.TryFindElementByAccessibilityId("ClearEntryButtonPos0");
|
||||||
|
public WindowsElement BackSpaceButton => this.session.TryFindElementByAccessibilityId("BackSpaceButtonSmall");
|
||||||
|
}
|
||||||
|
}
|
68
src/CalculatorUITestFramework/UnitConverterPage.cs
Normal file
68
src/CalculatorUITestFramework/UnitConverterPage.cs
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
using OpenQA.Selenium.Appium.Windows;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CalculatorUITestFramework
|
||||||
|
{
|
||||||
|
public class UnitConverterPage
|
||||||
|
{
|
||||||
|
public UnitConverterOperatorsPanel UnitConverterOperators = new UnitConverterOperatorsPanel();
|
||||||
|
public NavigationMenu NavigationMenu = new NavigationMenu();
|
||||||
|
public UnitConverterResults UnitConverterResults = new UnitConverterResults();
|
||||||
|
|
||||||
|
private WindowsDriver<WindowsElement> session => WinAppDriver.Instance.CalculatorSession;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clear the Calculator display
|
||||||
|
/// </summary>
|
||||||
|
public void ClearAll()
|
||||||
|
{
|
||||||
|
this.UnitConverterOperators.ClearButton.Click();
|
||||||
|
}
|
||||||
|
|
||||||
|
///// <summary>
|
||||||
|
///// Ensures that the calculator result text is zero; if not, clears all
|
||||||
|
///// </summary>
|
||||||
|
public void EnsureCalculatorResultTextIsZero()
|
||||||
|
{
|
||||||
|
if ("0" != this.UnitConverterResults.GetCalculationResult1Text())
|
||||||
|
{
|
||||||
|
this.ClearAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigates the caclulator to Standard mode and ensures that it is in standard mode
|
||||||
|
/// </summary>
|
||||||
|
public void NavigateToUnitConverter()
|
||||||
|
{
|
||||||
|
// Ensure that calculator is in standard mode
|
||||||
|
this.NavigationMenu.ChangeCalculatorMode(CalculatorMode.Currency);
|
||||||
|
this.UnitConverterResults.IsResultsDisplayPresent();
|
||||||
|
}
|
||||||
|
|
||||||
|
///// <summary>
|
||||||
|
///// Ensures that the calculator is in Standard Mode
|
||||||
|
///// </summary>
|
||||||
|
public void EnsureCalculatorIsCurrencyMode()
|
||||||
|
{
|
||||||
|
string source = WinAppDriver.Instance.CalculatorSession.PageSource;
|
||||||
|
if (source.Contains("Header"))
|
||||||
|
{
|
||||||
|
string header = CalculatorApp.Header.Text;
|
||||||
|
if (header == "Currency")
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.NavigateToUnitConverter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
47
src/CalculatorUITestFramework/UnitConverterResults.cs
Normal file
47
src/CalculatorUITestFramework/UnitConverterResults.cs
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
using OpenQA.Selenium.Appium.Windows;
|
||||||
|
using System;
|
||||||
|
using OpenQA.Selenium.Interactions;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace CalculatorUITestFramework
|
||||||
|
{
|
||||||
|
public class UnitConverterResults
|
||||||
|
{
|
||||||
|
private WindowsDriver<WindowsElement> session => WinAppDriver.Instance.CalculatorSession;
|
||||||
|
private WindowsElement CalculationResult1 => this.session.TryFindElementByAccessibilityId("Value1");
|
||||||
|
|
||||||
|
private WindowsElement CalculationResult2 => this.session.TryFindElementByAccessibilityId("Value2");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the text from the Value1 control and removes the narrator text that is not displayed in the UI.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The string shown in the UI.</returns>
|
||||||
|
public string GetCalculationResult1Text()
|
||||||
|
{
|
||||||
|
return Regex.Replace(this.CalculationResult1.Text.Trim(), "[^0-9.]", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Verifies that CalculationResult1 and CalculationResult2 are not null
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The string shown in the UI.</returns>
|
||||||
|
public void IsResultsDisplayPresent()
|
||||||
|
{
|
||||||
|
Assert.IsNotNull(this.CalculationResult1);
|
||||||
|
Assert.IsNotNull(this.CalculationResult2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the text from the Value2 control and removes the narrator text that is not displayed in the UI.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The string shown in the UI.</returns>
|
||||||
|
public string GetCalculationResult2Text()
|
||||||
|
{
|
||||||
|
return Regex.Replace(this.CalculationResult2.Text.Trim(), "[^0-9.]", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
121
src/CalculatorUITests/UnitConverterFunctionalTests.cs
Normal file
121
src/CalculatorUITests/UnitConverterFunctionalTests.cs
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
// Licensed under the MIT License.
|
||||||
|
using CalculatorUITestFramework;
|
||||||
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
|
using OpenQA.Selenium;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace CalculatorUITests
|
||||||
|
{
|
||||||
|
[TestClass]
|
||||||
|
public class UnitConverterFunctionalTests
|
||||||
|
{
|
||||||
|
private static UnitConverterPage page = new UnitConverterPage();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes the WinAppDriver web driver session.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
[ClassInitialize]
|
||||||
|
public static void ClassInitialize(TestContext context)
|
||||||
|
{
|
||||||
|
// Create session to launch a Calculator window
|
||||||
|
WinAppDriver.Instance.SetupCalculatorSession(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Closes the app and WinAppDriver web driver session.
|
||||||
|
/// </summary>
|
||||||
|
[ClassCleanup]
|
||||||
|
public static void ClassCleanup()
|
||||||
|
{
|
||||||
|
// Tear down Calculator session.
|
||||||
|
WinAppDriver.Instance.TearDownCalculatorSession();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ensures the calculator is in a cleared state
|
||||||
|
/// </summary>
|
||||||
|
[TestInitialize]
|
||||||
|
public void TestInit()
|
||||||
|
{
|
||||||
|
CalculatorApp.EnsureCalculatorHasFocus();
|
||||||
|
page.EnsureCalculatorIsCurrencyMode();
|
||||||
|
page.EnsureCalculatorResultTextIsZero();
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCleanup]
|
||||||
|
public void TestCleanup()
|
||||||
|
{
|
||||||
|
page.ClearAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
#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
|
||||||
|
/// Via mouse input, all basic UI functionality is checked
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
[Priority(0)]
|
||||||
|
public void MouseInput_EnterInputWithFullDecimalAndClear()
|
||||||
|
{
|
||||||
|
//Verifies the 20.42 is entered and clear is functional
|
||||||
|
page.UnitConverterOperators.NumberPad.Num2Button.Click();
|
||||||
|
Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult1Text()); //verifies 2 button
|
||||||
|
Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult2Text()); //verifies 2 button
|
||||||
|
page.UnitConverterOperators.NumberPad.Num0Button.Click();
|
||||||
|
Assert.AreEqual("20", page.UnitConverterResults.GetCalculationResult1Text()); //verifies 2 button
|
||||||
|
Assert.AreEqual("20", page.UnitConverterResults.GetCalculationResult2Text()); //verifies 2 button
|
||||||
|
page.UnitConverterOperators.NumberPad.DecimalButton.Click();
|
||||||
|
Assert.AreEqual("20.00", page.UnitConverterResults.GetCalculationResult1Text()); //verifies decimal button
|
||||||
|
Assert.AreEqual("20", page.UnitConverterResults.GetCalculationResult2Text()); //verifies decimal button
|
||||||
|
page.UnitConverterOperators.NumberPad.Num4Button.Click();
|
||||||
|
Assert.AreEqual("20.40", page.UnitConverterResults.GetCalculationResult1Text()); //verifies 4 button
|
||||||
|
Assert.AreEqual("20.40", page.UnitConverterResults.GetCalculationResult2Text()); //verifies 4 button
|
||||||
|
page.UnitConverterOperators.NumberPad.Num3Button.Click();
|
||||||
|
Assert.AreEqual("20.43", page.UnitConverterResults.GetCalculationResult1Text()); //verifies 3 button
|
||||||
|
Assert.AreEqual("20.43", page.UnitConverterResults.GetCalculationResult2Text()); //verifies 3 button
|
||||||
|
page.UnitConverterOperators.NumberPad.Num3Button.Click();
|
||||||
|
page.UnitConverterOperators.ClearButton.Click();
|
||||||
|
Assert.AreEqual("0", page.UnitConverterResults.GetCalculationResult1Text()); //verifies Clear button
|
||||||
|
Assert.AreEqual("0", page.UnitConverterResults.GetCalculationResult2Text()); //verifies Clear button
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// These automated tests verify clicking each of the buttons in the Calculator UI and getting an expected result
|
||||||
|
/// Via mouse input, all basic UI functionality is checked
|
||||||
|
/// </summary>
|
||||||
|
[TestMethod]
|
||||||
|
[Priority(0)]
|
||||||
|
public void MouseInput_EnterInputWithFullDecimalAndClearWithBackspace()
|
||||||
|
{
|
||||||
|
//Verifies the 20.42 is entered and clear is functional
|
||||||
|
page.UnitConverterOperators.NumberPad.Num2Button.Click();
|
||||||
|
Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult1Text()); //verifies 2 button
|
||||||
|
Assert.AreEqual("2", page.UnitConverterResults.GetCalculationResult2Text()); //verifies 2 button
|
||||||
|
page.UnitConverterOperators.NumberPad.Num0Button.Click();
|
||||||
|
Assert.AreEqual("20", page.UnitConverterResults.GetCalculationResult1Text()); //verifies 2 button
|
||||||
|
Assert.AreEqual("20", page.UnitConverterResults.GetCalculationResult2Text()); //verifies 2 button
|
||||||
|
page.UnitConverterOperators.NumberPad.DecimalButton.Click();
|
||||||
|
Assert.AreEqual("20.00", page.UnitConverterResults.GetCalculationResult1Text()); //verifies decimal button
|
||||||
|
Assert.AreEqual("20", page.UnitConverterResults.GetCalculationResult2Text()); //verifies decimal button
|
||||||
|
page.UnitConverterOperators.NumberPad.Num4Button.Click();
|
||||||
|
Assert.AreEqual("20.40", page.UnitConverterResults.GetCalculationResult1Text()); //verifies 4 button
|
||||||
|
Assert.AreEqual("20.40", page.UnitConverterResults.GetCalculationResult2Text()); //verifies 4 button
|
||||||
|
page.UnitConverterOperators.NumberPad.Num3Button.Click();
|
||||||
|
Assert.AreEqual("20.43", page.UnitConverterResults.GetCalculationResult1Text()); //verifies 3 button
|
||||||
|
Assert.AreEqual("20.43", page.UnitConverterResults.GetCalculationResult2Text()); //verifies 3 button
|
||||||
|
page.UnitConverterOperators.NumberPad.Num3Button.Click();
|
||||||
|
page.UnitConverterOperators.BackSpaceButton.Click();
|
||||||
|
page.UnitConverterOperators.BackSpaceButton.Click();
|
||||||
|
page.UnitConverterOperators.BackSpaceButton.Click();
|
||||||
|
page.UnitConverterOperators.BackSpaceButton.Click();
|
||||||
|
page.UnitConverterOperators.BackSpaceButton.Click();
|
||||||
|
Assert.AreEqual("0", page.UnitConverterResults.GetCalculationResult1Text()); //verifies Backspace button clicks
|
||||||
|
Assert.AreEqual("0", page.UnitConverterResults.GetCalculationResult2Text()); //verifies Backspace button clicks
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue