package eu.dnetlib.contract.cp.eval;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import org.junit.Test;

import eu.dnetlib.contract.cp.ICheckPoint;
import eu.dnetlib.contract.cp.ResultCheckPoint;
import eu.dnetlib.contract.cp.eval.module.NotNullEvaluatorModule;
import eu.dnetlib.contract.event.ExceptionContractEvent;
import eu.dnetlib.contract.event.IContractEvent;
import eu.dnetlib.contract.event.ResultContractEvent;
import eu.dnetlib.contract.node.EvaluationResult;
import eu.dnetlib.contract.node.EvaluationResult.Status;


/**
 * {@link NotNullEvaluatorModule} test class.
 * @author mhorst
 *
 */
public class NotNullEvaluatorModuleTest {
	
	NotNullEvaluatorModule module = new NotNullEvaluatorModule();
	ICheckPoint<IContractEvent> checkPoint = new ResultCheckPoint();
	@Test
	public void testEvaluate() throws Exception {
		EvaluationResult result = module.evaluate(null, new ResultContractEvent(null, null), checkPoint);
		assertNotNull(result);
		assertEquals(Status.FAIL,result.getStatus());
		result = module.evaluate(new String(), new ResultContractEvent(null, new String()), checkPoint);
		assertNotNull(result);
		assertEquals(Status.OK,result.getStatus());
//		unsupported ContractEvent implementation
//		currently all contract events are supported
		result = module.evaluate(new String(), new ExceptionContractEvent(null, null), checkPoint);
		assertNotNull(result);
		assertEquals(Status.OK,result.getStatus());
	}

}
