package eu.dnetlib.dlms.jdbc;

import static org.mockito.Mockito.mock;

import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.concurrent.ExecutionException;

import org.junit.Before;
import org.junit.Test;

import com.google.common.collect.Lists;

import eu.dnetlib.dlms.jdbc.ast.IntegerLit;
import eu.dnetlib.dlms.jdbc.ast.RunExpr;
import eu.dnetlib.dlms.jdbc.ast.Statement;
import eu.dnetlib.dlms.jdbc.server.DOLExecutor;
import eu.dnetlib.dlms.jdbc.server.IStatementExecutor;
import eu.dnetlib.dlms.jdbc.server.ParamInfo;
import eu.dnetlib.dlms.jdbc.server.visitors.ParametersChecker;

/**
 * @author alessia
 * 
 */
public class TestDOLExecutor {

	private transient DOLExecutor executor;

	@Before
	public void setup() {
		final IStatementExecutor exe = mock(IStatementExecutor.class);
		final ParametersChecker parChecker = mock(ParametersChecker.class);
		this.executor = new DOLExecutor(parChecker, exe);

	}

	/**
	 * Test method for
	 * {@link eu.dnetlib.dlms.jdbc.server.DOLExecutor#executeImpl(eu.dnetlib.dlms.jdbc.ast.Statement, java.util.Map)}.
	 * the getNetResult() method returns null since mock executors are used.
	 * 
	 * @throws ExecutionException
	 * @throws SQLException
	 * @throws InterruptedException
	 */
	@Test
	public void testExecuteImplStatementMapOfStringParamInfo() throws SQLException, ExecutionException, InterruptedException {
		final Statement st1 = new RunExpr(new IntegerLit(1));
		this.executor.execute(Lists.newArrayList(st1), new HashMap<String, ParamInfo>());

		System.out.println("statement executed .......");

		final Collection<DataResult> res = this.executor.getNextResult();

		System.out.println(res);
	}

}
