fix script and re apply style

This commit is contained in:
seyfer 2019-04-28 13:04:08 +02:00
commit f65610daff
9 changed files with 1077 additions and 793 deletions

View file

@ -5,10 +5,6 @@ function usage {
exit 1 exit 1
} }
if [ $# -eq 0 ]; then
usage
fi
# Variable that will hold the name of the clang-format command # Variable that will hold the name of the clang-format command
FMT="" FMT=""
@ -29,33 +25,22 @@ if [ -z "$FMT" ]; then
exit 1 exit 1
fi fi
SRC_PATH="$@"
if [ -z "$SRC_PATH" ]; then
SRC_PATH="../../../src"
fi
# Check all of the arguments first to make sure they're all directories # Check all of the arguments first to make sure they're all directories
for dir in "$@"; do for dir in "$SRC_PATH"; do
if [ ! -d "${dir}" ]; then if [ ! -d "${dir}" ]; then
echo "${dir} is not a directory" echo "${dir} is not a directory"
usage usage
fi fi
done done
# Find a dominating file, starting from a given directory and going up.
find-dominating-file() {
if [ -r "$1"/"$2" ]; then
return 0
fi
if [ "$1" = "/" ]; then
return 1
fi
find-dominating-file "$(realpath "$1"/..)" "$2"
return $?
}
# Run clang-format -i on all of the things # Run clang-format -i on all of the things
for dir in "$@"; do for dir in "$SRC_PATH"; do
pushd "${dir}" &>/dev/null pushd "${dir}" &>/dev/null
if ! find-dominating-file . .clang-format; then
echo "Failed to find dominating .clang-format starting at $PWD"
continue
fi
find . \ find . \
\( -name '*.c' \ \( -name '*.c' \
-o -name '*.cc' \ -o -name '*.cc' \
@ -63,6 +48,6 @@ for dir in "$@"; do
-o -name '*.h' \ -o -name '*.h' \
-o -name '*.hh' \ -o -name '*.hh' \
-o -name '*.hpp' \) \ -o -name '*.hpp' \) \
-exec "${FMT}" -i '{}' \; -exec "${FMT}" -style=file -i '{}' \;
popd &>/dev/null popd &>/dev/null
done done

View file

@ -15,10 +15,7 @@ using namespace Windows::Foundation;
using namespace Windows::System; using namespace Windows::System;
using namespace Windows::ApplicationModel::DataTransfer; using namespace Windows::ApplicationModel::DataTransfer;
String^ CopyPasteManager::supportedFormats[] = String ^ CopyPasteManager::supportedFormats[] = { StandardDataFormats::Text };
{
StandardDataFormats::Text
};
static constexpr wstring_view c_validCharacterSet{ L"0123456789()+-*/.abcdefABCDEF" }; static constexpr wstring_view c_validCharacterSet{ L"0123456789()+-*/.abcdefABCDEF" };
@ -40,43 +37,26 @@ static const wstring c_binProgrammerChars = L"[0-1]+((_|'|`)[0-1]+)*";
static const wstring c_uIntSuffixes = L"[uU]?[lL]{0,2}"; static const wstring c_uIntSuffixes = L"[uU]?[lL]{0,2}";
// RegEx Patterns used by various modes // RegEx Patterns used by various modes
static const array<wregex, 1> standardModePatterns = static const array<wregex, 1> standardModePatterns = { wregex(c_wspc + c_signedDecFloat + c_wspc) };
{ static const array<wregex, 2> scientificModePatterns = { wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat + c_wspcRParens),
wregex(c_wspc + c_signedDecFloat + c_wspc) wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat
}; + L"[e]([+]|[-])+\\d+" + c_wspcRParens) };
static const array<wregex, 2> scientificModePatterns = static const array<array<wregex, 5>, 4> programmerModePatterns = {
{ { // Hex numbers like 5F, 4A0C, 0xa9, 0xFFull, 47CDh
wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat + c_wspcRParens), { wregex(c_wspcLParens + L"(0[xX])?" + c_hexProgrammerChars + c_uIntSuffixes + c_wspcRParens),
wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat + L"[e]([+]|[-])+\\d+" + c_wspcRParens) wregex(c_wspcLParens + c_hexProgrammerChars + L"[hH]?" + c_wspcRParens) },
};
static const array<array<wregex, 5>, 4> programmerModePatterns =
{ {
// Hex numbers like 5F, 4A0C, 0xa9, 0xFFull, 47CDh
{
wregex(c_wspcLParens + L"(0[xX])?" + c_hexProgrammerChars + c_uIntSuffixes + c_wspcRParens),
wregex(c_wspcLParens + c_hexProgrammerChars + L"[hH]?" + c_wspcRParens)
},
// Decimal numbers like -145, 145, 0n145, 123ull etc // Decimal numbers like -145, 145, 0n145, 123ull etc
{ { wregex(c_wspcLParens + L"[-+]?" + c_decProgrammerChars + L"[lL]{0,2}" + c_wspcRParens),
wregex(c_wspcLParens + L"[-+]?" + c_decProgrammerChars + L"[lL]{0,2}" +c_wspcRParens), wregex(c_wspcLParens + L"(0[nN])?" + c_decProgrammerChars + c_uIntSuffixes + c_wspcRParens) },
wregex(c_wspcLParens + L"(0[nN])?" + c_decProgrammerChars + c_uIntSuffixes + c_wspcRParens)
},
// Octal numbers like 06, 010, 0t77, 0o77, 077ull etc // Octal numbers like 06, 010, 0t77, 0o77, 077ull etc
{ { wregex(c_wspcLParens + L"(0[otOT])?" + c_octProgrammerChars + c_uIntSuffixes + c_wspcRParens) },
wregex(c_wspcLParens + L"(0[otOT])?" + c_octProgrammerChars + c_uIntSuffixes + c_wspcRParens)
},
// Binary numbers like 011010110, 0010110, 10101001, 1001b, 0b1001, 0y1001, 0b1001ull // Binary numbers like 011010110, 0010110, 10101001, 1001b, 0b1001, 0y1001, 0b1001ull
{ { wregex(c_wspcLParens + L"(0[byBY])?" + c_binProgrammerChars + c_uIntSuffixes + c_wspcRParens),
wregex(c_wspcLParens + L"(0[byBY])?" + c_binProgrammerChars + c_uIntSuffixes + c_wspcRParens), wregex(c_wspcLParens + c_binProgrammerChars + L"[bB]?" + c_wspcRParens) } }
wregex(c_wspcLParens + c_binProgrammerChars + L"[bB]?" + c_wspcRParens)
}
} };
static const array<wregex, 1> unitConverterPatterns =
{
wregex(c_wspc + L"[-+]?\\d*[.]?\\d*" + c_wspc)
}; };
static const array<wregex, 1> unitConverterPatterns = { wregex(c_wspc + L"[-+]?\\d*[.]?\\d*" + c_wspc) };
void CopyPasteManager::CopyToClipboard(String^ stringToCopy) void CopyPasteManager::CopyToClipboard(String ^ stringToCopy)
{ {
// Copy the string to the clipboard // Copy the string to the clipboard
auto dataPackage = ref new DataPackage(); auto dataPackage = ref new DataPackage();
@ -84,7 +64,7 @@ void CopyPasteManager::CopyToClipboard(String^ stringToCopy)
Clipboard::SetContent(dataPackage); Clipboard::SetContent(dataPackage);
} }
task<String^> CopyPasteManager::GetStringToPaste(ViewMode mode, CategoryGroupType modeType, int programmerNumberBase, int bitLengthType) task<String ^> CopyPasteManager::GetStringToPaste(ViewMode mode, CategoryGroupType modeType, int programmerNumberBase, int bitLengthType)
{ {
// Retrieve the text in the clipboard // Retrieve the text in the clipboard
auto dataPackageView = Clipboard::GetContent(); auto dataPackageView = Clipboard::GetContent();
@ -95,11 +75,9 @@ task<String^> CopyPasteManager::GetStringToPaste(ViewMode mode, CategoryGroupTyp
//-- add support to allow pasting for expressions like 1.3e12(as of now we allow 1.3e+12) //-- add support to allow pasting for expressions like 1.3e12(as of now we allow 1.3e+12)
return create_task((dataPackageView->GetTextAsync(::StandardDataFormats::Text))) return create_task((dataPackageView->GetTextAsync(::StandardDataFormats::Text)))
.then([mode, modeType, programmerNumberBase, bitLengthType](String^ pastedText) .then([mode, modeType, programmerNumberBase,
{ bitLengthType](String ^ pastedText) { return ValidatePasteExpression(pastedText, mode, modeType, programmerNumberBase, bitLengthType); },
return ValidatePasteExpression(pastedText, mode, modeType, programmerNumberBase, bitLengthType); task_continuation_context::use_arbitrary());
}
, task_continuation_context::use_arbitrary());
} }
int CopyPasteManager::ClipboardTextFormat() int CopyPasteManager::ClipboardTextFormat()
@ -116,14 +94,14 @@ int CopyPasteManager::ClipboardTextFormat()
return -1; return -1;
} }
String^ CopyPasteManager::ValidatePasteExpression(String^ pastedText, ViewMode mode, int programmerNumberBase, int bitLengthType) String ^ CopyPasteManager::ValidatePasteExpression(String ^ pastedText, ViewMode mode, int programmerNumberBase, int bitLengthType)
{ {
return CopyPasteManager::ValidatePasteExpression(pastedText, mode, NavCategory::GetGroupType(mode), programmerNumberBase, bitLengthType); return CopyPasteManager::ValidatePasteExpression(pastedText, mode, NavCategory::GetGroupType(mode), programmerNumberBase, bitLengthType);
} }
// return "NoOp" if pastedText is invalid else return pastedText // return "NoOp" if pastedText is invalid else return pastedText
String^ CopyPasteManager::ValidatePasteExpression(String^ pastedText, ViewMode mode, CategoryGroupType modeType, int programmerNumberBase, int bitLengthType) String ^ CopyPasteManager::ValidatePasteExpression(String ^ pastedText, ViewMode mode, CategoryGroupType modeType, int programmerNumberBase, int bitLengthType)
{ {
if (pastedText->Length() > MaxPasteableLength) if (pastedText->Length() > MaxPasteableLength)
{ {
@ -135,7 +113,7 @@ String^ CopyPasteManager::ValidatePasteExpression(String^ pastedText, ViewMode m
wstring pasteExpression = pastedText->Data(); wstring pasteExpression = pastedText->Data();
// Get english translated expression // Get english translated expression
String^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(pasteExpression); String ^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(pasteExpression);
// Removing the spaces, comma separator from the pasteExpression to allow pasting of expressions like 1 + 2+1,333 // Removing the spaces, comma separator from the pasteExpression to allow pasting of expressions like 1 + 2+1,333
pasteExpression = RemoveUnwantedCharsFromWstring(englishString->Data()); pasteExpression = RemoveUnwantedCharsFromWstring(englishString->Data());
@ -223,7 +201,8 @@ vector<wstring> CopyPasteManager::ExtractOperands(const wstring& pasteExpression
if ((pasteExpression.at(i) == L'+') || (pasteExpression.at(i) == L'-')) if ((pasteExpression.at(i) == L'+') || (pasteExpression.at(i) == L'-'))
{ {
// don't break the expression into operands if the encountered character corresponds to sign command(+-) // don't break the expression into operands if the encountered character corresponds to sign command(+-)
if (isPreviousOpenParen || startOfExpression || isPreviousOperator || ((mode != ViewMode::Programmer) && !((i != 0) && (pasteExpression.at(i - 1) != L'e')))) if (isPreviousOpenParen || startOfExpression || isPreviousOperator
|| ((mode != ViewMode::Programmer) && !((i != 0) && (pasteExpression.at(i - 1) != L'e'))))
{ {
isPreviousOperator = false; isPreviousOperator = false;
continue; continue;
@ -453,11 +432,13 @@ bool CopyPasteManager::TryOperandToULL(const wstring& operand, int numberBase, u
size_t CopyPasteManager::OperandLength(const wstring& operand, ViewMode mode, CategoryGroupType modeType, int programmerNumberBase) size_t CopyPasteManager::OperandLength(const wstring& operand, ViewMode mode, CategoryGroupType modeType, int programmerNumberBase)
{ {
if (modeType == CategoryGroupType::Converter) { if (modeType == CategoryGroupType::Converter)
{
return operand.length(); return operand.length();
} }
switch(mode) { switch (mode)
{
case ViewMode::Standard: case ViewMode::Standard:
case ViewMode::Scientific: case ViewMode::Scientific:
return StandardScientificOperandLength(operand); return StandardScientificOperandLength(operand);
@ -494,7 +475,6 @@ size_t CopyPasteManager::StandardScientificOperandLength(const wstring& operand)
size_t CopyPasteManager::ProgrammerOperandLength(const wstring& operand, int numberBase) size_t CopyPasteManager::ProgrammerOperandLength(const wstring& operand, int numberBase)
{ {
vector<wstring> prefixes{}; vector<wstring> prefixes{};
vector<wstring> suffixes{}; vector<wstring> suffixes{};
switch (numberBase) switch (numberBase)

View file

@ -25,8 +25,9 @@ namespace CalculatorApp
class CopyPasteManager class CopyPasteManager
{ {
public: public:
static void CopyToClipboard(Platform::String^ stringToCopy); static void CopyToClipboard(Platform::String ^ stringToCopy);
static concurrency::task<Platform::String^> GetStringToPaste(CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1, int bitLengthType = -1); static concurrency::task<Platform::String ^> GetStringToPaste(CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType,
int programmerNumberBase = -1, int bitLengthType = -1);
static bool HasStringToPaste() static bool HasStringToPaste()
{ {
return ClipboardTextFormat() >= 0; return ClipboardTextFormat() >= 0;
@ -36,25 +37,23 @@ namespace CalculatorApp
private: private:
static int ClipboardTextFormat(); static int ClipboardTextFormat();
static Platform::String^ ValidatePasteExpression( static Platform::String
Platform::String^ pastedText, ^ ValidatePasteExpression(Platform::String ^ pastedText, CalculatorApp::Common::ViewMode mode, int programmerNumberBase, int bitLengthType);
CalculatorApp::Common::ViewMode mode, static Platform::String
int programmerNumberBase, ^ ValidatePasteExpression(Platform::String ^ pastedText, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType,
int bitLengthType); int programmerNumberBase, int bitLengthType);
static Platform::String^ ValidatePasteExpression(
Platform::String^ pastedText,
CalculatorApp::Common::ViewMode mode,
CalculatorApp::Common::CategoryGroupType modeType,
int programmerNumberBase,
int bitLengthType);
static std::vector<std::wstring> ExtractOperands(const std::wstring& pasteExpression, CalculatorApp::Common::ViewMode mode, int programmerNumberBase = -1, int bitLengthType = -1); static std::vector<std::wstring> ExtractOperands(const std::wstring& pasteExpression, CalculatorApp::Common::ViewMode mode,
static bool ExpressionRegExMatch(std::vector<std::wstring> operands, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1, int bitLengthType = -1); int programmerNumberBase = -1, int bitLengthType = -1);
static bool ExpressionRegExMatch(std::vector<std::wstring> operands, CalculatorApp::Common::ViewMode mode,
CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1, int bitLengthType = -1);
static std::pair<size_t, uint64_t> GetMaxOperandLengthAndValue(CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1, int bitLengthType = -1); static std::pair<size_t, uint64_t> GetMaxOperandLengthAndValue(CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType,
int programmerNumberBase = -1, int bitLengthType = -1);
static std::wstring SanitizeOperand(const std::wstring& operand); static std::wstring SanitizeOperand(const std::wstring& operand);
static bool TryOperandToULL(const std::wstring& operand, int numberBase, unsigned long long int& result); static bool TryOperandToULL(const std::wstring& operand, int numberBase, unsigned long long int& result);
static size_t OperandLength(const std::wstring& operand, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1); static size_t OperandLength(const std::wstring& operand, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType,
int programmerNumberBase = -1);
static size_t StandardScientificOperandLength(const std::wstring& operand); static size_t StandardScientificOperandLength(const std::wstring& operand);
static size_t ProgrammerOperandLength(const std::wstring& operand, int numberBase); static size_t ProgrammerOperandLength(const std::wstring& operand, int numberBase);
static std::wstring RemoveUnwantedCharsFromWstring(const std::wstring& input); static std::wstring RemoveUnwantedCharsFromWstring(const std::wstring& input);
@ -67,7 +66,7 @@ namespace CalculatorApp
static constexpr size_t MaxExponentLength = 4; static constexpr size_t MaxExponentLength = 4;
static constexpr size_t MaxProgrammerBitLength = 64; static constexpr size_t MaxProgrammerBitLength = 64;
static Platform::String^ supportedFormats[]; static Platform::String ^ supportedFormats[];
friend class CalculatorUnitTests::CopyPasteManagerTest; friend class CalculatorUnitTests::CopyPasteManagerTest;
}; };

View file

@ -30,9 +30,10 @@ bool DateCalculationEngine::AddDuration(_In_ DateTime startDate, _In_ const Date
{ {
// The Japanese Era system can have multiple year partitions within the same year. // The Japanese Era system can have multiple year partitions within the same year.
// For example, April 30, 2019 is denoted April 30, Heisei 31; May 1, 2019 is denoted as May 1, Reiwa 1. // For example, April 30, 2019 is denoted April 30, Heisei 31; May 1, 2019 is denoted as May 1, Reiwa 1.
// The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1 results in a date in Heisei 31. // The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1
// To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian system, do date math, and then convert back to the Japanese era system. // results in a date in Heisei 31. To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian
// This works because the Japanese era system maintains the same year/month boundaries and durations as the Gregorian system and is only different in display value. // system, do date math, and then convert back to the Japanese era system. This works because the Japanese era system maintains the same year/month
// boundaries and durations as the Gregorian system and is only different in display value.
if (currentCalendarSystem == CalendarIdentifiers::Japanese) if (currentCalendarSystem == CalendarIdentifiers::Japanese)
{ {
m_calendar->ChangeCalendarSystem(CalendarIdentifiers::Gregorian); m_calendar->ChangeCalendarSystem(CalendarIdentifiers::Gregorian);
@ -89,9 +90,10 @@ bool DateCalculationEngine::SubtractDuration(_In_ DateTime startDate, _In_ const
{ {
// The Japanese Era system can have multiple year partitions within the same year. // The Japanese Era system can have multiple year partitions within the same year.
// For example, April 30, 2019 is denoted April 30, Heisei 31; May 1, 2019 is denoted as May 1, Reiwa 1. // For example, April 30, 2019 is denoted April 30, Heisei 31; May 1, 2019 is denoted as May 1, Reiwa 1.
// The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1 results in a date in Heisei 31. // The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1
// To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian system, do date math, and then convert back to the Japanese era system. // results in a date in Heisei 31. To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian
// This works because the Japanese era system maintains the same year/month boundaries and durations as the Gregorian system and is only different in display value. // system, do date math, and then convert back to the Japanese era system. This works because the Japanese era system maintains the same year/month
// boundaries and durations as the Gregorian system and is only different in display value.
if (currentCalendarSystem == CalendarIdentifiers::Japanese) if (currentCalendarSystem == CalendarIdentifiers::Japanese)
{ {
m_calendar->ChangeCalendarSystem(CalendarIdentifiers::Gregorian); m_calendar->ChangeCalendarSystem(CalendarIdentifiers::Gregorian);

View file

@ -23,8 +23,10 @@
m_##n = value; \ m_##n = value; \
} \ } \
} \ } \
\
private: \ private: \
t m_##n; \ t m_##n; \
\
public: public:
#define PROPERTY_RW(t, n) \ #define PROPERTY_RW(t, n) \
@ -39,8 +41,10 @@ public:
m_##n = value; \ m_##n = value; \
} \ } \
} \ } \
\
private: \ private: \
t m_##n; \ t m_##n; \
\
public: public:
#define OBSERVABLE_PROPERTY_R(t, n) \ #define OBSERVABLE_PROPERTY_R(t, n) \
@ -61,8 +65,10 @@ public:
} \ } \
} \ } \
} \ } \
\
private: \ private: \
t m_##n; \ t m_##n; \
\
public: public:
#define OBSERVABLE_PROPERTY_RW(t, n) \ #define OBSERVABLE_PROPERTY_RW(t, n) \
@ -81,8 +87,10 @@ public:
} \ } \
} \ } \
} \ } \
\
private: \ private: \
t m_##n; \ t m_##n; \
\
public: public:
#define OBSERVABLE_NAMED_PROPERTY_R(t, n) \ #define OBSERVABLE_NAMED_PROPERTY_R(t, n) \
@ -92,6 +100,7 @@ public:
{ \ { \
Platform::String ^ get() { return Platform::StringReference(L#n); } \ Platform::String ^ get() { return Platform::StringReference(L#n); } \
} \ } \
\
public: public:
#define OBSERVABLE_NAMED_PROPERTY_RW(t, n) \ #define OBSERVABLE_NAMED_PROPERTY_RW(t, n) \
@ -101,6 +110,7 @@ public:
{ \ { \
Platform::String ^ get() { return Platform::StringReference(L#n); } \ Platform::String ^ get() { return Platform::StringReference(L#n); } \
} \ } \
\
public: public:
#define OBSERVABLE_PROPERTY_FIELD(n) m_##n #define OBSERVABLE_PROPERTY_FIELD(n) m_##n
@ -114,6 +124,7 @@ public:
{ \ { \
PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs(p)); \ PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs(p)); \
} \ } \
\
public: public:
#else #else
#define OBSERVABLE_OBJECT() \ #define OBSERVABLE_OBJECT() \
@ -122,6 +133,7 @@ public:
void RaisePropertyChanged(Platform::String ^ p) \ void RaisePropertyChanged(Platform::String ^ p) \
{ \ { \
} \ } \
\
public: public:
#endif #endif
@ -136,6 +148,7 @@ public:
PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs(p)); \ PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs(p)); \
c(p); \ c(p); \
} \ } \
\
public: public:
#else #else
#define OBSERVABLE_OBJECT_CALLBACK(c) \ #define OBSERVABLE_OBJECT_CALLBACK(c) \
@ -145,6 +158,7 @@ public:
{ \ { \
c(p); \ c(p); \
} \ } \
\
public: public:
#endif #endif
@ -156,6 +170,7 @@ public:
if (!donotuse_##p) {\ if (!donotuse_##p) {\
donotuse_##p = CalculatorApp::Common::MakeDelegate(this, &m);\ donotuse_##p = CalculatorApp::Common::MakeDelegate(this, &m);\
} return donotuse_##p; }} private: Windows::UI::Xaml::Input::ICommand^ donotuse_##p; \ } return donotuse_##p; }} private: Windows::UI::Xaml::Input::ICommand^ donotuse_##p; \
\
public: public:
#define DEPENDENCY_PROPERTY_DECLARATION(t, n) \ #define DEPENDENCY_PROPERTY_DECLARATION(t, n) \
@ -173,6 +188,7 @@ public:
\ \
private: \ private: \
static Windows::UI::Xaml::DependencyProperty ^ s_##n##Property; \ static Windows::UI::Xaml::DependencyProperty ^ s_##n##Property; \
\
public: public:
// Utilities for DependencyProperties // Utilities for DependencyProperties
@ -387,6 +403,7 @@ namespace Utils
#define DEPENDENCY_PROPERTY_OWNER(owner) \ #define DEPENDENCY_PROPERTY_OWNER(owner) \
private: \ private: \
typedef owner DependencyPropertiesOwner; \ typedef owner DependencyPropertiesOwner; \
\
public: public:
// Normal DependencyProperty // Normal DependencyProperty
@ -402,6 +419,7 @@ public:
SetValue(s_##name##Property, value); \ SetValue(s_##name##Property, value); \
} \ } \
} \ } \
\
private: \ private: \
static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \
\ \
@ -419,6 +437,7 @@ private:
{ \ { \
return Utils::RegisterDependencyProperty<DependencyPropertiesOwner, type>(L#name); \ return Utils::RegisterDependencyProperty<DependencyPropertiesOwner, type>(L#name); \
} \ } \
\
public: public:
#define DEPENDENCY_PROPERTY_WITH_DEFAULT(type, name, defaultValue) \ #define DEPENDENCY_PROPERTY_WITH_DEFAULT(type, name, defaultValue) \
@ -433,6 +452,7 @@ public:
SetValue(s_##name##Property, value); \ SetValue(s_##name##Property, value); \
} \ } \
} \ } \
\
private: \ private: \
static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \
\ \
@ -450,6 +470,7 @@ private:
{ \ { \
return Utils::RegisterDependencyProperty<DependencyPropertiesOwner, type>(L#name, defaultValue); \ return Utils::RegisterDependencyProperty<DependencyPropertiesOwner, type>(L#name, defaultValue); \
} \ } \
\
public: public:
#define DEPENDENCY_PROPERTY_WITH_CALLBACK(type, name) \ #define DEPENDENCY_PROPERTY_WITH_CALLBACK(type, name) \
@ -464,6 +485,7 @@ public:
SetValue(s_##name##Property, value); \ SetValue(s_##name##Property, value); \
} \ } \
} \ } \
\
private: \ private: \
static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \
\ \
@ -486,6 +508,7 @@ private:
auto self = safe_cast<DependencyPropertiesOwner ^>(sender); \ auto self = safe_cast<DependencyPropertiesOwner ^>(sender); \
self->On##name##PropertyChanged(safe_cast<type>(args->OldValue), safe_cast<type>(args->NewValue)); \ self->On##name##PropertyChanged(safe_cast<type>(args->OldValue), safe_cast<type>(args->NewValue)); \
} \ } \
\
public: public:
#define DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(type, name, defaultValue) \ #define DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(type, name, defaultValue) \
@ -500,6 +523,7 @@ public:
SetValue(s_##name##Property, value); \ SetValue(s_##name##Property, value); \
} \ } \
} \ } \
\
private: \ private: \
static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \
\ \
@ -522,6 +546,7 @@ private:
auto self = safe_cast<DependencyPropertiesOwner ^>(sender); \ auto self = safe_cast<DependencyPropertiesOwner ^>(sender); \
self->On##name##PropertyChanged(safe_cast<type>(args->OldValue), safe_cast<type>(args->NewValue)); \ self->On##name##PropertyChanged(safe_cast<type>(args->OldValue), safe_cast<type>(args->NewValue)); \
} \ } \
\
public: public:
// Attached DependencyProperty // Attached DependencyProperty
@ -552,6 +577,7 @@ private:
{ \ { \
return Utils::RegisterDependencyPropertyAttached<DependencyPropertiesOwner, type>(L#name); \ return Utils::RegisterDependencyPropertyAttached<DependencyPropertiesOwner, type>(L#name); \
} \ } \
\
public: public:
#define DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT(type, name, defaultValue) \ #define DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT(type, name, defaultValue) \
@ -581,6 +607,7 @@ private:
{ \ { \
return Utils::RegisterDependencyPropertyAttached<DependencyPropertiesOwner, type>(L#name, defaultValue); \ return Utils::RegisterDependencyPropertyAttached<DependencyPropertiesOwner, type>(L#name, defaultValue); \
} \ } \
\
public: public:
#define DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(type, name) \ #define DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(type, name) \
@ -614,6 +641,7 @@ private:
{ \ { \
On##name##PropertyChanged(sender, safe_cast<type>(args->OldValue), safe_cast<type>(args->NewValue)); \ On##name##PropertyChanged(sender, safe_cast<type>(args->OldValue), safe_cast<type>(args->NewValue)); \
} \ } \
\
public: public:
#define DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT_AND_CALLBACK(type, name, defaultValue) \ #define DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT_AND_CALLBACK(type, name, defaultValue) \
@ -647,6 +675,7 @@ private:
{ \ { \
On##name##PropertyChanged(sender, safe_cast<type>(args->OldValue), safe_cast<type>(args->NewValue)); \ On##name##PropertyChanged(sender, safe_cast<type>(args->OldValue), safe_cast<type>(args->NewValue)); \
} \ } \
\
public: public:
// This goes into the cpp to initialize the static variable // This goes into the cpp to initialize the static variable

View file

@ -44,89 +44,232 @@ namespace DateCalculationUnitTests
DateTimeTestCase datetimeAddCase[c_addCases]; DateTimeTestCase datetimeAddCase[c_addCases];
DateTimeTestCase datetimeSubtractCase[c_subtractCases]; DateTimeTestCase datetimeSubtractCase[c_subtractCases];
// Test Class // Test Class
TEST_CLASS(DateCalculatorUnitTests) TEST_CLASS(DateCalculatorUnitTests){ public: TEST_CLASS_INITIALIZE(TestClassSetup){ /* Test Case Data */
{
public:
TEST_CLASS_INITIALIZE(TestClassSetup)
{
/* Test Case Data */
// Dates - DD.MM.YYYY // 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; /*31.12.9999*/ date[0].wYear = 9999;
/*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; date[0].wMonth = 12;
/*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; date[0].wDayOfWeek = 5;
/*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; date[0].wDay = 31;
/*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; date[0].wHour = 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; date[0].wMinute = 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; date[0].wSecond = 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; date[0].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; /*30.12.9999*/ date[1].wYear = 9999;
/*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; date[1].wMonth = 12;
/*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; date[1].wDayOfWeek = 4;
/*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; date[1].wDay = 30;
/*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; date[1].wHour = 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; date[1].wMinute = 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[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 // Date Differences
dateDifference[0].year = 1; dateDifference[0].month = 1; dateDifference[0].year = 1;
dateDifference[1].month = 1; dateDifference[1].day = 10; dateDifference[0].month = 1;
dateDifference[1].month = 1;
dateDifference[1].day = 10;
dateDifference[2].day = 2; dateDifference[2].day = 2;
/*date[2]-[0]*/ dateDifference[3].week = 52; dateDifference[3].day = 1; /*date[2]-[0]*/ dateDifference[3].week = 52;
dateDifference[3].day = 1;
/*date[2]-[0]*/ dateDifference[4].year = 1; /*date[2]-[0]*/ dateDifference[4].year = 1;
dateDifference[5].day = 365; dateDifference[5].day = 365;
dateDifference[6].month = 1; dateDifference[6].month = 1;
dateDifference[7].month = 1; dateDifference[7].day = 2; dateDifference[7].month = 1;
dateDifference[7].day = 2;
dateDifference[8].day = 31; dateDifference[8].day = 31;
dateDifference[9].month = 11; dateDifference[9].day = 1; dateDifference[9].month = 11;
dateDifference[10].year = 8398; dateDifference[10].month = 11; dateDifference[10].day = 30; dateDifference[9].day = 1;
dateDifference[10].year = 8398;
dateDifference[10].month = 11;
dateDifference[10].day = 30;
dateDifference[11].year = 2008; dateDifference[11].year = 2008;
dateDifference[12].year = 7991; dateDifference[12].month = 11; dateDifference[12].year = 7991;
dateDifference[13].week = 416998; dateDifference[13].day = 1; dateDifference[12].month = 11;
dateDifference[13].week = 416998;
dateDifference[13].day = 1;
/* Test Cases */ /* Test Cases */
// Date Difference test cases // Date Difference test cases
datetimeDifftest[0].startDate = date[0]; datetimeDifftest[0].endDate = date[3]; datetimeDifftest[0].dateDiff = dateDifference[10]; datetimeDifftest[0].startDate = date[0];
datetimeDifftest[1].startDate = date[0]; datetimeDifftest[1].endDate = date[2]; datetimeDifftest[1].dateDiff = dateDifference[5]; datetimeDifftest[0].endDate = date[3];
datetimeDifftest[2].startDate = date[0]; datetimeDifftest[2].endDate = date[2]; datetimeDifftest[2].dateDiff = dateDifference[4]; datetimeDifftest[0].dateDiff = dateDifference[10];
datetimeDifftest[3].startDate = date[0]; datetimeDifftest[3].endDate = date[2]; datetimeDifftest[3].dateDiff = dateDifference[3]; datetimeDifftest[1].startDate = date[0];
datetimeDifftest[4].startDate = date[14]; datetimeDifftest[4].endDate = date[7]; datetimeDifftest[4].dateDiff = dateDifference[7]; datetimeDifftest[1].endDate = date[2];
datetimeDifftest[5].startDate = date[14]; datetimeDifftest[5].endDate = date[7]; datetimeDifftest[5].dateDiff = dateDifference[8]; datetimeDifftest[1].dateDiff = dateDifference[5];
datetimeDifftest[6].startDate = date[11]; datetimeDifftest[6].endDate = date[8]; datetimeDifftest[6].dateDiff = dateDifference[9]; datetimeDifftest[2].startDate = date[0];
datetimeDifftest[7].startDate = date[13]; datetimeDifftest[7].endDate = date[0]; datetimeDifftest[7].dateDiff = dateDifference[12]; datetimeDifftest[2].endDate = date[2];
datetimeDifftest[8].startDate = date[13]; datetimeDifftest[8].endDate = date[0]; datetimeDifftest[8].dateDiff = dateDifference[13]; 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) // 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[0].startDate = date[1];
/*OutofBound*/ datetimeBoundAdd[1].startDate = date[2]; datetimeBoundAdd[1].endDate = date[0]; datetimeBoundAdd[1].dateDiff = dateDifference[11]; // on Add date[0] not used 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) // 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[0].startDate = date[3];
/*OutofBound*/ datetimeBoundSubtract[1].startDate = date[14]; datetimeBoundSubtract[1].endDate = date[0]; datetimeBoundSubtract[1].dateDiff = dateDifference[11]; // on subtract date[0] not used 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) // Date Add test cases (Positive tests)
datetimeAddCase[0].startDate = date[13]; datetimeAddCase[0].endDate = date[7]; datetimeAddCase[0].dateDiff = dateDifference[6];// add datetimeAddCase[0].startDate = date[13];
datetimeAddCase[1].startDate = date[14]; datetimeAddCase[1].endDate = date[5]; datetimeAddCase[1].dateDiff = dateDifference[1];// add datetimeAddCase[0].endDate = date[7];
datetimeAddCase[2].startDate = date[13]; datetimeAddCase[2].endDate = date[6]; datetimeAddCase[2].dateDiff = dateDifference[1];// add 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) // Date Subtract test cases (Positive tests)
datetimeSubtractCase[0].startDate = date[14]; datetimeSubtractCase[0].endDate = date[7]; datetimeSubtractCase[0].dateDiff = dateDifference[6];// subtract datetimeSubtractCase[0].startDate = date[14];
datetimeSubtractCase[1].startDate = date[6]; datetimeSubtractCase[1].endDate = date[11]; datetimeSubtractCase[1].dateDiff = dateDifference[1];// subtract datetimeSubtractCase[0].endDate = date[7];
datetimeSubtractCase[2].startDate = date[9]; datetimeSubtractCase[2].endDate = date[12]; datetimeSubtractCase[2].dateDiff = dateDifference[1];// subtract 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 */
/* Duration Between Two Date Tests -- Timediff obtained after calculation should be checked to be identical */ TEST_METHOD(TestDateDiff)
TEST_METHOD(TestDateDiff) {
{
// TODO - MSFT 10331900, fix this test // TODO - MSFT 10331900, fix this test
//for (int testIndex = 0; testIndex < c_diffTestCase; testIndex++) // for (int testIndex = 0; testIndex < c_diffTestCase; testIndex++)
//{ //{
// DateDifference diff; // DateDifference diff;
// DateUnit dateOutputFormat; // DateUnit dateOutputFormat;
@ -157,7 +300,8 @@ namespace DateCalculationUnitTests
// } // }
// // Calculate the difference // // Calculate the difference
// m_DateCalcEngine.GetDateDifference(DateUtils::SystemTimeToDateTime(datetimeDifftest[testIndex].startDate), DateUtils::SystemTimeToDateTime(datetimeDifftest[testIndex].endDate), dateOutputFormat, &diff); // m_DateCalcEngine.GetDateDifference(DateUtils::SystemTimeToDateTime(datetimeDifftest[testIndex].startDate),
// DateUtils::SystemTimeToDateTime(datetimeDifftest[testIndex].endDate), dateOutputFormat, &diff);
// // Assert for the result // // Assert for the result
// bool areIdentical = true; // bool areIdentical = true;
@ -171,51 +315,54 @@ namespace DateCalculationUnitTests
// VERIFY_IS_TRUE(areIdentical); // VERIFY_IS_TRUE(areIdentical);
//} //}
} }
/*Add Out of bound Tests*/ /*Add Out of bound Tests*/
TEST_METHOD(TestAddOob) TEST_METHOD(TestAddOob)
{ {
// TODO - MSFT 10331900, fix this test // TODO - MSFT 10331900, fix this test
//for (int testIndex = 0; testIndex< c_numAddOobDate; testIndex++) // for (int testIndex = 0; testIndex< c_numAddOobDate; testIndex++)
//{ //{
// DateTime endDate; // DateTime endDate;
// // Add Duration // // Add Duration
// bool isValid = m_DateCalcEngine.AddDuration(DateUtils::SystemTimeToDateTime(datetimeBoundAdd[testIndex].startDate), datetimeBoundAdd[testIndex].dateDiff, &endDate); // bool isValid = m_DateCalcEngine.AddDuration(DateUtils::SystemTimeToDateTime(datetimeBoundAdd[testIndex].startDate),
// datetimeBoundAdd[testIndex].dateDiff, &endDate);
// // Assert for the result // // Assert for the result
// VERIFY_IS_FALSE(isValid); // VERIFY_IS_FALSE(isValid);
//} //}
} }
/*Subtract Out of bound Tests*/ /*Subtract Out of bound Tests*/
TEST_METHOD(TestSubtractOob) TEST_METHOD(TestSubtractOob)
{ {
for (int testIndex = 0; testIndex< c_numSubtractOobDate; testIndex++) for (int testIndex = 0; testIndex < c_numSubtractOobDate; testIndex++)
{ {
DateTime endDate; DateTime endDate;
// Subtract Duration // Subtract Duration
bool isValid = m_DateCalcEngine.SubtractDuration(DateUtils::SystemTimeToDateTime(datetimeBoundSubtract[testIndex].startDate), datetimeBoundSubtract[testIndex].dateDiff, &endDate); bool isValid = m_DateCalcEngine.SubtractDuration(DateUtils::SystemTimeToDateTime(datetimeBoundSubtract[testIndex].startDate),
datetimeBoundSubtract[testIndex].dateDiff, &endDate);
// Assert for the result // Assert for the result
VERIFY_IS_FALSE(isValid); VERIFY_IS_FALSE(isValid);
} }
} }
// Add Tests // Add Tests
TEST_METHOD(TestAddition) TEST_METHOD(TestAddition)
{ {
// TODO - MSFT 10331900, fix this test // TODO - MSFT 10331900, fix this test
//for (int testIndex = 0; testIndex < c_addCases; testIndex++) // for (int testIndex = 0; testIndex < c_addCases; testIndex++)
//{ //{
// DateTime endDate; // DateTime endDate;
// // Add Duration // // Add Duration
// bool isValid = m_DateCalcEngine.AddDuration(DateUtils::SystemTimeToDateTime(datetimeAddCase[testIndex].startDate), datetimeAddCase[testIndex].dateDiff, &endDate); // bool isValid = m_DateCalcEngine.AddDuration(DateUtils::SystemTimeToDateTime(datetimeAddCase[testIndex].startDate),
// datetimeAddCase[testIndex].dateDiff, &endDate);
// // Assert for the result // // Assert for the result
// VERIFY_IS_TRUE(isValid); // VERIFY_IS_TRUE(isValid);
@ -231,19 +378,20 @@ namespace DateCalculationUnitTests
// VERIFY_IS_TRUE(isValid); // VERIFY_IS_TRUE(isValid);
//} //}
} }
// Subtract Tests // Subtract Tests
TEST_METHOD(TestSubtraction) TEST_METHOD(TestSubtraction)
{ {
// TODO - MSFT 10331900, fix this test // TODO - MSFT 10331900, fix this test
//for (int testIndex = 0; testIndex < c_subtractCases; testIndex++) // for (int testIndex = 0; testIndex < c_subtractCases; testIndex++)
//{ //{
// DateTime endDate; // DateTime endDate;
// // Subtract Duration // // Subtract Duration
// bool isValid = m_DateCalcEngine.SubtractDuration(DateUtils::SystemTimeToDateTime(datetimeSubtractCase[testIndex].startDate), datetimeSubtractCase[testIndex].dateDiff, &endDate); // bool isValid = m_DateCalcEngine.SubtractDuration(DateUtils::SystemTimeToDateTime(datetimeSubtractCase[testIndex].startDate),
// datetimeSubtractCase[testIndex].dateDiff, &endDate);
// // assert for the result // // assert for the result
// VERIFY_IS_TRUE(isValid); // VERIFY_IS_TRUE(isValid);
@ -259,88 +407,233 @@ namespace DateCalculationUnitTests
// VERIFY_IS_TRUE(isValid); // VERIFY_IS_TRUE(isValid);
//} //}
} }
private: private:
}
;
}; TEST_CLASS(DateCalculatorViewModelTests){ public: TEST_CLASS_INITIALIZE(TestClassSetup){ /* Test Case Data */
TEST_CLASS(DateCalculatorViewModelTests)
{
public:
TEST_CLASS_INITIALIZE(TestClassSetup)
{
/* Test Case Data */
// Dates - DD.MM.YYYY // 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; /*31.12.9999*/ date[0].wYear = 9999;
/*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; date[0].wMonth = 12;
/*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; date[0].wDayOfWeek = 5;
/*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; date[0].wDay = 31;
/*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; date[0].wHour = 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; date[0].wMinute = 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; date[0].wSecond = 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; date[0].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; /*30.12.9999*/ date[1].wYear = 9999;
/*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; date[1].wMonth = 12;
/*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; date[1].wDayOfWeek = 4;
/*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; date[1].wDay = 30;
/*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; date[1].wHour = 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; date[1].wMinute = 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[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 // Date Differences
dateDifference[0].year = 1; dateDifference[0].month = 1; dateDifference[0].year = 1;
dateDifference[1].month = 1; dateDifference[1].day = 10; dateDifference[0].month = 1;
dateDifference[2].day = 2; dateDifference[1].month = 1;
/*date[2]-[0]*/ dateDifference[3].week = 52; dateDifference[3].day = 1; dateDifference[1].day = 10;
/*date[2]-[0]*/ dateDifference[4].year = 1; dateDifference[2].day = 2;
dateDifference[5].day = 365; /*date[2]-[0]*/ dateDifference[3].week = 52;
dateDifference[6].month = 1; dateDifference[3].day = 1;
dateDifference[7].month = 1; dateDifference[7].day = 2; /*date[2]-[0]*/ dateDifference[4].year = 1;
dateDifference[8].day = 31; dateDifference[5].day = 365;
dateDifference[9].month = 11; dateDifference[9].day = 1; dateDifference[6].month = 1;
dateDifference[10].year = 8398; dateDifference[10].month = 11; dateDifference[10].day = 30; dateDifference[7].month = 1;
dateDifference[11].year = 2008; dateDifference[7].day = 2;
dateDifference[12].year = 7991; dateDifference[12].month = 11; dateDifference[8].day = 31;
dateDifference[13].week = 416998; dateDifference[13].day = 1; 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];
/* Test Cases */ // 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 Difference test cases // Date Subtract Out of Bound test cases (Negative tests)
datetimeDifftest[0].startDate = date[0]; datetimeDifftest[0].endDate = date[3]; datetimeDifftest[0].dateDiff = dateDifference[10]; /*OutofBound*/ datetimeBoundSubtract[0].startDate = date[3];
datetimeDifftest[1].startDate = date[0]; datetimeDifftest[1].endDate = date[2]; datetimeDifftest[1].dateDiff = dateDifference[5]; datetimeBoundSubtract[0].endDate = date[0];
datetimeDifftest[2].startDate = date[0]; datetimeDifftest[2].endDate = date[2]; datetimeDifftest[2].dateDiff = dateDifference[4]; datetimeBoundSubtract[0].dateDiff = dateDifference[2]; // on subtract date[0] not used
datetimeDifftest[3].startDate = date[0]; datetimeDifftest[3].endDate = date[2]; datetimeDifftest[3].dateDiff = dateDifference[3]; /*OutofBound*/ datetimeBoundSubtract[1].startDate = date[14];
datetimeDifftest[4].startDate = date[14]; datetimeDifftest[4].endDate = date[7]; datetimeDifftest[4].dateDiff = dateDifference[7]; datetimeBoundSubtract[1].endDate = date[0];
datetimeDifftest[5].startDate = date[14]; datetimeDifftest[5].endDate = date[7]; datetimeDifftest[5].dateDiff = dateDifference[8]; datetimeBoundSubtract[1].dateDiff = dateDifference[11]; // on subtract date[0] not used
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) // Date Add test cases (Positive tests)
/*OutofBound*/ datetimeBoundAdd[0].startDate = date[1]; datetimeBoundAdd[0].endDate = date[0]; datetimeBoundAdd[0].dateDiff = dateDifference[2]; // on Add date[0] not used datetimeAddCase[0].startDate = date[13];
/*OutofBound*/ datetimeBoundAdd[1].startDate = date[2]; datetimeBoundAdd[1].endDate = date[0]; datetimeBoundAdd[1].dateDiff = dateDifference[11]; // on Add date[0] not used 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 Out of Bound test cases (Negative tests) // Date Subtract test cases (Positive tests)
/*OutofBound*/ datetimeBoundSubtract[0].startDate = date[3]; datetimeBoundSubtract[0].endDate = date[0]; datetimeBoundSubtract[0].dateDiff = dateDifference[2]; // on subtract date[0] not used datetimeSubtractCase[0].startDate = date[14];
/*OutofBound*/ datetimeBoundSubtract[1].startDate = date[14]; datetimeBoundSubtract[1].endDate = date[0]; datetimeBoundSubtract[1].dateDiff = dateDifference[11]; // on subtract date[0] not used 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
}
// Date Add test cases (Positive tests) TEST_METHOD(DateCalcViewModelInitializationTest)
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(); auto viewModel = ref new DateCalculatorViewModel();
// Check for the initialized values // Check for the initialized values
@ -360,10 +653,10 @@ namespace DateCalculationUnitTests
VERIFY_IS_NULL(viewModel->StrDateDiffResultInDays); VERIFY_IS_NULL(viewModel->StrDateDiffResultInDays);
VERIFY_IS_NULL(viewModel->StrDateResult); VERIFY_IS_NULL(viewModel->StrDateResult);
} }
TEST_METHOD(DateCalcViewModelAddSubtractInitTest) TEST_METHOD(DateCalcViewModelAddSubtractInitTest)
{ {
auto viewModel = ref new DateCalculatorViewModel(); auto viewModel = ref new DateCalculatorViewModel();
viewModel->IsDateDiffMode = false; viewModel->IsDateDiffMode = false;
@ -385,10 +678,10 @@ namespace DateCalculationUnitTests
VERIFY_IS_NOT_NULL(viewModel->StrDateResult); VERIFY_IS_NOT_NULL(viewModel->StrDateResult);
VERIFY_IS_TRUE(StringReference(L"") != viewModel->StrDateResult); VERIFY_IS_TRUE(StringReference(L"") != viewModel->StrDateResult);
} }
TEST_METHOD(DateCalcViewModelDateDiffDaylightSavingTimeTest) TEST_METHOD(DateCalcViewModelDateDiffDaylightSavingTimeTest)
{ {
auto viewModel = ref new DateCalculatorViewModel(); auto viewModel = ref new DateCalculatorViewModel();
viewModel->IsDateDiffMode = true; viewModel->IsDateDiffMode = true;
@ -442,10 +735,10 @@ namespace DateCalculationUnitTests
viewModel->ToDate = DateUtils::SystemTimeToDateTime(endDate); viewModel->ToDate = DateUtils::SystemTimeToDateTime(endDate);
VERIFY_IS_TRUE(viewModel->IsDiffInDays); VERIFY_IS_TRUE(viewModel->IsDiffInDays);
VERIFY_ARE_EQUAL(StringReference(L"1 day"), viewModel->StrDateDiffResult); VERIFY_ARE_EQUAL(StringReference(L"1 day"), viewModel->StrDateDiffResult);
} }
TEST_METHOD(DateCalcViewModelAddTest) TEST_METHOD(DateCalcViewModelAddTest)
{ {
// TODO - MSFT 10331900, fix this test // TODO - MSFT 10331900, fix this test
// A few issues to be investigated.. // A few issues to be investigated..
// The date returned by DateUtils::GetLongDate can be a different string than expected // The date returned by DateUtils::GetLongDate can be a different string than expected
@ -457,25 +750,25 @@ namespace DateCalculationUnitTests
// the same DateTime value as if the user were to select the same date from the CalendarDatePicker. // the same DateTime value as if the user were to select the same date from the CalendarDatePicker.
// This means testing a specific date here, is *not* the same as selecting that date in the app. // This means testing a specific date here, is *not* the same as selecting that date in the app.
//auto viewModel = ref new DateCalculatorViewModel(); // auto viewModel = ref new DateCalculatorViewModel();
//viewModel->Initialize(); // viewModel->Initialize();
//viewModel->IsDateDiffMode = false; // viewModel->IsDateDiffMode = false;
//viewModel->IsAddMode = true; // viewModel->IsAddMode = true;
//VERIFY_IS_FALSE(viewModel->IsDateDiffMode); // VERIFY_IS_FALSE(viewModel->IsDateDiffMode);
//VERIFY_IS_TRUE(viewModel->IsAddMode); // VERIFY_IS_TRUE(viewModel->IsAddMode);
//viewModel->StartDate = DateUtils::SystemTimeToDateTime(datetimeAddCase[0].startDate); // viewModel->StartDate = DateUtils::SystemTimeToDateTime(datetimeAddCase[0].startDate);
//viewModel->DaysOffset = datetimeAddCase[0].dateDiff.day; // viewModel->DaysOffset = datetimeAddCase[0].dateDiff.day;
//viewModel->MonthsOffset = datetimeAddCase[0].dateDiff.month; // viewModel->MonthsOffset = datetimeAddCase[0].dateDiff.month;
//viewModel->YearsOffset = datetimeAddCase[0].dateDiff.year; // viewModel->YearsOffset = datetimeAddCase[0].dateDiff.year;
//// Assert for the result //// Assert for the result
//VERIFY_ARE_EQUAL(DateUtils::GetLongDate(date[7]), viewModel->StrDateResult); // VERIFY_ARE_EQUAL(DateUtils::GetLongDate(date[7]), viewModel->StrDateResult);
} }
TEST_METHOD(DateCalcViewModelSubtractTest) TEST_METHOD(DateCalcViewModelSubtractTest)
{ {
// TODO - MSFT 10331900, fix this test // TODO - MSFT 10331900, fix this test
// A few issues to be investigated.. // A few issues to be investigated..
// The date returned by DateUtils::GetLongDate can be a different string than expected // The date returned by DateUtils::GetLongDate can be a different string than expected
@ -487,38 +780,38 @@ namespace DateCalculationUnitTests
// the same DateTime value as if the user were to select the same date from the CalendarDatePicker. // the same DateTime value as if the user were to select the same date from the CalendarDatePicker.
// This means testing a specific date here, is *not* the same as selecting that date in the app. // This means testing a specific date here, is *not* the same as selecting that date in the app.
//auto viewModel = ref new DateCalculatorViewModel(); // auto viewModel = ref new DateCalculatorViewModel();
//viewModel->Initialize(); // viewModel->Initialize();
//viewModel->IsDateDiffMode = false; // viewModel->IsDateDiffMode = false;
//viewModel->IsAddMode = false; // viewModel->IsAddMode = false;
//VERIFY_IS_FALSE(viewModel->IsDateDiffMode); // VERIFY_IS_FALSE(viewModel->IsDateDiffMode);
//VERIFY_IS_FALSE(viewModel->IsAddMode); // VERIFY_IS_FALSE(viewModel->IsAddMode);
//viewModel->StartDate = DateUtils::SystemTimeToDateTime(datetimeSubtractCase[0].startDate); // viewModel->StartDate = DateUtils::SystemTimeToDateTime(datetimeSubtractCase[0].startDate);
//viewModel->DaysOffset = datetimeSubtractCase[0].dateDiff.day; // viewModel->DaysOffset = datetimeSubtractCase[0].dateDiff.day;
//viewModel->MonthsOffset = datetimeSubtractCase[0].dateDiff.month; // viewModel->MonthsOffset = datetimeSubtractCase[0].dateDiff.month;
//viewModel->YearsOffset = datetimeSubtractCase[0].dateDiff.year; // viewModel->YearsOffset = datetimeSubtractCase[0].dateDiff.year;
//// Assert for the result //// Assert for the result
//VERIFY_ARE_EQUAL(DateUtils::GetLongDate(date[7]), viewModel->StrDateResult); // VERIFY_ARE_EQUAL(DateUtils::GetLongDate(date[7]), viewModel->StrDateResult);
} }
TEST_METHOD(DateCalcViewModelAddOobTest) TEST_METHOD(DateCalcViewModelAddOobTest)
{ {
// TODO - MSFT 10331900, fix this test // TODO - MSFT 10331900, fix this test
// Curiously enough, this test fails because it fails to go Oob. // Curiously enough, this test fails because it fails to go Oob.
// Possibly need to update test to use a new max date. // Possibly need to update test to use a new max date.
//auto viewModel = ref new DateCalculatorViewModel(); // auto viewModel = ref new DateCalculatorViewModel();
//viewModel->Initialize(); // viewModel->Initialize();
//viewModel->IsDateDiffMode = false; // viewModel->IsDateDiffMode = false;
//viewModel->IsAddMode = true; // viewModel->IsAddMode = true;
//VERIFY_IS_FALSE(viewModel->IsDateDiffMode); // VERIFY_IS_FALSE(viewModel->IsDateDiffMode);
//VERIFY_IS_TRUE(viewModel->IsAddMode); // VERIFY_IS_TRUE(viewModel->IsAddMode);
//for (int testIndex = 0; testIndex< c_numAddOobDate; testIndex++) // for (int testIndex = 0; testIndex< c_numAddOobDate; testIndex++)
//{ //{
// viewModel->StartDate = DateUtils::SystemTimeToDateTime(datetimeBoundAdd[testIndex].startDate); // viewModel->StartDate = DateUtils::SystemTimeToDateTime(datetimeBoundAdd[testIndex].startDate);
// viewModel->DaysOffset = datetimeBoundAdd[testIndex].dateDiff.day; // viewModel->DaysOffset = datetimeBoundAdd[testIndex].dateDiff.day;
@ -528,10 +821,10 @@ namespace DateCalculationUnitTests
// // Assert for the result // // Assert for the result
// VERIFY_ARE_EQUAL(StringReference(L"Date out of Bound"), viewModel->StrDateResult); // VERIFY_ARE_EQUAL(StringReference(L"Date out of Bound"), viewModel->StrDateResult);
//} //}
} }
TEST_METHOD(DateCalcViewModelSubtractOobTest) TEST_METHOD(DateCalcViewModelSubtractOobTest)
{ {
auto viewModel = ref new DateCalculatorViewModel(); auto viewModel = ref new DateCalculatorViewModel();
viewModel->IsDateDiffMode = false; viewModel->IsDateDiffMode = false;
@ -549,10 +842,10 @@ namespace DateCalculationUnitTests
// Assert for the result // Assert for the result
VERIFY_ARE_EQUAL(StringReference(L"Date out of Bound"), viewModel->StrDateResult); VERIFY_ARE_EQUAL(StringReference(L"Date out of Bound"), viewModel->StrDateResult);
} }
} }
TEST_METHOD(DateCalcViewModelDateDiffIgnoreSignTest) TEST_METHOD(DateCalcViewModelDateDiffIgnoreSignTest)
{ {
auto viewModel = ref new DateCalculatorViewModel(); auto viewModel = ref new DateCalculatorViewModel();
viewModel->IsDateDiffMode = true; viewModel->IsDateDiffMode = true;
@ -569,32 +862,32 @@ namespace DateCalculationUnitTests
VERIFY_IS_FALSE(viewModel->IsDiffInDays); VERIFY_IS_FALSE(viewModel->IsDiffInDays);
VERIFY_ARE_EQUAL(StringReference(L"305 days"), viewModel->StrDateDiffResultInDays); VERIFY_ARE_EQUAL(StringReference(L"305 days"), viewModel->StrDateDiffResultInDays);
VERIFY_ARE_EQUAL(StringReference(L"10 months"), viewModel->StrDateDiffResult); VERIFY_ARE_EQUAL(StringReference(L"10 months"), viewModel->StrDateDiffResult);
} }
TEST_METHOD(DateCalcViewModelDateDiffTest) TEST_METHOD(DateCalcViewModelDateDiffTest)
{ {
// TODO - MSFT 10331900, fix this test // TODO - MSFT 10331900, fix this test
// The last VERIFY checks with expected value "8398 years, 11 months, 4 weeks, 2 days" // The last VERIFY checks with expected value "8398 years, 11 months, 4 weeks, 2 days"
// The viewmodel result is something like "8398 years, 12 months, 6568892 weeks, 1 day", // The viewmodel result is something like "8398 years, 12 months, 6568892 weeks, 1 day",
// which shows there is a problem with the viewmodel's reduction algorithm. // which shows there is a problem with the viewmodel's reduction algorithm.
//auto viewModel = ref new DateCalculatorViewModel(); // auto viewModel = ref new DateCalculatorViewModel();
//viewModel->Initialize(); // viewModel->Initialize();
//viewModel->IsDateDiffMode = true; // viewModel->IsDateDiffMode = true;
//VERIFY_IS_TRUE(viewModel->IsDateDiffMode); // VERIFY_IS_TRUE(viewModel->IsDateDiffMode);
//viewModel->FromDate = DateUtils::SystemTimeToDateTime(datetimeDifftest[0].startDate); // viewModel->FromDate = DateUtils::SystemTimeToDateTime(datetimeDifftest[0].startDate);
//viewModel->ToDate = DateUtils::SystemTimeToDateTime(datetimeDifftest[0].endDate); // viewModel->ToDate = DateUtils::SystemTimeToDateTime(datetimeDifftest[0].endDate);
//// Assert for the result //// Assert for the result
//VERIFY_IS_FALSE(viewModel->IsDiffInDays); // VERIFY_IS_FALSE(viewModel->IsDiffInDays);
//VERIFY_ARE_EQUAL(StringReference(L"3067670 days"), viewModel->StrDateDiffResultInDays); // VERIFY_ARE_EQUAL(StringReference(L"3067670 days"), viewModel->StrDateDiffResultInDays);
//VERIFY_ARE_EQUAL(StringReference(L"8398 years, 11 months, 4 weeks, 2 days"), viewModel->StrDateDiffResult); // VERIFY_ARE_EQUAL(StringReference(L"8398 years, 11 months, 4 weeks, 2 days"), viewModel->StrDateDiffResult);
} }
TEST_METHOD(DateCalcViewModelDateDiffResultInPositiveDaysTest) TEST_METHOD(DateCalcViewModelDateDiffResultInPositiveDaysTest)
{ {
auto viewModel = ref new DateCalculatorViewModel(); auto viewModel = ref new DateCalculatorViewModel();
viewModel->IsDateDiffMode = true; viewModel->IsDateDiffMode = true;
@ -607,10 +900,10 @@ namespace DateCalculationUnitTests
VERIFY_IS_TRUE(viewModel->IsDiffInDays); VERIFY_IS_TRUE(viewModel->IsDiffInDays);
VERIFY_ARE_EQUAL(StringReference(L"1 day"), viewModel->StrDateDiffResult); VERIFY_ARE_EQUAL(StringReference(L"1 day"), viewModel->StrDateDiffResult);
VERIFY_IS_NULL(viewModel->StrDateDiffResultInDays); VERIFY_IS_NULL(viewModel->StrDateDiffResultInDays);
} }
TEST_METHOD(DateCalcViewModelDateDiffFromDateHigherThanToDate) TEST_METHOD(DateCalcViewModelDateDiffFromDateHigherThanToDate)
{ {
auto viewModel = ref new DateCalculatorViewModel(); auto viewModel = ref new DateCalculatorViewModel();
viewModel->IsDateDiffMode = true; viewModel->IsDateDiffMode = true;
@ -623,12 +916,12 @@ namespace DateCalculationUnitTests
VERIFY_IS_TRUE(viewModel->IsDiffInDays); VERIFY_IS_TRUE(viewModel->IsDiffInDays);
VERIFY_ARE_EQUAL(StringReference(L"1 day"), viewModel->StrDateDiffResult); VERIFY_ARE_EQUAL(StringReference(L"1 day"), viewModel->StrDateDiffResult);
VERIFY_IS_NULL(viewModel->StrDateDiffResultInDays); VERIFY_IS_NULL(viewModel->StrDateDiffResultInDays);
} }
// Tests that the automation name for the resulting date in Add Mode // Tests that the automation name for the resulting date in Add Mode
// contains the DayOfWeek, Day, Month, and Year // contains the DayOfWeek, Day, Month, and Year
TEST_METHOD(DateCalcViewModelAddSubtractResultAutomationNameTest) TEST_METHOD(DateCalcViewModelAddSubtractResultAutomationNameTest)
{ {
auto viewModel = ref new DateCalculatorViewModel(); auto viewModel = ref new DateCalculatorViewModel();
auto cal = ref new Calendar(); auto cal = ref new Calendar();
@ -649,24 +942,19 @@ namespace DateCalculationUnitTests
wstring actualValue = viewModel->StrDateResultAutomationName->Data(); wstring actualValue = viewModel->StrDateResultAutomationName->Data();
// Verify each component is present in the result // Verify each component is present in the result
wstring components[] = { wstring components[] = { L"dayofweek.full", L"month.full", L"year.full", L"day" };
L"dayofweek.full",
L"month.full",
L"year.full",
L"day"
};
for (const wstring &component : components) for (const wstring& component : components)
{ {
auto formatter = ref new DateTimeFormatter(ref new String(component.c_str())); auto formatter = ref new DateTimeFormatter(ref new String(component.c_str()));
wstring expectedValue = formatter->Format(startDate)->Data(); wstring expectedValue = formatter->Format(startDate)->Data();
wstring message = L"Verifying " + component + L" is present in the result"; wstring message = L"Verifying " + component + L" is present in the result";
VERIFY_IS_TRUE(actualValue.find(expectedValue) != wstring::npos, message.c_str()); VERIFY_IS_TRUE(actualValue.find(expectedValue) != wstring::npos, message.c_str());
} }
} }
TEST_METHOD(JaEraTransitionAddition) TEST_METHOD(JaEraTransitionAddition)
{ {
auto viewModel = make_unique<DateCalculationEngine>(CalendarIdentifiers::Japanese); auto viewModel = make_unique<DateCalculationEngine>(CalendarIdentifiers::Japanese);
auto cal = ref new Calendar(); auto cal = ref new Calendar();
@ -689,10 +977,10 @@ namespace DateCalculationUnitTests
viewModel->AddDuration(startTime, duration, &actualResult); viewModel->AddDuration(startTime, duration, &actualResult);
VERIFY_ARE_EQUAL(expectedResult.UniversalTime, actualResult.UniversalTime); VERIFY_ARE_EQUAL(expectedResult.UniversalTime, actualResult.UniversalTime);
} }
TEST_METHOD(JaEraTransitionSubtraction) TEST_METHOD(JaEraTransitionSubtraction)
{ {
auto viewModel = make_unique<DateCalculationEngine>(CalendarIdentifiers::Japanese); auto viewModel = make_unique<DateCalculationEngine>(CalendarIdentifiers::Japanese);
auto cal = ref new Calendar(); auto cal = ref new Calendar();
@ -715,6 +1003,7 @@ namespace DateCalculationUnitTests
viewModel->SubtractDuration(startTime, duration, &actualResult); viewModel->SubtractDuration(startTime, duration, &actualResult);
VERIFY_ARE_EQUAL(expectedResult.UniversalTime, actualResult.UniversalTime); VERIFY_ARE_EQUAL(expectedResult.UniversalTime, actualResult.UniversalTime);
} }
}; }
;
} }

