package org.drools.compiler.builder.impl;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
import static org.junit.Assert.assertThat;
public class KnowledgeBuilderImplTest {
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void testCreateDumpDrlGeneratedFileRemovingInvalidCharacters() throws Exception {
final File dumpDir = temporaryFolder.getRoot();
assertThat(KnowledgeBuilderImpl.createDumpDrlFile(dumpDir, "xxx", ".drl"), fileEndsWith(File.separator + "xxx.drl"));
assertThat(KnowledgeBuilderImpl.createDumpDrlFile(dumpDir, "x?x?", ".drl"), fileEndsWith(File.separator + "x_x_.drl"));
assertThat(KnowledgeBuilderImpl.createDumpDrlFile(dumpDir, "x/x/", ".drl"), fileEndsWith(File.separator + "x_x_.drl"));
assertThat(KnowledgeBuilderImpl.createDumpDrlFile(dumpDir, "x\\x\\", ".drl"), fileEndsWith(File.separator + "x_x_.drl"));
assertThat(KnowledgeBuilderImpl.createDumpDrlFile(dumpDir, "x*x*", ".drl"), fileEndsWith(File.separator + "x_x_.drl"));
assertThat(KnowledgeBuilderImpl.createDumpDrlFile(dumpDir, "aa.AA01-_", ".drl"), fileEndsWith(File.separator + "aa.AA01-_.drl"));
}
private static FileEndsWithMatcher fileEndsWith(String endsWithString) {
return new FileEndsWithMatcher(endsWithString);
}
private static class FileEndsWithMatcher extends BaseMatcher<File> {
private final String endsWithString;
private FileEndsWithMatcher(String endsWithString) {
this.endsWithString = endsWithString;
}
@Override
public boolean matches(Object item) {
if (item instanceof File) {
try {
return ((File) item).getCanonicalPath().endsWith(endsWithString);
} catch (IOException e) {
return false;
}
} else {
return false;
}
}
@Override
public void describeTo(Description description) {
description.appendValue(endsWithString);
}
}
}