package org.esa.snap.opendap.utils;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.*;
/**
* @author Tonio Fincke
*/
public class PatternProviderTest {
@Test
public void testRecognizePatterns_non_valid() throws Exception {
assertEquals(0, PatternProvider.recommendPatterns("no_valid_pattern").size());
}
@Test
public void testRecommendPatterns_firstPattern() throws Exception {
List<String[]> patternCombinations = PatternProvider.recommendPatterns("sth__20100101:200101.nc");
assertTrue(patternCombinations.size() >= 3);
containAssertEquals(patternCombinations, new String[]{"yyyyMMdd:hhmmss", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMMdd", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMM", "*${startDate}*"});
}
@Test
public void testRecommendPatterns_secondPattern_twoDates() throws Exception {
List<String[]> patternCombinations = PatternProvider.recommendPatterns("sth__20100101_192345_20110101_192345.nc");
assertTrue(patternCombinations.size() >= 6);
containAssertEquals(patternCombinations, new String[]{"yyyyMMdd_hhmmss", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMMdd_hhmmss", "*${startDate}*${endDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMMdd", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMMdd", "*${startDate}*${endDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMM", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMM", "*${startDate}*${endDate}*"});
}
@Test
public void testRecommendPatterns_variousPossiblePatterns() throws Exception {
List<String[]> patternCombinations = PatternProvider.recommendPatterns("sth__20100101192345_99999999.nc");
assertTrue(patternCombinations.size() >= 7);
containAssertEquals(patternCombinations, new String[]{"yyyyMMdd_hhmmss", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMMddhhmmss", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMMddhh", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMMdd", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMMdd", "*${startDate}*${endDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMM", "*${startDate}*"});
containAssertEquals(patternCombinations, new String[]{"yyyyMM", "*${startDate}*${endDate}*"});
}
private static void containAssertEquals(List<String[]> containingList, String[] expectedStrings) {
boolean expectedIsContained = false;
for (String[] actualStrings : containingList) {
if (actualStrings[0].equals(expectedStrings[0]) &&
actualStrings[1].equals(expectedStrings[1]) &&
actualStrings.length == expectedStrings.length &&
actualStrings.length == 2) {
expectedIsContained = true;
break;
}
}
assertEquals("Expected String[] " + expectedStrings.toString() + " could not be found in list", true, expectedIsContained);
}
}