// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. #include "pch.h" #include #include "CalcViewModel/HistoryViewModel.h" #include "CalcViewModel/StandardCalculatorViewModel.h" using namespace CalculationManager; using namespace CalculatorApp; using namespace CalculatorApp::Common; using namespace CalculatorApp::ViewModel; using namespace CalculatorUnitTests; using namespace Platform; using namespace std; using namespace Windows::Storage; using namespace Windows::ApplicationModel::Resources; using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace CalculatorFunctionalTests { TEST_CLASS(HistoryTests) { public: TEST_METHOD(TestHistoryItemClicked); TEST_METHOD(TestHistoryItemAddSingleItem); TEST_METHOD(TestHistoryItemAddMaxItems); TEST_METHOD(TestHistoryClearCommand); TEST_METHOD(TestHistoryClearCommandWithEmptyHistory); TEST_METHOD(TestReLoadHistory); TEST_METHOD(TestSaveAndReloadHistory); TEST_METHOD(TestSerializeDeSerializeHistoryItem); TEST_METHOD(TestHistoryItemWithPrettyExpressions); TEST_METHOD(TestHistoryItemWithPrettyExpressionsMixedRadix); TEST_METHOD(TestHistoryItemLoadAndContinueCalculation); TEST_METHOD(TestDisplayValueAutomationNames); TEST_METHOD(TestRadixAutomationName); TEST_METHOD(TestHistoryEmpty); private: HistoryViewModel ^ m_historyViewModel; StandardCalculatorViewModel ^ m_standardViewModel; void Initialize() { m_standardViewModel = ref new StandardCalculatorViewModel(); m_standardViewModel->IsStandard = true; m_historyViewModel = ref new HistoryViewModel(&(m_standardViewModel->m_standardCalculatorManager)); m_historyViewModel->SetCalculatorDisplay(m_standardViewModel->m_calculatorDisplay); } void Cleanup() { m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeBasic); m_historyViewModel->OnClearCommand(nullptr); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); m_historyViewModel->OnClearCommand(nullptr); m_standardViewModel->m_standardCalculatorManager.Reset(); } bool IsHistoryContainerEmpty(_In_ String ^ historyContainerKey) { ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings; return !(localSettings->Containers->HasKey(historyContainerKey)); } String^ GetHistoryContainerKeyHelper(CalculationManager::CALCULATOR_MODE cMode) { ValueType^ modeValue = static_cast(cMode); return String::Concat(modeValue->ToString(), L"_History"); } void MockOnHistoryItemClicked(CalculatorApp::ViewModel::HistoryItemViewModel^ e) { m_standardViewModel->SetHistoryExpressionDisplay(e->GetTokens(), e->GetCommands()); m_standardViewModel->SetExpressionDisplay(e->GetTokens(), e->GetCommands()); m_standardViewModel->SetPrimaryDisplay(e->Result, false /*IsError*/); m_standardViewModel->IsFToEEnabled = false; } void AddSingleHistoryItem() { Initialize(); int initialSize = m_historyViewModel->ItemSize; m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command8); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); int sizeAfterItemAdd = m_historyViewModel->ItemSize; auto historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); String ^ expression = UtfUtils::LRO + L"1 + 8 =" + UtfUtils::PDF; String ^ result = StringReference(L"9"); VERIFY_ARE_EQUAL(initialSize + 1, sizeAfterItemAdd); VERIFY_ARE_EQUAL(expression, StringReference(historyItem->historyItemVector.expression.c_str())); VERIFY_ARE_EQUAL(result, StringReference(historyItem->historyItemVector.result.c_str())); Cleanup(); } void AddMaxHistoryItems() { Initialize(); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); for (size_t i = 1; i < m_standardViewModel->m_standardCalculatorManager.MaxHistorySize(); i++) { m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command2); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); } VERIFY_ARE_EQUAL((size_t)m_historyViewModel->ItemSize, m_standardViewModel->m_standardCalculatorManager.MaxHistorySize()); String ^ expression = UtfUtils::LRO + L"1 + 1 =" + UtfUtils::PDF; int output = 2; String ^ result = output.ToString(); auto historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); VERIFY_ARE_EQUAL(expression, StringReference(historyItem->historyItemVector.expression.c_str())); VERIFY_ARE_EQUAL(result, StringReference(historyItem->historyItemVector.result.c_str())); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command5); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); VERIFY_ARE_EQUAL((size_t)m_historyViewModel->ItemSize, m_standardViewModel->m_standardCalculatorManager.MaxHistorySize()); expression = UtfUtils::LRO + L"1 + 2 =" + UtfUtils::PDF; output = 3; result = output.ToString(); historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); VERIFY_ARE_EQUAL(expression, StringReference(historyItem->historyItemVector.expression.c_str())); VERIFY_ARE_EQUAL(result, StringReference(historyItem->historyItemVector.result.c_str())); Cleanup(); } void ReloadHistory() { Initialize(); m_standardViewModel->m_standardCalculatorManager.Reset(); int scientificItems = 5; m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); for (int i = 0; i < scientificItems; i++) { Command nextCommand = Command(130 + i); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(nextCommand); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); } m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeBasic); int standardItems = 2; for (int i = 0; i < standardItems; i++) { Command nextCommand = Command(130 + i); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(nextCommand); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); } m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); m_historyViewModel->ReloadHistory(ViewMode::Scientific); VERIFY_ARE_EQUAL(scientificItems, m_historyViewModel->ItemSize); for (int i = 0; i < scientificItems; i++) { wstring expr = L"1 + " + wstring(i.ToString()->Data()) + L" ="; expr = UtfUtils::LRO + expr + UtfUtils::PDF; int output = 1 + i; String ^ result = output.ToString(); auto historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(i); VERIFY_ARE_EQUAL(expr, historyItem->historyItemVector.expression); VERIFY_ARE_EQUAL(result, StringReference(historyItem->historyItemVector.result.c_str())); } m_historyViewModel->ReloadHistory(ViewMode::Standard); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeBasic); VERIFY_ARE_EQUAL(standardItems, m_historyViewModel->ItemSize); for (int i = 0; i < standardItems; i++) { wstring expr = L"1 + " + wstring(i.ToString()->Data()) + L" ="; expr = UtfUtils::LRO + expr + UtfUtils::PDF; int output = 1 + i; String ^ result = output.ToString(); auto historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(i); VERIFY_ARE_EQUAL(expr, historyItem->historyItemVector.expression); VERIFY_ARE_EQUAL(result, StringReference(historyItem->historyItemVector.result.c_str())); } Cleanup(); } void ClearHistory() { Initialize(); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command2); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeBasic); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command2); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); m_historyViewModel->OnClearCommand(nullptr); VERIFY_ARE_EQUAL(0, m_historyViewModel->ItemSize); VERIFY_IS_TRUE(IsHistoryContainerEmpty(GetHistoryContainerKeyHelper(CM_STD))); VERIFY_IS_TRUE(IsHistoryContainerEmpty(GetHistoryContainerKeyHelper(CM_SCI))); Cleanup(); } void SerializeDeSerializeHistoryItem() { Initialize(); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command2); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); auto itemBeforeSerializeDeserialize = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); m_historyViewModel->SaveHistory(); m_historyViewModel->ReloadHistory(ViewMode::Scientific); auto itemAfterSerializeDeserialize = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); VERIFY_IS_TRUE( (itemBeforeSerializeDeserialize->historyItemVector.expression == itemAfterSerializeDeserialize->historyItemVector.expression) && (itemBeforeSerializeDeserialize->historyItemVector.result == itemAfterSerializeDeserialize->historyItemVector.result) && (itemBeforeSerializeDeserialize->historyItemVector.spCommands == itemAfterSerializeDeserialize->historyItemVector.spCommands) && (itemBeforeSerializeDeserialize->historyItemVector.spTokens == itemAfterSerializeDeserialize->historyItemVector.spTokens)); Cleanup(); } void SaveAndReloadHistory() { Initialize(); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command8); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command2); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeBasic); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command6); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); int itemsBeforeSaveAndReload = m_historyViewModel->ItemSize; m_historyViewModel->SaveHistory(); m_historyViewModel->ReloadHistory(ViewMode::Scientific); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); wstring expr = L"1 + 8 ="; // add double quotes around the expression expr = UtfUtils::LRO + expr + UtfUtils::PDF; String ^ result = StringReference(L"9"); int itemsAfterSaveAndReload = m_historyViewModel->ItemSize; auto historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); VERIFY_ARE_EQUAL(expr, historyItem->historyItemVector.expression); VERIFY_ARE_EQUAL(result, StringReference(historyItem->historyItemVector.result.c_str())); VERIFY_ARE_NOT_EQUAL(itemsBeforeSaveAndReload, itemsAfterSaveAndReload); VERIFY_ARE_EQUAL(itemsBeforeSaveAndReload, itemsAfterSaveAndReload + 1); Cleanup(); } void HistoryItemWithPrettyExpressions() { Initialize(); Command commands[] = { Command::CommandSIN, Command::CommandCOS, Command::CommandTAN, Command::CommandASIN, Command::CommandACOS, Command::CommandATAN }; Command mode[] = { Command::CommandDEG, Command::CommandRAD, Command::CommandGRAD }; int modes = sizeof(mode) / sizeof(Command); int commandsSize = sizeof(commands) / sizeof(Command); ResourceLoader ^ m_uiResourceLoader = ResourceLoader::GetForViewIndependentUse(L"CEngineStrings"); int itemIndex = 0; int commandResource = 67; m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); for (int index = 0; index < modes; index++) { m_standardViewModel->m_standardCalculatorManager.SendCommand(mode[index]); for (int command = 0; command < commandsSize; command++) { m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(commands[command]); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); auto historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(itemIndex); String ^ expression = m_uiResourceLoader->GetString(commandResource.ToString()); expression += L"( 1 ) ="; wstring expr = wstring(expression->Data()); expr = UtfUtils::LRO + expr + UtfUtils::PDF; VERIFY_ARE_EQUAL(historyItem->historyItemVector.expression, expr); commandResource++; itemIndex++; } } Cleanup(); } void HistoryItemWithPrettyExpressionsMixedRadix() { Initialize(); ResourceLoader ^ m_uiResourceLoader = ResourceLoader::GetForViewIndependentUse(L"CEngineStrings"); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandDEG); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandSIN); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandRAD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandSIN); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandGRAD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandSIN); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); auto historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); String ^ expression = m_uiResourceLoader->GetString(L"67"); expression += L"( 1 ) + "; expression += m_uiResourceLoader->GetString(L"73"); expression += L"( 1 ) + "; expression += m_uiResourceLoader->GetString(L"79"); expression += L"( 1 ) ="; wstring expr = wstring(expression->Data()); expr = UtfUtils::LRO + expr + UtfUtils::PDF; VERIFY_ARE_EQUAL(historyItem->historyItemVector.expression, expr); Cleanup(); } void HistoryItemClicked() { Initialize(); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command5); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command3); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); auto historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); String ^ expression = StringReference(historyItem->historyItemVector.expression.c_str()); String ^ result = StringReference(historyItem->historyItemVector.result.c_str()); HistoryItemViewModel ^ item = ref new HistoryItemViewModel(expression, result, historyItem->historyItemVector.spTokens, historyItem->historyItemVector.spCommands); MockOnHistoryItemClicked(item); VERIFY_ARE_EQUAL(StringReference(L"9"), m_standardViewModel->DisplayValue); VERIFY_ARE_EQUAL(StringReference(L"1"), m_standardViewModel->ExpressionTokens->GetAt(0)->Token); VERIFY_ARE_EQUAL(StringReference(L" "), m_standardViewModel->ExpressionTokens->GetAt(1)->Token); VERIFY_ARE_EQUAL(StringReference(L"+"), m_standardViewModel->ExpressionTokens->GetAt(2)->Token); VERIFY_ARE_EQUAL(StringReference(L" "), m_standardViewModel->ExpressionTokens->GetAt(3)->Token); VERIFY_ARE_EQUAL(StringReference(L"5"), m_standardViewModel->ExpressionTokens->GetAt(4)->Token); VERIFY_ARE_EQUAL(StringReference(L" "), m_standardViewModel->ExpressionTokens->GetAt(5)->Token); VERIFY_ARE_EQUAL(StringReference(L"+"), m_standardViewModel->ExpressionTokens->GetAt(6)->Token); VERIFY_ARE_EQUAL(StringReference(L" "), m_standardViewModel->ExpressionTokens->GetAt(7)->Token); Cleanup(); } void HistoryItemLoadAndContinueCalculation() { Initialize(); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeBasic); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command5); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command3); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); auto historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); String ^ expression = StringReference(historyItem->historyItemVector.expression.c_str()); String ^ result = StringReference(historyItem->historyItemVector.result.c_str()); HistoryItemViewModel ^ item = ref new HistoryItemViewModel(expression, result, historyItem->historyItemVector.spTokens, historyItem->historyItemVector.spCommands); MockOnHistoryItemClicked(item); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command5); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); VERIFY_ARE_EQUAL(StringReference(L"14"), m_standardViewModel->DisplayValue); historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(0); expression = StringReference(historyItem->historyItemVector.expression.c_str()); result = StringReference(historyItem->historyItemVector.result.c_str()); item = ref new HistoryItemViewModel(expression, result, historyItem->historyItemVector.spTokens, historyItem->historyItemVector.spCommands); MockOnHistoryItemClicked(item); VERIFY_ARE_EQUAL(StringReference(L"9"), m_standardViewModel->DisplayValue); historyItem = m_standardViewModel->m_standardCalculatorManager.GetHistoryItem(1); expression = StringReference(historyItem->historyItemVector.expression.c_str()); result = StringReference(historyItem->historyItemVector.result.c_str()); item = ref new HistoryItemViewModel(expression, result, historyItem->historyItemVector.spTokens, historyItem->historyItemVector.spCommands); MockOnHistoryItemClicked(item); VERIFY_ARE_EQUAL(StringReference(L"14"), m_standardViewModel->DisplayValue); Cleanup(); } void DisplayValueAutomationNames() { Initialize(); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command8); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); String ^ expression = StringReference(L"Display is 9"); VERIFY_ARE_EQUAL(expression, m_standardViewModel->CalculationResultAutomationName); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command5); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); expression = StringReference(L"Display is 6"); VERIFY_ARE_EQUAL(expression, m_standardViewModel->CalculationResultAutomationName); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeProgrammer); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command2); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); expression = StringReference(L"Display is 3"); VERIFY_ARE_EQUAL(expression, m_standardViewModel->CalculationResultAutomationName); Cleanup(); } void RadixAutomationName() { Initialize(); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeProgrammer); m_standardViewModel->IsProgrammer = true; m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command1); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandADD); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::Command7); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::CommandEQU); String ^ expression = L"HexaDecimal" + L" 8"; String ^ result = L"HexaDecimal " + Utils::GetStringValue(m_standardViewModel->HexDisplayValue); VERIFY_ARE_EQUAL(expression, result); expression = StringReference(L"Octal 10"); result = L"Octal " + Utils::GetStringValue(m_standardViewModel->OctalDisplayValue); VERIFY_ARE_EQUAL(expression, result); expression = StringReference(L"Binary 1000"); result = L"Binary " + Utils::GetStringValue(m_standardViewModel->BinaryDisplayValue); VERIFY_ARE_EQUAL(expression, result); Cleanup(); } void HistoryEmpty() { Initialize(); VERIFY_ARE_EQUAL(0, m_historyViewModel->ItemSize); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); VERIFY_ARE_EQUAL(0, m_historyViewModel->ItemSize); Cleanup(); } void HistoryClearCommandWithEmptyHistory() { Initialize(); VERIFY_ARE_EQUAL(0, m_historyViewModel->ItemSize); m_standardViewModel->m_standardCalculatorManager.SendCommand(Command::ModeScientific); m_historyViewModel->OnClearCommand(nullptr); VERIFY_ARE_EQUAL(0, m_historyViewModel->ItemSize); Cleanup(); } }; void HistoryTests::TestHistoryItemAddSingleItem() { AddSingleHistoryItem(); } void HistoryTests::TestHistoryItemAddMaxItems() { AddMaxHistoryItems(); } void HistoryTests::TestReLoadHistory() { ReloadHistory(); } void HistoryTests::TestHistoryClearCommand() { ClearHistory(); } void HistoryTests::TestSerializeDeSerializeHistoryItem() { SerializeDeSerializeHistoryItem(); } void HistoryTests::TestSaveAndReloadHistory() { SaveAndReloadHistory(); } void HistoryTests::TestHistoryItemWithPrettyExpressions() { HistoryItemWithPrettyExpressions(); } void HistoryTests::TestHistoryItemWithPrettyExpressionsMixedRadix() { HistoryItemWithPrettyExpressionsMixedRadix(); } void HistoryTests::TestHistoryItemClicked() { HistoryItemClicked(); } void HistoryTests::TestHistoryItemLoadAndContinueCalculation() { HistoryItemLoadAndContinueCalculation(); } void HistoryTests::TestDisplayValueAutomationNames() { DisplayValueAutomationNames(); } void HistoryTests::TestRadixAutomationName() { RadixAutomationName(); } void HistoryTests::TestHistoryEmpty() { HistoryEmpty(); } void HistoryTests::TestHistoryClearCommandWithEmptyHistory() { HistoryClearCommandWithEmptyHistory(); } }