#include "stdafx.h"
#include <nlite_common\define.h>
#include "define.h"
#include "cookieGetResult.h"
#include "cookie.h"
#include "chromecookiegetter.h"
#include "firefoxcookiegetter.h"
#include "iecomponentcookiegetter.h"
#include "safaricookiegetter.h"
#include "operacookiegetter.h"
#include "iecookiegetter.h"
#include "cookieGetter.h"
#include "cookiemaster.h"
#include "unit_test.h"







#include "namespace_start.h"

class TestGetter:public CCookieGetterT<TestGetter>{};


static Void CookieManageTest(browsertype::BrowserType bt){

	CCookie cookie;
	NString domein = _T("nicovideo.jp");
	NString name = _T("user_session");
	MString cookieval;
	NString browsertypestr = CCookieMaster::BrowserTypeToString(bt);
	MString browsertypestrm;
	ToSJIS(browsertypestrm,browsertypestr);
	auto &cookiemaster = CCookieMaster::GetInstance();
	Bool result = false;
	result = cookiemaster.GetCookie(bt,domein,name,cookie);
	ToSJIS(cookieval,cookie.GetCookieValue());

	std::cout <<"browsertype:" << browsertypestrm << "result:" << result << "cookie:" <<  cookieval << std::endl;
		
	BOOST_CHECK_MESSAGE(result,"cookieが取れませんでした");
	
}

