package org.crsh.cli.completers; import junit.framework.AssertionFailedError; import junit.framework.TestCase; import org.crsh.cli.spi.Completion; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Collection; /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ public class PathCompleterTestCase extends TestCase { final String sep = File.separator; static class NodeCompleter extends AbstractPathCompleter<File> { /** . */ private File current; /** . */ private final File root; NodeCompleter(File root) { this.root = root; this.current = root; } public File getCurrent() { return current; } public void setCurrent(File current) throws IOException { if (current == null) { throw new AssertionFailedError("Current file should be null"); } if (!current.getCanonicalPath().startsWith(root.getCanonicalPath())) { throw new AssertionFailedError("Current file should be a descendant of the root file"); } this.current = current; } @Override protected String getCurrentPath() throws Exception { if (current.equals(root)) { return File.separator; } else { return current.getCanonicalPath().substring(root.getCanonicalPath().length()); } } @Override protected File getPath(String path) throws Exception { if (!path.startsWith(File.separator)) { throw new AssertionFailedError("Path " + path + " does not start with separator"); } return new File(root, path.substring(1)); } @Override protected boolean exists(File path) throws Exception { return path.exists(); } @Override protected boolean isDirectory(File path) throws Exception { return path.isDirectory(); } @Override protected boolean isFile(File path) throws Exception { return path.isFile(); } @Override protected Collection<File> getChilren(File path) throws Exception { File[] files = path.listFiles(); return files != null ? Arrays.asList(files) : null; } @Override protected String getName(File path) throws Exception { return path.getName(); } } private File root; private NodeCompleter completer; @Override public void setUp() throws Exception { File tmp = File.createTempFile("crash", ""); assertTrue(tmp.delete()); assertTrue(tmp.mkdirs()); // this.root = tmp; this.completer = new NodeCompleter(root); } public void testAbsoluteFile() throws Exception { File foo = new File(root, "foo"); assertTrue(foo.createNewFile()); // assertCompletion(sep, Completion.create("foo", true)); assertCompletion(sep + "f", Completion.create("f", "oo", true)); assertCompletion(sep + "foo", Completion.create("", true)); // assertTrue(foo.delete()); assertTrue(foo.mkdirs()); File bar = new File(foo, "bar"); assertTrue(bar.createNewFile()); // assertCompletion(sep, Completion.create("foo" + sep, false)); assertCompletion(sep+"f", Completion.create("f", "oo" + sep, false)); assertCompletion(sep + "foo", Completion.create(sep, false)); assertCompletion(sep + "foo" + sep, Completion.create("bar", true)); assertCompletion(sep + "foo" + sep + "b", Completion.create("b", "ar", true)); assertCompletion(sep + "foo" + sep + "bar", Completion.create("", true)); } public void testAbsoluteDir() throws Exception { assertCompletion(sep, Completion.create()); assertCompletion(sep + "f", Completion.create("f")); // File foo = new File(root, "foo"); assertTrue(foo.mkdir()); assertCompletion(sep, Completion.create("foo" + sep, false)); assertCompletion(sep + "f", Completion.create("f", "oo" + sep, false)); assertCompletion(sep + "foo", Completion.create(sep, false)); assertCompletion(sep + "foo" + sep, Completion.create()); // File bar = new File(foo, "bar"); assertTrue(bar.mkdir()); assertCompletion(sep, Completion.create("foo" + sep, false)); assertCompletion(sep + "f", Completion.create("f", "oo" + sep, false)); assertCompletion(sep + "foo", Completion.create(sep, false)); assertCompletion(sep + "foo" + sep, Completion.create("bar" + sep, false)); assertCompletion(sep + "foo" + sep +"b", Completion.create("b", "ar" + sep, false)); assertCompletion(sep + "foo" + sep +"bar", Completion.create(sep, false)); assertCompletion(sep + "foo" + sep +"bar" + sep, Completion.create()); // File juu = new File(bar, "juu"); assertTrue(juu.mkdir()); assertCompletion(sep, Completion.create("foo" + sep, false)); assertCompletion(sep + "f", Completion.create("f", "oo" + sep, false)); assertCompletion(sep + "foo", Completion.create(sep, false)); assertCompletion(sep + "foo" + sep, Completion.create("bar" + sep, false)); assertCompletion(sep + "foo" + sep +"b", Completion.create("b", "ar" + sep, false)); assertCompletion(sep + "foo" + sep +"bar", Completion.create(sep, false)); assertCompletion(sep + "foo" + sep +"bar" + sep, Completion.create("juu" + sep, false)); assertCompletion(sep + "foo" + sep +"bar" + sep +"j", Completion.create("j", "uu" + sep, false)); assertCompletion(sep + "foo" + sep +"bar" + sep +"juu", Completion.create(sep, false)); assertCompletion(sep + "foo" + sep +"bar" + sep +"juu" + sep, Completion.create()); } public void testRootRelativeDir() throws Exception { assertCompletion("", Completion.create()); assertCompletion("f", Completion.create("f")); // File foo = new File(root, "foo"); assertTrue(foo.mkdir()); assertCompletion("", Completion.create("foo" + sep, false)); assertCompletion("f", Completion.create("f", "oo" + sep, false)); assertCompletion("foo", Completion.create(sep, false)); assertCompletion("foo" + sep, Completion.create()); // File bar = new File(foo, "bar"); assertTrue(bar.mkdir()); assertCompletion("", Completion.create("foo" + sep, false)); assertCompletion("f", Completion.create("f", "oo" + sep, false)); assertCompletion("foo", Completion.create(sep, false)); assertCompletion("foo" + sep, Completion.create("bar" + sep, false)); assertCompletion("foo" + sep +"b", Completion.create("b", "ar" + sep, false)); assertCompletion("foo" + sep +"bar", Completion.create(sep, false)); assertCompletion("foo" + sep +"bar" + sep, Completion.create()); } public void testSubRelativeDir() throws Exception { File sub = new File(root, "sub"); assertTrue(sub.mkdir()); completer.setCurrent(sub); // assertCompletion("", Completion.create()); assertCompletion("f", Completion.create("f")); // File foo = new File(sub, "foo"); assertTrue(foo.mkdir()); assertCompletion("", Completion.create("foo" + sep, false)); assertCompletion("f", Completion.create("f", "oo" + sep, false)); assertCompletion("foo", Completion.create(sep, false)); assertCompletion("foo" + sep, Completion.create()); // File bar = new File(foo, "bar"); assertTrue(bar.mkdir()); assertCompletion("", Completion.create("foo" + sep, false)); assertCompletion("f", Completion.create("f", "oo" + sep, false)); assertCompletion("foo", Completion.create(sep, false)); assertCompletion("foo" + sep, Completion.create("bar" + sep, false)); assertCompletion("foo" + sep +"b", Completion.create("b", "ar" + sep, false)); assertCompletion("foo" + sep +"bar", Completion.create(sep, false)); assertCompletion("foo" + sep +"bar" + sep, Completion.create()); } private void assertCompletion(String path, Completion expected) throws Exception { Completion completions = completer.complete (null, path); assertEquals(expected, completions); } }