#include <sc_unittest.h>
#include <sc_env.h>


static void UT_SC_getenv(void);
static void UT_SC_getenv_invalidKey(void);
static void UT_SC_getenv_emptyKey(void);
static void UT_SC_setenv(void);
static void UT_SC_setenv_invalidKey(void);
static void UT_SC_setenv_overwrite(void);
static void UT_SC_setenv_noOverwrite(void);
static void UT_SC_setenv_error(void);
static void UT_SC_unsetenv(void);
static void UT_SC_unsetenv_emptyKey(void);

void UT_regist_sc_env(void)
{
	SC_Unittest_add("SC_getenv"              , UT_SC_getenv);
	SC_Unittest_add("SC_getenv_invalidKey"   , UT_SC_getenv_invalidKey);
	SC_Unittest_add("SC_getenv_emptyKey"     , UT_SC_getenv_emptyKey);
	SC_Unittest_add("SC_setenv"              , UT_SC_setenv);
	SC_Unittest_add("SC_setenv_invalidKey"   , UT_SC_setenv_invalidKey);
	SC_Unittest_add("SC_setenv_overwirte"    , UT_SC_setenv_overwrite);
	SC_Unittest_add("SC_setenv_noOverwrite"  , UT_SC_setenv_noOverwrite);
	SC_Unittest_add("SC_setenv_error"        , UT_SC_setenv_error);
	SC_Unittest_add("SC_unsetenv"            , UT_SC_unsetenv);
	SC_Unittest_add("SC_unsetenv_emptyKey"   , UT_SC_unsetenv_emptyKey);
}

static
void UT_SC_getenv(void)
{
	bool ret;
	const char* result;
	ret    = SC_setenv("UNITTEST", "UNITTEST-01", true);
	result = SC_getenv("UNITTEST");
	SC_assert(ret);
	SC_assertString("UNITTEST-01", result);
}

static
void UT_SC_getenv_invalidKey(void)
{
	const char* result;
	SC_setenv("UNITTEST", "UNITTEST-01", true);
	result = SC_getenv("UNITTEST=ABC");
	SC_assertString("UNITTEST-01", result);
}

static
void UT_SC_getenv_emptyKey(void)
{
	const char* result;
	result = SC_getenv("");
	SC_assertString(NULL, result);
}

static
void UT_SC_setenv(void)
{
	bool ret;
	const char* result;
	ret    = SC_setenv("UNITTEST", "UNITTEST-01", true);
	result = SC_getenv("UNITTEST");
	SC_assert(ret);
	SC_assertString("UNITTEST-01", result);
}

static
void UT_SC_setenv_invalidKey(void)
{
	bool ret;
	ret = SC_setenv("UNITTEST=ABC", "UNITTEST-01", true);
	SC_assert(!ret);
}

static
void UT_SC_setenv_overwrite(void)
{
	bool ret;
	const char* result;
	SC_setenv("UNITTEST", "UNITTEST-01", true);
	ret    = SC_setenv("UNITTEST", "UNITTEST-02", true);
	result = SC_getenv("UNITTEST");
	SC_assert(ret);
	SC_assertString("UNITTEST-02", result);
}

static
void UT_SC_setenv_noOverwrite(void)
{
	bool ret;
	const char* result;
	SC_setenv("UNITTEST", "UNITTEST-01", true);
	ret    = SC_setenv("UNITTEST", "UNITTEST-02", false);
	result = SC_getenv("UNITTEST");
	SC_assert(ret);
	SC_assertString("UNITTEST-01", result);
}

static
void UT_SC_setenv_error(void)
{
	bool ret;
	ret = SC_setenv("", "UNITTEST-01", true);
	SC_assert(!ret);
}

static
void UT_SC_unsetenv(void)
{
	bool ret;
	SC_setenv("UNITTEST", "UNITTEST-01", true);
	ret = SC_unsetenv("UNITTEST");
	SC_assert(ret);
}

static
void UT_SC_unsetenv_emptyKey(void)
{
	bool ret;
	ret = SC_unsetenv("");
	SC_assert(!ret);
}

