Merge branch 'master' of https://github.com/microsoft/calculator into Update2008release

This commit is contained in:
Cory Volk 2020-08-31 16:52:00 -07:00
commit 916b79c141
24 changed files with 213 additions and 113 deletions

View file

@ -6,11 +6,11 @@
trigger: trigger:
- master - master
- servicing/* - release/*
- feature/* - feature/*
pr: pr:
- master - master
- servicing/* - release/*
- feature/* - feature/*
name: 0.$(Date:yyMM).$(DayOfMonth)$(Rev:rr).0 name: 0.$(Date:yyMM).$(DayOfMonth)$(Rev:rr).0

View file

@ -27,7 +27,7 @@ jobs:
inputs: inputs:
command: download command: download
downloadDirectory: $(Build.SourcesDirectory) downloadDirectory: $(Build.SourcesDirectory)
vstsFeed: WindowsApps vstsFeed: WindowsInboxApps
vstsFeedPackage: calculator-internals vstsFeedPackage: calculator-internals
vstsPackageVersion: 0.0.45 vstsPackageVersion: 0.0.45

View file

@ -78,7 +78,7 @@ jobs:
inputs: inputs:
command: download command: download
downloadDirectory: $(Build.SourcesDirectory) downloadDirectory: $(Build.SourcesDirectory)
vstsFeed: WindowsApps vstsFeed: WindowsInboxApps
vstsFeedPackage: calculator-internals vstsFeedPackage: calculator-internals
vstsPackageVersion: 0.0.45 vstsPackageVersion: 0.0.45

View file

@ -9,7 +9,7 @@ namespace CalculatorApp
{ {
namespace ViewModel namespace ViewModel
{ {
[Windows::UI::Xaml::Data::Bindable] public ref class HistoryItemViewModel sealed : Windows::UI::Xaml::Data::ICustomPropertyProvider [Windows::UI::Xaml::Data::Bindable] public ref class HistoryItemViewModel sealed
{ {
internal : internal :
@ -42,23 +42,6 @@ namespace CalculatorApp
property Platform::String property Platform::String
^ AccResult { Platform::String ^ get() { return m_accResult; } } ^ AccResult { Platform::String ^ get() { return m_accResult; } }
virtual Windows::UI::Xaml::Data::ICustomProperty
^ GetCustomProperty(Platform::String ^ name) { return nullptr; }
virtual Windows::UI::Xaml::Data::ICustomProperty
^ GetIndexedProperty(Platform::String ^ name, Windows::UI::Xaml::Interop::TypeName type) { return nullptr; }
virtual property Windows::UI::Xaml::Interop::TypeName Type
{
Windows::UI::Xaml::Interop::TypeName get()
{
return this->GetType();
}
}
virtual Platform::String
^ GetStringRepresentation() { return m_accExpression + " " + m_accResult; }
private : static Platform::String private : static Platform::String
^ GetAccessibleExpressionFromTokens( ^ GetAccessibleExpressionFromTokens(
_In_ std::shared_ptr<std::vector<std::pair<std::wstring, int>>> const& spTokens, _In_ std::shared_ptr<std::vector<std::pair<std::wstring, int>>> const& spTokens,

View file

@ -14,8 +14,7 @@ namespace CalculatorApp
/// <summary> /// <summary>
/// Model representation of a single item in the Memory list /// Model representation of a single item in the Memory list
/// </summary> /// </summary>
[Windows::UI::Xaml::Data::Bindable] public ref class MemoryItemViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged, [Windows::UI::Xaml::Data::Bindable] public ref class MemoryItemViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged
Windows::UI::Xaml::Data::ICustomPropertyProvider
{ {
public: public:
MemoryItemViewModel(StandardCalculatorViewModel ^ calcVM) MemoryItemViewModel(StandardCalculatorViewModel ^ calcVM)
@ -27,24 +26,7 @@ namespace CalculatorApp
OBSERVABLE_PROPERTY_RW(int, Position); OBSERVABLE_PROPERTY_RW(int, Position);
OBSERVABLE_PROPERTY_RW(Platform::String ^, Value); OBSERVABLE_PROPERTY_RW(Platform::String ^, Value);
virtual Windows::UI::Xaml::Data::ICustomProperty void Clear();
^ GetCustomProperty(Platform::String ^ name) { return nullptr; }
virtual Windows::UI::Xaml::Data::ICustomProperty
^ GetIndexedProperty(Platform::String ^ name, Windows::UI::Xaml::Interop::TypeName type) { return nullptr; }
virtual property Windows::UI::Xaml::Interop::TypeName Type
{
Windows::UI::Xaml::Interop::TypeName get()
{
return this->GetType();
}
}
virtual Platform::String
^ GetStringRepresentation() { return Value; }
void Clear();
void MemoryAdd(); void MemoryAdd();
void MemorySubtract(); void MemorySubtract();

View file

@ -132,7 +132,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
IsOperandEnabled = true; IsOperandEnabled = true;
IsNegateEnabled = true; IsNegateEnabled = true;
IsDecimalEnabled = true; IsDecimalEnabled = true;
AreProgrammerRadixOperatorsEnabled = false; AreProgrammerRadixOperatorsVisible = false;
} }
String ^ StandardCalculatorViewModel::LocalizeDisplayValue(_In_ wstring const& displayValue) String ^ StandardCalculatorViewModel::LocalizeDisplayValue(_In_ wstring const& displayValue)

View file

@ -76,7 +76,7 @@ namespace CalculatorApp
OBSERVABLE_PROPERTY_R(CalculatorApp::Common::NumberBase, CurrentRadixType); OBSERVABLE_PROPERTY_R(CalculatorApp::Common::NumberBase, CurrentRadixType);
OBSERVABLE_PROPERTY_R(bool, AreTokensUpdated); OBSERVABLE_PROPERTY_R(bool, AreTokensUpdated);
OBSERVABLE_PROPERTY_R(bool, AreAlwaysOnTopResultsUpdated); OBSERVABLE_PROPERTY_R(bool, AreAlwaysOnTopResultsUpdated);
OBSERVABLE_PROPERTY_R(bool, AreProgrammerRadixOperatorsEnabled); OBSERVABLE_PROPERTY_R(bool, AreProgrammerRadixOperatorsVisible);
OBSERVABLE_PROPERTY_R(bool, IsInputEmpty); OBSERVABLE_PROPERTY_R(bool, IsInputEmpty);
OBSERVABLE_PROPERTY_R(CalculatorApp::Common::Automation::NarratorAnnouncement ^, Announcement); OBSERVABLE_PROPERTY_R(CalculatorApp::Common::Automation::NarratorAnnouncement ^, Announcement);
OBSERVABLE_PROPERTY_R(unsigned int, OpenParenthesisCount); OBSERVABLE_PROPERTY_R(unsigned int, OpenParenthesisCount);
@ -103,7 +103,7 @@ namespace CalculatorApp
{ {
m_isBitFlipChecked = value; m_isBitFlipChecked = value;
IsBinaryBitFlippingEnabled = IsProgrammer && m_isBitFlipChecked; IsBinaryBitFlippingEnabled = IsProgrammer && m_isBitFlipChecked;
AreProgrammerRadixOperatorsEnabled = IsProgrammer && !m_isBitFlipChecked; AreProgrammerRadixOperatorsVisible = IsProgrammer && !m_isBitFlipChecked;
RaisePropertyChanged(L"IsBitFlipChecked"); RaisePropertyChanged(L"IsBitFlipChecked");
} }
} }
@ -178,7 +178,7 @@ namespace CalculatorApp
IsBitFlipChecked = false; IsBitFlipChecked = false;
} }
IsBinaryBitFlippingEnabled = m_isProgrammer && IsBitFlipChecked; IsBinaryBitFlippingEnabled = m_isProgrammer && IsBitFlipChecked;
AreProgrammerRadixOperatorsEnabled = m_isProgrammer && !IsBitFlipChecked; AreProgrammerRadixOperatorsVisible = m_isProgrammer && !IsBitFlipChecked;
if (value) if (value)
{ {
IsStandard = false; IsStandard = false;

View file

@ -135,7 +135,7 @@
</ImportGroup> </ImportGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile> <ClCompile>
<AdditionalOptions>/bigobj /await /std:c++17 /utf-8</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings> <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(SolutionDir)..\src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)..\src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<WarningLevel>Level4</WarningLevel> <WarningLevel>Level4</WarningLevel>
@ -144,7 +144,7 @@
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile> <ClCompile>
<AdditionalOptions>/bigobj /await /std:c++17 /utf-8</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings> <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(SolutionDir)..\src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)..\src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<WarningLevel>Level4</WarningLevel> <WarningLevel>Level4</WarningLevel>
@ -177,7 +177,7 @@
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
<AdditionalOptions>/bigobj /await /std:c++17 /utf-8</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings> <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(SolutionDir)..\src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)..\src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<WarningLevel>Level4</WarningLevel> <WarningLevel>Level4</WarningLevel>
@ -198,7 +198,7 @@
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <ClCompile>
<AdditionalOptions>/bigobj /await /std:c++17 /utf-8</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>4453;28204</DisableSpecificWarnings> <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
<AdditionalIncludeDirectories>$(SolutionDir)..\src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)..\src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<WarningLevel>Level4</WarningLevel> <WarningLevel>Level4</WarningLevel>
@ -965,4 +965,4 @@
<Error Condition="!Exists('..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.targets'))" /> <Error Condition="!Exists('..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.WindowsCalculator.PGO.1.0.2\build\native\Microsoft.WindowsCalculator.PGO.targets'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.UI.Xaml.2.3.200213001\build\native\Microsoft.UI.Xaml.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.UI.Xaml.2.3.200213001\build\native\Microsoft.UI.Xaml.targets'))" /> <Error Condition="!Exists('..\..\packages\Microsoft.UI.Xaml.2.3.200213001\build\native\Microsoft.UI.Xaml.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.UI.Xaml.2.3.200213001\build\native\Microsoft.UI.Xaml.targets'))" />
</Target> </Target>
</Project> </Project>

View file

@ -346,13 +346,13 @@
<Flyout x:Name="BitShiftFlyout" <Flyout x:Name="BitShiftFlyout"
Windows10version1809:AreOpenCloseAnimationsEnabled="False" Windows10version1809:AreOpenCloseAnimationsEnabled="False"
FlyoutPresenterStyle="{ThemeResource OperatorPanelFlyoutStyle}" FlyoutPresenterStyle="{ThemeResource OperatorPanelFlyoutStyle}"
Placement="Bottom"> Placement="Bottom"
Opened="BitShiftFlyout_Opened">
<StackPanel MaxWidth="192" Padding="12"> <StackPanel MaxWidth="192" Padding="12">
<RadioButton x:Name="ArithmeticShiftButton" <RadioButton x:Name="ArithmeticShiftButton"
x:Uid="arithmeticShiftButton" x:Uid="arithmeticShiftButton"
AutomationProperties.AutomationId="arithmeticShiftButton" AutomationProperties.AutomationId="arithmeticShiftButton"
Checked="BitshiftFlyout_Checked" Checked="BitshiftFlyout_Checked"/>
IsChecked="True"/>
<RadioButton x:Name="LogicalShiftButton" <RadioButton x:Name="LogicalShiftButton"
x:Uid="logicalShiftButton" x:Uid="logicalShiftButton"
AutomationProperties.AutomationId="logicalShiftButton" AutomationProperties.AutomationId="logicalShiftButton"

View file

@ -47,10 +47,31 @@ void CalculatorProgrammerRadixOperators::FlyoutButton_Clicked(_In_ Platform::Obj
void CalculatorProgrammerRadixOperators::checkDefaultBitShift() void CalculatorProgrammerRadixOperators::checkDefaultBitShift()
{ {
this->ArithmeticShiftButton->IsChecked = true; LoadDeferredLoadButtons();
if (IsButtonLoaded())
{
return;
}
CollapseBitshiftButtons();
m_selectedShiftButtonMode = BitShiftMode::Arithmetic;
LshButton->Visibility = ::Visibility::Visible;
RshButton->Visibility = ::Visibility::Visible;
LshButton->IsEnabled = true;
RshButton->IsEnabled = true;
} }
void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e) bool CalculatorApp::CalculatorProgrammerRadixOperators::IsButtonLoaded()
{
// Since arithmeticShiftButton defaults to IsChecked = true, this event an fire before we can load the deferred loaded controls. If that is the case, just
// return and do nothing.
return RolButton == nullptr || RorButton == nullptr || RolCarryButton == nullptr || RorCarryButton == nullptr || LshLogicalButton == nullptr
|| RshLogicalButton == nullptr;
}
void CalculatorApp::CalculatorProgrammerRadixOperators::LoadDeferredLoadButtons()
{ {
// Load deferred load buttons // Load deferred load buttons
if (RolButton == nullptr) if (RolButton == nullptr)
@ -62,11 +83,14 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object
FindName("LshLogicalButton"); FindName("LshLogicalButton");
FindName("RshLogicalButton"); FindName("RshLogicalButton");
} }
}
// Since arithmeticShiftButton defaults to IsChecked = true, this event an fire before we can load the deferred loaded controls. If that is the case, just void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e)
// return and do nothing. {
if (RolButton == nullptr || RorButton == nullptr || RolCarryButton == nullptr || RorCarryButton == nullptr || LshLogicalButton == nullptr // Load deferred load buttons
|| RshLogicalButton == nullptr) LoadDeferredLoadButtons();
if (IsButtonLoaded())
{ {
return; return;
} }
@ -75,6 +99,7 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object
auto radioButton = static_cast<RadioButton ^>(sender); auto radioButton = static_cast<RadioButton ^>(sender);
Platform::String ^ announcementString = L""; Platform::String ^ announcementString = L"";
BitShiftMode selectedButtonMode = m_selectedShiftButtonMode;
if (radioButton == ArithmeticShiftButton) if (radioButton == ArithmeticShiftButton)
{ {
@ -83,6 +108,7 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object
LshButton->IsEnabled = true; LshButton->IsEnabled = true;
RshButton->IsEnabled = true; RshButton->IsEnabled = true;
announcementString = m_arithmeticShiftButtonContent; announcementString = m_arithmeticShiftButtonContent;
selectedButtonMode = BitShiftMode::Arithmetic;
} }
else if (radioButton == LogicalShiftButton) else if (radioButton == LogicalShiftButton)
{ {
@ -91,6 +117,7 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object
LshLogicalButton->IsEnabled = true; LshLogicalButton->IsEnabled = true;
RshLogicalButton->IsEnabled = true; RshLogicalButton->IsEnabled = true;
announcementString = m_logicalShiftButtonContent; announcementString = m_logicalShiftButtonContent;
selectedButtonMode = BitShiftMode::LogicalShift;
} }
else if (radioButton == RotateCircularButton) else if (radioButton == RotateCircularButton)
{ {
@ -99,6 +126,7 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object
RolButton->IsEnabled = true; RolButton->IsEnabled = true;
RorButton->IsEnabled = true; RorButton->IsEnabled = true;
announcementString = m_rotateCircularButtonContent; announcementString = m_rotateCircularButtonContent;
selectedButtonMode = BitShiftMode::RotateCircular;
} }
else if (radioButton == RotateCarryShiftButton) else if (radioButton == RotateCarryShiftButton)
{ {
@ -107,9 +135,15 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object
RolCarryButton->IsEnabled = true; RolCarryButton->IsEnabled = true;
RorCarryButton->IsEnabled = true; RorCarryButton->IsEnabled = true;
announcementString = m_rotateCarryShiftButtonContent; announcementString = m_rotateCarryShiftButtonContent;
selectedButtonMode = BitShiftMode::RotateCarry;
}
if (selectedButtonMode != m_selectedShiftButtonMode)
{
this->BitShiftFlyout->Hide();
m_selectedShiftButtonMode = selectedButtonMode;
} }
this->BitShiftFlyout->Hide();
Model->SetBitshiftRadioButtonCheckedAnnouncement(announcementString); Model->SetBitshiftRadioButtonCheckedAnnouncement(announcementString);
} }
@ -176,3 +210,23 @@ void CalculatorProgrammerRadixOperators::ClearButton_LostFocus(Object ^ sender,
ClearEntryButton->Focus(::FocusState::Programmatic); ClearEntryButton->Focus(::FocusState::Programmatic);
} }
} }
void CalculatorApp::CalculatorProgrammerRadixOperators::BitShiftFlyout_Opened(Platform::Object ^ sender, Platform::Object ^ e)
{
if (m_selectedShiftButtonMode == BitShiftMode::Arithmetic)
{
ArithmeticShiftButton->IsChecked = true;
}
else if (m_selectedShiftButtonMode == BitShiftMode::LogicalShift)
{
LogicalShiftButton->IsChecked = true;
}
else if (m_selectedShiftButtonMode == BitShiftMode::RotateCircular)
{
RotateCircularButton->IsChecked = true;
}
else if (m_selectedShiftButtonMode == BitShiftMode::RotateCarry)
{
RotateCarryShiftButton->IsChecked = true;
}
}

View file

@ -29,19 +29,30 @@ namespace CalculatorApp
Platform::String ^ ParenthesisCountToString(unsigned int count); Platform::String ^ ParenthesisCountToString(unsigned int count);
DEPENDENCY_PROPERTY_OWNER(CalculatorProgrammerRadixOperators); DEPENDENCY_PROPERTY_OWNER(CalculatorProgrammerRadixOperators);
void checkDefaultBitShift(); void checkDefaultBitShift();
private: private:
enum class BitShiftMode
{
Arithmetic,
LogicalShift,
RotateCircular,
RotateCarry
};
void BitshiftFlyout_Checked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); void BitshiftFlyout_Checked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void FlyoutButton_Clicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e); void FlyoutButton_Clicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);
void CollapseBitshiftButtons(); void CollapseBitshiftButtons();
void LoadResourceStrings(); void LoadResourceStrings();
void LoadDeferredLoadButtons();
bool IsButtonLoaded();
bool m_isErrorVisualState; bool m_isErrorVisualState;
void OpenParenthesisButton_GotFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); void OpenParenthesisButton_GotFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void ClearEntryButton_LostFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); void ClearEntryButton_LostFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void ClearButton_LostFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); void ClearButton_LostFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
void BitShiftFlyout_Opened(Platform::Object ^ sender, Platform::Object ^ e);
BitShiftMode m_selectedShiftButtonMode;
Platform::String ^ m_arithmeticShiftButtonContent; Platform::String ^ m_arithmeticShiftButtonContent;
Platform::String ^ m_logicalShiftButtonContent; Platform::String ^ m_logicalShiftButtonContent;
Platform::String ^ m_rotateCircularButtonContent; Platform::String ^ m_rotateCircularButtonContent;

View file

@ -63,6 +63,7 @@
Margin="0,0,0,4" Margin="0,0,0,4"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Style="{ThemeResource BodyTextBlockMediumStyle}" Style="{ThemeResource BodyTextBlockMediumStyle}"
AutomationProperties.AutomationId="HistoryItemExpression"
AutomationProperties.Name="{x:Bind AccExpression}" AutomationProperties.Name="{x:Bind AccExpression}"
IsTextSelectionEnabled="True" IsTextSelectionEnabled="True"
Text="{x:Bind Expression}" Text="{x:Bind Expression}"
@ -72,6 +73,7 @@
HorizontalAlignment="Right" HorizontalAlignment="Right"
Style="{ThemeResource TitleTextBlockStyle}" Style="{ThemeResource TitleTextBlockStyle}"
FontWeight="SemiBold" FontWeight="SemiBold"
AutomationProperties.AutomationId="HistoryItemValue"
AutomationProperties.Name="{x:Bind AccResult}" AutomationProperties.Name="{x:Bind AccResult}"
IsTextSelectionEnabled="True" IsTextSelectionEnabled="True"
Text="{x:Bind Result}" Text="{x:Bind Result}"

View file

@ -142,6 +142,7 @@
AutomationProperties.AutomationId="NormalAlwaysOnTopButton" AutomationProperties.AutomationId="NormalAlwaysOnTopButton"
Click="AlwaysOnTopButtonClick" Click="AlwaysOnTopButtonClick"
Content="&#xEE49;" Content="&#xEE49;"
TabIndex="3"
Visibility="{x:Bind Model.DisplayNormalAlwaysOnTopOption, Mode=OneWay}"> Visibility="{x:Bind Model.DisplayNormalAlwaysOnTopOption, Mode=OneWay}">
<Button.KeyboardAccelerators> <Button.KeyboardAccelerators>
<KeyboardAccelerator Key="Up" Modifiers="Menu"/> <KeyboardAccelerator Key="Up" Modifiers="Menu"/>

View file

@ -54,6 +54,7 @@
HorizontalAlignment="Right" HorizontalAlignment="Right"
Style="{ThemeResource TitleTextBlockStyle}" Style="{ThemeResource TitleTextBlockStyle}"
FontWeight="SemiBold" FontWeight="SemiBold"
AutomationProperties.AutomationId="MemoryItemValue"
FlowDirection="LeftToRight" FlowDirection="LeftToRight"
IsTextSelectionEnabled="True" IsTextSelectionEnabled="True"
Text="{x:Bind Model.Value, Mode=OneWay}" Text="{x:Bind Model.Value, Mode=OneWay}"

View file

@ -27,8 +27,8 @@
<local:CalculatorProgrammerRadixOperators x:Name="ProgrammerRadixOperators" <local:CalculatorProgrammerRadixOperators x:Name="ProgrammerRadixOperators"
TabIndex="16" TabIndex="16"
Visibility="{x:Bind Model.AreProgrammerRadixOperatorsEnabled, Mode=OneWay}" Visibility="{x:Bind Model.AreProgrammerRadixOperatorsVisible, Mode=OneWay}"
IsEnabled="{x:Bind Model.AreProgrammerRadixOperatorsEnabled, Mode=OneWay}" IsEnabled="{x:Bind Model.IsProgrammer, Mode=OneWay}"
x:Load="False"/> x:Load="False"/>
</Grid> </Grid>

View file

@ -72,10 +72,7 @@ void OperatorsPanel::EnsureProgrammerRadixOps()
this->FindName(L"ProgrammerRadixOperators"); this->FindName(L"ProgrammerRadixOperators");
} }
if (ProgrammerRadixOperators) ProgrammerRadixOperators->checkDefaultBitShift();
{
ProgrammerRadixOperators->checkDefaultBitShift();
}
} }
void OperatorsPanel::EnsureProgrammerBitFlipPanel() void OperatorsPanel::EnsureProgrammerBitFlipPanel()

View file

@ -0,0 +1,29 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using OpenQA.Selenium.Appium;
using System;
using System.Collections.Generic;
using System.Text;
namespace CalculatorUITestFramework
{
public class HistoryItem
{
public AppiumWebElement Item { get; }
public HistoryItem(AppiumWebElement item)
{
Item = item;
}
public string GetValue()
{
return Item.FindElementByAccessibilityId("HistoryItemValue")?.Text;
}
public string GetExpression()
{
return Item.FindElementByAccessibilityId("HistoryItemExpression")?.Text;
}
}
}

View file

@ -5,8 +5,10 @@ using OpenQA.Selenium;
using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Windows; using OpenQA.Selenium.Appium.Windows;
using OpenQA.Selenium.Interactions; using OpenQA.Selenium.Interactions;
using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Drawing; using System.Drawing;
using System.Linq;
namespace CalculatorUITestFramework namespace CalculatorUITestFramework
{ {
@ -34,10 +36,10 @@ namespace CalculatorUITestFramework
/// Gets all of the history items listed in the History Pane. /// Gets all of the history items listed in the History Pane.
/// </summary> /// </summary>
/// <returns>A readonly collection of history items.</returns> /// <returns>A readonly collection of history items.</returns>
public ReadOnlyCollection<AppiumWebElement> GetAllHistoryListViewItems() public List<HistoryItem> GetAllHistoryListViewItems()
{ {
OpenHistoryPanel(); OpenHistoryPanel();
return this.HistoryListView.FindElementsByClassName("ListViewItem"); return (from item in this.HistoryListView.FindElementsByClassName("ListViewItem") select new HistoryItem(item)).ToList();
} }
/// <summary> /// <summary>
@ -92,10 +94,10 @@ namespace CalculatorUITestFramework
/// Gets all of the History items listed in the History Flyout. /// Gets all of the History items listed in the History Flyout.
/// </summary> /// </summary>
/// <returns> A read only collection of History items.</returns> /// <returns> A read only collection of History items.</returns>
public ReadOnlyCollection<AppiumWebElement> GetAllHistoryFlyoutListViewItems() public List<HistoryItem> GetAllHistoryFlyoutListViewItems()
{ {
OpenHistoryFlyout(); OpenHistoryFlyout();
return this.HistoryListView.FindElementsByClassName("ListViewItem"); return (from item in this.HistoryListView.FindElementsByClassName("ListViewItem") select new HistoryItem(item)).ToList();
} }
/// <summary> /// <summary>

View file

@ -0,0 +1,25 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using OpenQA.Selenium.Appium;
using System;
using System.Collections.Generic;
using System.Text;
namespace CalculatorUITestFramework
{
public class MemoryItem
{
public AppiumWebElement Item { get; }
public MemoryItem(AppiumWebElement item)
{
Item = item;
}
public string GetValue()
{
return Item.FindElementByAccessibilityId("MemoryItemValue")?.Text;
}
}
}

View file

@ -6,8 +6,10 @@ using OpenQA.Selenium;
using OpenQA.Selenium.Appium; using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Windows; using OpenQA.Selenium.Appium.Windows;
using OpenQA.Selenium.Interactions; using OpenQA.Selenium.Interactions;
using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Drawing; using System.Drawing;
using System.Linq;
namespace CalculatorUITestFramework namespace CalculatorUITestFramework
{ {
@ -43,10 +45,10 @@ namespace CalculatorUITestFramework
/// Gets all of the memory items listed in the Memory Pane. /// Gets all of the memory items listed in the Memory Pane.
/// </summary> /// </summary>
/// <returns>A read-only collection of memory items.</returns> /// <returns>A read-only collection of memory items.</returns>
public ReadOnlyCollection<AppiumWebElement> GetAllMemoryListViewItems() public List<MemoryItem> GetAllMemoryListViewItems()
{ {
OpenMemoryPanel(); OpenMemoryPanel();
return this.MemoryListView.FindElementsByClassName("ListViewItem"); return (from item in this.MemoryListView.FindElementsByClassName("ListViewItem") select new MemoryItem(item)).ToList();
} }
/// <summary> /// <summary>
@ -119,10 +121,10 @@ namespace CalculatorUITestFramework
/// Gets all of the memory items listed in the Memory Flyout. /// Gets all of the memory items listed in the Memory Flyout.
/// </summary> /// </summary>
/// <returns> A read only collection of memory items.</returns> /// <returns> A read only collection of memory items.</returns>
public ReadOnlyCollection<AppiumWebElement> GetAllMemoryFlyoutListViewItems() public List<MemoryItem> GetAllMemoryFlyoutListViewItems()
{ {
OpenMemoryFlyout(); OpenMemoryFlyout();
return this.MemoryListView.FindElementsByClassName("ListViewItem"); return (from item in this.MemoryListView.FindElementsByClassName("ListViewItem") select new MemoryItem(item)).ToList();
} }
/// <summary> /// <summary>

View file

@ -88,20 +88,22 @@ namespace CalculatorUITests
page.StandardOperators.EqualButton.Click(); page.StandardOperators.EqualButton.Click();
var historyItems = page.HistoryPanel.GetAllHistoryListViewItems(); var historyItems = page.HistoryPanel.GetAllHistoryListViewItems();
Assert.IsTrue(historyItems[0].Text.Equals("2 Minus ( 3= Minus (1", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyItems[0].GetValue().Equals("-1", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[1].Text.Equals("-3 + -2.6= Minus (5.6", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyItems[0].GetExpression().Equals("2 - 3 =", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[1].GetValue().Equals("-5.6", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[1].GetExpression().Equals("-3 + -2.6 =", StringComparison.InvariantCultureIgnoreCase));
Assert.AreEqual("-1", page.CalculatorResults.GetCalculatorResultText()); Assert.AreEqual("-1", page.CalculatorResults.GetCalculatorResultText());
Actions clickHistoryItemsw1 = new Actions(WinAppDriver.Instance.CalculatorSession); Actions clickHistoryItemsw1 = new Actions(WinAppDriver.Instance.CalculatorSession);
clickHistoryItemsw1.Click(historyItems[1]); clickHistoryItemsw1.Click(historyItems[1].Item);
clickHistoryItemsw1.Perform(); clickHistoryItemsw1.Perform();
Assert.AreEqual("-5.6", page.CalculatorResults.GetCalculatorResultText()); Assert.AreEqual("-5.6", page.CalculatorResults.GetCalculatorResultText());
Assert.AreEqual("-3 + -2.6=", page.CalculatorResults.GetCalculatorExpressionText()); Assert.AreEqual("-3 + -2.6=", page.CalculatorResults.GetCalculatorExpressionText());
Actions clickHistoryItemsw0 = new Actions(WinAppDriver.Instance.CalculatorSession); Actions clickHistoryItemsw0 = new Actions(WinAppDriver.Instance.CalculatorSession);
clickHistoryItemsw0.Click(historyItems[0]); clickHistoryItemsw0.Click(historyItems[0].Item);
clickHistoryItemsw0.Perform(); clickHistoryItemsw0.Perform();
Assert.AreEqual("-1", page.CalculatorResults.GetCalculatorResultText()); Assert.AreEqual("-1", page.CalculatorResults.GetCalculatorResultText());
@ -131,14 +133,18 @@ namespace CalculatorUITests
page.StandardOperators.EqualButton.Click(); page.StandardOperators.EqualButton.Click();
var historyPanelItems = page.HistoryPanel.GetAllHistoryListViewItems(); var historyPanelItems = page.HistoryPanel.GetAllHistoryListViewItems();
Assert.IsTrue(historyPanelItems[0].Text.Equals("2 Minus ( 3= Minus (1", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyPanelItems[0].GetValue().Equals("-1", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyPanelItems[1].Text.Equals("-3 + -2.6= Minus (5.6", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyPanelItems[0].GetExpression().Equals("2 - 3 =", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyPanelItems[1].GetValue().Equals("-5.6", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyPanelItems[1].GetExpression().Equals("-3 + -2.6 =", StringComparison.InvariantCultureIgnoreCase));
Assert.AreEqual("-1", page.CalculatorResults.GetCalculatorResultText()); Assert.AreEqual("-1", page.CalculatorResults.GetCalculatorResultText());
var historyItems = page.HistoryPanel.GetAllHistoryFlyoutListViewItems(); var historyItems = page.HistoryPanel.GetAllHistoryFlyoutListViewItems();
Assert.IsTrue(historyItems[0].Text.Equals("2 Minus ( 3= Minus (1", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyItems[0].GetValue().Equals("-1", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[1].Text.Equals("-3 + -2.6= Minus (5.6", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyItems[0].GetExpression().Equals("2 - 3 =", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[1].GetValue().Equals("-5.6", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[1].GetExpression().Equals("-3 + -2.6 =", StringComparison.InvariantCultureIgnoreCase));
Assert.AreEqual("-1", page.CalculatorResults.GetCalculatorResultText()); Assert.AreEqual("-1", page.CalculatorResults.GetCalculatorResultText());

View file

@ -77,20 +77,20 @@ namespace CalculatorUITests
Actions moveToListView = new Actions(WinAppDriver.Instance.CalculatorSession); Actions moveToListView = new Actions(WinAppDriver.Instance.CalculatorSession);
var memoryItems = page.MemoryPanel.GetAllMemoryListViewItems(); var memoryItems = page.MemoryPanel.GetAllMemoryListViewItems();
moveToListView.MoveToElement(memoryItems[0]); moveToListView.MoveToElement(memoryItems[0].Item);
moveToListView.ContextClick(memoryItems[0]); moveToListView.ContextClick(memoryItems[0].Item);
moveToListView.Perform(); moveToListView.Perform();
CalculatorApp.Window.SendKeys(Keys.ArrowDown + Keys.ArrowDown + Keys.Enter); CalculatorApp.Window.SendKeys(Keys.ArrowDown + Keys.ArrowDown + Keys.Enter);
Assert.IsTrue(memoryItems[0].Text.Equals("0", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(memoryItems[0].GetValue().Equals("0", StringComparison.InvariantCultureIgnoreCase));
moveToListView.Perform(); moveToListView.Perform();
CalculatorApp.Window.SendKeys(Keys.ArrowUp + Keys.ArrowUp + Keys.Enter); CalculatorApp.Window.SendKeys(Keys.ArrowUp + Keys.ArrowUp + Keys.Enter);
Assert.IsTrue(memoryItems[0].Text.Equals("3", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(memoryItems[0].GetValue().Equals("3", StringComparison.InvariantCultureIgnoreCase));
moveToListView.Perform(); moveToListView.Perform();
CalculatorApp.Window.SendKeys(Keys.ArrowDown + Keys.ArrowUp + Keys.Enter); CalculatorApp.Window.SendKeys(Keys.ArrowDown + Keys.ArrowUp + Keys.Enter);
var memoryItems2 = page.MemoryPanel.GetAllMemoryListViewItems(); var memoryItems2 = page.MemoryPanel.GetAllMemoryListViewItems();
Assert.IsTrue(memoryItems2[0].Text.Equals("3", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(memoryItems2[0].GetValue().Equals("3", StringComparison.InvariantCultureIgnoreCase));
page.MemoryPanel.PanelClearMemoryButton.Click(); page.MemoryPanel.PanelClearMemoryButton.Click();
Assert.IsNotNull(WinAppDriver.Instance.CalculatorSession.FindElementByAccessibilityId("MemoryPaneEmpty")); Assert.IsNotNull(WinAppDriver.Instance.CalculatorSession.FindElementByAccessibilityId("MemoryPaneEmpty"));
@ -108,22 +108,22 @@ namespace CalculatorUITests
page.MemoryPanel.OpenMemoryFlyout(); page.MemoryPanel.OpenMemoryFlyout();
var memoryItems = page.MemoryPanel.GetAllMemoryFlyoutListViewItems(); var memoryItems = page.MemoryPanel.GetAllMemoryFlyoutListViewItems();
Actions moveToListView = new Actions(WinAppDriver.Instance.CalculatorSession); Actions moveToListView = new Actions(WinAppDriver.Instance.CalculatorSession);
moveToListView.MoveToElement(memoryItems[0]); moveToListView.MoveToElement(memoryItems[0].Item);
moveToListView.ContextClick(memoryItems[0]); moveToListView.ContextClick(memoryItems[0].Item);
moveToListView.Perform(); moveToListView.Perform();
CalculatorApp.Window.SendKeys(Keys.ArrowDown + Keys.ArrowDown + Keys.Enter); CalculatorApp.Window.SendKeys(Keys.ArrowDown + Keys.ArrowDown + Keys.Enter);
Assert.IsTrue(memoryItems[0].Text.Equals("0", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(memoryItems[0].GetValue().Equals("0", StringComparison.InvariantCultureIgnoreCase));
page.MemoryPanel.OpenMemoryFlyout(); page.MemoryPanel.OpenMemoryFlyout();
moveToListView.Perform(); moveToListView.Perform();
CalculatorApp.Window.SendKeys(Keys.ArrowUp + Keys.ArrowUp + Keys.Enter); CalculatorApp.Window.SendKeys(Keys.ArrowUp + Keys.ArrowUp + Keys.Enter);
Assert.IsTrue(memoryItems[0].Text.Equals("3", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(memoryItems[0].GetValue().Equals("3", StringComparison.InvariantCultureIgnoreCase));
page.MemoryPanel.OpenMemoryFlyout(); page.MemoryPanel.OpenMemoryFlyout();
moveToListView.Perform(); moveToListView.Perform();
CalculatorApp.Window.SendKeys(Keys.ArrowDown + Keys.ArrowUp + Keys.Enter); CalculatorApp.Window.SendKeys(Keys.ArrowDown + Keys.ArrowUp + Keys.Enter);
var memoryItems2 = page.MemoryPanel.GetAllMemoryListViewItems(); var memoryItems2 = page.MemoryPanel.GetAllMemoryListViewItems();
Assert.IsTrue(memoryItems2[0].Text.Equals("3", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(memoryItems2[0].GetValue().Equals("3", StringComparison.InvariantCultureIgnoreCase));
page.MemoryPanel.OpenMemoryFlyout(); page.MemoryPanel.OpenMemoryFlyout();
page.MemoryPanel.PanelClearMemoryButton.Click(); page.MemoryPanel.PanelClearMemoryButton.Click();

View file

@ -171,10 +171,12 @@ namespace CalculatorUITests
page.HistoryPanel.ResizeWindowToDisplayHistoryButton(); page.HistoryPanel.ResizeWindowToDisplayHistoryButton();
page.HistoryPanel.HistoryButton.Click(); page.HistoryPanel.HistoryButton.Click();
var historyFlyoutItems = page.HistoryPanel.GetAllHistoryFlyoutListViewItems(); var historyFlyoutItems = page.HistoryPanel.GetAllHistoryFlyoutListViewItems();
Assert.IsTrue(historyFlyoutItems[0].Text.Equals("4 × 5 ÷ 6= 3.333333333333333", StringComparison.InvariantCultureIgnoreCase)); //verifies History button Assert.IsTrue(historyFlyoutItems[0].GetValue().Equals("3.333333333333333", StringComparison.InvariantCultureIgnoreCase)); //verifies History button
Assert.IsTrue(historyFlyoutItems[0].GetExpression().Equals("4 × 5 ÷ 6 =", StringComparison.InvariantCultureIgnoreCase)); //verifies History button
page.HistoryPanel.ResizeWindowToDisplayHistoryLabel(); page.HistoryPanel.ResizeWindowToDisplayHistoryLabel();
var historyItems = page.HistoryPanel.GetAllHistoryListViewItems(); var historyItems = page.HistoryPanel.GetAllHistoryListViewItems();
Assert.IsTrue(historyItems[0].Text.Equals("4 × 5 ÷ 6= 3.333333333333333", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyItems[0].GetValue().Equals("3.333333333333333", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[0].GetExpression().Equals("4 × 5 ÷ 6 =", StringComparison.InvariantCultureIgnoreCase));
page.HistoryPanel.ClearHistoryButton.Click(); page.HistoryPanel.ClearHistoryButton.Click();
Assert.IsNotNull(WinAppDriver.Instance.CalculatorSession.FindElementByAccessibilityId("HistoryEmpty")); //verifies the History panel's clear history button Assert.IsNotNull(WinAppDriver.Instance.CalculatorSession.FindElementByAccessibilityId("HistoryEmpty")); //verifies the History panel's clear history button
} }
@ -187,16 +189,16 @@ namespace CalculatorUITests
page.StandardOperators.NumberPad.Num1Button.Click(); page.StandardOperators.NumberPad.Num1Button.Click();
page.MemoryPanel.NumberpadMSButton.Click(); page.MemoryPanel.NumberpadMSButton.Click();
var memoryItems = page.MemoryPanel.GetAllMemoryListViewItems(); var memoryItems = page.MemoryPanel.GetAllMemoryListViewItems();
Assert.IsTrue(memoryItems[0].Text.Equals("1", StringComparison.InvariantCultureIgnoreCase)); //verifies memory button Assert.IsTrue(memoryItems[0].GetValue().Equals("1", StringComparison.InvariantCultureIgnoreCase)); //verifies memory button
page.MemoryPanel.NumberpadMPlusButton.Click(); page.MemoryPanel.NumberpadMPlusButton.Click();
Assert.IsTrue(memoryItems[0].Text.Equals("2", StringComparison.InvariantCultureIgnoreCase)); //verifies memory plus button Assert.IsTrue(memoryItems[0].GetValue().Equals("2", StringComparison.InvariantCultureIgnoreCase)); //verifies memory plus button
page.MemoryPanel.NumberpadMRButton.Click(); page.MemoryPanel.NumberpadMRButton.Click();
Assert.AreEqual("2", page.CalculatorResults.GetCalculatorResultText()); //verifies memory recall button Assert.AreEqual("2", page.CalculatorResults.GetCalculatorResultText()); //verifies memory recall button
page.StandardOperators.MinusButton.Click(); page.StandardOperators.MinusButton.Click();
page.StandardOperators.NumberPad.Num1Button.Click(); page.StandardOperators.NumberPad.Num1Button.Click();
page.StandardOperators.EqualButton.Click(); page.StandardOperators.EqualButton.Click();
page.MemoryPanel.NumberpadMMinusButton.Click(); page.MemoryPanel.NumberpadMMinusButton.Click();
Assert.IsTrue(memoryItems[0].Text.Equals("1", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(memoryItems[0].GetValue().Equals("1", StringComparison.InvariantCultureIgnoreCase));
Assert.AreEqual("1", page.CalculatorResults.GetCalculatorResultText()); //verifies MemMinus button Assert.AreEqual("1", page.CalculatorResults.GetCalculatorResultText()); //verifies MemMinus button
page.MemoryPanel.NumberpadMCButton.Click(); page.MemoryPanel.NumberpadMCButton.Click();
Assert.IsNotNull(WinAppDriver.Instance.CalculatorSession.FindElementByAccessibilityId("MemoryPaneEmpty")); //verifies the Memory panel's memory clear button Assert.IsNotNull(WinAppDriver.Instance.CalculatorSession.FindElementByAccessibilityId("MemoryPaneEmpty")); //verifies the Memory panel's memory clear button
@ -344,9 +346,9 @@ namespace CalculatorUITests
CalculatorApp.Window.SendKeys("1"); CalculatorApp.Window.SendKeys("1");
CalculatorApp.Window.SendKeys(Keys.Control + "m" + Keys.Control); CalculatorApp.Window.SendKeys(Keys.Control + "m" + Keys.Control);
var memoryItems = page.MemoryPanel.GetAllMemoryListViewItems(); var memoryItems = page.MemoryPanel.GetAllMemoryListViewItems();
Assert.IsTrue(memoryItems[0].Text.Equals("1", StringComparison.InvariantCultureIgnoreCase)); //verifies memory hotkey Assert.IsTrue(memoryItems[0].GetValue().Equals("1", StringComparison.InvariantCultureIgnoreCase)); //verifies memory hotkey
CalculatorApp.Window.SendKeys(Keys.Control + "p" + Keys.Control); CalculatorApp.Window.SendKeys(Keys.Control + "p" + Keys.Control);
Assert.IsTrue(memoryItems[0].Text.Equals("2", StringComparison.InvariantCultureIgnoreCase)); //verifies memory plus hotkey Assert.IsTrue(memoryItems[0].GetValue().Equals("2", StringComparison.InvariantCultureIgnoreCase)); //verifies memory plus hotkey
CalculatorApp.Window.SendKeys(Keys.Control + "r" + Keys.Control); CalculatorApp.Window.SendKeys(Keys.Control + "r" + Keys.Control);
Assert.AreEqual("2", page.CalculatorResults.GetCalculatorResultText()); //verifies memory recall hotkey Assert.AreEqual("2", page.CalculatorResults.GetCalculatorResultText()); //verifies memory recall hotkey
CalculatorApp.Window.SendKeys(Keys.Subtract); CalculatorApp.Window.SendKeys(Keys.Subtract);
@ -354,7 +356,7 @@ namespace CalculatorUITests
CalculatorApp.Window.SendKeys(Keys.Equal); CalculatorApp.Window.SendKeys(Keys.Equal);
CalculatorApp.Window.SendKeys(Keys.Subtract); CalculatorApp.Window.SendKeys(Keys.Subtract);
CalculatorApp.Window.SendKeys(Keys.Control + "q" + Keys.Control); CalculatorApp.Window.SendKeys(Keys.Control + "q" + Keys.Control);
Assert.IsTrue(memoryItems[0].Text.Equals("1", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(memoryItems[0].GetValue().Equals("1", StringComparison.InvariantCultureIgnoreCase));
Assert.AreEqual("1", page.CalculatorResults.GetCalculatorResultText()); //verifies MemMinus hotkey Assert.AreEqual("1", page.CalculatorResults.GetCalculatorResultText()); //verifies MemMinus hotkey
CalculatorApp.Window.SendKeys(Keys.Control + "l" + Keys.Control); CalculatorApp.Window.SendKeys(Keys.Control + "l" + Keys.Control);
Assert.IsNotNull(WinAppDriver.Instance.CalculatorSession.FindElementByAccessibilityId("MemoryPaneEmpty")); //verifies the Memory panel's memory clear button hotkey Assert.IsNotNull(WinAppDriver.Instance.CalculatorSession.FindElementByAccessibilityId("MemoryPaneEmpty")); //verifies the Memory panel's memory clear button hotkey
@ -536,8 +538,10 @@ namespace CalculatorUITests
CalculatorApp.Window.SendKeys(Keys.Equal); CalculatorApp.Window.SendKeys(Keys.Equal);
Assert.AreEqual("0", page.CalculatorResults.GetCalculatorResultText()); Assert.AreEqual("0", page.CalculatorResults.GetCalculatorResultText());
var historyItems = page.HistoryPanel.GetAllHistoryListViewItems(); var historyItems = page.HistoryPanel.GetAllHistoryListViewItems();
Assert.IsTrue(historyItems[0].Text.Equals("0= 0", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyItems[0].GetValue().Equals("0", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[1].Text.Equals("0= 0", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyItems[0].GetExpression().Equals("0 =", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[1].GetValue().Equals("0", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[1].GetExpression().Equals("0 =", StringComparison.InvariantCultureIgnoreCase));
CalculatorApp.Window.SendKeys(Keys.Escape); CalculatorApp.Window.SendKeys(Keys.Escape);
} }
@ -670,7 +674,8 @@ namespace CalculatorUITests
{ {
page.StandardAoTCalculatorPage.NavigateToStandardMode(); page.StandardAoTCalculatorPage.NavigateToStandardMode();
var historyItems = page.HistoryPanel.GetAllHistoryListViewItems(); var historyItems = page.HistoryPanel.GetAllHistoryListViewItems();
Assert.IsTrue(historyItems[0].Text.Equals("3 + 3= 6", StringComparison.InvariantCultureIgnoreCase)); Assert.IsTrue(historyItems[0].GetValue().Equals("6", StringComparison.InvariantCultureIgnoreCase));
Assert.IsTrue(historyItems[0].GetExpression().Equals("3 + 3 =", StringComparison.InvariantCultureIgnoreCase));
} }
} }

View file

@ -168,7 +168,7 @@
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories> <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>28204</DisableSpecificWarnings> <DisableSpecificWarnings>28204</DisableSpecificWarnings>
</ClCompile> </ClCompile>
<Link> <Link>
@ -183,7 +183,7 @@
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories> <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>28204</DisableSpecificWarnings> <DisableSpecificWarnings>28204</DisableSpecificWarnings>
</ClCompile> </ClCompile>
<Link> <Link>
@ -198,7 +198,7 @@
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories> <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>28204</DisableSpecificWarnings> <DisableSpecificWarnings>28204</DisableSpecificWarnings>
</ClCompile> </ClCompile>
<Link> <Link>
@ -213,7 +213,7 @@
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories> <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>28204</DisableSpecificWarnings> <DisableSpecificWarnings>28204</DisableSpecificWarnings>
</ClCompile> </ClCompile>
<Link> <Link>
@ -228,7 +228,7 @@
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories> <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>28204</DisableSpecificWarnings> <DisableSpecificWarnings>28204</DisableSpecificWarnings>
</ClCompile> </ClCompile>
<Link> <Link>
@ -243,7 +243,7 @@
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories> <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>28204</DisableSpecificWarnings> <DisableSpecificWarnings>28204</DisableSpecificWarnings>
</ClCompile> </ClCompile>
<Link> <Link>
@ -258,7 +258,7 @@
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile> <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
<AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories> <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
<AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>/bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)</AdditionalOptions>
<DisableSpecificWarnings>28204</DisableSpecificWarnings> <DisableSpecificWarnings>28204</DisableSpecificWarnings>
</ClCompile> </ClCompile>
<Link> <Link>
@ -291,4 +291,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>
</Project> </Project>