package co.codewizards.cloudstore.core.ignore;
import static co.codewizards.cloudstore.core.oio.OioFileFactory.*;
import static org.assertj.core.api.Assertions.*;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicLong;
import java.util.regex.Pattern;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import co.codewizards.cloudstore.core.config.Config;
import co.codewizards.cloudstore.core.config.ConfigImpl;
import co.codewizards.cloudstore.core.oio.File;
import co.codewizards.cloudstore.core.repo.local.LocalRepoHelper;
import mockit.Mock;
import mockit.MockUp;
import mockit.integration.junit4.JMockit;
@RunWith(JMockit.class)
public class IgnoreRuleManagerTest {
private Properties configProps;
private File tempDir;
private static final AtomicLong configVersion = new AtomicLong();
@Before
public void before() throws Exception {
System.out.println();
System.out.println(">>> before >>>");
tempDir = createTempDirectory("oink");
File f = createFile(tempDir, "bla.properties");
configVersion.incrementAndGet();
final Config config = new ConfigImpl(null, tempDir, new File[] { f }) {
{
configProps = properties;
}
@Override
public Map<String, List<String>> getKey2GroupsMatching(Pattern regex) {
return super.getKey2GroupsMatching(regex);
}
@Override
public long getVersion() {
return configVersion.get();
}
};
new MockUp<LocalRepoHelper>() {
@Mock
File getLocalRootContainingFile(final File file) {
return file;
}
};
new MockUp<ConfigImpl>() {
@Mock
void readIfNeeded() { }
@Mock
void read() { }
@Mock
void write() { }
@Mock
Config getInstance(final File file, final boolean isDirectory) {
return config;
}
};
}
@After
public void after() throws Exception {
if (tempDir != null)
tempDir.deleteRecursively();
tempDir = null;
System.out.println("<<< after <<<");
System.out.println();
}
@Test
public void shellPattern1() throws Exception {
System.out.println("*** shellPattern1 ***");
configProps.put("ignore[0].namePattern", "*.jpg");
configProps.put("ignore[1].namePattern", "*.bmp");
configProps.put("ignore[1].enabled", "false");
configProps.put("ignore[2].namePattern", "*.png");
configProps.put("ignore[2].caseSensitive", "true");
File directory = createFile(tempDir, "dummy");
IgnoreRuleManager ignoreRuleManager = IgnoreRuleManagerImpl.getInstanceForDirectory(directory);
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "abc.jpg"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "abcxjpg"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "ABC.JPG"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "abc.bmp"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "abc.png"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "ABC.PNG"))).isFalse();
}
@Test
public void shellPattern2() throws Exception {
System.out.println("*** shellPattern2 ***");
configProps.put("ignore[0].namePattern", "[A-Z].jpg");
File directory = createFile(tempDir, "dummy");
IgnoreRuleManager ignoreRuleManager = IgnoreRuleManagerImpl.getInstanceForDirectory(directory);
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "a.jpg"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "ab.jpg"))).isFalse();
}
@Test
public void shellPattern3() throws Exception {
System.out.println("*** shellPattern3 ***");
configProps.put("ignore[0].namePattern", "[a-z]*.jpg");
File directory = createFile(tempDir, "dummy");
IgnoreRuleManager ignoreRuleManager = IgnoreRuleManagerImpl.getInstanceForDirectory(directory);
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "a.jpg"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "ab.jpg"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "a7.jpg"))).isTrue();
}
@Test
public void shellPattern4() throws Exception {
System.out.println("*** shellPattern4 ***");
configProps.put("ignore[0].namePattern", "[acg].jpg");
File directory = createFile(tempDir, "dummy");
IgnoreRuleManager ignoreRuleManager = IgnoreRuleManagerImpl.getInstanceForDirectory(directory);
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "a.jpg"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "ab.jpg"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "b.jpg"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "c.jpg"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "d.jpg"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "e.jpg"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "f.jpg"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "g.jpg"))).isTrue();
}
@Test
public void regex1() throws Exception {
System.out.println("*** regex1 ***");
configProps.put("ignore[0].nameRegex", ".*\\.jpg");
configProps.put("ignore[1].nameRegex", ".*\\.bmp");
configProps.put("ignore[1].enabled", "false");
configProps.put("ignore[2].nameRegex", ".*\\.png");
configProps.put("ignore[2].caseSensitive", "true");
File directory = createFile(tempDir, "dummy");
IgnoreRuleManager ignoreRuleManager = IgnoreRuleManagerImpl.getInstanceForDirectory(directory);
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "abc.jpg"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "abcxjpg"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "ABC.JPG"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "abc.bmp"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "abc.png"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "ABC.PNG"))).isFalse();
}
@Test
public void regex2() throws Exception {
System.out.println("*** regex2 ***");
configProps.put("ignore[0].nameRegex", "[a-z]{2}[0-9]{1}\\.jpg");
File directory = createFile(tempDir, "dummy");
IgnoreRuleManager ignoreRuleManager = IgnoreRuleManagerImpl.getInstanceForDirectory(directory);
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "ab1.jpg"))).isTrue();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "abc1jpg"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "ab11.jpg"))).isFalse();
assertThat(ignoreRuleManager.isIgnored(createFile(directory, "a1.jpg"))).isFalse();
}
}