package eu.dnetlib.data.utility.cleaner;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;

import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnit44Runner;

import com.google.common.collect.Lists;

import eu.dnetlib.data.utility.cleaner.rmi.CleanerException;

@RunWith(MockitoJUnit44Runner.class)
public class ContextualizedCleaningRuleTest {

	/**
	 * Class under test
	 */
	private CleaningUnaryFunction cleaningRule;

	@Mock
	private CleaningRule cleanRule;

	@Before
	public void setUp() throws Exception {
		when(cleanRule.evaluate("a", null)).thenReturn("A");
		when(cleanRule.evaluate("b", null)).thenReturn("B");
		when(cleanRule.evaluate("c", null)).thenReturn("C");
		when(cleanRule.evaluate("d", null)).thenReturn("D");
		cleaningRule = new CleaningUnaryFunction(cleanRule, null);
	}

	@Test
	public void testClean_from_to() throws CleanerException {
		List<String> res = Lists.newArrayList();
		
		for(String text : Lists.newArrayList("a","b","c","d"))
			res.add(cleaningRule.evaluate(text));

		assertNotNull(res);
		assertEquals(4, res.size());
		assertEquals("A", res.get(0));
		assertEquals("B", res.get(1));
		assertEquals("C", res.get(2));
		assertEquals("D", res.get(3));
	}

}
