Merge remote-tracking branch 'upstream/feature/GraphingCalculator' into mergeFeature
This commit is contained in:
39
src/CalculatorUnitTests/AsyncHelper.cpp
Normal file
39
src/CalculatorUnitTests/AsyncHelper.cpp
Normal file
@@ -0,0 +1,39 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#include "pch.h"
|
||||
#include "AsyncHelper.h"
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
using namespace std;
|
||||
using namespace concurrency;
|
||||
using namespace Platform;
|
||||
using namespace CalculatorApp;
|
||||
using namespace Windows::UI::Core;
|
||||
using namespace Windows::ApplicationModel::Core;
|
||||
|
||||
task<void> AsyncHelper::RunOnUIThreadAsync(function<void()>&& action)
|
||||
{
|
||||
auto callback = ref new DispatchedHandler([action]() { action(); });
|
||||
|
||||
return create_task(CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(CoreDispatcherPriority::Normal, callback));
|
||||
}
|
||||
|
||||
void AsyncHelper::RunOnUIThread(function<void()>&& action, DWORD timeout)
|
||||
{
|
||||
task<void> waitTask = RunOnUIThreadAsync([action]() { action(); });
|
||||
|
||||
WaitForTask<void>(waitTask, timeout);
|
||||
}
|
||||
|
||||
void AsyncHelper::Delay(DWORD milliseconds)
|
||||
{
|
||||
thread timer(bind(CalculatorApp::AsyncHelper::Sleep, milliseconds));
|
||||
timer.join();
|
||||
}
|
||||
|
||||
void AsyncHelper::Sleep(DWORD milliseconds)
|
||||
{
|
||||
this_thread::sleep_for(chrono::milliseconds(milliseconds));
|
||||
}
|
74
src/CalculatorUnitTests/AsyncHelper.h
Normal file
74
src/CalculatorUnitTests/AsyncHelper.h
Normal file
@@ -0,0 +1,74 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#pragma once
|
||||
#include <wrl/wrappers/corewrappers.h>
|
||||
|
||||
namespace CalculatorApp
|
||||
{
|
||||
class AsyncHelper
|
||||
{
|
||||
public:
|
||||
static concurrency::task<void> RunOnUIThreadAsync(std::function<void()>&& action);
|
||||
static void RunOnUIThread(std::function<void()>&& action, DWORD timeout = INFINITE);
|
||||
static void Delay(DWORD milliseconds);
|
||||
|
||||
template <typename T>
|
||||
static void RunOnUIThread(std::function<concurrency::task<T>()>&& action, DWORD timeout = INFINITE)
|
||||
{
|
||||
concurrency::task<T> t;
|
||||
concurrency::task<void> uiTask =
|
||||
RunOnUIThreadAsync([&t, action]() { t = action(); }).then([&t]() { t.wait(); }, concurrency::task_continuation_context::use_arbitrary());
|
||||
|
||||
WaitForTask<void>(uiTask, timeout);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static bool WaitForTask(concurrency::task<T>& t, DWORD timeout = INFINITE)
|
||||
{
|
||||
Microsoft::WRL::Wrappers::Event event(CreateEventEx(nullptr, nullptr, CREATE_EVENT_MANUAL_RESET, EVENT_ALL_ACCESS));
|
||||
if (!event.IsValid())
|
||||
{
|
||||
throw std::bad_alloc();
|
||||
}
|
||||
|
||||
Platform::Exception ^ ex;
|
||||
t.then(
|
||||
[&event, &ex](concurrency::task<T> prevTask) {
|
||||
try
|
||||
{
|
||||
prevTask.get();
|
||||
}
|
||||
catch (Platform::Exception ^ e)
|
||||
{
|
||||
ex = e;
|
||||
}
|
||||
|
||||
if (event.IsValid())
|
||||
{
|
||||
SetEvent(event.Get());
|
||||
}
|
||||
},
|
||||
concurrency::task_continuation_context::use_arbitrary());
|
||||
|
||||
DWORD waitResult; // = STATUS_PENDING;
|
||||
waitResult = WaitForSingleObjectEx(event.Get(), timeout, true);
|
||||
event.Close();
|
||||
|
||||
if (ex != nullptr)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
|
||||
if (waitResult == WAIT_FAILED)
|
||||
{
|
||||
throw ref new Platform::Exception(-1, L"Error in waiting for task completion: " + waitResult.ToString());
|
||||
}
|
||||
|
||||
return waitResult == WAIT_OBJECT_0;
|
||||
}
|
||||
|
||||
private:
|
||||
static void Sleep(DWORD milliseconds);
|
||||
};
|
||||
}
|
BIN
src/CalculatorUnitTests/CalculatorUnitTests.rc
Normal file
BIN
src/CalculatorUnitTests/CalculatorUnitTests.rc
Normal file
Binary file not shown.
@@ -103,8 +103,6 @@ namespace CalculatorUnitTests
|
||||
{
|
||||
constexpr auto sc_Language_EN = L"en-US";
|
||||
|
||||
const UCM::Category CURRENCY_CATEGORY = { NavCategory::Serialize(ViewMode::Currency), L"Currency", false /*supportsNegative*/ };
|
||||
|
||||
unique_ptr<CurrencyDataLoader> MakeLoaderWithResults(String ^ staticResponse, String ^ allRatiosResponse)
|
||||
{
|
||||
auto client = make_unique<MockCurrencyHttpClientWithResult>(staticResponse, allRatiosResponse);
|
||||
@@ -382,8 +380,12 @@ TEST_METHOD(Load_Success_LoadedFromWeb)
|
||||
}
|
||||
;
|
||||
|
||||
TEST_CLASS(CurrencyConverterUnitTests){ const UCM::Unit GetUnit(const vector<UCM::Unit>& unitList, const wstring& target){
|
||||
return *find_if(begin(unitList), end(unitList), [&target](const UCM::Unit& u) { return u.abbreviation == target; });
|
||||
TEST_CLASS(CurrencyConverterUnitTests){
|
||||
|
||||
const UCM::Category CURRENCY_CATEGORY = { NavCategory::Serialize(ViewMode::Currency), L"Currency", false /*supportsNegative*/ };
|
||||
|
||||
const UCM::Unit GetUnit(const vector<UCM::Unit>& unitList, const wstring& target){
|
||||
return *find_if(begin(unitList), end(unitList), [&target](const UCM::Unit& u) { return u.abbreviation == target; });
|
||||
}
|
||||
|
||||
TEST_METHOD(Loaded_LoadOrderedUnits)
|
||||
|
@@ -48,15 +48,377 @@ namespace DateCalculationUnitTests
|
||||
static DateCalculationEngine ^ m_DateCalcEngine;
|
||||
|
||||
public:
|
||||
TEST_CLASS_INITIALIZE(TestClassSetup)
|
||||
{
|
||||
m_DateCalcEngine = ref new DateCalculationEngine(CalendarIdentifiers::Gregorian);
|
||||
TEST_CLASS_INITIALIZE(TestClassSetup)
|
||||
{
|
||||
m_DateCalcEngine = ref new DateCalculationEngine(CalendarIdentifiers::Gregorian);
|
||||
|
||||
/* Test Case Data */
|
||||
/* Test Case Data */
|
||||
|
||||
// Dates - DD.MM.YYYY
|
||||
/*31.12.9999*/
|
||||
date[0].wYear = 9999;
|
||||
// Dates - DD.MM.YYYY
|
||||
/*31.12.9999*/
|
||||
date[0].wYear = 9999;
|
||||
date[0].wMonth = 12;
|
||||
date[0].wDayOfWeek = 5;
|
||||
date[0].wDay = 31;
|
||||
date[0].wHour = 0;
|
||||
date[0].wMinute = 0;
|
||||
date[0].wSecond = 0;
|
||||
date[0].wMilliseconds = 0;
|
||||
/*30.12.9999*/ date[1].wYear = 9999;
|
||||
date[1].wMonth = 12;
|
||||
date[1].wDayOfWeek = 4;
|
||||
date[1].wDay = 30;
|
||||
date[1].wHour = 0;
|
||||
date[1].wMinute = 0;
|
||||
date[1].wSecond = 0;
|
||||
date[1].wMilliseconds = 0;
|
||||
/*31.12.9998*/ date[2].wYear = 9998;
|
||||
date[2].wMonth = 12;
|
||||
date[2].wDayOfWeek = 4;
|
||||
date[2].wDay = 31;
|
||||
date[2].wHour = 0;
|
||||
date[2].wMinute = 0;
|
||||
date[2].wSecond = 0;
|
||||
date[2].wMilliseconds = 0;
|
||||
/*01.01.1601*/ date[3].wYear = 1601;
|
||||
date[3].wMonth = 1;
|
||||
date[3].wDayOfWeek = 1;
|
||||
date[3].wDay = 1;
|
||||
date[3].wHour = 0;
|
||||
date[3].wMinute = 0;
|
||||
date[3].wSecond = 0;
|
||||
date[3].wMilliseconds = 0;
|
||||
/*02.01.1601*/ date[4].wYear = 1601;
|
||||
date[4].wMonth = 1;
|
||||
date[4].wDayOfWeek = 2;
|
||||
date[4].wDay = 2;
|
||||
date[4].wHour = 0;
|
||||
date[4].wMinute = 0;
|
||||
date[4].wSecond = 0;
|
||||
date[4].wMilliseconds = 0;
|
||||
/*10.05.2008*/ date[5].wYear = 2008;
|
||||
date[5].wMonth = 5;
|
||||
date[5].wDayOfWeek = 6;
|
||||
date[5].wDay = 10;
|
||||
date[5].wHour = 0;
|
||||
date[5].wMinute = 0;
|
||||
date[5].wSecond = 0;
|
||||
date[5].wMilliseconds = 0;
|
||||
/*10.03.2008*/ date[6].wYear = 2008;
|
||||
date[6].wMonth = 3;
|
||||
date[6].wDayOfWeek = 1;
|
||||
date[6].wDay = 10;
|
||||
date[6].wHour = 0;
|
||||
date[6].wMinute = 0;
|
||||
date[6].wSecond = 0;
|
||||
date[6].wMilliseconds = 0;
|
||||
/*29.02.2008*/ date[7].wYear = 2008;
|
||||
date[7].wMonth = 2;
|
||||
date[7].wDayOfWeek = 5;
|
||||
date[7].wDay = 29;
|
||||
date[7].wHour = 0;
|
||||
date[7].wMinute = 0;
|
||||
date[7].wSecond = 0;
|
||||
date[7].wMilliseconds = 0;
|
||||
/*28.02.2007*/ date[8].wYear = 2007;
|
||||
date[8].wMonth = 2;
|
||||
date[8].wDayOfWeek = 3;
|
||||
date[8].wDay = 28;
|
||||
date[8].wHour = 0;
|
||||
date[8].wMinute = 0;
|
||||
date[8].wSecond = 0;
|
||||
date[8].wMilliseconds = 0;
|
||||
/*10.03.2007*/ date[9].wYear = 2007;
|
||||
date[9].wMonth = 3;
|
||||
date[9].wDayOfWeek = 6;
|
||||
date[9].wDay = 10;
|
||||
date[9].wHour = 0;
|
||||
date[9].wMinute = 0;
|
||||
date[9].wSecond = 0;
|
||||
date[9].wMilliseconds = 0;
|
||||
/*10.05.2007*/ date[10].wYear = 2007;
|
||||
date[10].wMonth = 5;
|
||||
date[10].wDayOfWeek = 4;
|
||||
date[10].wDay = 10;
|
||||
date[10].wHour = 0;
|
||||
date[10].wMinute = 0;
|
||||
date[10].wSecond = 0;
|
||||
date[10].wMilliseconds = 0;
|
||||
/*29.01.2008*/ date[11].wYear = 2008;
|
||||
date[11].wMonth = 1;
|
||||
date[11].wDayOfWeek = 2;
|
||||
date[11].wDay = 29;
|
||||
date[11].wHour = 0;
|
||||
date[11].wMinute = 0;
|
||||
date[11].wSecond = 0;
|
||||
date[11].wMilliseconds = 0;
|
||||
/*28.01.2007*/ date[12].wYear = 2007;
|
||||
date[12].wMonth = 1;
|
||||
date[12].wDayOfWeek = 0;
|
||||
date[12].wDay = 28;
|
||||
date[12].wHour = 0;
|
||||
date[12].wMinute = 0;
|
||||
date[12].wSecond = 0;
|
||||
date[12].wMilliseconds = 0;
|
||||
/*31.01.2008*/ date[13].wYear = 2008;
|
||||
date[13].wMonth = 1;
|
||||
date[13].wDayOfWeek = 4;
|
||||
date[13].wDay = 31;
|
||||
date[13].wHour = 0;
|
||||
date[13].wMinute = 0;
|
||||
date[13].wSecond = 0;
|
||||
date[13].wMilliseconds = 0;
|
||||
/*31.03.2008*/ date[14].wYear = 2008;
|
||||
date[14].wMonth = 3;
|
||||
date[14].wDayOfWeek = 1;
|
||||
date[14].wDay = 31;
|
||||
date[14].wHour = 0;
|
||||
date[14].wMinute = 0;
|
||||
date[14].wSecond = 0;
|
||||
date[14].wMilliseconds = 0;
|
||||
|
||||
// Date Differences
|
||||
dateDifference[0].year = 1;
|
||||
dateDifference[0].month = 1;
|
||||
dateDifference[1].month = 1;
|
||||
dateDifference[1].day = 10;
|
||||
dateDifference[2].day = 2;
|
||||
/*date[2]-[0]*/ dateDifference[3].week = 52;
|
||||
dateDifference[3].day = 1;
|
||||
/*date[2]-[0]*/ dateDifference[4].year = 1;
|
||||
dateDifference[5].day = 365;
|
||||
dateDifference[6].month = 1;
|
||||
dateDifference[7].month = 1;
|
||||
dateDifference[7].day = 2;
|
||||
dateDifference[8].day = 31;
|
||||
dateDifference[9].month = 11;
|
||||
dateDifference[9].day = 1;
|
||||
dateDifference[10].year = 8398;
|
||||
dateDifference[10].month = 11;
|
||||
dateDifference[10].day = 30;
|
||||
dateDifference[11].year = 2008;
|
||||
dateDifference[12].year = 7991;
|
||||
dateDifference[12].month = 11;
|
||||
dateDifference[13].week = 416998;
|
||||
dateDifference[13].day = 1;
|
||||
|
||||
/* Test Cases */
|
||||
|
||||
// Date Difference test cases
|
||||
datetimeDifftest[0].startDate = date[0];
|
||||
datetimeDifftest[0].endDate = date[3];
|
||||
datetimeDifftest[0].dateDiff = dateDifference[10];
|
||||
datetimeDifftest[1].startDate = date[0];
|
||||
datetimeDifftest[1].endDate = date[2];
|
||||
datetimeDifftest[1].dateDiff = dateDifference[5];
|
||||
datetimeDifftest[2].startDate = date[0];
|
||||
datetimeDifftest[2].endDate = date[2];
|
||||
datetimeDifftest[2].dateDiff = dateDifference[4];
|
||||
datetimeDifftest[3].startDate = date[0];
|
||||
datetimeDifftest[3].endDate = date[2];
|
||||
datetimeDifftest[3].dateDiff = dateDifference[3];
|
||||
datetimeDifftest[4].startDate = date[14];
|
||||
datetimeDifftest[4].endDate = date[7];
|
||||
datetimeDifftest[4].dateDiff = dateDifference[7];
|
||||
datetimeDifftest[5].startDate = date[14];
|
||||
datetimeDifftest[5].endDate = date[7];
|
||||
datetimeDifftest[5].dateDiff = dateDifference[8];
|
||||
datetimeDifftest[6].startDate = date[11];
|
||||
datetimeDifftest[6].endDate = date[8];
|
||||
datetimeDifftest[6].dateDiff = dateDifference[9];
|
||||
datetimeDifftest[7].startDate = date[13];
|
||||
datetimeDifftest[7].endDate = date[0];
|
||||
datetimeDifftest[7].dateDiff = dateDifference[12];
|
||||
datetimeDifftest[8].startDate = date[13];
|
||||
datetimeDifftest[8].endDate = date[0];
|
||||
datetimeDifftest[8].dateDiff = dateDifference[13];
|
||||
|
||||
// Date Add Out of Bound test cases (Negative tests)
|
||||
/*OutofBound*/ datetimeBoundAdd[0].startDate = date[1];
|
||||
datetimeBoundAdd[0].endDate = date[0];
|
||||
datetimeBoundAdd[0].dateDiff = dateDifference[2]; // on Add date[0] not used
|
||||
/*OutofBound*/ datetimeBoundAdd[1].startDate = date[2];
|
||||
datetimeBoundAdd[1].endDate = date[0];
|
||||
datetimeBoundAdd[1].dateDiff = dateDifference[11]; // on Add date[0] not used
|
||||
|
||||
// Date Subtract Out of Bound test cases (Negative tests)
|
||||
/*OutofBound*/ datetimeBoundSubtract[0].startDate = date[3];
|
||||
datetimeBoundSubtract[0].endDate = date[0];
|
||||
datetimeBoundSubtract[0].dateDiff = dateDifference[2]; // on subtract date[0] not used
|
||||
/*OutofBound*/ datetimeBoundSubtract[1].startDate = date[14];
|
||||
datetimeBoundSubtract[1].endDate = date[0];
|
||||
datetimeBoundSubtract[1].dateDiff = dateDifference[11]; // on subtract date[0] not used
|
||||
|
||||
// Date Add test cases (Positive tests)
|
||||
datetimeAddCase[0].startDate = date[13];
|
||||
datetimeAddCase[0].endDate = date[7];
|
||||
datetimeAddCase[0].dateDiff = dateDifference[6]; // add
|
||||
datetimeAddCase[1].startDate = date[14];
|
||||
datetimeAddCase[1].endDate = date[5];
|
||||
datetimeAddCase[1].dateDiff = dateDifference[1]; // add
|
||||
datetimeAddCase[2].startDate = date[13];
|
||||
datetimeAddCase[2].endDate = date[6];
|
||||
datetimeAddCase[2].dateDiff = dateDifference[1]; // add
|
||||
|
||||
// Date Subtract test cases (Positive tests)
|
||||
datetimeSubtractCase[0].startDate = date[14];
|
||||
datetimeSubtractCase[0].endDate = date[7];
|
||||
datetimeSubtractCase[0].dateDiff = dateDifference[6]; // subtract
|
||||
datetimeSubtractCase[1].startDate = date[6];
|
||||
datetimeSubtractCase[1].endDate = date[11];
|
||||
datetimeSubtractCase[1].dateDiff = dateDifference[1]; // subtract
|
||||
datetimeSubtractCase[2].startDate = date[9];
|
||||
datetimeSubtractCase[2].endDate = date[12];
|
||||
datetimeSubtractCase[2].dateDiff = dateDifference[1]; // subtract
|
||||
}
|
||||
|
||||
/* Duration Between Two Date Tests -- Timediff obtained after calculation should be checked to be identical */
|
||||
TEST_METHOD(TestDateDiff)
|
||||
{
|
||||
// TODO - MSFT 10331900, fix this test
|
||||
|
||||
// for (int testIndex = 0; testIndex < c_diffTestCase; testIndex++)
|
||||
//{
|
||||
// DateDifference diff;
|
||||
// DateUnit dateOutputFormat;
|
||||
|
||||
// switch (testIndex)
|
||||
// {
|
||||
// case 0:
|
||||
// case 2:
|
||||
// dateOutputFormat = DateUnit::Year | DateUnit::Month | DateUnit::Day;
|
||||
// break;
|
||||
// case 1:
|
||||
// dateOutputFormat = DateUnit::Day;
|
||||
// break;
|
||||
// case 3:
|
||||
// case 8:
|
||||
// dateOutputFormat = DateUnit::Week | DateUnit::Day;
|
||||
// break;
|
||||
// case 7:
|
||||
// dateOutputFormat = DateUnit::Year | DateUnit::Month | DateUnit::Day;
|
||||
// break;
|
||||
// case 4:
|
||||
// case 6:
|
||||
// dateOutputFormat = DateUnit::Month | DateUnit::Day;
|
||||
// break;
|
||||
// case 5:
|
||||
// dateOutputFormat = DateUnit::Day;
|
||||
// break;
|
||||
// }
|
||||
|
||||
// // Calculate the difference
|
||||
// m_DateCalcEngine->TryGetDateDifference(DateUtils::SystemTimeToDateTime(datetimeDifftest[testIndex].startDate),
|
||||
// DateUtils::SystemTimeToDateTime(datetimeDifftest[testIndex].endDate), dateOutputFormat, &diff);
|
||||
|
||||
// // Assert for the result
|
||||
// bool areIdentical = true;
|
||||
// if (diff.year != datetimeDifftest[testIndex].dateDiff.year ||
|
||||
// diff.month != datetimeDifftest[testIndex].dateDiff.month ||
|
||||
// diff.week != datetimeDifftest[testIndex].dateDiff.week ||
|
||||
// diff.day != datetimeDifftest[testIndex].dateDiff.day)
|
||||
// {
|
||||
// areIdentical = false;
|
||||
// }
|
||||
|
||||
// VERIFY_IS_TRUE(areIdentical);
|
||||
//}
|
||||
}
|
||||
|
||||
/*Add Out of bound Tests*/
|
||||
TEST_METHOD(TestAddOob)
|
||||
{
|
||||
// TODO - MSFT 10331900, fix this test
|
||||
|
||||
// for (int testIndex = 0; testIndex< c_numAddOobDate; testIndex++)
|
||||
//{
|
||||
// DateTime endDate;
|
||||
|
||||
// // Add Duration
|
||||
// bool isValid = m_DateCalcEngine->AddDuration(DateUtils::SystemTimeToDateTime(datetimeBoundAdd[testIndex].startDate),
|
||||
// datetimeBoundAdd[testIndex].dateDiff, &endDate);
|
||||
|
||||
// // Assert for the result
|
||||
// VERIFY_IS_FALSE(isValid);
|
||||
//}
|
||||
}
|
||||
|
||||
/*Subtract Out of bound Tests*/
|
||||
TEST_METHOD(TestSubtractOob)
|
||||
{
|
||||
for (int testIndex = 0; testIndex < c_numSubtractOobDate; testIndex++)
|
||||
{
|
||||
// Subtract Duration
|
||||
auto endDate = m_DateCalcEngine->SubtractDuration(
|
||||
DateUtils::SystemTimeToDateTime(datetimeBoundSubtract[testIndex].startDate), datetimeBoundSubtract[testIndex].dateDiff);
|
||||
|
||||
// Assert for the result
|
||||
VERIFY_IS_NULL(endDate);
|
||||
}
|
||||
}
|
||||
|
||||
// Add Tests
|
||||
TEST_METHOD(TestAddition)
|
||||
{
|
||||
// TODO - MSFT 10331900, fix this test
|
||||
|
||||
// for (int testIndex = 0; testIndex < c_addCases; testIndex++)
|
||||
//{
|
||||
// DateTime endDate;
|
||||
|
||||
// // Add Duration
|
||||
// bool isValid = m_DateCalcEngine->AddDuration(DateUtils::SystemTimeToDateTime(datetimeAddCase[testIndex].startDate),
|
||||
// datetimeAddCase[testIndex].dateDiff, &endDate);
|
||||
|
||||
// // Assert for the result
|
||||
// VERIFY_IS_TRUE(isValid);
|
||||
|
||||
// SYSTEMTIME systemTime = DateUtils::DateTimeToSystemTime(endDate);
|
||||
// if (systemTime.wYear != datetimeAddCase[testIndex].endDate.wYear ||
|
||||
// systemTime.wMonth != datetimeAddCase[testIndex].endDate.wMonth ||
|
||||
// systemTime.wDay != datetimeAddCase[testIndex].endDate.wDay ||
|
||||
// systemTime.wDayOfWeek != datetimeAddCase[testIndex].endDate.wDayOfWeek)
|
||||
// {
|
||||
// isValid = false;
|
||||
// }
|
||||
|
||||
// VERIFY_IS_TRUE(isValid);
|
||||
//}
|
||||
}
|
||||
|
||||
// Subtract Tests
|
||||
TEST_METHOD(TestSubtraction)
|
||||
{
|
||||
// TODO - MSFT 10331900, fix this test
|
||||
|
||||
// for (int testIndex = 0; testIndex < c_subtractCases; testIndex++)
|
||||
//{
|
||||
// DateTime endDate;
|
||||
|
||||
// // Subtract Duration
|
||||
// bool isValid = m_DateCalcEngine->SubtractDuration(DateUtils::SystemTimeToDateTime(datetimeSubtractCase[testIndex].startDate),
|
||||
// datetimeSubtractCase[testIndex].dateDiff, &endDate);
|
||||
|
||||
// // assert for the result
|
||||
// VERIFY_IS_TRUE(isValid);
|
||||
|
||||
// SYSTEMTIME systemTime = DateUtils::DateTimeToSystemTime(endDate);
|
||||
// if (systemTime.wYear != datetimeSubtractCase[testIndex].endDate.wYear ||
|
||||
// systemTime.wMonth != datetimeSubtractCase[testIndex].endDate.wMonth ||
|
||||
// systemTime.wDay != datetimeSubtractCase[testIndex].endDate.wDay ||
|
||||
// systemTime.wDayOfWeek != datetimeSubtractCase[testIndex].endDate.wDayOfWeek)
|
||||
// {
|
||||
// isValid = false;
|
||||
// }
|
||||
|
||||
// VERIFY_IS_TRUE(isValid);
|
||||
//}
|
||||
}
|
||||
};
|
||||
|
||||
TEST_CLASS(DateCalculatorViewModelTests){ public: TEST_CLASS_INITIALIZE(TestClassSetup){ /* Test Case Data */
|
||||
// Dates - DD.MM.YYYY
|
||||
/*31.12.9999*/ date[0].wYear = 9999;
|
||||
date[0].wMonth = 12;
|
||||
date[0].wDayOfWeek = 5;
|
||||
date[0].wDay = 31;
|
||||
@@ -272,368 +634,6 @@ namespace DateCalculationUnitTests
|
||||
datetimeSubtractCase[2].dateDiff = dateDifference[1]; // subtract
|
||||
}
|
||||
|
||||
/* Duration Between Two Date Tests -- Timediff obtained after calculation should be checked to be identical */
|
||||
TEST_METHOD(TestDateDiff)
|
||||
{
|
||||
// TODO - MSFT 10331900, fix this test
|
||||
|
||||
// for (int testIndex = 0; testIndex < c_diffTestCase; testIndex++)
|
||||
//{
|
||||
// DateDifference diff;
|
||||
// DateUnit dateOutputFormat;
|
||||
|
||||
// switch (testIndex)
|
||||
// {
|
||||
// case 0:
|
||||
// case 2:
|
||||
// dateOutputFormat = DateUnit::Year | DateUnit::Month | DateUnit::Day;
|
||||
// break;
|
||||
// case 1:
|
||||
// dateOutputFormat = DateUnit::Day;
|
||||
// break;
|
||||
// case 3:
|
||||
// case 8:
|
||||
// dateOutputFormat = DateUnit::Week | DateUnit::Day;
|
||||
// break;
|
||||
// case 7:
|
||||
// dateOutputFormat = DateUnit::Year | DateUnit::Month | DateUnit::Day;
|
||||
// break;
|
||||
// case 4:
|
||||
// case 6:
|
||||
// dateOutputFormat = DateUnit::Month | DateUnit::Day;
|
||||
// break;
|
||||
// case 5:
|
||||
// dateOutputFormat = DateUnit::Day;
|
||||
// break;
|
||||
// }
|
||||
|
||||
// // Calculate the difference
|
||||
// m_DateCalcEngine->TryGetDateDifference(DateUtils::SystemTimeToDateTime(datetimeDifftest[testIndex].startDate),
|
||||
// DateUtils::SystemTimeToDateTime(datetimeDifftest[testIndex].endDate), dateOutputFormat, &diff);
|
||||
|
||||
// // Assert for the result
|
||||
// bool areIdentical = true;
|
||||
// if (diff.year != datetimeDifftest[testIndex].dateDiff.year ||
|
||||
// diff.month != datetimeDifftest[testIndex].dateDiff.month ||
|
||||
// diff.week != datetimeDifftest[testIndex].dateDiff.week ||
|
||||
// diff.day != datetimeDifftest[testIndex].dateDiff.day)
|
||||
// {
|
||||
// areIdentical = false;
|
||||
// }
|
||||
|
||||
// VERIFY_IS_TRUE(areIdentical);
|
||||
//}
|
||||
}
|
||||
|
||||
/*Add Out of bound Tests*/
|
||||
TEST_METHOD(TestAddOob)
|
||||
{
|
||||
// TODO - MSFT 10331900, fix this test
|
||||
|
||||
// for (int testIndex = 0; testIndex< c_numAddOobDate; testIndex++)
|
||||
//{
|
||||
// DateTime endDate;
|
||||
|
||||
// // Add Duration
|
||||
// bool isValid = m_DateCalcEngine->AddDuration(DateUtils::SystemTimeToDateTime(datetimeBoundAdd[testIndex].startDate),
|
||||
// datetimeBoundAdd[testIndex].dateDiff, &endDate);
|
||||
|
||||
// // Assert for the result
|
||||
// VERIFY_IS_FALSE(isValid);
|
||||
//}
|
||||
}
|
||||
|
||||
/*Subtract Out of bound Tests*/
|
||||
TEST_METHOD(TestSubtractOob)
|
||||
{
|
||||
for (int testIndex = 0; testIndex < c_numSubtractOobDate; testIndex++)
|
||||
{
|
||||
// Subtract Duration
|
||||
auto endDate = m_DateCalcEngine->SubtractDuration(
|
||||
DateUtils::SystemTimeToDateTime(datetimeBoundSubtract[testIndex].startDate), datetimeBoundSubtract[testIndex].dateDiff);
|
||||
|
||||
// Assert for the result
|
||||
VERIFY_IS_NULL(endDate);
|
||||
}
|
||||
}
|
||||
|
||||
// Add Tests
|
||||
TEST_METHOD(TestAddition)
|
||||
{
|
||||
// TODO - MSFT 10331900, fix this test
|
||||
|
||||
// for (int testIndex = 0; testIndex < c_addCases; testIndex++)
|
||||
//{
|
||||
// DateTime endDate;
|
||||
|
||||
// // Add Duration
|
||||
// bool isValid = m_DateCalcEngine->AddDuration(DateUtils::SystemTimeToDateTime(datetimeAddCase[testIndex].startDate),
|
||||
// datetimeAddCase[testIndex].dateDiff, &endDate);
|
||||
|
||||
// // Assert for the result
|
||||
// VERIFY_IS_TRUE(isValid);
|
||||
|
||||
// SYSTEMTIME systemTime = DateUtils::DateTimeToSystemTime(endDate);
|
||||
// if (systemTime.wYear != datetimeAddCase[testIndex].endDate.wYear ||
|
||||
// systemTime.wMonth != datetimeAddCase[testIndex].endDate.wMonth ||
|
||||
// systemTime.wDay != datetimeAddCase[testIndex].endDate.wDay ||
|
||||
// systemTime.wDayOfWeek != datetimeAddCase[testIndex].endDate.wDayOfWeek)
|
||||
// {
|
||||
// isValid = false;
|
||||
// }
|
||||
|
||||
// VERIFY_IS_TRUE(isValid);
|
||||
//}
|
||||
}
|
||||
|
||||
// Subtract Tests
|
||||
TEST_METHOD(TestSubtraction)
|
||||
{
|
||||
// TODO - MSFT 10331900, fix this test
|
||||
|
||||
// for (int testIndex = 0; testIndex < c_subtractCases; testIndex++)
|
||||
//{
|
||||
// DateTime endDate;
|
||||
|
||||
// // Subtract Duration
|
||||
// bool isValid = m_DateCalcEngine->SubtractDuration(DateUtils::SystemTimeToDateTime(datetimeSubtractCase[testIndex].startDate),
|
||||
// datetimeSubtractCase[testIndex].dateDiff, &endDate);
|
||||
|
||||
// // assert for the result
|
||||
// VERIFY_IS_TRUE(isValid);
|
||||
|
||||
// SYSTEMTIME systemTime = DateUtils::DateTimeToSystemTime(endDate);
|
||||
// if (systemTime.wYear != datetimeSubtractCase[testIndex].endDate.wYear ||
|
||||
// systemTime.wMonth != datetimeSubtractCase[testIndex].endDate.wMonth ||
|
||||
// systemTime.wDay != datetimeSubtractCase[testIndex].endDate.wDay ||
|
||||
// systemTime.wDayOfWeek != datetimeSubtractCase[testIndex].endDate.wDayOfWeek)
|
||||
// {
|
||||
// isValid = false;
|
||||
// }
|
||||
|
||||
// VERIFY_IS_TRUE(isValid);
|
||||
//}
|
||||
}
|
||||
};
|
||||
|
||||
TEST_CLASS(DateCalculatorViewModelTests){ public: TEST_CLASS_INITIALIZE(TestClassSetup){ /* Test Case Data */
|
||||
// Dates - DD.MM.YYYY
|
||||
/*31.12.9999*/ date[0].wYear = 9999;
|
||||
date[0].wMonth = 12;
|
||||
date[0].wDayOfWeek = 5;
|
||||
date[0].wDay = 31;
|
||||
date[0].wHour = 0;
|
||||
date[0].wMinute = 0;
|
||||
date[0].wSecond = 0;
|
||||
date[0].wMilliseconds = 0;
|
||||
/*30.12.9999*/ date[1].wYear = 9999;
|
||||
date[1].wMonth = 12;
|
||||
date[1].wDayOfWeek = 4;
|
||||
date[1].wDay = 30;
|
||||
date[1].wHour = 0;
|
||||
date[1].wMinute = 0;
|
||||
date[1].wSecond = 0;
|
||||
date[1].wMilliseconds = 0;
|
||||
/*31.12.9998*/ date[2].wYear = 9998;
|
||||
date[2].wMonth = 12;
|
||||
date[2].wDayOfWeek = 4;
|
||||
date[2].wDay = 31;
|
||||
date[2].wHour = 0;
|
||||
date[2].wMinute = 0;
|
||||
date[2].wSecond = 0;
|
||||
date[2].wMilliseconds = 0;
|
||||
/*01.01.1601*/ date[3].wYear = 1601;
|
||||
date[3].wMonth = 1;
|
||||
date[3].wDayOfWeek = 1;
|
||||
date[3].wDay = 1;
|
||||
date[3].wHour = 0;
|
||||
date[3].wMinute = 0;
|
||||
date[3].wSecond = 0;
|
||||
date[3].wMilliseconds = 0;
|
||||
/*02.01.1601*/ date[4].wYear = 1601;
|
||||
date[4].wMonth = 1;
|
||||
date[4].wDayOfWeek = 2;
|
||||
date[4].wDay = 2;
|
||||
date[4].wHour = 0;
|
||||
date[4].wMinute = 0;
|
||||
date[4].wSecond = 0;
|
||||
date[4].wMilliseconds = 0;
|
||||
/*10.05.2008*/ date[5].wYear = 2008;
|
||||
date[5].wMonth = 5;
|
||||
date[5].wDayOfWeek = 6;
|
||||
date[5].wDay = 10;
|
||||
date[5].wHour = 0;
|
||||
date[5].wMinute = 0;
|
||||
date[5].wSecond = 0;
|
||||
date[5].wMilliseconds = 0;
|
||||
/*10.03.2008*/ date[6].wYear = 2008;
|
||||
date[6].wMonth = 3;
|
||||
date[6].wDayOfWeek = 1;
|
||||
date[6].wDay = 10;
|
||||
date[6].wHour = 0;
|
||||
date[6].wMinute = 0;
|
||||
date[6].wSecond = 0;
|
||||
date[6].wMilliseconds = 0;
|
||||
/*29.02.2008*/ date[7].wYear = 2008;
|
||||
date[7].wMonth = 2;
|
||||
date[7].wDayOfWeek = 5;
|
||||
date[7].wDay = 29;
|
||||
date[7].wHour = 0;
|
||||
date[7].wMinute = 0;
|
||||
date[7].wSecond = 0;
|
||||
date[7].wMilliseconds = 0;
|
||||
/*28.02.2007*/ date[8].wYear = 2007;
|
||||
date[8].wMonth = 2;
|
||||
date[8].wDayOfWeek = 3;
|
||||
date[8].wDay = 28;
|
||||
date[8].wHour = 0;
|
||||
date[8].wMinute = 0;
|
||||
date[8].wSecond = 0;
|
||||
date[8].wMilliseconds = 0;
|
||||
/*10.03.2007*/ date[9].wYear = 2007;
|
||||
date[9].wMonth = 3;
|
||||
date[9].wDayOfWeek = 6;
|
||||
date[9].wDay = 10;
|
||||
date[9].wHour = 0;
|
||||
date[9].wMinute = 0;
|
||||
date[9].wSecond = 0;
|
||||
date[9].wMilliseconds = 0;
|
||||
/*10.05.2007*/ date[10].wYear = 2007;
|
||||
date[10].wMonth = 5;
|
||||
date[10].wDayOfWeek = 4;
|
||||
date[10].wDay = 10;
|
||||
date[10].wHour = 0;
|
||||
date[10].wMinute = 0;
|
||||
date[10].wSecond = 0;
|
||||
date[10].wMilliseconds = 0;
|
||||
/*29.01.2008*/ date[11].wYear = 2008;
|
||||
date[11].wMonth = 1;
|
||||
date[11].wDayOfWeek = 2;
|
||||
date[11].wDay = 29;
|
||||
date[11].wHour = 0;
|
||||
date[11].wMinute = 0;
|
||||
date[11].wSecond = 0;
|
||||
date[11].wMilliseconds = 0;
|
||||
/*28.01.2007*/ date[12].wYear = 2007;
|
||||
date[12].wMonth = 1;
|
||||
date[12].wDayOfWeek = 0;
|
||||
date[12].wDay = 28;
|
||||
date[12].wHour = 0;
|
||||
date[12].wMinute = 0;
|
||||
date[12].wSecond = 0;
|
||||
date[12].wMilliseconds = 0;
|
||||
/*31.01.2008*/ date[13].wYear = 2008;
|
||||
date[13].wMonth = 1;
|
||||
date[13].wDayOfWeek = 4;
|
||||
date[13].wDay = 31;
|
||||
date[13].wHour = 0;
|
||||
date[13].wMinute = 0;
|
||||
date[13].wSecond = 0;
|
||||
date[13].wMilliseconds = 0;
|
||||
/*31.03.2008*/ date[14].wYear = 2008;
|
||||
date[14].wMonth = 3;
|
||||
date[14].wDayOfWeek = 1;
|
||||
date[14].wDay = 31;
|
||||
date[14].wHour = 0;
|
||||
date[14].wMinute = 0;
|
||||
date[14].wSecond = 0;
|
||||
date[14].wMilliseconds = 0;
|
||||
|
||||
// Date Differences
|
||||
dateDifference[0].year = 1;
|
||||
dateDifference[0].month = 1;
|
||||
dateDifference[1].month = 1;
|
||||
dateDifference[1].day = 10;
|
||||
dateDifference[2].day = 2;
|
||||
/*date[2]-[0]*/ dateDifference[3].week = 52;
|
||||
dateDifference[3].day = 1;
|
||||
/*date[2]-[0]*/ dateDifference[4].year = 1;
|
||||
dateDifference[5].day = 365;
|
||||
dateDifference[6].month = 1;
|
||||
dateDifference[7].month = 1;
|
||||
dateDifference[7].day = 2;
|
||||
dateDifference[8].day = 31;
|
||||
dateDifference[9].month = 11;
|
||||
dateDifference[9].day = 1;
|
||||
dateDifference[10].year = 8398;
|
||||
dateDifference[10].month = 11;
|
||||
dateDifference[10].day = 30;
|
||||
dateDifference[11].year = 2008;
|
||||
dateDifference[12].year = 7991;
|
||||
dateDifference[12].month = 11;
|
||||
dateDifference[13].week = 416998;
|
||||
dateDifference[13].day = 1;
|
||||
|
||||
/* Test Cases */
|
||||
|
||||
// Date Difference test cases
|
||||
datetimeDifftest[0].startDate = date[0];
|
||||
datetimeDifftest[0].endDate = date[3];
|
||||
datetimeDifftest[0].dateDiff = dateDifference[10];
|
||||
datetimeDifftest[1].startDate = date[0];
|
||||
datetimeDifftest[1].endDate = date[2];
|
||||
datetimeDifftest[1].dateDiff = dateDifference[5];
|
||||
datetimeDifftest[2].startDate = date[0];
|
||||
datetimeDifftest[2].endDate = date[2];
|
||||
datetimeDifftest[2].dateDiff = dateDifference[4];
|
||||
datetimeDifftest[3].startDate = date[0];
|
||||
datetimeDifftest[3].endDate = date[2];
|
||||
datetimeDifftest[3].dateDiff = dateDifference[3];
|
||||
datetimeDifftest[4].startDate = date[14];
|
||||
datetimeDifftest[4].endDate = date[7];
|
||||
datetimeDifftest[4].dateDiff = dateDifference[7];
|
||||
datetimeDifftest[5].startDate = date[14];
|
||||
datetimeDifftest[5].endDate = date[7];
|
||||
datetimeDifftest[5].dateDiff = dateDifference[8];
|
||||
datetimeDifftest[6].startDate = date[11];
|
||||
datetimeDifftest[6].endDate = date[8];
|
||||
datetimeDifftest[6].dateDiff = dateDifference[9];
|
||||
datetimeDifftest[7].startDate = date[13];
|
||||
datetimeDifftest[7].endDate = date[0];
|
||||
datetimeDifftest[7].dateDiff = dateDifference[12];
|
||||
datetimeDifftest[8].startDate = date[13];
|
||||
datetimeDifftest[8].endDate = date[0];
|
||||
datetimeDifftest[8].dateDiff = dateDifference[13];
|
||||
|
||||
// Date Add Out of Bound test cases (Negative tests)
|
||||
/*OutofBound*/ datetimeBoundAdd[0].startDate = date[1];
|
||||
datetimeBoundAdd[0].endDate = date[0];
|
||||
datetimeBoundAdd[0].dateDiff = dateDifference[2]; // on Add date[0] not used
|
||||
/*OutofBound*/ datetimeBoundAdd[1].startDate = date[2];
|
||||
datetimeBoundAdd[1].endDate = date[0];
|
||||
datetimeBoundAdd[1].dateDiff = dateDifference[11]; // on Add date[0] not used
|
||||
|
||||
// Date Subtract Out of Bound test cases (Negative tests)
|
||||
/*OutofBound*/ datetimeBoundSubtract[0].startDate = date[3];
|
||||
datetimeBoundSubtract[0].endDate = date[0];
|
||||
datetimeBoundSubtract[0].dateDiff = dateDifference[2]; // on subtract date[0] not used
|
||||
/*OutofBound*/ datetimeBoundSubtract[1].startDate = date[14];
|
||||
datetimeBoundSubtract[1].endDate = date[0];
|
||||
datetimeBoundSubtract[1].dateDiff = dateDifference[11]; // on subtract date[0] not used
|
||||
|
||||
// Date Add test cases (Positive tests)
|
||||
datetimeAddCase[0].startDate = date[13];
|
||||
datetimeAddCase[0].endDate = date[7];
|
||||
datetimeAddCase[0].dateDiff = dateDifference[6]; // add
|
||||
datetimeAddCase[1].startDate = date[14];
|
||||
datetimeAddCase[1].endDate = date[5];
|
||||
datetimeAddCase[1].dateDiff = dateDifference[1]; // add
|
||||
datetimeAddCase[2].startDate = date[13];
|
||||
datetimeAddCase[2].endDate = date[6];
|
||||
datetimeAddCase[2].dateDiff = dateDifference[1]; // add
|
||||
|
||||
// Date Subtract test cases (Positive tests)
|
||||
datetimeSubtractCase[0].startDate = date[14];
|
||||
datetimeSubtractCase[0].endDate = date[7];
|
||||
datetimeSubtractCase[0].dateDiff = dateDifference[6]; // subtract
|
||||
datetimeSubtractCase[1].startDate = date[6];
|
||||
datetimeSubtractCase[1].endDate = date[11];
|
||||
datetimeSubtractCase[1].dateDiff = dateDifference[1]; // subtract
|
||||
datetimeSubtractCase[2].startDate = date[9];
|
||||
datetimeSubtractCase[2].endDate = date[12];
|
||||
datetimeSubtractCase[2].dateDiff = dateDifference[1]; // subtract
|
||||
}
|
||||
|
||||
TEST_METHOD(DateCalcViewModelInitializationTest)
|
||||
{
|
||||
auto viewModel = ref new DateCalculatorViewModel();
|
||||
|
22
src/CalculatorUnitTests/Module.cpp
Normal file
22
src/CalculatorUnitTests/Module.cpp
Normal file
@@ -0,0 +1,22 @@
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
#include "pch.h"
|
||||
#include <CppUnitTest.h>
|
||||
|
||||
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
|
||||
|
||||
namespace CalculatorUnitTests
|
||||
{
|
||||
BEGIN_TEST_MODULE_ATTRIBUTE()
|
||||
TEST_MODULE_ATTRIBUTE(L"APPX:CertificateFileName", L"CalculatorUnitTests.cer:TrustedPeople")
|
||||
END_TEST_MODULE_ATTRIBUTE()
|
||||
|
||||
TEST_MODULE_INITIALIZE(ModuleSetup)
|
||||
{
|
||||
}
|
||||
|
||||
TEST_MODULE_CLEANUP(ModuleCleanup)
|
||||
{
|
||||
}
|
||||
}
|
@@ -97,7 +97,7 @@ namespace CalculatorUnitTests
|
||||
|
||||
// Boundary testing
|
||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategory::Deserialize(ref new Box<int>(-1)));
|
||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategory::Deserialize(ref new Box<int>(17)));
|
||||
VERIFY_ARE_EQUAL(ViewMode::None, NavCategory::Deserialize(ref new Box<int>(18)));
|
||||
}
|
||||
|
||||
void NavCategoryUnitTests::IsValidViewMode_AllValid()
|
||||
@@ -106,6 +106,7 @@ namespace CalculatorUnitTests
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Scientific));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Programmer));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Date));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Graphing));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Currency));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Volume));
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(ViewMode::Length));
|
||||
@@ -125,9 +126,9 @@ namespace CalculatorUnitTests
|
||||
{
|
||||
VERIFY_IS_FALSE(NavCategory::IsValidViewMode(ViewMode::None));
|
||||
|
||||
// There are 17 total options so int 17 should be the first invalid
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(static_cast<ViewMode>(16)));
|
||||
VERIFY_IS_FALSE(NavCategory::IsValidViewMode(static_cast<ViewMode>(17)));
|
||||
// There are 18 total options so int 18 should be the first invalid
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(static_cast<ViewMode>(17)));
|
||||
VERIFY_IS_FALSE(NavCategory::IsValidViewMode(static_cast<ViewMode>(18)));
|
||||
|
||||
// Also verify the lower bound
|
||||
VERIFY_IS_TRUE(NavCategory::IsValidViewMode(static_cast<ViewMode>(0)));
|
||||
@@ -141,6 +142,7 @@ namespace CalculatorUnitTests
|
||||
VERIFY_IS_TRUE(NavCategory::IsCalculatorViewMode(ViewMode::Programmer));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Date));
|
||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Graphing));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Currency));
|
||||
VERIFY_IS_FALSE(NavCategory::IsCalculatorViewMode(ViewMode::Volume));
|
||||
@@ -165,6 +167,8 @@ namespace CalculatorUnitTests
|
||||
|
||||
VERIFY_IS_TRUE(NavCategory::IsDateCalculatorViewMode(ViewMode::Date));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Graphing));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Currency));
|
||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Volume));
|
||||
VERIFY_IS_FALSE(NavCategory::IsDateCalculatorViewMode(ViewMode::Length));
|
||||
@@ -185,8 +189,8 @@ namespace CalculatorUnitTests
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Standard));
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Scientific));
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Programmer));
|
||||
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Date));
|
||||
VERIFY_IS_FALSE(NavCategory::IsConverterViewMode(ViewMode::Graphing));
|
||||
|
||||
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Currency));
|
||||
VERIFY_IS_TRUE(NavCategory::IsConverterViewMode(ViewMode::Volume));
|
||||
@@ -209,6 +213,7 @@ namespace CalculatorUnitTests
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Scientific"), NavCategory::GetFriendlyName(ViewMode::Scientific));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Programmer"), NavCategory::GetFriendlyName(ViewMode::Programmer));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Date"), NavCategory::GetFriendlyName(ViewMode::Date));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Graphing"), NavCategory::GetFriendlyName(ViewMode::Graphing));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Currency"), NavCategory::GetFriendlyName(ViewMode::Currency));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Volume"), NavCategory::GetFriendlyName(ViewMode::Volume));
|
||||
VERIFY_ARE_EQUAL(StringReference(L"Length"), NavCategory::GetFriendlyName(ViewMode::Length));
|
||||
@@ -232,6 +237,7 @@ namespace CalculatorUnitTests
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategory::GetGroupType(ViewMode::Scientific));
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategory::GetGroupType(ViewMode::Programmer));
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategory::GetGroupType(ViewMode::Date));
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, NavCategory::GetGroupType(ViewMode::Graphing));
|
||||
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategory::GetGroupType(ViewMode::Currency));
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, NavCategory::GetGroupType(ViewMode::Volume));
|
||||
@@ -251,12 +257,29 @@ namespace CalculatorUnitTests
|
||||
void NavCategoryUnitTests::GetIndex()
|
||||
{
|
||||
// Index is the 0-based ordering of modes
|
||||
vector<ViewMode> orderedModes = { ViewMode::Standard, ViewMode::Scientific, ViewMode::Programmer, ViewMode::Date, ViewMode::Currency,
|
||||
ViewMode::Volume, ViewMode::Length, ViewMode::Weight, ViewMode::Temperature, ViewMode::Energy,
|
||||
ViewMode::Area, ViewMode::Speed, ViewMode::Time, ViewMode::Power, ViewMode::Data,
|
||||
ViewMode::Pressure, ViewMode::Angle };
|
||||
ViewMode orderedModes[] = {
|
||||
ViewMode::Standard,
|
||||
ViewMode::Scientific,
|
||||
ViewMode::Graphing,
|
||||
ViewMode::Programmer,
|
||||
ViewMode::Date,
|
||||
ViewMode::Currency,
|
||||
ViewMode::Volume,
|
||||
ViewMode::Length,
|
||||
ViewMode::Weight,
|
||||
ViewMode::Temperature,
|
||||
ViewMode::Energy,
|
||||
ViewMode::Area,
|
||||
ViewMode::Speed,
|
||||
ViewMode::Time,
|
||||
ViewMode::Power,
|
||||
ViewMode::Data,
|
||||
ViewMode::Pressure,
|
||||
ViewMode::Angle
|
||||
};
|
||||
|
||||
for (size_t index = 0; index < orderedModes.size(); index++)
|
||||
auto orderedModesSize = size(orderedModes);
|
||||
for (size_t index = 0; index < orderedModesSize; index++)
|
||||
{
|
||||
ViewMode mode = orderedModes[index];
|
||||
VERIFY_ARE_EQUAL(index, (size_t)NavCategory::GetIndex(mode));
|
||||
@@ -268,12 +291,13 @@ namespace CalculatorUnitTests
|
||||
void NavCategoryUnitTests::GetPosition()
|
||||
{
|
||||
// Position is the 1-based ordering of modes
|
||||
vector<ViewMode> orderedModes = { ViewMode::Standard, ViewMode::Scientific, ViewMode::Programmer, ViewMode::Date, ViewMode::Currency,
|
||||
ViewMode::Volume, ViewMode::Length, ViewMode::Weight, ViewMode::Temperature, ViewMode::Energy,
|
||||
ViewMode::Area, ViewMode::Speed, ViewMode::Time, ViewMode::Power, ViewMode::Data,
|
||||
ViewMode::Pressure, ViewMode::Angle };
|
||||
vector<ViewMode> orderedModes = { ViewMode::Standard, ViewMode::Scientific, ViewMode::Graphing, ViewMode::Programmer, ViewMode::Date,
|
||||
ViewMode::Currency, ViewMode::Volume, ViewMode::Length, ViewMode::Weight, ViewMode::Temperature,
|
||||
ViewMode::Energy, ViewMode::Area, ViewMode::Speed, ViewMode::Time, ViewMode::Power,
|
||||
ViewMode::Data, ViewMode::Pressure, ViewMode::Angle };
|
||||
|
||||
for (size_t pos = 1; pos <= orderedModes.size(); pos++)
|
||||
auto orderedModesSize = size(orderedModes);
|
||||
for (size_t pos = 1; pos <= orderedModesSize; pos++)
|
||||
{
|
||||
ViewMode mode = orderedModes[pos - 1];
|
||||
VERIFY_ARE_EQUAL(pos, (size_t)NavCategory::GetPosition(mode));
|
||||
@@ -295,8 +319,9 @@ namespace CalculatorUnitTests
|
||||
{
|
||||
VERIFY_ARE_EQUAL(0, NavCategory::GetIndexInGroup(ViewMode::Standard, CategoryGroupType::Calculator));
|
||||
VERIFY_ARE_EQUAL(1, NavCategory::GetIndexInGroup(ViewMode::Scientific, CategoryGroupType::Calculator));
|
||||
VERIFY_ARE_EQUAL(2, NavCategory::GetIndexInGroup(ViewMode::Programmer, CategoryGroupType::Calculator));
|
||||
VERIFY_ARE_EQUAL(3, NavCategory::GetIndexInGroup(ViewMode::Date, CategoryGroupType::Calculator));
|
||||
VERIFY_ARE_EQUAL(2, NavCategory::GetIndexInGroup(ViewMode::Graphing, CategoryGroupType::Calculator));
|
||||
VERIFY_ARE_EQUAL(3, NavCategory::GetIndexInGroup(ViewMode::Programmer, CategoryGroupType::Calculator));
|
||||
VERIFY_ARE_EQUAL(4, NavCategory::GetIndexInGroup(ViewMode::Date, CategoryGroupType::Calculator));
|
||||
|
||||
VERIFY_ARE_EQUAL(0, NavCategory::GetIndexInGroup(ViewMode::Currency, CategoryGroupType::Converter));
|
||||
VERIFY_ARE_EQUAL(1, NavCategory::GetIndexInGroup(ViewMode::Volume, CategoryGroupType::Converter));
|
||||
@@ -320,7 +345,17 @@ namespace CalculatorUnitTests
|
||||
{
|
||||
VERIFY_ARE_EQUAL(ViewMode::Standard, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number1));
|
||||
VERIFY_ARE_EQUAL(ViewMode::Scientific, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number2));
|
||||
VERIFY_ARE_EQUAL(ViewMode::Programmer, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number3));
|
||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
||||
{
|
||||
VERIFY_ARE_EQUAL(ViewMode::Graphing, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number3));
|
||||
VERIFY_ARE_EQUAL(ViewMode::Programmer, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number4));
|
||||
VERIFY_ARE_EQUAL(ViewMode::Date, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number5));
|
||||
}
|
||||
else
|
||||
{
|
||||
VERIFY_ARE_EQUAL(ViewMode::Programmer, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number3));
|
||||
VERIFY_ARE_EQUAL(ViewMode::Date, NavCategory::GetViewModeForVirtualKey(MyVirtualKey::Number4));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CLASS(NavCategoryGroupUnitTests)
|
||||
@@ -329,14 +364,13 @@ namespace CalculatorUnitTests
|
||||
TEST_METHOD(CreateNavCategoryGroup);
|
||||
|
||||
private:
|
||||
void ValidateNavCategory(IObservableVector<NavCategory ^> ^ categories, unsigned int index, ViewMode expectedMode, int expectedPosition)
|
||||
void ValidateNavCategory(IObservableVector<NavCategory ^> ^ categories, unsigned int index, ViewMode expectedMode)
|
||||
{
|
||||
VERIFY_IS_LESS_THAN(0u, categories->Size);
|
||||
VERIFY_IS_GREATER_THAN(categories->Size, index);
|
||||
|
||||
NavCategory ^ category = categories->GetAt(index);
|
||||
VERIFY_ARE_EQUAL(expectedMode, category->Mode);
|
||||
VERIFY_ARE_EQUAL(expectedPosition, category->Position);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -349,30 +383,39 @@ namespace CalculatorUnitTests
|
||||
NavCategoryGroup ^ calculatorGroup = menuOptions->GetAt(0);
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Calculator, calculatorGroup->GroupType);
|
||||
|
||||
IObservableVector<NavCategory ^> ^ calculatorCategories = calculatorGroup->Categories;
|
||||
VERIFY_ARE_EQUAL(4, calculatorCategories->Size);
|
||||
ValidateNavCategory(calculatorCategories, 0u, ViewMode::Standard, 1);
|
||||
ValidateNavCategory(calculatorCategories, 1u, ViewMode::Scientific, 2);
|
||||
ValidateNavCategory(calculatorCategories, 2u, ViewMode::Programmer, 3);
|
||||
ValidateNavCategory(calculatorCategories, 3u, ViewMode::Date, 4);
|
||||
IObservableVector<NavCategory^>^ calculatorCategories = calculatorGroup->Categories;
|
||||
VERIFY_ARE_EQUAL(5, calculatorCategories->Size);
|
||||
ValidateNavCategory(calculatorCategories, 0u, ViewMode::Standard);
|
||||
ValidateNavCategory(calculatorCategories, 1u, ViewMode::Scientific);
|
||||
if (Windows::Foundation::Metadata::ApiInformation::IsMethodPresent("Windows.UI.Text.RichEditTextDocument", "GetMath"))
|
||||
{
|
||||
ValidateNavCategory(calculatorCategories, 2u, ViewMode::Graphing);
|
||||
ValidateNavCategory(calculatorCategories, 3u, ViewMode::Programmer);
|
||||
ValidateNavCategory(calculatorCategories, 4u, ViewMode::Date);
|
||||
}
|
||||
else
|
||||
{
|
||||
ValidateNavCategory(calculatorCategories, 2u, ViewMode::Programmer);
|
||||
ValidateNavCategory(calculatorCategories, 3u, ViewMode::Date);
|
||||
}
|
||||
|
||||
NavCategoryGroup ^ converterGroup = menuOptions->GetAt(1);
|
||||
VERIFY_ARE_EQUAL(CategoryGroupType::Converter, converterGroup->GroupType);
|
||||
|
||||
IObservableVector<NavCategory ^> ^ converterCategories = converterGroup->Categories;
|
||||
VERIFY_ARE_EQUAL(13, converterCategories->Size);
|
||||
ValidateNavCategory(converterCategories, 0u, ViewMode::Currency, 5);
|
||||
ValidateNavCategory(converterCategories, 1u, ViewMode::Volume, 6);
|
||||
ValidateNavCategory(converterCategories, 2u, ViewMode::Length, 7);
|
||||
ValidateNavCategory(converterCategories, 3u, ViewMode::Weight, 8);
|
||||
ValidateNavCategory(converterCategories, 4u, ViewMode::Temperature, 9);
|
||||
ValidateNavCategory(converterCategories, 5u, ViewMode::Energy, 10);
|
||||
ValidateNavCategory(converterCategories, 6u, ViewMode::Area, 11);
|
||||
ValidateNavCategory(converterCategories, 7u, ViewMode::Speed, 12);
|
||||
ValidateNavCategory(converterCategories, 8u, ViewMode::Time, 13);
|
||||
ValidateNavCategory(converterCategories, 9u, ViewMode::Power, 14);
|
||||
ValidateNavCategory(converterCategories, 10u, ViewMode::Data, 15);
|
||||
ValidateNavCategory(converterCategories, 11u, ViewMode::Pressure, 16);
|
||||
ValidateNavCategory(converterCategories, 12u, ViewMode::Angle, 17);
|
||||
ValidateNavCategory(converterCategories, 0u, ViewMode::Currency);
|
||||
ValidateNavCategory(converterCategories, 1u, ViewMode::Volume);
|
||||
ValidateNavCategory(converterCategories, 2u, ViewMode::Length);
|
||||
ValidateNavCategory(converterCategories, 3u, ViewMode::Weight);
|
||||
ValidateNavCategory(converterCategories, 4u, ViewMode::Temperature);
|
||||
ValidateNavCategory(converterCategories, 5u, ViewMode::Energy);
|
||||
ValidateNavCategory(converterCategories, 6u, ViewMode::Area);
|
||||
ValidateNavCategory(converterCategories, 7u, ViewMode::Speed);
|
||||
ValidateNavCategory(converterCategories, 8u, ViewMode::Time);
|
||||
ValidateNavCategory(converterCategories, 9u, ViewMode::Power);
|
||||
ValidateNavCategory(converterCategories, 10u, ViewMode::Data);
|
||||
ValidateNavCategory(converterCategories, 11u, ViewMode::Pressure);
|
||||
ValidateNavCategory(converterCategories, 12u, ViewMode::Angle);
|
||||
}
|
||||
}
|
||||
|
14
src/CalculatorUnitTests/resource.h
Normal file
14
src/CalculatorUnitTests/resource.h
Normal file
@@ -0,0 +1,14 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by CalculatorUnitTests_VS.rc
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
Reference in New Issue
Block a user