Modify the declaration of some properties of StandardCalculatorViewModel to make them read-only and use macros (#799)

This commit is contained in:
Rudy Huyn 2019-11-14 08:08:03 -08:00 committed by Matt Cooley
parent 1380c7ed83
commit 86307f206f
3 changed files with 91 additions and 173 deletions

View file

@ -78,7 +78,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
, m_IsShiftProgrammerChecked(false) , m_IsShiftProgrammerChecked(false)
, m_valueBitLength(BitLength::BitLengthQWord) , m_valueBitLength(BitLength::BitLengthQWord)
, m_isBitFlipChecked(false) , m_isBitFlipChecked(false)
, m_isBinaryBitFlippingEnabled(false) , m_IsBinaryBitFlippingEnabled(false)
, m_CurrentRadixType(NumberBase::DecBase) , m_CurrentRadixType(NumberBase::DecBase)
, m_CurrentAngleType(NumbersAndOperatorsEnum::Degree) , m_CurrentAngleType(NumbersAndOperatorsEnum::Degree)
, m_Announcement(nullptr) , m_Announcement(nullptr)
@ -93,6 +93,8 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
, m_localizedMemoryCleared(nullptr) , m_localizedMemoryCleared(nullptr)
, m_localizedOpenParenthesisCountChangedAutomationFormat(nullptr) , m_localizedOpenParenthesisCountChangedAutomationFormat(nullptr)
, m_localizedNoRightParenthesisAddedFormat(nullptr) , m_localizedNoRightParenthesisAddedFormat(nullptr)
, m_TokenPosition(-1)
, m_isLastOperationHistoryLoad(false)
{ {
WeakReference calculatorViewModel(this); WeakReference calculatorViewModel(this);
auto appResourceProvider = AppResourceProvider::GetInstance(); auto appResourceProvider = AppResourceProvider::GetInstance();
@ -130,9 +132,6 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
IsDecimalEnabled = true; IsDecimalEnabled = true;
AreHistoryShortcutsEnabled = true; AreHistoryShortcutsEnabled = true;
AreProgrammerRadixOperatorsEnabled = false; AreProgrammerRadixOperatorsEnabled = false;
m_tokenPosition = -1;
m_isLastOperationHistoryLoad = false;
} }
String ^ StandardCalculatorViewModel::LocalizeDisplayValue(_In_ wstring const& displayValue, _In_ bool isError) String ^ StandardCalculatorViewModel::LocalizeDisplayValue(_In_ wstring const& displayValue, _In_ bool isError)
@ -455,7 +454,7 @@ void StandardCalculatorViewModel::FtoEButtonToggled()
void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum) void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum)
{ {
DisplayExpressionToken ^ displayExpressionToken = ExpressionTokens->GetAt(m_tokenPosition); DisplayExpressionToken ^ displayExpressionToken = ExpressionTokens->GetAt(m_TokenPosition);
if (displayExpressionToken == nullptr) if (displayExpressionToken == nullptr)
{ {
return; return;
@ -583,7 +582,7 @@ void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum)
} }
String ^ updatedData = ref new String(temp); String ^ updatedData = ref new String(temp);
UpdateOperand(m_tokenPosition, updatedData); UpdateOperand(m_TokenPosition, updatedData);
displayExpressionToken->Token = updatedData; displayExpressionToken->Token = updatedData;
IsOperandUpdatedUsingViewModel = true; IsOperandUpdatedUsingViewModel = true;
displayExpressionToken->CommandIndex = commandIndex; displayExpressionToken->CommandIndex = commandIndex;
@ -622,7 +621,7 @@ void StandardCalculatorViewModel::OnButtonPressed(Object ^ parameter)
&& numOpEnum != NumbersAndOperatorsEnum::IsProgrammerMode && numOpEnum != NumbersAndOperatorsEnum::FToE && numOpEnum != NumbersAndOperatorsEnum::IsProgrammerMode && numOpEnum != NumbersAndOperatorsEnum::FToE
&& (numOpEnum != NumbersAndOperatorsEnum::Degree) && (numOpEnum != NumbersAndOperatorsEnum::Radians) && (numOpEnum != NumbersAndOperatorsEnum::Grads)) && (numOpEnum != NumbersAndOperatorsEnum::Degree) && (numOpEnum != NumbersAndOperatorsEnum::Radians) && (numOpEnum != NumbersAndOperatorsEnum::Grads))
{ {
if (!m_keyPressed) if (!m_KeyPressed)
{ {
SaveEditedCommand(m_selectedExpressionToken->TokenPosition, cmdenum); SaveEditedCommand(m_selectedExpressionToken->TokenPosition, cmdenum);
} }
@ -765,9 +764,10 @@ void StandardCalculatorViewModel::OnPaste(String ^ pastedString)
while (it != pastedString->End()) while (it != pastedString->End())
{ {
bool sendCommand = true; bool sendCommand = true;
bool canSendNegate = false; auto buttonInfo = MapCharacterToButtonId(*it);
NumbersAndOperatorsEnum mappedNumOp = MapCharacterToButtonId(*it, canSendNegate); NumbersAndOperatorsEnum mappedNumOp = buttonInfo.buttonId;
bool canSendNegate = buttonInfo.canSendNegate;
if (mappedNumOp == NumbersAndOperatorsEnum::None) if (mappedNumOp == NumbersAndOperatorsEnum::None)
{ {
@ -869,7 +869,7 @@ void StandardCalculatorViewModel::OnPaste(String ^ pastedString)
if (mappedNumOp == NumbersAndOperatorsEnum::Exp) if (mappedNumOp == NumbersAndOperatorsEnum::Exp)
{ {
// Check the following item // Check the following item
switch (MapCharacterToButtonId(*(it + 1), canSendNegate)) switch (MapCharacterToButtonId(*(it + 1)).buttonId)
{ {
case NumbersAndOperatorsEnum::Subtract: case NumbersAndOperatorsEnum::Subtract:
{ {
@ -919,10 +919,11 @@ void StandardCalculatorViewModel::SetViewPinnedState(bool pinned)
IsCurrentViewPinned = pinned; IsCurrentViewPinned = pinned;
} }
NumbersAndOperatorsEnum StandardCalculatorViewModel::MapCharacterToButtonId(const wchar_t ch, bool& canSendNegate) ButtonInfo StandardCalculatorViewModel::MapCharacterToButtonId(char16 ch)
{ {
NumbersAndOperatorsEnum mappedValue = NumbersAndOperatorsEnum::None; ButtonInfo result;
canSendNegate = false; result.buttonId = NumbersAndOperatorsEnum::None;
result.canSendNegate = false;
switch (ch) switch (ch)
{ {
@ -936,112 +937,111 @@ NumbersAndOperatorsEnum StandardCalculatorViewModel::MapCharacterToButtonId(cons
case '7': case '7':
case '8': case '8':
case '9': case '9':
mappedValue = NumbersAndOperatorsEnum::Zero + static_cast<NumbersAndOperatorsEnum>(ch - L'0'); result.buttonId = NumbersAndOperatorsEnum::Zero + static_cast<NumbersAndOperatorsEnum>(ch - L'0');
canSendNegate = true; result.canSendNegate = true;
break; break;
case '*': case '*':
mappedValue = NumbersAndOperatorsEnum::Multiply; result.buttonId = NumbersAndOperatorsEnum::Multiply;
break; break;
case '+': case '+':
mappedValue = NumbersAndOperatorsEnum::Add; result.buttonId = NumbersAndOperatorsEnum::Add;
break; break;
case '-': case '-':
mappedValue = NumbersAndOperatorsEnum::Subtract; result.buttonId = NumbersAndOperatorsEnum::Subtract;
break; break;
case '/': case '/':
mappedValue = NumbersAndOperatorsEnum::Divide; result.buttonId = NumbersAndOperatorsEnum::Divide;
break; break;
case '^': case '^':
if (IsScientific) if (IsScientific)
{ {
mappedValue = NumbersAndOperatorsEnum::XPowerY; result.buttonId = NumbersAndOperatorsEnum::XPowerY;
} }
break; break;
case '%': case '%':
if (IsScientific || IsProgrammer) if (IsScientific || IsProgrammer)
{ {
mappedValue = NumbersAndOperatorsEnum::Mod; result.buttonId = NumbersAndOperatorsEnum::Mod;
} }
break; break;
case '=': case '=':
mappedValue = NumbersAndOperatorsEnum::Equals; result.buttonId = NumbersAndOperatorsEnum::Equals;
break; break;
case '(': case '(':
mappedValue = NumbersAndOperatorsEnum::OpenParenthesis; result.buttonId = NumbersAndOperatorsEnum::OpenParenthesis;
break; break;
case ')': case ')':
mappedValue = NumbersAndOperatorsEnum::CloseParenthesis; result.buttonId = NumbersAndOperatorsEnum::CloseParenthesis;
break; break;
case 'a': case 'a':
case 'A': case 'A':
mappedValue = NumbersAndOperatorsEnum::A; result.buttonId = NumbersAndOperatorsEnum::A;
break; break;
case 'b': case 'b':
case 'B': case 'B':
mappedValue = NumbersAndOperatorsEnum::B; result.buttonId = NumbersAndOperatorsEnum::B;
break; break;
case 'c': case 'c':
case 'C': case 'C':
mappedValue = NumbersAndOperatorsEnum::C; result.buttonId = NumbersAndOperatorsEnum::C;
break; break;
case 'd': case 'd':
case 'D': case 'D':
mappedValue = NumbersAndOperatorsEnum::D; result.buttonId = NumbersAndOperatorsEnum::D;
break; break;
case 'e': case 'e':
case 'E': case 'E':
// Only allow scientific notation in scientific mode // Only allow scientific notation in scientific mode
if (IsProgrammer) if (IsProgrammer)
{ {
mappedValue = NumbersAndOperatorsEnum::E; result.buttonId = NumbersAndOperatorsEnum::E;
} }
else else
{ {
mappedValue = NumbersAndOperatorsEnum::Exp; result.buttonId = NumbersAndOperatorsEnum::Exp;
} }
break; break;
case 'f': case 'f':
case 'F': case 'F':
mappedValue = NumbersAndOperatorsEnum::F; result.buttonId = NumbersAndOperatorsEnum::F;
break; break;
default: default:
// For the decimalSeparator, we need to respect the user setting. // For the decimalSeparator, we need to respect the user setting.
if (ch == m_decimalSeparator) if (ch == m_decimalSeparator)
{ {
mappedValue = NumbersAndOperatorsEnum::Decimal; result.buttonId = NumbersAndOperatorsEnum::Decimal;
} }
break; break;
} }
if (mappedValue == NumbersAndOperatorsEnum::None) if (result.buttonId == NumbersAndOperatorsEnum::None)
{ {
if (LocalizationSettings::GetInstance().IsLocalizedDigit(ch)) if (LocalizationSettings::GetInstance().IsLocalizedDigit(ch))
{ {
mappedValue = result.buttonId = NumbersAndOperatorsEnum::Zero
NumbersAndOperatorsEnum::Zero + static_cast<NumbersAndOperatorsEnum>(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit('0')); + static_cast<NumbersAndOperatorsEnum>(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit('0'));
canSendNegate = true; result.canSendNegate = true;
} }
} }
// Negate cannot be sent for leading zeroes // Negate cannot be sent for leading zeroes
if (NumbersAndOperatorsEnum::Zero == mappedValue) if (NumbersAndOperatorsEnum::Zero == result.buttonId)
{ {
canSendNegate = false; result.canSendNegate = false;
} }
return mappedValue; return result;
} }
void StandardCalculatorViewModel::OnInputChanged() void StandardCalculatorViewModel::OnInputChanged()
{ {
IsInputEmpty = m_standardCalculatorManager.IsInputEmpty(); IsInputEmpty = m_standardCalculatorManager.IsInputEmpty();

View file

@ -20,7 +20,6 @@ namespace CalculatorFunctionalTests
namespace CalculatorUnitTests namespace CalculatorUnitTests
{ {
class MultiWindowUnitTests; class MultiWindowUnitTests;
class TimerTests;
} }
namespace CalculatorApp namespace CalculatorApp
@ -31,8 +30,13 @@ namespace CalculatorApp
namespace ViewModel namespace ViewModel
{ {
#define ASCII_0 48 #define ASCII_0 48
public public delegate void HideMemoryClickedHandler();
delegate void HideMemoryClickedHandler();
public value struct ButtonInfo
{
NumbersAndOperatorsEnum buttonId;
bool canSendNegate;
};
[Windows::UI::Xaml::Data::Bindable] public ref class StandardCalculatorViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged [Windows::UI::Xaml::Data::Bindable] public ref class StandardCalculatorViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged
{ {
@ -43,40 +47,47 @@ namespace CalculatorApp
OBSERVABLE_OBJECT_CALLBACK(OnPropertyChanged); OBSERVABLE_OBJECT_CALLBACK(OnPropertyChanged);
OBSERVABLE_PROPERTY_RW(Platform::String ^, DisplayValue); OBSERVABLE_PROPERTY_RW(Platform::String ^, DisplayValue);
OBSERVABLE_PROPERTY_RW(HistoryViewModel ^, HistoryVM); OBSERVABLE_PROPERTY_R(HistoryViewModel ^, HistoryVM);
OBSERVABLE_NAMED_PROPERTY_RW(bool, IsInError); OBSERVABLE_PROPERTY_RW(bool, IsAlwaysOnTop);
OBSERVABLE_PROPERTY_RW(bool, IsOperatorCommand); OBSERVABLE_PROPERTY_R(bool, IsBinaryBitFlippingEnabled);
OBSERVABLE_PROPERTY_RW(Platform::String ^, DisplayStringExpression); PROPERTY_R(bool, IsOperandUpdatedUsingViewModel);
PROPERTY_R(int, TokenPosition);
PROPERTY_R(bool, IsOperandTextCompletelySelected);
PROPERTY_R(bool, KeyPressed);
PROPERTY_R(Platform::String ^, SelectedExpressionLastData);
OBSERVABLE_NAMED_PROPERTY_R(bool, IsInError);
OBSERVABLE_PROPERTY_R(bool, IsOperatorCommand);
OBSERVABLE_PROPERTY_R(Platform::String ^, DisplayStringExpression);
OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector<Common::DisplayExpressionToken ^> ^, ExpressionTokens); OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector<Common::DisplayExpressionToken ^> ^, ExpressionTokens);
OBSERVABLE_PROPERTY_RW(Platform::String ^, DecimalDisplayValue); OBSERVABLE_PROPERTY_R(Platform::String ^, DecimalDisplayValue);
OBSERVABLE_PROPERTY_RW(Platform::String ^, HexDisplayValue); OBSERVABLE_PROPERTY_R(Platform::String ^, HexDisplayValue);
OBSERVABLE_PROPERTY_RW(Platform::String ^, OctalDisplayValue); OBSERVABLE_PROPERTY_R(Platform::String ^, OctalDisplayValue);
OBSERVABLE_NAMED_PROPERTY_RW(Platform::String ^, BinaryDisplayValue); OBSERVABLE_NAMED_PROPERTY_R(Platform::String ^, BinaryDisplayValue);
OBSERVABLE_NAMED_PROPERTY_R(Windows::Foundation::Collections::IVector<bool> ^, BinaryDigits); OBSERVABLE_NAMED_PROPERTY_R(Windows::Foundation::Collections::IVector<bool> ^, BinaryDigits);
OBSERVABLE_PROPERTY_RW(Platform::String ^, HexDisplayValue_AutomationName); OBSERVABLE_PROPERTY_R(Platform::String ^, HexDisplayValue_AutomationName);
OBSERVABLE_PROPERTY_RW(Platform::String ^, DecDisplayValue_AutomationName); OBSERVABLE_PROPERTY_R(Platform::String ^, DecDisplayValue_AutomationName);
OBSERVABLE_PROPERTY_RW(Platform::String ^, OctDisplayValue_AutomationName); OBSERVABLE_PROPERTY_R(Platform::String ^, OctDisplayValue_AutomationName);
OBSERVABLE_PROPERTY_RW(Platform::String ^, BinDisplayValue_AutomationName); OBSERVABLE_PROPERTY_R(Platform::String ^, BinDisplayValue_AutomationName);
OBSERVABLE_PROPERTY_RW(bool, IsBinaryOperatorEnabled); OBSERVABLE_PROPERTY_R(bool, IsBinaryOperatorEnabled);
OBSERVABLE_PROPERTY_RW(bool, IsUnaryOperatorEnabled); OBSERVABLE_PROPERTY_R(bool, IsUnaryOperatorEnabled);
OBSERVABLE_PROPERTY_RW(bool, IsNegateEnabled); OBSERVABLE_PROPERTY_R(bool, IsNegateEnabled);
OBSERVABLE_PROPERTY_RW(bool, IsDecimalEnabled); OBSERVABLE_PROPERTY_RW(bool, IsDecimalEnabled);
OBSERVABLE_PROPERTY_RW(bool, IsCurrentViewPinned); OBSERVABLE_PROPERTY_R(bool, IsCurrentViewPinned);
OBSERVABLE_PROPERTY_RW(Windows::Foundation::Collections::IVector<MemoryItemViewModel ^> ^, MemorizedNumbers); OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IVector<MemoryItemViewModel ^> ^, MemorizedNumbers);
OBSERVABLE_NAMED_PROPERTY_RW(bool, IsMemoryEmpty); OBSERVABLE_NAMED_PROPERTY_RW(bool, IsMemoryEmpty);
OBSERVABLE_PROPERTY_RW(bool, IsFToEChecked); OBSERVABLE_PROPERTY_R(bool, IsFToEChecked);
OBSERVABLE_PROPERTY_R(bool, IsFToEEnabled); OBSERVABLE_PROPERTY_R(bool, IsFToEEnabled);
OBSERVABLE_PROPERTY_RW(bool, AreHEXButtonsEnabled); OBSERVABLE_PROPERTY_R(bool, AreHEXButtonsEnabled);
OBSERVABLE_PROPERTY_RW(Platform::String ^, CalculationResultAutomationName); OBSERVABLE_PROPERTY_R(Platform::String ^, CalculationResultAutomationName);
OBSERVABLE_PROPERTY_RW(Platform::String ^, CalculationExpressionAutomationName); OBSERVABLE_PROPERTY_R(Platform::String ^, CalculationExpressionAutomationName);
OBSERVABLE_PROPERTY_RW(bool, IsShiftProgrammerChecked); OBSERVABLE_PROPERTY_R(bool, IsShiftProgrammerChecked);
OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::NumberBase, CurrentRadixType); OBSERVABLE_PROPERTY_R(CalculatorApp::Common::NumberBase, CurrentRadixType);
OBSERVABLE_PROPERTY_RW(bool, AreTokensUpdated); OBSERVABLE_PROPERTY_R(bool, AreTokensUpdated);
OBSERVABLE_PROPERTY_RW(bool, AreAlwaysOnTopResultsUpdated); OBSERVABLE_PROPERTY_R(bool, AreAlwaysOnTopResultsUpdated);
OBSERVABLE_PROPERTY_RW(bool, AreHistoryShortcutsEnabled); OBSERVABLE_PROPERTY_RW(bool, AreHistoryShortcutsEnabled);
OBSERVABLE_PROPERTY_RW(bool, AreProgrammerRadixOperatorsEnabled); OBSERVABLE_PROPERTY_R(bool, AreProgrammerRadixOperatorsEnabled);
OBSERVABLE_PROPERTY_RW(bool, IsInputEmpty); OBSERVABLE_PROPERTY_R(bool, IsInputEmpty);
OBSERVABLE_PROPERTY_RW(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);
COMMAND_FOR_METHOD(CopyCommand, StandardCalculatorViewModel::OnCopyCommand); COMMAND_FOR_METHOD(CopyCommand, StandardCalculatorViewModel::OnCopyCommand);
@ -109,22 +120,6 @@ namespace CalculatorApp
static property Platform::String static property Platform::String
^ IsBitFlipCheckedPropertyName { Platform::String ^ get() { return Platform::StringReference(L"IsBitFlipChecked"); } } ^ IsBitFlipCheckedPropertyName { Platform::String ^ get() { return Platform::StringReference(L"IsBitFlipChecked"); } }
property bool IsBinaryBitFlippingEnabled
{
bool get()
{
return m_isBinaryBitFlippingEnabled;
}
void set(bool value)
{
if (m_isBinaryBitFlippingEnabled != value)
{
m_isBinaryBitFlippingEnabled = value;
RaisePropertyChanged(L"IsBinaryBitFlippingEnabled");
}
}
}
property CalculatorApp::Common::BitLength ValueBitLength property CalculatorApp::Common::BitLength ValueBitLength
{ {
CalculatorApp::Common::BitLength get() CalculatorApp::Common::BitLength get()
@ -205,22 +200,6 @@ namespace CalculatorApp
static property Platform::String static property Platform::String
^ IsProgrammerPropertyName { Platform::String ^ get() { return Platform::StringReference(L"IsProgrammer"); } } ^ IsProgrammerPropertyName { Platform::String ^ get() { return Platform::StringReference(L"IsProgrammer"); } }
property bool IsAlwaysOnTop
{
bool get()
{
return m_isAlwaysOnTop;
}
void set(bool value)
{
if (m_isAlwaysOnTop != value)
{
m_isAlwaysOnTop = value;
RaisePropertyChanged(L"IsAlwaysOnTop");
}
}
}
property bool IsEditingEnabled property bool IsEditingEnabled
{ {
bool get() bool get()
@ -271,65 +250,12 @@ namespace CalculatorApp
} }
} }
property int TokenPosition internal :
{ void OnPaste(Platform::String ^ pastedString);
int get()
{
return m_tokenPosition;
}
void set(int value)
{
m_tokenPosition = value;
}
}
property Platform::String^ SelectedExpressionLastData
{
Platform::String^ get() { return m_selectedExpressionLastData; }
void set(Platform::String^ value) { m_selectedExpressionLastData = value; }
}
property bool KeyPressed
{
bool get()
{
return m_keyPressed;
}
void set(bool value)
{
m_keyPressed = value;
}
}
property bool IsOperandUpdatedUsingViewModel
{
bool get()
{
return m_operandUpdated;
}
void set(bool value)
{
m_operandUpdated = value;
}
}
property bool IsOperandTextCompletelySelected
{
bool get()
{
return m_completeTextSelection;
}
void set(bool value)
{
m_completeTextSelection = value;
}
}
internal : void OnPaste(Platform::String ^ pastedString);
void OnCopyCommand(Platform::Object ^ parameter); void OnCopyCommand(Platform::Object ^ parameter);
void OnPasteCommand(Platform::Object ^ parameter); void OnPasteCommand(Platform::Object ^ parameter);
NumbersAndOperatorsEnum MapCharacterToButtonId(const wchar_t ch, bool& canSendNegate); ButtonInfo MapCharacterToButtonId(char16 ch);
// Memory feature related methods. They are internal because they need to called from the MainPage code-behind // Memory feature related methods. They are internal because they need to called from the MainPage code-behind
void OnMemoryButtonPressed(); void OnMemoryButtonPressed();
@ -413,14 +339,9 @@ namespace CalculatorApp
bool m_isStandard; bool m_isStandard;
bool m_isScientific; bool m_isScientific;
bool m_isProgrammer; bool m_isProgrammer;
bool m_isAlwaysOnTop;
bool m_isBinaryBitFlippingEnabled;
bool m_isBitFlipChecked; bool m_isBitFlipChecked;
bool m_isRtlLanguage; bool m_isRtlLanguage;
int m_tokenPosition;
bool m_keyPressed;
bool m_operandUpdated; bool m_operandUpdated;
bool m_completeTextSelection;
bool m_isLastOperationHistoryLoad; bool m_isLastOperationHistoryLoad;
CalculatorApp::Common::BitLength m_valueBitLength; CalculatorApp::Common::BitLength m_valueBitLength;
Platform::String ^ m_selectedExpressionLastData; Platform::String ^ m_selectedExpressionLastData;
@ -463,7 +384,6 @@ namespace CalculatorApp
friend class CalculatorDisplay; friend class CalculatorDisplay;
friend class CalculatorFunctionalTests::HistoryTests; friend class CalculatorFunctionalTests::HistoryTests;
friend class CalculatorUnitTests::MultiWindowUnitTests; friend class CalculatorUnitTests::MultiWindowUnitTests;
friend class CalculatorUnitTests::TimerTests;
}; };
} }
} }

View file

@ -373,27 +373,25 @@ namespace CalculatorUnitTests
/// Low-level test of character mapping /// Low-level test of character mapping
TEST_METHOD(VerifyCorrectCharacterMapping) TEST_METHOD(VerifyCorrectCharacterMapping)
{ {
bool canSendNegate = false;
// Valid numbers // Valid numbers
NumbersAndOperatorsEnum n = m_viewModel->MapCharacterToButtonId(L'0', canSendNegate); NumbersAndOperatorsEnum n = m_viewModel->MapCharacterToButtonId(L'0').buttonId;
ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::Zero); ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::Zero);
n = m_viewModel->MapCharacterToButtonId(L'1', canSendNegate); n = m_viewModel->MapCharacterToButtonId(L'1').buttonId;
ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::One); ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::One);
// Valid operators // Valid operators
n = m_viewModel->MapCharacterToButtonId(L'+', canSendNegate); n = m_viewModel->MapCharacterToButtonId(L'+').buttonId;
ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::Add); ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::Add);
n = m_viewModel->MapCharacterToButtonId(L'=', canSendNegate); n = m_viewModel->MapCharacterToButtonId(L'=').buttonId;
ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::Equals); ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::Equals);
n = m_viewModel->MapCharacterToButtonId(L'a', canSendNegate); n = m_viewModel->MapCharacterToButtonId(L'a').buttonId;
ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::A); ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::A);
// Invalid character // Invalid character
n = m_viewModel->MapCharacterToButtonId(L'$', canSendNegate); n = m_viewModel->MapCharacterToButtonId(L'$').buttonId;
ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::None); ValidateNumbersAndOperatorsAreEqual(n, NumbersAndOperatorsEnum::None);
} }