View file

@ -632,9 +632,9 @@ TEST_METHOD(MultipleDateCalculatorTest)
//// Diff in viewModels[0] //// Diff in viewModels[0]
// SYSTEMTIME date1, date2, resultDate; // SYSTEMTIME date1, date2, resultDate;
///* 01-10-2015 */ date1.wDay = 1; date1.wMonth = 10; date1.wYear = 2015; date1.wDayOfWeek = 4; date1.wHour = 0; date1.wMinute = 0; date1.wSecond = 0; ///* 01-10-2015 */ date1.wDay = 1; date1.wMonth = 10; date1.wYear = 2015; date1.wDayOfWeek = 4; date1.wHour = 0; date1.wMinute = 0; date1.wSecond = 0;
///date1.wMilliseconds = 0; /// date1.wMilliseconds = 0;
///* 15-02-2016 */ date2.wDay = 15; date2.wMonth = 2; date2.wYear = 2016; date2.wDayOfWeek = 1; date2.wHour = 0; date2.wMinute = 0; date2.wSecond = 0; ///* 15-02-2016 */ date2.wDay = 15; date2.wMonth = 2; date2.wYear = 2016; date2.wDayOfWeek = 1; date2.wHour = 0; date2.wMinute = 0; date2.wSecond = 0;
///date2.wMilliseconds = 0; /// date2.wMilliseconds = 0;
// viewModels[0]->FromDate = DateUtils::SystemTimeToDateTime(date1); // viewModels[0]->FromDate = DateUtils::SystemTimeToDateTime(date1);
// viewModels[0]->ToDate = DateUtils::SystemTimeToDateTime(date2); // viewModels[0]->ToDate = DateUtils::SystemTimeToDateTime(date2);