package org.exist.fluent;
import static org.junit.Assert.*;
import java.util.*;
import org.junit.Test;
public class FolderTest extends DatabaseTestCase {
@Test public void createTop() {
Folder f = db.createFolder("/top");
assertEquals("top", f.name());
assertEquals("/top", f.path());
db.getFolder("/top");
}
@Test public void createNested() {
Folder f = db.createFolder("/top/nested");
assertEquals("nested", f.name());
assertEquals("/top/nested", f.path());
db.getFolder("/top/nested");
}
@Test public void getRoot() {
assertEquals("", db.getFolder("/").name());
}
@Test public void createTopChild() {
Folder f = db.getFolder("/").children().create("child");
assertEquals("child", f.name());
assertEquals("/child", f.path());
}
@Test public void createNestedChild() {
Folder f = db.createFolder("/top").children().create("child");
assertEquals("child", f.name());
assertEquals("/top/child", f.path());
}
@Test(expected = DatabaseException.class)
public void getMissingTop1() {
db.getFolder("/top");
}
@Test(expected = DatabaseException.class)
public void getMissingNested1() {
db.getFolder("/top/nested");
}
@Test public void duplicate1() {
Folder c1 = db.createFolder("/top");
Folder c2 = c1.clone();
assertEquals(c1.path(), c2.path());
}
@Test public void duplicate2() {
Folder c1 = db.createFolder("/top");
c1.namespaceBindings().put("foo", "http://www.ideanest.com/");
Folder c2 = c1.clone();
assertEquals("http://www.ideanest.com/", c2.namespaceBindings().get("foo"));
}
@Test public void getName1() {
assertEquals("top", db.createFolder("/top").name());
}
@Test public void getName2() {
assertEquals("nested", db.createFolder("/top/nested").name());
}
@Test public void getPath1() {
assertEquals("/top", db.createFolder("/top").path());
}
@Test public void getPath2() {
assertEquals("/top/nested", db.createFolder("/top/nested").path());
}
@Test public void getPath3() {
assertEquals("/", db.createFolder("/").path());
}
@Test public void relativePath1() {
assertEquals("foo", db.getFolder("/").relativePath("/foo"));
}
@Test public void relativePath2() {
assertEquals("foo/bar", db.getFolder("/").relativePath("/foo/bar"));
}
@Test public void relativePath3() {
assertEquals("bar", db.createFolder("/foo").relativePath("/foo/bar"));
}
@Test public void relativePath4() {
assertEquals("", db.createFolder("/foo").relativePath("/foo"));
}
@Test(expected = IllegalArgumentException.class)
public void relativePath5() {
db.createFolder("/foo").relativePath("/foobar");
}
@Test(expected = IllegalArgumentException.class)
public void relativePath6() {
db.createFolder("/foo").relativePath("foo");
}
@Test(expected = IllegalArgumentException.class)
public void relativePath7() {
db.getFolder("/").relativePath("foo");
}
@Test public void getParent1() {
assertEquals("/top", db.createFolder("/top/nested").parent().path());
}
@Test(expected = DatabaseException.class)
public void getParent2() {
db.getFolder("/").parent();
}
@Test public void getChild1() {
db.createFolder("/top/nested");
db.getFolder("/top").children().get("nested");
}
@Test public void getChild2() {
db.createFolder("/top/nested/more");
db.getFolder("/top").children().get("nested/more");
}
@Test(expected = IllegalArgumentException.class)
public void getChild3() {
db.createFolder("/top/nested");
db.getFolder("/top").children().get("/nested");
}
@Test public void getChild4() {
db.createFolder("/top/nested");
db.getFolder("/").children().get("top");
}
@Test public void getChild5() {
db.createFolder("/top/nested");
Folder c1 = db.getFolder("/top");
c1.namespaceBindings().put("foo", "http://www.ideanest.com/");
Folder c2 = c1.children().get("nested");
assertEquals("http://www.ideanest.com/", c2.namespaceBindings().get("foo"));
}
@Test public void namespace1() {
Folder c1 = db.getFolder("/");
c1.namespaceBindings().put("foo", "http://www.ideanest.com/");
assertEquals("http://www.ideanest.com/", c1.namespaceBindings().get("foo"));
}
@Test public void namespace2() {
Folder c1 = db.getFolder("/");
c1.namespaceBindings().put("", "http://www.ideanest.com/");
assertEquals("http://www.ideanest.com/", c1.namespaceBindings().get(""));
}
@Test public void namespace3() {
Folder c1 = db.getFolder("/");
c1.namespaceBindings().put("foo", "http://www.ideanest.com/");
c1.namespaceBindings().remove("foo");
assertNull(c1.namespaceBindings().get("foo"));
}
@Test public void namespace4() {
Folder c1 = db.getFolder("/");
c1.namespaceBindings().put("foo", "http://www.ideanest.com/");
c1.namespaceBindings().put("bar", "urn:blah");
c1.namespaceBindings().remove("foo");
assertNull(c1.namespaceBindings().get("foo"));
assertEquals("urn:blah", c1.namespaceBindings().get("bar"));
}
@Test public void namespace5() {
Folder c1 = db.getFolder("/");
c1.namespaceBindings().put("foo", "http://www.ideanest.com/");
c1.namespaceBindings().put("bar", "urn:blah");
c1.namespaceBindings().clear();
assertNull(c1.namespaceBindings().get("foo"));
assertNull(c1.namespaceBindings().get("bar"));
}
@Test public void buildDocument1() {
Folder c1 = db.createFolder("/top");
c1.documents().build(Name.create("doc1")).elem("test").end("test").commit();
assertEquals(1, c1.documents().size());
}
@Test public void buildDocument2() {
Folder c1 = db.createFolder("/top");
c1.documents().build(Name.create("doc1")).elem("test1").end("test1").commit();
c1.documents().build(Name.overwrite("doc1")).elem("test2").end("test2").commit();
assertEquals(1, c1.documents().size());
}
@Test(expected = DatabaseException.class)
public void buildDocument3() {
Folder c1 = db.createFolder("/top");
c1.documents().build(Name.create("doc1")).elem("test1").end("test1").commit();
c1.documents().build(Name.create("doc1")).elem("test2").end("test2").commit();
}
@Test public void buildDocument4() {
Folder c1 = db.createFolder("/top");
c1.documents().build(Name.generate()).elem("test").end("test").commit();
assertEquals(1, c1.documents().size());
}
@Test public void buildDocument5() {
Folder c1 = db.createFolder("/top");
c1.documents().build(Name.generate()).elem("test").end("test").commit();
c1.documents().build(Name.generate()).elem("test").end("test").commit();
assertEquals(2, c1.documents().size());
}
@Test public void buildDocument6() {
Folder c1 = db.createFolder("/top");
c1.documents().build(Name.create("child/doc1")).elem("test").end("test").commit();
assertEquals(0, c1.documents().size());
assertEquals(1, db.getFolder("/top/child").documents().size());
}
@Test public void size1() {
assertEquals(0, db.getFolder("/").documents().size());
}
@Test public void size2() {
Folder c1 = db.createFolder("/top/nested");
c1.documents().build(Name.generate()).elem("test").end("test").commit();
c1.documents().build(Name.generate()).elem("test").end("test").commit();
c1.documents().build(Name.create("doc1")).elem("test").end("test").commit();
assertEquals(3, c1.documents().size());
assertEquals(0, db.getFolder("/top").documents().size());
}
@Test public void childrenSize1() {
Folder c1 = db.createFolder("/top");
assertEquals(0, c1.children().size());
}
@Test public void childrenSize2() {
db.createFolder("/top/nested1");
db.createFolder("/top/nested2");
Folder c1 = db.getFolder("/top");
assertEquals(2, c1.children().size());
}
@Test public void childrenSize3() {
db.createFolder("/top/nested1");
db.createFolder("/top/nested2").documents().build(Name.generate()).elem("test").end("test").commit();
Folder c1 = db.getFolder("/top");
c1.documents().build(Name.generate()).elem("test").end("test").commit();
assertEquals(2, c1.children().size());
}
@Test public void iterateChildren1() {
db.createFolder("/top1");
db.createFolder("/top2");
Collection<Folder> children = new ArrayList<Folder>();
for (Folder child : db.getFolder("/").children()) {
children.add(child);
}
assertEquals(3, children.size());
}
@Test public void clear1() {
Folder c1 = db.createFolder("/top");
c1.clear();
assertEquals(0, c1.documents().size());
}
@Test public void clear2() {
Folder c1 = db.createFolder("/top");
c1.documents().build(Name.generate()).elem("test").end("test").commit();
c1.documents().build(Name.generate()).elem("test").end("test").commit();
c1.clear();
assertEquals(0, c1.documents().size());
}
@Test public void clear3() {
db.createFolder("/top/nested1");
db.createFolder("/top/nested2");
Folder c1 = db.getFolder("/top");
c1.clear();
assertEquals(0, c1.children().size());
}
@Test public void clear4() {
db.createFolder("/top/nested1");
db.createFolder("/top/nested1/more");
db.createFolder("/top/nested2");
Folder c1 = db.getFolder("/top");
c1.documents().build(Name.generate()).elem("test").end("test").commit();
c1.documents().build(Name.generate()).elem("test").end("test").commit();
c1.clear();
assertEquals(0, c1.documents().size());
assertEquals(0, c1.children().size());
}
@Test public void delete1() {
Folder c1 = db.createFolder("/top/nested");
db.getFolder("/top/nested");
c1.delete();
try {
db.getFolder("/top/nested");
fail();
} catch (DatabaseException e) {
}
}
@Test(expected = DatabaseException.class)
public void delete2() {
db.createFolder("/top/nested/more");
Folder c1 = db.getFolder("/top/nested");
db.getFolder("/top/nested/more");
c1.delete();
db.getFolder("/top/nested/more");
}
@Test public void deleteRoot1() {
db.getFolder("/").delete();
assertEquals(0, db.getFolder("/").documents().size());
assertEquals(0, db.getFolder("/").children().size());
}
@Test public void deleteRoot2() {
db.getFolder("/").documents().load(Name.create("foo"), Source.xml("<foo/>"));
db.getFolder("/").delete();
assertEquals(0, db.getFolder("/").documents().size());
assertEquals(0, db.getFolder("/").children().size());
}
@Test public void deleteRoot3() {
db.getFolder("/").documents().load(Name.create("foo"), Source.xml("<foo/>"));
db.getFolder("/").documents().load(Name.create("bar"), Source.xml("<bar/>"));
db.getFolder("/").delete();
assertEquals(0, db.getFolder("/").documents().size());
assertEquals(0, db.getFolder("/").children().size());
}
@Test public void getDocument1() {
Folder c1 = db.createFolder("/c1");
c1.documents().build(Name.create("original")).elem("test").end("test").commit();
Document d = c1.documents().get("original");
assertNotNull(d);
}
@Test public void getDocument2() {
Folder c1 = db.createFolder("/c1");
Folder c2 = db.createFolder("/c1/c2");
c2.documents().build(Name.create("original")).elem("test").end("test").commit();
Document d = c1.documents().get("c2/original");
assertNotNull(d);
}
@Test public void containsDocument1() {
Folder c1 = db.createFolder("/c1");
c1.documents().build(Name.create("original")).elem("test").end("test").commit();
assertTrue(c1.documents().contains("original"));
}
@Test public void containsDocument2() {
Folder c1 = db.createFolder("/c1");
Folder c2 = db.createFolder("/c1/c2");
c2.documents().build(Name.create("original")).elem("test").end("test").commit();
assertTrue(c1.documents().contains("c2/original"));
}
@Test public void query1() {
Folder c1 = db.createFolder("/c1");
c1.documents().build(Name.create("original")).elem("test").end("test").commit();
c1.query().single("/test");
}
@Test public void query2() {
Folder c1 = db.createFolder("/c1");
c1.namespaceBindings().put("", "http://example.com");
c1.documents().build(Name.create("original")).elem("test").end("test").commit();
c1.query().single("/test");
}
@Test public void queryGetFreshService() {
Folder c1 = db.createFolder("/c1");
c1.documents().build(Name.create("original")).namespace("", "foo").elem("test").end("test").commit();
c1.query().namespace("", "foo").single("/test");
assertFalse(c1.query().exists("/test")); // namespace bindings not propagated from previous query
}
@Test public void queryBaseUri() {
Folder c1 = db.createFolder("/c1");
c1.documents().build(Name.create("original")).elem("test").end("test").commit();
assertTrue(c1.query().single("doc-available('original')").booleanValue());
}
@Test public void convertToSequence() {
Folder c1 = db.createFolder("/c1"), c2 = db.createFolder("/c2");
c1.documents().build(Name.create("one")).elem("test").end("test").commit();
c1.children().create("sub").documents().build(Name.create("another")) .elem("test").end("test").commit();
assertEquals(0, c2.query().all("/test").size());
assertEquals(2, c1.query().all("/test").size());
assertEquals(2, c2.query().all("$_1/test", new Object[] { c1 }).size());
}
@Test public void convertDocumentsToSequence() {
Folder c1 = db.createFolder("/c1"), c2 = db.createFolder("/c2");
c1.documents().build(Name.create("one")).elem("test").end("test").commit();
c1.children().create("sub").documents().build(Name.create("another")).elem("test").end("test").commit();
assertEquals(0, c2.query().all("/test").size());
assertEquals(1, c2.query().all("$_1/test", new Object[] { c1.documents() }).size());
}
@Test public void move1() {
Folder c1 = db.createFolder("/c1"), c2 = db.createFolder("/c2");
Folder f = c1.children().create("f");
f.move(c2, Name.keepCreate());
assertEquals("/c2/f", f.path());
assertEquals(c2, f.parent());
}
@Test public void move2() {
Folder c1 = db.createFolder("/c1"), c2 = db.createFolder("/c2");
Folder f = c1.children().create("f");
f.move(c2, Name.create("g"));
assertEquals("/c2/g", f.path());
assertEquals(c2, f.parent());
}
@Test public void move3() {
Folder c1 = db.createFolder("/c1");
Folder f = c1.children().create("f");
f.move(f.parent(), Name.create("g"));
assertEquals("/c1/g", f.path());
assertEquals(c1, f.parent());
}
@Test public void copy1() {
Folder c1 = db.createFolder("/c1"), c2 = db.createFolder("/c2");
Folder f1 = c1.children().create("f");
Folder f2 = f1.copy(c2, Name.keepCreate());
assertEquals("/c1/f", f1.path());
assertEquals(c1, f1.parent());
assertEquals("/c2/f", f2.path());
assertEquals(c2, f2.parent());
}
@Test public void copy2() {
Folder c1 = db.createFolder("/c1");
Folder f1 = c1.children().create("f1");
Folder f2 = f1.copy(f1.parent(), Name.create("f2"));
assertEquals("/c1/f1", f1.path());
assertEquals(c1, f1.parent());
assertEquals("/c1/f2", f2.path());
assertEquals(c1, f2.parent());
}
}