/** @file
 * @author Edouard DUPIN
 * 
 * @copyright 2016, Edouard DUPIN, all right reserved
 * 
 * @license MPL v2.0 (see license file)
 */

#define NAME "SingleArg"
#include <gtest/gtest.h>
#include <esignal/Signal.hpp>
#include <esignal/Interface.hpp>
#include <ememory/memory.hpp>
#include <test-debug/debug.hpp>

static esignal::Signal<int32_t>* signalll;
static int32_t tmpRetInt32 = 0;

static auto callbackInt = [](int32_t _a){
	tmpRetInt32 = _a;
	TEST_VERBOSE("event a=" << _a);
	if (tmpRetInt32 != 0) {
		TEST_VERBOSE("emit a=" << _a-1);
		signalll->emit(_a - 1);
	}
};


TEST(test_signal_recursive, base) {
	tmpRetInt32 = -1;
	signalll = new esignal::Signal<int32_t>();
	EXPECT_EQ(signalll->size(), 0);
	EXPECT_EQ(signalll->empty(), true);
	esignal::Connection connection1 = signalll->connect(callbackInt);
	EXPECT_EQ(signalll->size(), 1);
	EXPECT_EQ(signalll->empty(), false);
	signalll->emit(22);
	EXPECT_EQ(tmpRetInt32, 0);
}