Void UnitTest(){

	CCookieGetResult cookieResult(browsertype::UNDEFINED);
	BOOST_CHECK_MESSAGE(cookieResult.findFlag== false,"cookieResult::findFlag 初期化エラーです");
	BOOST_CHECK_MESSAGE(cookieResult.browserType == browsertype::UNDEFINED,"cookieResult::browserType 初期化エラーです");
	BOOST_CHECK_MESSAGE(cookieResult.resultCode == resultcode::UNDEFINED,"cookieResult::resultCode 初期化エラーです");

	cookieResult.SetFindFlag(true);
	cookieResult.SetBrowserType(browsertype::IE);
	cookieResult.SetResultCode(resultcode::OK);
	BOOST_CHECK_MESSAGE(cookieResult.findFlag == true,"cookieResult::SetFindFlag セットエラーです");
	BOOST_CHECK_MESSAGE(cookieResult.browserType == browsertype::IE,"ブラウザタイプセットエラーです");
	BOOST_CHECK_MESSAGE(cookieResult.resultCode == resultcode::OK,"結果コードセットエラーです");


	BOOST_CHECK_MESSAGE(cookieResult.IsFound() == true,"cookieResult::SetFindFlag ゲットエラーです");
	BOOST_CHECK_MESSAGE(cookieResult.GetBrowserType() == browsertype::IE,"ブラウザタイプゲットエラーです");
	BOOST_CHECK_MESSAGE(cookieResult.GetResultCode() == resultcode::OK,"結果コードゲットエラーです");
	
	U16String cookiedomein = _T("domein");
	U16String cookiename = _T("name");
	U16String cookieValue = _T("cookieValue");
	CCookie cookie;
	cookie.domein = cookiedomein;
	cookie.name = cookiename;
	cookie.cookieValue = cookieValue;

	BOOST_CHECK_MESSAGE(cookie.domein == cookiedomein,"クッキークラスのドメイン取得エラーです");
	BOOST_CHECK_MESSAGE(cookie.name == cookiename,"クッキークラスの名前取得エラーです");
	BOOST_CHECK_MESSAGE(cookie.cookieValue == cookieValue,"クッキークラスの値取得エラーです");


	TestGetter testGetter;

	Bool exceptionflag = false;
	




	{
		CCookie cookie1;
		BOOST_CHECK_MESSAGE(!CChromeCookieGetter::CreateCookiePath().empty(),"クロームのクッキーパス取得に失敗しました");
		CChromeCookieGetter chromeCookieGetter;
		Bool result;
		exceptionflag = false;
		NString domein = _T("nicovideo.jp");
		NString name = _T("user_session");
		try{

			result = chromeCookieGetter.GetCookie(domein,name,cookie1);

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}
	
		BOOST_CHECK_MESSAGE(exceptionflag == false,"クッキー検索中に例外が発生しました");
		BOOST_CHECK_MESSAGE(result == true,"クッキーが見つかりませんでした");

		exceptionflag = true;
		Bool result2 = false;
		CCookie cookie2;
		try{
			result2 = ForceSearch(chromeCookieGetter.cookieFilePath,domein,name,cookie2,CChromeCookieGetter::Fancta);
		

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}

		BOOST_CHECK_MESSAGE(result2 == true,"クッキーが見つかりませんでした");

		if(result && result2){
			BOOST_CHECK_MESSAGE(cookie1.GetCookieValue() == cookie2.GetCookieValue(),"正規の方法で取得したクッキーと強制検索で取得したクッキーが違います");
		}
	}

	{
		CCookie cookie1;
		
		COperaCookieGetter cookieGetter;
		Bool result;
		exceptionflag = false;
		NString domein = _T("nicovideo.jp");
		NString name = _T("user_session");
		try{

			result = cookieGetter.GetCookie(domein,name,cookie1);

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}
	
		BOOST_CHECK_MESSAGE(exceptionflag == false,"クッキー検索中に例外が発生しました");
		BOOST_CHECK_MESSAGE(result == true,"クッキーが見つかりませんでした");
	}

	{
		CCookie cookie1;
		
		CSafariCookieGetter cookieGetter;
		Bool result;
		exceptionflag = false;
		NString domein = _T("nicovideo.jp");
		NString name = _T("user_session");
		try{

			result = cookieGetter.GetCookie(domein,name,cookie1);

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}
	
		BOOST_CHECK_MESSAGE(exceptionflag == false,"クッキー検索中に例外が発生しました");
		BOOST_CHECK_MESSAGE(result == true,"クッキーが見つかりませんでした");
	}
	
	{
		CCookie cookie1;
		BOOST_CHECK_MESSAGE(!CFireFoxCookieGetter::CreateCookiePath().empty(),"クッキーパス取得に失敗しました");
		CFireFoxCookieGetter firefoxcookiegetter;
		Bool result;
		exceptionflag = false;
		NString domein = _T("nicovideo.jp");
		NString name = _T("user_session");
		try{

			result = firefoxcookiegetter.GetCookie(domein,name,cookie1);

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}
	
		BOOST_CHECK_MESSAGE(exceptionflag == false,"クッキー検索中に例外が発生しました");
		BOOST_CHECK_MESSAGE(result == true,"クッキーが見つかりませんでした");

		exceptionflag = true;
		Bool result2 = false;
		CCookie cookie2;
		try{
			result2 = ForceSearch(firefoxcookiegetter.cookieFilePath,domein,name,cookie2,CFireFoxCookieGetter::Fancta);
		

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}

		BOOST_CHECK_MESSAGE(result2 == true,"クッキーが見つかりませんでした");

		if(result && result2){
			BOOST_CHECK_MESSAGE(cookie1.GetCookieValue() == cookie2.GetCookieValue(),"正規の方法で取得したクッキーと強制検索で取得したクッキーが違います");
		}
	}
	
	{
		CCookie cookie1;
		CIECookieGetter::IEIsSecurityMode();
		
		
		CIECookieGetter cookieGetters;
		Bool result;
		exceptionflag = false;
		NString domein = _T("nicovideo.jp");
		NString name = _T("user_session");
		try{

			result = cookieGetters.GetCookie(domein,name,cookie1);

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}
	
		BOOST_CHECK_MESSAGE(exceptionflag == false,"クッキー検索中に例外が発生しました");
		BOOST_CHECK_MESSAGE(result == true,"クッキーが見つかりませんでした");

		exceptionflag = true;
		Bool result2 = false;
		CCookie cookie2;
		try{

			CCookieGetResult result = cookieGetters.ForceSearchFiles(cookieGetters.securityCookiedir,domein,name,cookie2,CIECookieGetter::Fancta);
		
			result2 = result.IsFound();

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}

		BOOST_CHECK_MESSAGE(result2 == true,"クッキーが見つかりませんでした");

		if(result && result2){
			BOOST_CHECK_MESSAGE(cookie1.GetCookieValue() == cookie2.GetCookieValue(),"正規の方法で取得したクッキーと強制検索で取得したクッキーが違います");
		}
		
	}


	{
		CCookie cookie1;
	
		
		CIEComponentGetter cookieGetters;
		Bool result;
		exceptionflag = false;
		NString domein = _T("nicovideo.jp");
		NString name = _T("user_session");
		try{

			result = cookieGetters.GetCookie(domein,name,cookie1);

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}
	
		BOOST_CHECK_MESSAGE(exceptionflag == false,"クッキー検索中に例外が発生しました");
		BOOST_CHECK_MESSAGE(result == true,"クッキーが見つかりませんでした");

		exceptionflag = true;
		Bool result2 = false;
		CCookie cookie2;
		try{

			CCookieGetResult result = cookieGetters.ForceSearchFiles(cookieGetters.normalDirectry,domein,name,cookie2,CIECookieGetter::Fancta);
		
			result2 = result.IsFound();

		} catch(Exception &e3){
			e3;
			exceptionflag = true;
		}

		BOOST_CHECK_MESSAGE(result2 == true,"クッキーが見つかりませんでした");

		if(result && result2){
			BOOST_CHECK_MESSAGE(cookie1.GetCookieValue() == cookie2.GetCookieValue(),"正規の方法で取得したクッキーと強制検索で取得したクッキーが違います");
		}
		
	}

	CookieManageTest(browsertype::IE);
	CookieManageTest(browsertype::FIREFOX);
	CookieManageTest(browsertype::CHROME);
	CookieManageTest(browsertype::IECOMPONENT);
	CookieManageTest(browsertype::OPERA);
	CookieManageTest(browsertype::SAFARI);
	
	/*
	CCookieGetResult rslt(browsertype::UNDEFINED);

	rslt.SetResultCode(resultcode::ERR_IEAPI_SEC);
	rslt.SetHResult(-1);
	rslt.Report();
	*/
	return;
	
}



#include "namespace_end.h"