testtools/micromock/unittests/micromocktest/cmockvalueunittests.cpp (140 lines of code) (raw):
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
#include "stdafx.h"
using namespace std;
static MICROMOCK_MUTEX_HANDLE g_testByTest;
static MICROMOCK_GLOBAL_SEMAPHORE_HANDLE g_dllByDll;
BEGIN_TEST_SUITE(CMockValue_tests)
typedef int arrayOf3Int[3];
typedef int arrayOf4Int[4];
TEST_SUITE_INITIALIZE(TestClassInitialize)
{
g_testByTest = MicroMockCreateMutex();
ASSERT_IS_NOT_NULL(g_testByTest);
}
TEST_SUITE_CLEANUP(TestClassCleanup)
{
MicroMockDestroyMutex(g_testByTest);
}
TEST_FUNCTION_INITIALIZE(TestMethodInitialize)
{
if (!MicroMockAcquireMutex(g_testByTest))
{
ASSERT_FAIL("our mutex is ABANDONED. Failure in test framework");
}
}
TEST_FUNCTION_CLEANUP(TestMethodCleanup)
{
if (!MicroMockReleaseMutex(g_testByTest))
{
ASSERT_FAIL("failure in test framework at ReleaseMutex");
}
}
/*test a normal array*/
TEST_FUNCTION(CMockValue_TN_toString_1)
{
arrayOf3Int a = { 1, 2, 3 };
CMockValue<arrayOf3Int> b(a);
ASSERT_ARE_EQUAL(char_ptr, "{1,2,3}", b.ToString().c_str());
}
/*test a NULL*/
TEST_FUNCTION(CMockValue_TN_toString_2)
{
CMockValue<arrayOf3Int> b(NULL);
ASSERT_ARE_EQUAL(char_ptr, "NULL", b.ToString().c_str());
}
/*test EqualTo from the same source*/
TEST_FUNCTION(CMockValue_TN_EqualTo_1)
{
arrayOf3Int source = { 1, 2, 3 };
CMockValue<arrayOf3Int> a(source);
CMockValue<arrayOf3Int> b(source);
ASSERT_ARE_EQUAL(int, true, b.EqualTo(&a));
ASSERT_ARE_EQUAL(int, true, a.EqualTo(&b));
}
/*test EqualTo from different source*/
TEST_FUNCTION(CMockValue_TN_EqualTo_2)
{
arrayOf3Int source1 = { 1, 2, 3 };
arrayOf3Int source2 = { 1, 2, 3 };
CMockValue<arrayOf3Int> a(source1);
CMockValue<arrayOf3Int> b(source2);
ASSERT_ARE_EQUAL(int, true, b.EqualTo(&a));
ASSERT_ARE_EQUAL(int, true, a.EqualTo(&b));
}
/*test EqualTo from different source sizes*/
TEST_FUNCTION(CMockValue_TN_EqualTo_3)
{
arrayOf4Int source1 = { 1, 2, 3, 4};
arrayOf3Int source2 = { 1, 2, 3 };
CMockValue<arrayOf4Int> a3(source1);
CMockValue<arrayOf3Int> b4(source2);
ASSERT_ARE_EQUAL(int, false, b4.EqualTo(&a3));
ASSERT_ARE_EQUAL(int, false, a3.EqualTo(&b4));
}
/*test EqualTo from NULL and NULL*/
TEST_FUNCTION(CMockValue_TN_EqualTo_4)
{
CMockValue<arrayOf3Int> a(NULL);
CMockValue<arrayOf3Int> b(NULL);
ASSERT_ARE_EQUAL(int, true, b.EqualTo(&a));
ASSERT_ARE_EQUAL(int, true, a.EqualTo(&b));
}
/*test EqualTo from NULL and non-NULL*/
TEST_FUNCTION(CMockValue_TN_EqualTo_5)
{
arrayOf3Int source = { 1, 2, 3 };
CMockValue<arrayOf3Int> a(source);
CMockValue<arrayOf3Int> b(NULL);
ASSERT_ARE_EQUAL(int, false, b.EqualTo(&a));
ASSERT_ARE_EQUAL(int, false, a.EqualTo(&b));
}
TEST_FUNCTION(CMockValue_TN_setValue_from_NULL_to_NULL)
{
CMockValue<arrayOf3Int> a(NULL);
a.SetValue(NULL);
ASSERT_ARE_EQUAL(char_ptr, "NULL", a.ToString().c_str());
}
TEST_FUNCTION(CMockValue_TN_setValue_from_NULL_to_array)
{
arrayOf3Int source1 = { 1, 2, 3 };
CMockValue<arrayOf3Int> a(NULL);
a.SetValue(source1);
ASSERT_ARE_EQUAL(char_ptr, "{1,2,3}", a.ToString().c_str());
}
TEST_FUNCTION(CMockValue_TN_setValue_from_array_to_NULL)
{
arrayOf3Int source1 = { 1, 2, 3 };
CMockValue<arrayOf3Int> a(source1);
a.SetValue(NULL);
ASSERT_ARE_EQUAL(char_ptr, "NULL", a.ToString().c_str());
}
TEST_FUNCTION(CMockValue_TN_setValue_from_array_to_array)
{
arrayOf3Int source1 = { 1, 2, 3 };
arrayOf3Int source2 = { 4, 5, 6 };
CMockValue<arrayOf3Int> a(source1);
a.SetValue(source2);
ASSERT_ARE_EQUAL(char_ptr, "{4,5,6}", a.ToString().c_str());
}
TEST_FUNCTION(CMockValue_TN_getValue_from_NULL_returns_NULL)
{
CMockValue<arrayOf3Int> a(NULL);
ASSERT_ARE_EQUAL(int, 1, ((void*)NULL==(void*)a.GetValue())?1:0);
}
TEST_FUNCTION(CMockValue_TN_getValue_from_something_returns_equal_array)
{
arrayOf3Int source1 = { 1, 2, 3 };
CMockValue<arrayOf3Int> a(source1);
const int* v = a.GetValue();
for (size_t i = 0; i < 3; i++)
{
ASSERT_ARE_EQUAL(int, v[i], source1[i]);
}
}
TEST_FUNCTION(CMockValue_TN_setValue_from_array_to_array_does_not_destroy_original_array)
{
arrayOf3Int source1 = { 1, 2, 3 };
arrayOf3Int source2 = { 4, 5, 6 };
CMockValue<arrayOf3Int> a(source1);
a.SetValue(source2);
ASSERT_ARE_EQUAL(char_ptr, "{4,5,6}", a.ToString().c_str());
ASSERT_ARE_EQUAL(int, 1, source1[0]);
ASSERT_ARE_EQUAL(int, 2, source1[1]);
ASSERT_ARE_EQUAL(int, 3, source1[2]);
ASSERT_ARE_EQUAL(int, 4, source2[0]);
ASSERT_ARE_EQUAL(int, 5, source2[1]);
ASSERT_ARE_EQUAL(int, 6, source2[2]);
}
END_TEST_SUITE(CMockValue_tests)