package lux.index.field; import static org.junit.Assert.*; import lux.Evaluator; import lux.IndexTestSupport; import lux.QueryStats; import lux.XdmResultSet; import lux.index.IndexConfiguration; import lux.index.XmlIndexer; import net.sf.saxon.s9api.XdmSequenceIterator; import org.apache.lucene.store.RAMDirectory; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; /** * Tests for features related to XPathFields. */ public class TinyBinaryStoreTest { private static IndexTestSupport indexTestSupport; private static Evaluator eval; @BeforeClass public static void init() throws Exception { XmlIndexer indexer = new XmlIndexer(IndexConfiguration.DEFAULT_OPTIONS | IndexConfiguration.STORE_TINY_BINARY); indexTestSupport = new IndexTestSupport(indexer, new RAMDirectory()); indexTestSupport.indexAllElements("lux/reader-test.xml"); indexTestSupport.reopen(); // commit, make the commit visible eval = indexTestSupport.makeEvaluator(); } @Before public void setup() { eval.setQueryStats(new QueryStats()); } @Test public void testTinyBinaryField () { assertEquals ("test", getStringResult ("/test/@id")); } @Test public void testTinyBinaryURI () { assertEquals ("lux://lux/reader-test.xml", getStringResult ("/test/root()/base-uri()")); assertEquals ("lux://lux/reader-test.xml", getStringResult ("/test/base-uri()")); } // return null if no results, else concatenate the string values of all the results, // separated by a single space private String getStringResult (String query) { XdmResultSet result = eval.evaluate(query); if (! result.getErrors().isEmpty()) { fail(result.getErrors().get(0).getMessage()); } XdmSequenceIterator iter = result.getXdmValue().iterator(); if (!iter.hasNext()) { return null; } StringBuilder buf = new StringBuilder (); buf.append (iter.next().getStringValue()); while (iter.hasNext()) { buf.append (' '); buf.append (iter.next().getStringValue()); } return buf.toString(); } }