diff --git a/README.md b/README.md index 5582b172..cc68ddb1 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Calculator ships regularly with new features and bug fixes. You can get the late ## Getting started Prerequisites: -- Your computer must be running Windows 10, version 1809 or newer. Windows 11 is recommended. +- Your computer must be running Windows 11, build 22000 or newer. - Install the latest version of [Visual Studio](https://developer.microsoft.com/en-us/windows/downloads) (the free community edition is sufficient). - Install the "Universal Windows Platform Development" workload. - Install the optional "C++ Universal Windows Platform tools" component. diff --git a/build/pipelines/azure-pipelines.release.yaml b/build/pipelines/azure-pipelines.release.yaml index 15766e9d..53d1c981 100644 --- a/build/pipelines/azure-pipelines.release.yaml +++ b/build/pipelines/azure-pipelines.release.yaml @@ -9,7 +9,7 @@ pr: none variables: versionMajor: 11 - versionMinor: 2209 + versionMinor: 2301 versionBuild: $[counter(format('{0}.{1}.*', variables['versionMajor'], variables['versionMinor']), 0)] versionPatch: 0 diff --git a/build/pipelines/templates/package-msixbundle.yaml b/build/pipelines/templates/package-msixbundle.yaml index 683c5b2d..0ca7509e 100644 --- a/build/pipelines/templates/package-msixbundle.yaml +++ b/build/pipelines/templates/package-msixbundle.yaml @@ -81,7 +81,7 @@ jobs: pathToPublish: $(Build.ArtifactStagingDirectory)\msixBundle - ${{ if eq(parameters.signBundle, true) }}: - - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1 + - task: EsrpCodeSigning@2 displayName: Send msixbundle to code signing service inputs: ConnectedServiceName: Essential Experiences Codesign diff --git a/src/CalcManager/CEngine/History.cpp b/src/CalcManager/CEngine/History.cpp index e002e62a..f45ff090 100644 --- a/src/CalcManager/CEngine/History.cpp +++ b/src/CalcManager/CEngine/History.cpp @@ -143,14 +143,14 @@ void CHistoryCollector::AddBinOpToHistory(int nOpCode, bool isIntegerMode, bool // This is expected to be called when a binary op in the last say 1+2+ is changing to another one say 1+2* (+ changed to *) // It needs to know by this change a Precedence inversion happened. i.e. previous op was lower or equal to its previous op, but the new // one isn't. (Eg. 1*2* to 1*2^). It can add explicit brackets to ensure the precedence is inverted. (Eg. (1*2) ^) -void CHistoryCollector::ChangeLastBinOp(int nOpCode, bool fPrecInvToHigher, bool isIntgerMode) +void CHistoryCollector::ChangeLastBinOp(int nOpCode, bool fPrecInvToHigher, bool isIntegerMode) { TruncateEquationSzFromIch(m_lastBinOpStartIndex); if (fPrecInvToHigher) { EnclosePrecInversionBrackets(); } - AddBinOpToHistory(nOpCode, isIntgerMode); + AddBinOpToHistory(nOpCode, isIntegerMode); } void CHistoryCollector::PushLastOpndStart(int ichOpndStart) diff --git a/src/CalcManager/CEngine/Number.cpp b/src/CalcManager/CEngine/Number.cpp index 7b3be21b..da443b12 100644 --- a/src/CalcManager/CEngine/Number.cpp +++ b/src/CalcManager/CEngine/Number.cpp @@ -22,10 +22,9 @@ namespace CalcEngine Number::Number(PNUMBER p) noexcept : m_sign{ p->sign } , m_exp{ p->exp } - , m_mantissa{} { m_mantissa.reserve(p->cdigit); - copy(p->mant, p->mant + p->cdigit, back_inserter(m_mantissa)); + copy_n(p->mant, p->cdigit, back_inserter(m_mantissa)); } PNUMBER Number::ToPNUMBER() const diff --git a/src/CalcManager/CEngine/calc.cpp b/src/CalcManager/CEngine/calc.cpp index dd70fb63..713a661c 100644 --- a/src/CalcManager/CEngine/calc.cpp +++ b/src/CalcManager/CEngine/calc.cpp @@ -101,7 +101,7 @@ CCalcEngine::CCalcEngine( { InitChopNumbers(); - m_dwWordBitWidth = DwWordBitWidthFromeNumWidth(m_numwidth); + m_dwWordBitWidth = DwWordBitWidthFromNumWidth(m_numwidth); m_maxTrigonometricNum = RationalMath::Pow(10, 100); diff --git a/src/CalcManager/CEngine/scicomm.cpp b/src/CalcManager/CEngine/scicomm.cpp index 4d671fbd..701fb21c 100644 --- a/src/CalcManager/CEngine/scicomm.cpp +++ b/src/CalcManager/CEngine/scicomm.cpp @@ -30,17 +30,31 @@ namespace // 0 is returned. Higher the number, higher the precedence of the operator. int NPrecedenceOfOp(int nopCode) { - static uint16_t rgbPrec[] = { 0, 0, IDC_OR, 0, IDC_XOR, 0, IDC_AND, 1, IDC_NAND, 1, IDC_NOR, 1, IDC_ADD, 2, IDC_SUB, 2, IDC_RSHF, 3, - IDC_LSHF, 3, IDC_RSHFL, 3, IDC_MOD, 3, IDC_DIV, 3, IDC_MUL, 3, IDC_PWR, 4, IDC_ROOT, 4, IDC_LOGBASEY, 4 }; - - for (unsigned int iPrec = 0; iPrec < size(rgbPrec); iPrec += 2) + switch (nopCode) { - if (nopCode == rgbPrec[iPrec]) - { - return rgbPrec[iPrec + 1]; - } + default: + case IDC_OR: + case IDC_XOR: + return 0; + case IDC_AND: + case IDC_NAND: + case IDC_NOR: + return 1; + case IDC_ADD: + case IDC_SUB: + return 2; + case IDC_LSHF: + case IDC_RSHF: + case IDC_RSHFL: + case IDC_MOD: + case IDC_DIV: + case IDC_MUL: + return 3; + case IDC_PWR: + case IDC_ROOT: + case IDC_LOGBASEY: + return 4; } - return 0; } } @@ -518,7 +532,7 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) if (wParam == IDC_OPENP) { - // if there's an omitted multiplication sign + // if there's an omitted multiplication sign if (IsDigitOpCode(m_nLastCom) || IsUnaryOpCode(m_nLastCom) || m_nLastCom == IDC_PNT || m_nLastCom == IDC_CLOSEP) { ProcessCommand(IDC_MUL); @@ -762,7 +776,7 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) break; case IDC_FE: // Toggle exponential notation display. - m_nFE = NumberFormat(!(int)m_nFE); + m_nFE = m_nFE == NumberFormat::Float ? NumberFormat::Scientific : NumberFormat::Float; DisplayNum(); break; diff --git a/src/CalcManager/CEngine/sciset.cpp b/src/CalcManager/CEngine/sciset.cpp index cb143559..57aeda3b 100644 --- a/src/CalcManager/CEngine/sciset.cpp +++ b/src/CalcManager/CEngine/sciset.cpp @@ -39,7 +39,7 @@ void CCalcEngine::SetRadixTypeAndNumWidth(RadixType radixtype, NUM_WIDTH numwidt if (numwidth >= NUM_WIDTH::QWORD_WIDTH && numwidth <= NUM_WIDTH::BYTE_WIDTH) { m_numwidth = numwidth; - m_dwWordBitWidth = DwWordBitWidthFromeNumWidth(numwidth); + m_dwWordBitWidth = DwWordBitWidthFromNumWidth(numwidth); } // inform ratpak that a change in base or precision has occurred @@ -50,7 +50,7 @@ void CCalcEngine::SetRadixTypeAndNumWidth(RadixType radixtype, NUM_WIDTH numwidt DisplayNum(); } -int32_t CCalcEngine::DwWordBitWidthFromeNumWidth(NUM_WIDTH numwidth) +int32_t CCalcEngine::DwWordBitWidthFromNumWidth(NUM_WIDTH numwidth) { switch (numwidth) { @@ -85,7 +85,7 @@ uint32_t CCalcEngine::NRadixFromRadixType(RadixType radixtype) // Toggles a given bit into the number representation. returns true if it changed it actually. bool CCalcEngine::TryToggleBit(CalcEngine::Rational& rat, uint32_t wbitno) { - uint32_t wmax = DwWordBitWidthFromeNumWidth(m_numwidth); + uint32_t wmax = DwWordBitWidthFromNumWidth(m_numwidth); if (wbitno >= wmax) { return false; // ignore error cant happen diff --git a/src/CalcManager/Header Files/CalcEngine.h b/src/CalcManager/Header Files/CalcEngine.h index 7709cf61..f387c020 100644 --- a/src/CalcManager/Header Files/CalcEngine.h +++ b/src/CalcManager/Header Files/CalcEngine.h @@ -179,7 +179,7 @@ private: CalcEngine::Rational SciCalcFunctions(CalcEngine::Rational const& rat, uint32_t op); CalcEngine::Rational DoOperation(int operation, CalcEngine::Rational const& lhs, CalcEngine::Rational const& rhs); void SetRadixTypeAndNumWidth(RadixType radixtype, NUM_WIDTH numwidth); - int32_t DwWordBitWidthFromeNumWidth(NUM_WIDTH numwidth); + int32_t DwWordBitWidthFromNumWidth(NUM_WIDTH numwidth); uint32_t NRadixFromRadixType(RadixType radixtype); double GenerateRandomNumber(); diff --git a/src/CalcManager/Header Files/History.h b/src/CalcManager/Header Files/History.h index f88f61c3..9eb0bd71 100644 --- a/src/CalcManager/Header Files/History.h +++ b/src/CalcManager/Header Files/History.h @@ -21,8 +21,8 @@ public: ~CHistoryCollector(); void AddOpndToHistory(std::wstring_view numStr, CalcEngine::Rational const& rat, bool fRepetition = false); void RemoveLastOpndFromHistory(); - void AddBinOpToHistory(int nOpCode, bool isIntgerMode, bool fNoRepetition = true); - void ChangeLastBinOp(int nOpCode, bool fPrecInvToHigher, bool isIntgerMode); + void AddBinOpToHistory(int nOpCode, bool isIntegerMode, bool fNoRepetition = true); + void ChangeLastBinOp(int nOpCode, bool fPrecInvToHigher, bool isIntegerMode); void AddUnaryOpToHistory(int nOpCode, bool fInv, AngleType angletype); void AddOpenBraceToHistory(); void AddCloseBraceToHistory(); diff --git a/src/CalcManager/Ratpack/CalcErr.h b/src/CalcManager/Ratpack/CalcErr.h index ebdc6730..5f7ae524 100644 --- a/src/CalcManager/Ratpack/CalcErr.h +++ b/src/CalcManager/Ratpack/CalcErr.h @@ -3,6 +3,8 @@ #pragma once +#include + // CalcErr.h // // Defines the error codes thrown by ratpak and caught by Calculator @@ -36,7 +38,7 @@ // This format is based loosely on an OLE HRESULT and is compatible with the // SUCCEEDED and FAILED macros as well as the HRESULT_CODE macro -typedef int32_t ResultCode; +using ResultCode = int32_t; // CALC_E_DIVIDEBYZERO // diff --git a/src/CalcManager/Ratpack/support.cpp b/src/CalcManager/Ratpack/support.cpp index ef9e4106..bcd31da2 100644 --- a/src/CalcManager/Ratpack/support.cpp +++ b/src/CalcManager/Ratpack/support.cpp @@ -25,7 +25,7 @@ using namespace std; -void _readconstants(void); +void _readconstants(); #if defined(GEN_CONST) static int cbitsofprecision = 0; @@ -136,13 +136,7 @@ void ChangeConstants(uint32_t radix, int32_t precision) // in the internal BASEX radix, this is important for length calculations // in translating from radix to BASEX and back. - uint64_t limit = static_cast(BASEX) / static_cast(radix); - g_ratio = 0; - for (uint32_t digit = 1; digit < limit; digit *= radix) - { - g_ratio++; - } - g_ratio += !g_ratio; + g_ratio = static_cast(ceil(BASEXPWR / log2(radix))) - 1; destroyrat(rat_nRadix); rat_nRadix = i32torat(radix); diff --git a/src/CalcManager/UnitConverter.h b/src/CalcManager/UnitConverter.h index 0ee06ae3..44255816 100644 --- a/src/CalcManager/UnitConverter.h +++ b/src/CalcManager/UnitConverter.h @@ -156,13 +156,12 @@ namespace UnitConversionManager std::wstring targetCurrencyCode; }; - typedef std::tuple, UnitConversionManager::Unit, UnitConversionManager::Unit> CategorySelectionInitializer; - typedef std::unordered_map< + using CategorySelectionInitializer = std::tuple, UnitConversionManager::Unit, UnitConversionManager::Unit>; + using UnitToUnitToConversionDataMap = std::unordered_map< UnitConversionManager::Unit, std::unordered_map, - UnitConversionManager::UnitHash> - UnitToUnitToConversionDataMap; - typedef std::unordered_map> CategoryToUnitVectorMap; + UnitConversionManager::UnitHash>; + using CategoryToUnitVectorMap = std::unordered_map>; class IViewModelCurrencyCallback { diff --git a/src/CalcViewModel/Common/CopyPasteManager.cpp b/src/CalcViewModel/Common/CopyPasteManager.cpp index 1e09072a..d7f85dde 100644 --- a/src/CalcViewModel/Common/CopyPasteManager.cpp +++ b/src/CalcViewModel/Common/CopyPasteManager.cpp @@ -288,9 +288,8 @@ bool CopyPasteManager::ExpressionRegExMatch( } else if (mode == ViewMode::Programmer) { - patterns.assign( - programmerModePatterns[(int)programmerNumberBase - (int)NumberBase::HexBase].begin(), - programmerModePatterns[(int)programmerNumberBase - (int)NumberBase::HexBase].end()); + auto pattern = &programmerModePatterns[static_cast(programmerNumberBase) - static_cast(NumberBase::HexBase)]; + patterns.assign(pattern->begin(), pattern->end()); } else if (modeType == CategoryGroupType::Converter) { @@ -505,18 +504,15 @@ ULONG32 CopyPasteManager::StandardScientificOperandLength(Platform::String ^ ope const bool hasDecimal = operandWstring.find('.') != wstring::npos; auto length = operandWstring.length(); - if (hasDecimal) + if (hasDecimal && length >= 2) { - if (length >= 2) + if ((operandWstring[0] == L'0') && (operandWstring[1] == L'.')) { - if ((operandWstring[0] == L'0') && (operandWstring[1] == L'.')) - { - length -= 2; - } - else - { - length -= 1; - } + length -= 2; + } + else + { + length -= 1; } } diff --git a/src/CalcViewModel/Common/ExpressionCommandDeserializer.cpp b/src/CalcViewModel/Common/ExpressionCommandDeserializer.cpp index a91d2d35..1e9859cf 100644 --- a/src/CalcViewModel/Common/ExpressionCommandDeserializer.cpp +++ b/src/CalcViewModel/Common/ExpressionCommandDeserializer.cpp @@ -17,24 +17,16 @@ std::shared_ptr CommandDeserializer::Deserialize(_In_ Calcul switch (cmdType) { case CalculationManager::CommandType::OperandCommand: - return std::make_shared(DeserializeOperand()); - break; case CalculationManager::CommandType::Parentheses: - return std::make_shared(DeserializeParentheses()); - break; case CalculationManager::CommandType::UnaryCommand: - return std::make_shared(DeserializeUnary()); - break; case CalculationManager::CommandType::BinaryCommand: - return std::make_shared(DeserializeBinary()); - break; default: throw ref new Platform::Exception(E_INVALIDARG, ref new Platform::String(L"Unknown command type")); diff --git a/src/CalcViewModel/Common/LocalizationStringUtil.h b/src/CalcViewModel/Common/LocalizationStringUtil.h index 33aa482d..d7e08032 100644 --- a/src/CalcViewModel/Common/LocalizationStringUtil.h +++ b/src/CalcViewModel/Common/LocalizationStringUtil.h @@ -16,7 +16,7 @@ namespace CalculatorApp::ViewModel { std::wstring returnString = L""; const UINT32 length = 1024; - std::unique_ptr spBuffer = std::unique_ptr(new wchar_t[length]); + std::unique_ptr spBuffer = std::make_unique(length); va_list args = NULL; va_start(args, pMessage); DWORD fmtReturnVal = FormatMessage(FORMAT_MESSAGE_FROM_STRING, pMessage->Data(), 0, 0, spBuffer.get(), length, &args); diff --git a/src/CalcViewModel/Common/TraceLogger.cpp b/src/CalcViewModel/Common/TraceLogger.cpp index d565f240..f9268ddf 100644 --- a/src/CalcViewModel/Common/TraceLogger.cpp +++ b/src/CalcViewModel/Common/TraceLogger.cpp @@ -104,7 +104,6 @@ namespace CalculatorApp if (NavCategoryStates::IsValidViewMode(mode)) { auto fields = ref new LoggingFields(); - ; fields->AddString(StringReference(CALC_MODE), NavCategoryStates::GetFriendlyName(mode)); TraceLoggingCommon::GetInstance()->LogLevel2Event(StringReference(EVENT_NAME_MODE_CHANGED), fields); } diff --git a/src/CalcViewModel/pch.h b/src/CalcViewModel/pch.h index 6d4cd9c2..5b188017 100644 --- a/src/CalcViewModel/pch.h +++ b/src/CalcViewModel/pch.h @@ -42,14 +42,3 @@ #include "winrt/Windows.UI.Xaml.h" #include "winrt/Windows.Foundation.Metadata.h" #include "winrt/Windows.Management.Policies.h" - -// The following namespaces exist as a convenience to resolve -// ambiguity for Windows types in the Windows::UI::Xaml::Automation::Peers -// namespace that only exist on RS3. -// Once the app switches to min version RS3, the namespaces can be removed. -// TODO - MSFT 12735088 -namespace StandardPeers = Windows::UI::Xaml::Automation::Peers; -namespace CalculatorApp::ViewModel::Common::Automation -{ -} -namespace CustomPeers = CalculatorApp::ViewModel::Common::Automation; diff --git a/src/Calculator/App.xaml.cs b/src/Calculator/App.xaml.cs index d6006bcf..84d75e10 100644 --- a/src/Calculator/App.xaml.cs +++ b/src/Calculator/App.xaml.cs @@ -30,7 +30,7 @@ namespace CalculatorApp { namespace ApplicationResourceKeys { - public static partial class Globals + public static class Globals { public static readonly string AppMinWindowHeight = "AppMinWindowHeight"; public static readonly string AppMinWindowWidth = "AppMinWindowWidth"; @@ -425,7 +425,7 @@ namespace CalculatorApp ViewMode mode = option.ViewMode; var item = JumpListItem.CreateWithArguments(((int)mode).ToString(), "ms-resource:///Resources/" + NavCategoryStates.GetNameResourceKey(mode)); item.Description = "ms-resource:///Resources/" + NavCategoryStates.GetNameResourceKey(mode); - item.Logo = new Uri("ms-appx:///Assets/" + mode.ToString() + ".png"); + item.Logo = new Uri("ms-appx:///Assets/" + mode + ".png"); jumpList.Items.Add(item); } diff --git a/src/Calculator/Calculator.csproj b/src/Calculator/Calculator.csproj index c49e779e..653eafaf 100644 --- a/src/Calculator/Calculator.csproj +++ b/src/Calculator/Calculator.csproj @@ -794,9 +794,9 @@ - 6.2.10 + 6.2.14 - + diff --git a/src/Calculator/Common/AlwaysSelectedCollectionView.cs b/src/Calculator/Common/AlwaysSelectedCollectionView.cs index cada6702..21e7b8f0 100644 --- a/src/Calculator/Common/AlwaysSelectedCollectionView.cs +++ b/src/Calculator/Common/AlwaysSelectedCollectionView.cs @@ -44,10 +44,10 @@ namespace CalculatorApp // restore the selection to the way we wanted it to begin with if (CurrentPosition >= 0 && CurrentPosition < m_source.Count) { - Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => + Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { CurrentChanged?.Invoke(this, null); - })).AsTask().Wait(); + }).AsTask().Wait(); } return false; } diff --git a/src/Calculator/Controls/CalculationResult.cs b/src/Calculator/Controls/CalculationResult.cs index 78a65d0d..07f02992 100644 --- a/src/Calculator/Controls/CalculationResult.cs +++ b/src/Calculator/Controls/CalculationResult.cs @@ -33,11 +33,11 @@ namespace CalculatorApp // Using a DependencyProperty as the backing store for MinFontSize. This enables animation, styling, binding, etc... public static readonly DependencyProperty MinFontSizeProperty = - DependencyProperty.Register(nameof(MinFontSize), typeof(double), typeof(CalculationResult), new PropertyMetadata(0.0, new PropertyChangedCallback((sender, args) => + DependencyProperty.Register(nameof(MinFontSize), typeof(double), typeof(CalculationResult), new PropertyMetadata(0.0, (sender, args) => { var self = (CalculationResult)sender; self.OnMinFontSizePropertyChanged((double)args.OldValue, (double)args.NewValue); - }))); + })); public double MaxFontSize { @@ -47,11 +47,11 @@ namespace CalculatorApp // Using a DependencyProperty as the backing store for MaxFontSize. This enables animation, styling, binding, etc... public static readonly DependencyProperty MaxFontSizeProperty = - DependencyProperty.Register(nameof(MaxFontSize), typeof(double), typeof(CalculationResult), new PropertyMetadata(30.0, new PropertyChangedCallback((sender, args) => + DependencyProperty.Register(nameof(MaxFontSize), typeof(double), typeof(CalculationResult), new PropertyMetadata(30.0, (sender, args) => { var self = (CalculationResult)sender; self.OnMaxFontSizePropertyChanged((double)args.OldValue, (double)args.NewValue); - }))); + })); public Thickness DisplayMargin { @@ -71,11 +71,11 @@ namespace CalculatorApp // Using a DependencyProperty as the backing store for IsActive. This enables animation, styling, binding, etc... public static readonly DependencyProperty IsActiveProperty = - DependencyProperty.Register(nameof(IsActive), typeof(bool), typeof(CalculationResult), new PropertyMetadata(default(bool), new PropertyChangedCallback((sender, args) => + DependencyProperty.Register(nameof(IsActive), typeof(bool), typeof(CalculationResult), new PropertyMetadata(default(bool), (sender, args) => { var self = (CalculationResult)sender; self.OnIsActivePropertyChanged((bool)args.OldValue, (bool)args.NewValue); - }))); + })); public string DisplayValue { @@ -85,11 +85,11 @@ namespace CalculatorApp // Using a DependencyProperty as the backing store for DisplayValue. This enables animation, styling, binding, etc... public static readonly DependencyProperty DisplayValueProperty = - DependencyProperty.Register(nameof(DisplayValue), typeof(string), typeof(CalculationResult), new PropertyMetadata(string.Empty, new PropertyChangedCallback((sender, args) => + DependencyProperty.Register(nameof(DisplayValue), typeof(string), typeof(CalculationResult), new PropertyMetadata(string.Empty, (sender, args) => { var self = (CalculationResult)sender; self.OnDisplayValuePropertyChanged((string)args.OldValue, (string)args.NewValue); - }))); + })); public bool IsInError { @@ -99,11 +99,11 @@ namespace CalculatorApp // Using a DependencyProperty as the backing store for IsInError. This enables animation, styling, binding, etc... public static readonly DependencyProperty IsInErrorProperty = - DependencyProperty.Register(nameof(IsInError), typeof(bool), typeof(CalculationResult), new PropertyMetadata(default(bool), new PropertyChangedCallback((sender, args) => + DependencyProperty.Register(nameof(IsInError), typeof(bool), typeof(CalculationResult), new PropertyMetadata(default(bool), (sender, args) => { var self = (CalculationResult)sender; self.OnIsInErrorPropertyChanged((bool)args.OldValue, (bool)args.NewValue); - }))); + })); public bool IsOperatorCommand { @@ -151,7 +151,7 @@ namespace CalculatorApp if (widthDiff > WIDTHCUTOFF) { - fontSizeChange = Math.Min((double)Math.Max((double)Math.Floor(WIDTHTOFONTSCALAR * widthDiff) - WIDTHTOFONTOFFSET, INCREMENTOFFSET), MAXFONTINCREMENT); + fontSizeChange = Math.Min(Math.Max(Math.Floor(WIDTHTOFONTSCALAR * widthDiff) - WIDTHTOFONTOFFSET, INCREMENTOFFSET), MAXFONTINCREMENT); } if (m_textBlock.ActualWidth < containerSize && Math.Abs(m_textBlock.FontSize - MaxFontSize) > FONTTOLERANCE && !m_haveCalculatedMax) { diff --git a/src/Calculator/Controls/CalculatorButton.cs b/src/Calculator/Controls/CalculatorButton.cs index a081eeff..eae30f2c 100644 --- a/src/Calculator/Controls/CalculatorButton.cs +++ b/src/Calculator/Controls/CalculatorButton.cs @@ -33,11 +33,11 @@ namespace CalculatorApp // Using a DependencyProperty as the backing store for ButtonId. This enables animation, styling, binding, etc... public static readonly DependencyProperty ButtonIdProperty = - DependencyProperty.Register(nameof(ButtonId), typeof(NumbersAndOperatorsEnum), typeof(CalculatorButton), new PropertyMetadata(default(NumbersAndOperatorsEnum), new PropertyChangedCallback((sender, args) => + DependencyProperty.Register(nameof(ButtonId), typeof(NumbersAndOperatorsEnum), typeof(CalculatorButton), new PropertyMetadata(default(NumbersAndOperatorsEnum), (sender, args) => { var self = (CalculatorButton)sender; self.OnButtonIdPropertyChanged((NumbersAndOperatorsEnum)args.OldValue, (NumbersAndOperatorsEnum)args.NewValue); - }))); + })); public string AuditoryFeedback { @@ -47,11 +47,11 @@ namespace CalculatorApp // Using a DependencyProperty as the backing store for AuditoryFeedback. This enables animation, styling, binding, etc... public static readonly DependencyProperty AuditoryFeedbackProperty = - DependencyProperty.Register(nameof(AuditoryFeedback), typeof(string), typeof(CalculatorButton), new PropertyMetadata(string.Empty, new PropertyChangedCallback((sender, args) => + DependencyProperty.Register(nameof(AuditoryFeedback), typeof(string), typeof(CalculatorButton), new PropertyMetadata(string.Empty, (sender, args) => { var self = (CalculatorButton)sender; self.OnAuditoryFeedbackPropertyChanged((string)args.OldValue, (string)args.NewValue); - }))); + })); public Windows.UI.Xaml.Media.Brush HoverBackground { diff --git a/src/Calculator/Controls/OverflowTextBlock.cs b/src/Calculator/Controls/OverflowTextBlock.cs index 13d4d951..8039c3e3 100644 --- a/src/Calculator/Controls/OverflowTextBlock.cs +++ b/src/Calculator/Controls/OverflowTextBlock.cs @@ -37,11 +37,11 @@ namespace CalculatorApp // Using a DependencyProperty as the backing store for TokensUpdated. This enables animation, styling, binding, etc... public static readonly DependencyProperty TokensUpdatedProperty = - DependencyProperty.Register(nameof(TokensUpdated), typeof(bool), typeof(OverflowTextBlock), new PropertyMetadata(default(bool), new PropertyChangedCallback((sender, args) => + DependencyProperty.Register(nameof(TokensUpdated), typeof(bool), typeof(OverflowTextBlock), new PropertyMetadata(default(bool), (sender, args) => { var self = (OverflowTextBlock)sender; self.OnTokensUpdatedPropertyChanged((bool)args.OldValue, (bool)args.NewValue); - }))); + })); public OverflowButtonPlacement ScrollButtonsPlacement { @@ -51,11 +51,11 @@ namespace CalculatorApp // Using a DependencyProperty as the backing store for ScrollButtonsPlacement. This enables animation, styling, binding, etc... public static readonly DependencyProperty ScrollButtonsPlacementProperty = - DependencyProperty.Register(nameof(ScrollButtonsPlacement), typeof(OverflowButtonPlacement), typeof(OverflowTextBlock), new PropertyMetadata(default(OverflowButtonPlacement), new PropertyChangedCallback((sender, args) => + DependencyProperty.Register(nameof(ScrollButtonsPlacement), typeof(OverflowButtonPlacement), typeof(OverflowTextBlock), new PropertyMetadata(default(OverflowButtonPlacement), (sender, args) => { var self = (OverflowTextBlock)sender; self.OnScrollButtonsPlacementPropertyChanged((OverflowButtonPlacement)args.OldValue, (OverflowButtonPlacement)args.NewValue); - }))); + })); public bool IsActive { diff --git a/src/Calculator/Package.Release.appxmanifest b/src/Calculator/Package.Release.appxmanifest index 65a46315..c71a8cbe 100644 --- a/src/Calculator/Package.Release.appxmanifest +++ b/src/Calculator/Package.Release.appxmanifest @@ -8,7 +8,7 @@ Assets\CalculatorStoreLogo.png - + diff --git a/src/Calculator/Views/Calculator.xaml b/src/Calculator/Views/Calculator.xaml index aaa97a88..b7c3b85a 100644 --- a/src/Calculator/Views/Calculator.xaml +++ b/src/Calculator/Views/Calculator.xaml @@ -694,6 +694,7 @@ @@ -803,6 +804,7 @@ AutomationProperties.AutomationId="MemoryFlyout" AutomationProperties.Name="{utils:ResourceString Name=MemoryFlyout/[using:Windows.UI.Xaml.Automation]AutomationProperties/Name}" Closed="OnMemoryFlyoutClosed" + Closing="OnMemoryFlyoutClosing" FlyoutPresenterStyle="{StaticResource MemoryFlyoutStyle}" Opened="OnMemoryFlyoutOpened" Placement="Full"/> diff --git a/src/Calculator/Views/Calculator.xaml.cs b/src/Calculator/Views/Calculator.xaml.cs index c12e95a8..a280b314 100644 --- a/src/Calculator/Views/Calculator.xaml.cs +++ b/src/Calculator/Views/Calculator.xaml.cs @@ -225,16 +225,10 @@ namespace CalculatorApp string memoryPaneName = AppResourceProvider.GetInstance().GetResourceString("MemoryPane"); MemoryFlyout.FlyoutPresenterStyle.Setters.Add(new Setter(AutomationProperties.NameProperty, memoryPaneName)); - if (Windows.Foundation.Metadata.ApiInformation.IsEventPresent("Windows.UI.Xaml.Controls.Primitives.FlyoutBase", "Closing")) - { - HistoryFlyout.Closing += HistoryFlyout_Closing; - MemoryFlyout.Closing += OnMemoryFlyoutClosing; - } - // Delay load things later when we get a chance. WeakReference weakThis = new WeakReference(this); _ = this.Dispatcher.RunAsync( - CoreDispatcherPriority.Normal, new DispatchedHandler(() => + CoreDispatcherPriority.Normal, () => { if (TraceLogger.GetInstance().IsWindowIdInLog(ApplicationView.GetApplicationViewIdForWindow(CoreWindow.GetForCurrentThread()))) { @@ -243,7 +237,7 @@ namespace CalculatorApp refThis.GetMemory(); } } - })); + }); } private void LoadResourceStrings() @@ -533,7 +527,7 @@ namespace CalculatorApp // Since we need different font sizes for different numeric system, // we use a table of optimal font sizes for each numeric system. - private static readonly FontTable[] fontTables = new FontTable[] { + private static readonly FontTable[] fontTables = { new FontTable { numericSystem = "Arab", fullFont = 104, fullFontMin = 29.333, portraitMin = 23, snapFont = 40, fullNumPadFont = 56, snapScientificNumPadFont = 40, portraitScientificNumPadFont = 56 }, new FontTable { numericSystem = "ArabExt", fullFont = 104, fullFontMin = 29.333, portraitMin = 23, snapFont = 40, @@ -650,9 +644,6 @@ namespace CalculatorApp private void HistoryFlyout_Closed(object sender, object args) { - // Ideally, this would be renamed in the Closing event because the Closed event is too late. - // Closing is not available until RS1+ so we set the name again here for TH2 support. - AutomationProperties.SetName(HistoryButton, m_openHistoryFlyoutAutomationName); m_fIsHistoryFlyoutOpen = false; EnableControls(true); if (HistoryButton.IsEnabled && HistoryButton.Visibility == Visibility.Visible) @@ -745,9 +736,6 @@ namespace CalculatorApp private void OnMemoryFlyoutClosed(object sender, object args) { - // Ideally, this would be renamed in the Closing event because the Closed event is too late. - // Closing is not available until RS1+ so we set the name again here for TH2 support. - AutomationProperties.SetName(MemoryButton, m_openMemoryFlyoutAutomationName); m_fIsMemoryFlyoutOpen = false; EnableControls(true); if (MemoryButton.IsEnabled) diff --git a/src/Calculator/Views/CalculatorScientificOperators.xaml.cs b/src/Calculator/Views/CalculatorScientificOperators.xaml.cs index ee2213a6..7a1be787 100644 --- a/src/Calculator/Views/CalculatorScientificOperators.xaml.cs +++ b/src/Calculator/Views/CalculatorScientificOperators.xaml.cs @@ -124,11 +124,11 @@ namespace CalculatorApp { InverseHyperbolicTrigFunctions.Visibility = Visibility.Visible; } - else if (isShiftChecked && !isHypeChecked) + else if (isShiftChecked) { InverseTrigFunctions.Visibility = Visibility.Visible; } - else if (!isShiftChecked && isHypeChecked) + else if (isHypeChecked) { HyperbolicTrigFunctions.Visibility = Visibility.Visible; } diff --git a/src/Calculator/Views/GraphingCalculator/EquationInputArea.xaml.cs b/src/Calculator/Views/GraphingCalculator/EquationInputArea.xaml.cs index d6d03d8e..de66892d 100644 --- a/src/Calculator/Views/GraphingCalculator/EquationInputArea.xaml.cs +++ b/src/Calculator/Views/GraphingCalculator/EquationInputArea.xaml.cs @@ -258,8 +258,7 @@ namespace CalculatorApp } if (submission.Source == EquationSubmissionSource.ENTER_KEY - || (submission.Source == EquationSubmissionSource.FOCUS_LOST && submission.HasTextChanged && eq.Expression != null - && eq.Expression.Length > 0)) + || (submission.Source == EquationSubmissionSource.FOCUS_LOST && submission.HasTextChanged && !string.IsNullOrEmpty(eq.Expression))) { if (submission.Source == EquationSubmissionSource.ENTER_KEY) { @@ -355,13 +354,13 @@ namespace CalculatorApp { WeakReference weakThis = new WeakReference(this); - _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() => + _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { if (weakThis.Target is EquationInputArea refThis && refThis.m_isHighContrast == refThis.m_accessibilitySettings.HighContrast) { refThis.ReloadAvailableColors(false, false); } - })); + }); } private void EquationTextBox_RemoveButtonClicked(object sender, RoutedEventArgs e) @@ -436,10 +435,7 @@ namespace CalculatorApp if (index >= 0) { var container = (UIElement)EquationInputList.ContainerFromIndex(index); - if (container != null) - { - container.StartBringIntoView(); - } + container?.StartBringIntoView(); } } } @@ -466,10 +462,7 @@ namespace CalculatorApp if (index >= 0) { var container = (UIElement)EquationInputList.ContainerFromIndex(index); - if (container != null) - { - container.StartBringIntoView(); - } + container?.StartBringIntoView(); } } } @@ -594,11 +587,11 @@ namespace CalculatorApp { TimeSpan timeSpan = new TimeSpan(10000000); // 1 tick = 100 nanoseconds, and 10000000 ticks = 1 second. DispatcherTimerDelayer delayer = new DispatcherTimerDelayer(timeSpan); - delayer.Action += new EventHandler((object s, object arg) => + delayer.Action += (s, arg) => { CalculatorApp.ViewModel.Common.TraceLogger.GetInstance().LogVariableChanged("Slider", name); variableSliders.Remove(name); - }); + }; delayer.Start(); variableSliders.Add(name, delayer); } @@ -612,12 +605,8 @@ namespace CalculatorApp private EquationViewModel GetViewModelFromEquationTextBox(object sender) { var tb = (EquationTextBox)sender; - if (tb == null) - { - return null; - } - var eq = (EquationViewModel)tb.DataContext; + var eq = (EquationViewModel)tb?.DataContext; return eq; } diff --git a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cs b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cs index 8e6526a1..80f206b4 100644 --- a/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cs +++ b/src/Calculator/Views/GraphingCalculator/GraphingCalculator.xaml.cs @@ -752,13 +752,13 @@ namespace CalculatorApp private void OnColorValuesChanged(UISettings sender, object args) { WeakReference weakThis = new WeakReference(this); - _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() => + _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { if (weakThis.Target is GraphingCalculator refThis && IsMatchAppTheme) { refThis.UpdateGraphTheme(); } - })); + }); } private void UpdateGraphTheme() @@ -788,13 +788,13 @@ namespace CalculatorApp IsMatchAppTheme = isMatchAppTheme; WeakReference weakThis = new WeakReference(this); - _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() => + _ = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { if (weakThis.Target is GraphingCalculator refThis) { refThis.UpdateGraphTheme(); } - })); + }); } private const double zoomInScale = 1 / 1.0625; diff --git a/src/Calculator/Views/GraphingCalculator/GraphingNumPad.xaml.cs b/src/Calculator/Views/GraphingCalculator/GraphingNumPad.xaml.cs index 4f1ffc2a..20091a1c 100644 --- a/src/Calculator/Views/GraphingCalculator/GraphingNumPad.xaml.cs +++ b/src/Calculator/Views/GraphingCalculator/GraphingNumPad.xaml.cs @@ -187,7 +187,7 @@ namespace CalculatorApp } } - private static readonly Dictionary> buttonOutput = new Dictionary>() + private static readonly Dictionary> buttonOutput = new Dictionary> { { NumbersAndOperatorsEnum.Sin, Tuple.Create("sin()", 4, 0) }, { NumbersAndOperatorsEnum.Cos, Tuple.Create("cos()", 4, 0) }, diff --git a/src/Calculator/Views/MainPage.xaml.cs b/src/Calculator/Views/MainPage.xaml.cs index a20c92d9..b2dbab7c 100644 --- a/src/Calculator/Views/MainPage.xaml.cs +++ b/src/Calculator/Views/MainPage.xaml.cs @@ -206,58 +206,58 @@ namespace CalculatorApp KeyboardShortcutManager.DisableShortcuts(false); - if (newValue == ViewMode.Standard) + switch (newValue) { - EnsureCalculator(); - Model.CalculatorViewModel.HistoryVM.AreHistoryShortcutsEnabled = true; - m_calculator.AnimateCalculator(NavCategory.IsConverterViewMode(previousMode)); - Model.CalculatorViewModel.HistoryVM.ReloadHistory(newValue); - } - else if (newValue == ViewMode.Scientific) - { - EnsureCalculator(); - Model.CalculatorViewModel.HistoryVM.AreHistoryShortcutsEnabled = true; - if (Model.PreviousMode != ViewMode.Scientific) - { + case ViewMode.Standard: + EnsureCalculator(); + Model.CalculatorViewModel.HistoryVM.AreHistoryShortcutsEnabled = true; m_calculator.AnimateCalculator(NavCategory.IsConverterViewMode(previousMode)); - } - - Model.CalculatorViewModel.HistoryVM.ReloadHistory(newValue); - } - else if (newValue == ViewMode.Programmer) - { - Model.CalculatorViewModel.HistoryVM.AreHistoryShortcutsEnabled = false; - EnsureCalculator(); - if (Model.PreviousMode != ViewMode.Programmer) - { - m_calculator.AnimateCalculator(NavCategory.IsConverterViewMode(previousMode)); - } - } - else if (NavCategory.IsDateCalculatorViewMode(newValue)) - { - if (Model.CalculatorViewModel != null) - { + Model.CalculatorViewModel.HistoryVM.ReloadHistory(newValue); + break; + case ViewMode.Scientific: + EnsureCalculator(); + Model.CalculatorViewModel.HistoryVM.AreHistoryShortcutsEnabled = true; + if (Model.PreviousMode != ViewMode.Scientific) + { + m_calculator.AnimateCalculator(NavCategory.IsConverterViewMode(previousMode)); + } + Model.CalculatorViewModel.HistoryVM.ReloadHistory(newValue); + break; + case ViewMode.Programmer: Model.CalculatorViewModel.HistoryVM.AreHistoryShortcutsEnabled = false; - } - EnsureDateCalculator(); - } - else if (newValue == ViewMode.Graphing) - { - EnsureGraphingCalculator(); - KeyboardShortcutManager.DisableShortcuts(true); - } - else if (NavCategory.IsConverterViewMode(newValue)) - { - if (Model.CalculatorViewModel != null) - { - Model.CalculatorViewModel.HistoryVM.AreHistoryShortcutsEnabled = false; - } + EnsureCalculator(); + if (Model.PreviousMode != ViewMode.Programmer) + { + m_calculator.AnimateCalculator(NavCategory.IsConverterViewMode(previousMode)); + } + break; + case ViewMode.Graphing: + EnsureGraphingCalculator(); + KeyboardShortcutManager.DisableShortcuts(true); + break; + default: + if (NavCategory.IsDateCalculatorViewMode(newValue)) + { + if (Model.CalculatorViewModel != null) + { + Model.CalculatorViewModel.HistoryVM.AreHistoryShortcutsEnabled = false; + } + EnsureDateCalculator(); + } + else if (NavCategory.IsConverterViewMode(newValue)) + { + if (Model.CalculatorViewModel != null) + { + Model.CalculatorViewModel.HistoryVM.AreHistoryShortcutsEnabled = false; + } - EnsureConverter(); - if (!NavCategory.IsConverterViewMode(previousMode)) - { - m_converter.AnimateConverter(); - } + EnsureConverter(); + if (!NavCategory.IsConverterViewMode(previousMode)) + { + m_converter.AnimateConverter(); + } + } + break; } ShowHideControls(newValue); diff --git a/src/Calculator/Views/TitleBar.xaml.cs b/src/Calculator/Views/TitleBar.xaml.cs index 54ca2025..30baf0a2 100644 --- a/src/Calculator/Views/TitleBar.xaml.cs +++ b/src/Calculator/Views/TitleBar.xaml.cs @@ -92,7 +92,7 @@ namespace CalculatorApp { if (Frame.RequestedThemeProperty == dp) { - _ = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() => { SetTitleBarControlColors(); })); + _ = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, SetTitleBarControlColors); } } @@ -120,8 +120,8 @@ namespace CalculatorApp return; } - double leftAddition = 0; - double rightAddition = 0; + double leftAddition; + double rightAddition; if (FlowDirection == FlowDirection.LeftToRight) { @@ -140,18 +140,14 @@ namespace CalculatorApp private void ColorValuesChanged(Windows.UI.ViewManagement.UISettings sender, object e) { - _ = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() => { SetTitleBarControlColors(); })); + _ = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, SetTitleBarControlColors); } private void SetTitleBarControlColors() { var applicationView = ApplicationView.GetForCurrentView(); - if (applicationView == null) - { - return; - } - var applicationTitleBar = applicationView.TitleBar; + var applicationTitleBar = applicationView?.TitleBar; if (applicationTitleBar == null) { return; @@ -184,11 +180,11 @@ namespace CalculatorApp private void OnHighContrastChanged(Windows.UI.ViewManagement.AccessibilitySettings sender, object args) { - _ = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, new DispatchedHandler(() => + _ = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { SetTitleBarControlColors(); SetTitleBarVisibility(false); - })); + }); } private void OnWindowActivated(object sender, WindowActivatedEventArgs e) @@ -281,12 +277,12 @@ namespace CalculatorApp public static readonly DependencyProperty BackButtonSpaceReservedProperty = DependencyProperty.Register( nameof(BackButtonSpaceReserved), typeof(bool), typeof(TitleBar), - new PropertyMetadata(false, new PropertyChangedCallback((sender, args) => + new PropertyMetadata(false, (sender, args) => { var self = sender as TitleBar; VisualStateManager.GoToState( self, (bool)args.NewValue ? self.BackButtonVisible.Name : self.BackButtonCollapsed.Name, true); - }))); + })); private readonly Windows.ApplicationModel.Core.CoreApplicationViewTitleBar m_coreTitleBar; private readonly Windows.UI.ViewManagement.UISettings m_uiSettings; diff --git a/src/Calculator/Views/UnitConverter.xaml.cs b/src/Calculator/Views/UnitConverter.xaml.cs index 5ea4ff66..c1a7dc44 100644 --- a/src/Calculator/Views/UnitConverter.xaml.cs +++ b/src/Calculator/Views/UnitConverter.xaml.cs @@ -86,7 +86,7 @@ namespace CalculatorApp public void SetDefaultFocus() { - Control[] focusPrecedence = new Control[] { Value1, CurrencyRefreshBlockControl, OfflineBlock, ClearEntryButtonPos0 }; + Control[] focusPrecedence = { Value1, CurrencyRefreshBlockControl, OfflineBlock, ClearEntryButtonPos0 }; foreach (Control control in focusPrecedence) { @@ -368,10 +368,7 @@ namespace CalculatorApp private void HideProgressRing() { - if (m_delayTimer != null) - { - m_delayTimer.Stop(); - } + m_delayTimer?.Stop(); CurrencyLoadingProgressRing.IsActive = false; } @@ -391,8 +388,8 @@ namespace CalculatorApp private static readonly Lazy uiSettings = new Lazy(true); private readonly Windows.UI.Xaml.Controls.MenuFlyout m_resultsFlyout = default; - private readonly string m_chargesMayApplyText = string.Empty; - private readonly string m_failedToRefreshText = string.Empty; + private readonly string m_chargesMayApplyText; + private readonly string m_failedToRefreshText; private bool m_meteredConnectionOverride; diff --git a/src/Calculator/WindowFrameService.cs b/src/Calculator/WindowFrameService.cs index e2501b3a..55f5c7d8 100644 --- a/src/Calculator/WindowFrameService.cs +++ b/src/Calculator/WindowFrameService.cs @@ -59,7 +59,7 @@ namespace CalculatorApp public Task HandleViewRelease() { TaskCompletionSource tsource = new TaskCompletionSource(); - _ = m_coreDispatcher.RunAsync(CoreDispatcherPriority.Low, new DispatchedHandler(() => + _ = m_coreDispatcher.RunAsync(CoreDispatcherPriority.Low, () => { KeyboardShortcutManager.OnWindowClosed(this.m_viewId); Window.Current.Content = null; @@ -70,7 +70,7 @@ namespace CalculatorApp tsource.SetResult(new object()); this.m_coreDispatcher.StopProcessEvents(); Window.Current.Close(); - })); + }); return tsource.Task; } diff --git a/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj b/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj index 0fc0236f..dc33a259 100644 --- a/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj +++ b/src/CalculatorUITestFramework/CalculatorUITestFramework.csproj @@ -3,7 +3,7 @@ net6.0 - - + + \ No newline at end of file diff --git a/src/CalculatorUITestFramework/NavigationMenu.cs b/src/CalculatorUITestFramework/NavigationMenu.cs index 13dab3ac..6de7ac15 100644 --- a/src/CalculatorUITestFramework/NavigationMenu.cs +++ b/src/CalculatorUITestFramework/NavigationMenu.cs @@ -41,63 +41,27 @@ namespace CalculatorUITestFramework /// The mode to be changed to public void ChangeCalculatorMode(CalculatorMode mode) { - string modeAccessibilityId; - switch (mode) + string modeAccessibilityId = mode switch { - case CalculatorMode.StandardCalculator: - modeAccessibilityId = "Standard"; - break; - case CalculatorMode.ScientificCalculator: - modeAccessibilityId = "Scientific"; - break; - case CalculatorMode.ProgrammerCalculator: - modeAccessibilityId = "Programmer"; - break; - case CalculatorMode.DateCalculator: - modeAccessibilityId = "Date"; - break; - case CalculatorMode.Currency: - modeAccessibilityId = "Currency"; - break; - case CalculatorMode.Volume: - modeAccessibilityId = "Volume"; - break; - case CalculatorMode.Length: - modeAccessibilityId = "Length"; - break; - case CalculatorMode.Weight: - modeAccessibilityId = "Weight"; - break; - case CalculatorMode.Temperature: - modeAccessibilityId = "Temperature"; - break; - case CalculatorMode.Energy: - modeAccessibilityId = "Energy"; - break; - case CalculatorMode.Area: - modeAccessibilityId = "Area"; - break; - case CalculatorMode.Speed: - modeAccessibilityId = "Speed"; - break; - case CalculatorMode.Time: - modeAccessibilityId = "Time"; - break; - case CalculatorMode.Power: - modeAccessibilityId = "Power"; - break; - case CalculatorMode.Data: - modeAccessibilityId = "Data"; - break; - case CalculatorMode.Pressure: - modeAccessibilityId = "Pressure"; - break; - case CalculatorMode.Angle: - modeAccessibilityId = "Angle"; - break; - default: - throw (new ArgumentException("The mode is not valid")); - } + CalculatorMode.StandardCalculator => "Standard", + CalculatorMode.ScientificCalculator => "Scientific", + CalculatorMode.ProgrammerCalculator => "Programmer", + CalculatorMode.DateCalculator => "Date", + CalculatorMode.Currency => "Currency", + CalculatorMode.Volume => "Volume", + CalculatorMode.Length => "Length", + CalculatorMode.Weight => "Weight", + CalculatorMode.Temperature => "Temperature", + CalculatorMode.Energy => "Energy", + CalculatorMode.Area => "Area", + CalculatorMode.Speed => "Speed", + CalculatorMode.Time => "Time", + CalculatorMode.Power => "Power", + CalculatorMode.Data => "Data", + CalculatorMode.Pressure => "Pressure", + CalculatorMode.Angle => "Angle", + _ => throw (new ArgumentException("The mode is not valid")) + }; this.NavigationMenuButton.Click(); this.NavigationMenuPane.WaitForDisplayed(); diff --git a/src/CalculatorUITestFramework/NumberPad.cs b/src/CalculatorUITestFramework/NumberPad.cs index 225fb570..b4c7831f 100644 --- a/src/CalculatorUITestFramework/NumberPad.cs +++ b/src/CalculatorUITestFramework/NumberPad.cs @@ -77,7 +77,7 @@ namespace CalculatorUITestFramework this.NegateButton.Click(); break; default: - throw (new ArgumentException(string.Format("{0} is not valid", digit))); + throw (new ArgumentException($"{digit} is not valid")); } } } diff --git a/src/CalculatorUITestFramework/ScientificOperatorsPanel.cs b/src/CalculatorUITestFramework/ScientificOperatorsPanel.cs index ce94241c..b1146f05 100644 --- a/src/CalculatorUITestFramework/ScientificOperatorsPanel.cs +++ b/src/CalculatorUITestFramework/ScientificOperatorsPanel.cs @@ -109,21 +109,13 @@ namespace CalculatorUITestFramework public void SetAngleOperator(AngleOperatorState value) { //set the desired string value for the button - string desiredId; - switch (value) + string desiredId = value switch { - case AngleOperatorState.Degrees: - desiredId = "degButton"; - break; - case AngleOperatorState.Gradians: - desiredId = "gradButton"; - break; - case AngleOperatorState.Radians: - desiredId = "radButton"; - break; - default: - throw new NotImplementedException(); - } + AngleOperatorState.Degrees => "degButton", + AngleOperatorState.Gradians => "gradButton", + AngleOperatorState.Radians => "radButton", + _ => throw new NotImplementedException() + }; while (this.DegRadGradButton.GetAttribute("AutomationId") != desiredId) { this.DegRadGradButton.Click(); diff --git a/src/CalculatorUITestFramework/WindowsDriverLocalService.cs b/src/CalculatorUITestFramework/WindowsDriverLocalService.cs index 8841c6cb..60fba41d 100644 --- a/src/CalculatorUITestFramework/WindowsDriverLocalService.cs +++ b/src/CalculatorUITestFramework/WindowsDriverLocalService.cs @@ -20,6 +20,7 @@ using System.IO; using System.Net; using System.Net.Http; using System.Runtime.CompilerServices; +using System.Threading.Tasks; namespace CalculatorUITestFramework { @@ -146,20 +147,23 @@ namespace CalculatorUITestFramework { Uri status; Uri service = this.ServiceUrl; - HttpClient httpClient = new HttpClient(); - httpClient.Timeout = this.InitializationTimeout; + using (HttpClient httpClient = new HttpClient()) + { + httpClient.Timeout = this.InitializationTimeout; - if (service.IsLoopback) - { - status = new Uri("http://localhost:" + Convert.ToString(this.Port) + "/status"); + if (service.IsLoopback) + { + status = new Uri("http://localhost:" + Convert.ToString(this.Port) + "/status"); + } + else + { + status = new Uri(service + "/status"); + } + + var httpResponse = Task.Run(() => httpClient.GetAsync(status)).ConfigureAwait(false).GetAwaiter().GetResult(); + + return httpResponse.IsSuccessStatusCode; } - else - { - status = new Uri(service + "/status"); - } - - var httpResponse = httpClient.GetAsync(status); - return httpResponse.Result.IsSuccessStatusCode; } } } diff --git a/src/CalculatorUITestFramework/WindowsDriverServiceBuilder.cs b/src/CalculatorUITestFramework/WindowsDriverServiceBuilder.cs index bdf60574..dec24fe0 100644 --- a/src/CalculatorUITestFramework/WindowsDriverServiceBuilder.cs +++ b/src/CalculatorUITestFramework/WindowsDriverServiceBuilder.cs @@ -45,10 +45,6 @@ namespace CalculatorUITestFramework public WindowsDriverServiceBuilder WithStartUpTimeOut(TimeSpan startUpTimeout) { - if (startUpTimeout == null) - { - throw new ArgumentNullException("A startup timeout should not be NULL"); - } this.StartUpTimeout = startUpTimeout; return this; } diff --git a/src/CalculatorUITests/CalculatorUITests.csproj b/src/CalculatorUITests/CalculatorUITests.csproj index 1d4416e6..984842cd 100644 --- a/src/CalculatorUITests/CalculatorUITests.csproj +++ b/src/CalculatorUITests/CalculatorUITests.csproj @@ -4,10 +4,10 @@ false - - - - + + + + diff --git a/src/GraphingInterfaces/IGraphAnalyzer.h b/src/GraphingInterfaces/IGraphAnalyzer.h index 5e6233b6..0e832163 100644 --- a/src/GraphingInterfaces/IGraphAnalyzer.h +++ b/src/GraphingInterfaces/IGraphAnalyzer.h @@ -11,7 +11,7 @@ namespace Graphing::Analyzer { - typedef unsigned int NativeAnalysisType; // PerformAnalysisType + using NativeAnalysisType = unsigned int; // PerformAnalysisType struct IGraphAnalyzer : public NonCopyable, public NonMoveable {