package org.exist.xquery.value;
import org.exist.EXistException;
import org.exist.collections.Collection;
import org.exist.dom.QName;
import org.exist.dom.memtree.MemTreeBuilder;
import org.exist.dom.persistent.DocumentImpl;
import org.exist.dom.persistent.NodeImpl;
import org.exist.dom.persistent.NodeProxy;
import org.exist.security.*;
import org.exist.security.SecurityManager;
import org.exist.storage.BrokerPool;
import org.exist.storage.DBBroker;
import org.exist.test.ExistEmbeddedServer;
import org.exist.xmldb.XmldbURI;
import org.junit.*;
import java.util.Optional;
/**
*
* @author Adam Retter <adam.retter@googlemail.com>
*/
public class ValueSequenceTest {
@ClassRule
public final static ExistEmbeddedServer existEmbeddedServer = new ExistEmbeddedServer(true, false);
@Test
public void sortInDocumentOrder() throws EXistException, PermissionDeniedException, AuthenticationException {
final ValueSequence seq = new ValueSequence(true);
seq.keepUnOrdered(true);
//in-memory doc
final MemTreeBuilder memtree = new MemTreeBuilder();
memtree.startDocument();
memtree.startElement(new QName("m1"), null);
memtree.startElement(new QName("m2"), null);
memtree.characters("test data");
memtree.endElement();
memtree.endElement();
memtree.endDocument();
final BrokerPool pool = existEmbeddedServer.getBrokerPool();
final Subject admin = pool.getSecurityManager().authenticate("admin", "");
try(final DBBroker broker = pool.get(Optional.of(admin))) {
//persistent doc
final Collection sysCollection = broker.getCollection(SecurityManager.SECURITY_COLLECTION_URI);
final DocumentImpl doc = sysCollection.getDocument(broker, XmldbURI.create("config.xml"));
final NodeProxy docProxy = new NodeProxy(doc);
final NodeProxy nodeProxy = new NodeProxy(doc, ((NodeImpl)doc.getFirstChild()).getNodeId());
seq.add(memtree.getDocument());
seq.add(docProxy);
seq.add((org.exist.dom.memtree.NodeImpl)memtree.getDocument().getFirstChild());
seq.add(nodeProxy);
//call sort
seq.sortInDocumentOrder();
}
}
}