// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataquality.matching.date.pattern;
import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.talend.commons.utils.resource.ResourceUtil;
import org.talend.dataquality.matching.i18n.Messages;
/**
* Test class of DatePatternRetriever.
*/
public class DatePatternRetrieverTest {
private static Logger logger = Logger.getLogger(DatePatternRetrieverTest.class);
private String PATTERNS_FILENAME = "PatternsNameAndRegularExpressions.txt"; //$NON-NLS-1$
/**
* Test method for
* {@link org.talend.dataquality.matching.date.pattern.DatePatternRetriever#initModel2Regex(java.lang.String[][])}.
*
* @throws URISyntaxException
* @throws IOException
*/
@Test
public void testInitModel2Regex() throws IOException, URISyntaxException {
File file = ResourceUtil.getFileFromResource(getClass(), "/PatternsNameAndRegularExpressions.txt"); //$NON-NLS-1$
DatePatternRetriever dtr = new DatePatternRetriever();
dtr.initModel2Regex(file);
assertNotNull(dtr.getModelMatchers());
assertEquals("Found " + dtr.getModelMatchers().size() + " modelMatchers. Was waiting for 32 patterns in file", true, dtr //$NON-NLS-1$//$NON-NLS-2$
.getModelMatchers().size() == 32);
}
/**
* Test method for
* {@link org.talend.dataquality.matching.date.pattern.DatePatternRetriever#handle(java.lang.String)}.
*
* @throws URISyntaxException
* @throws IOException
*/
@Test
public void testHandle() throws IOException, URISyntaxException {
// string to match
String expr = "21 11 1999"; //$NON-NLS-1$
DatePatternRetriever dtr = new DatePatternRetriever();
dtr.handle(expr);
assertEquals(dtr.getModelMatchers().size(), 0);
ModelMatcher mm = new ModelMatcher("11 november 1999", "^[0-3][0-9](-|/| )([0-0][1-9]|10|11|12)(-|/| )(19|20)[0-9]{2}$"); //$NON-NLS-1$//$NON-NLS-2$
assertEquals(0, mm.getScore());
dtr.getModelMatchers().add(mm);
assertEquals(dtr.getModelMatchers().size(), 1);
dtr.handle(expr);
assertEquals(1, mm.getScore());
InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(PATTERNS_FILENAME);
dtr.initModel2Regex(inStream);
assertEquals(dtr.findMatchers("1961-08-26 00:00:00").size(), 1); //$NON-NLS-1$
assertEquals(dtr.findMatchers("1961-08-26 00:00:00.0").size(), 1); //$NON-NLS-1$
assertEquals(dtr.findMatchers("1961-08-26 00:00:00:000").size(), 1); //$NON-NLS-1$
assertEquals(dtr.findMatchers("1961-08-26 00:00:00.000").size(), 1); //$NON-NLS-1$
assertEquals(dtr.findMatchers("1961-08-26 00:00:00.00").size(), 0); //$NON-NLS-1$
assertEquals(dtr.findMatchers("1961-08-26 00:00:00 0").size(), 0); //$NON-NLS-1$
// ADD sizhaoliu TDQ-8139 replace the main class by junits for org.talend.dataquality.matching
DatePatternRetriever patt = new DatePatternRetriever();
// File file = ResourceUtil.getFileFromResource(getClass(), "/PatternsNameAndRegularExpressions.txt"); //$NON-NLS-1$
// File filedates = ResourceUtil.getFileFromResource(getClass(), "/data/dates.txt"); //$NON-NLS-1$
InputStream dateStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("data/dates.txt"); //$NON-NLS-1$
patt.initModel2Regex(inStream);
parseFile(dateStream, patt);
final int[] EXPECTED_SCORE = { 1, 4, 3, 1, 2, 1, 1, 40, 1 };
for (int i = 0, j = 0; i < patt.getModelMatchers().size(); i++) {
ModelMatcher patternMatcher = patt.getModelMatchers().get(i);
if (patternMatcher.getScore() > 0) {
assertEquals(EXPECTED_SCORE[j], patternMatcher.getScore());
j++;
}
}
if (logger.isInfoEnabled()) {
patt.showResults();
}
// ~ TDQ-8139
}
private void parseFile(InputStream dateStream, DatePatternRetriever patt) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(dateStream));
String line;
try {
while ((line = br.readLine()) != null) {
patt.handle(line.replace("\"", ""));//$NON-NLS-1$ //$NON-NLS-2$
}
} finally {
br.close();
}
} catch (FileNotFoundException e) {
logger.error(Messages.getString("DatePatternRetriever.warn1"));//$NON-NLS-1$
} catch (IOException e) {
logger.error(Messages.getString("DatePatternRetriever.warn2"));//$NON-NLS-1$
}
}
}