lux.functions.KeyTest.java Source code

Java tutorial

Introduction

Here is the source code for lux.functions.KeyTest.java

Source

package lux.functions;

import static org.junit.Assert.*;

import java.io.IOException;
import java.util.ArrayList;

import lux.Evaluator;
import lux.IndexTestSupport;
import lux.XdmResultSet;
import lux.index.XmlIndexer;
import lux.index.field.FieldDefinition.Type;
import lux.index.field.XPathField;
import net.sf.saxon.s9api.XQueryExecutable;
import net.sf.saxon.s9api.XdmItem;

import org.apache.lucene.document.Field.Store;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.RAMDirectory;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class KeyTest {

    private static IndexTestSupport index;

    @BeforeClass
    public static void setup() throws Exception {
        XmlIndexer indexer = new XmlIndexer();
        index = new IndexTestSupport(indexer, new RAMDirectory());
        indexer.getConfiguration().addField(new XPathField("doctype_s", "name(/*)", null, Store.YES, Type.STRING));
        indexer.getConfiguration().addField(new XPathField("timestamp",
                "xs:integer((current-dateTime() - xs:dateTime('1970-01-01T00:00:00-00:00')) div xs:dayTimeDuration('PT1S'))",
                null, Store.YES, Type.INT));
        index.indexAllElements("lux/reader-test.xml");

        //index= new IndexTestSupport ("lux/reader-test.xml", indexer, new RAMDirectory());
    }

    @AfterClass
    public static void tearDown() throws Exception {
        index.close();
    }

    @Test
    public void testKeyNotStored() throws Exception {
        String[] terms = getValues("collection()/lux:key('lux_elt_name')");
        assertEquals("got results for non-stored field", 0, terms.length);
    }

    @Test
    public void testKeyUndeclared() throws Exception {
        String[] terms = getValues("collection()/lux:key('timestamp')");
        assertEquals(5, terms.length);
        Long t0 = Long.parseLong(terms[0]);
        Long t1 = Long.parseLong(terms[1]);
        assertTrue("time " + t1 + " before " + t0, t1 >= t0);
        assertTrue("timestamp in the future??", t0 <= System.currentTimeMillis() / 1000);
        assertTrue("timestamp in the distant past??", t0 > System.currentTimeMillis() / 1000 - 10);
    }

    @Test
    public void testKey() throws Exception {

        String[] values = getValues("count(collection())");
        assertEquals("5", values[0]);

        String[] terms = getValues("lux:key('lux_uri', collection()[1])");
        assertArrayEquals(new String[] { "/lux/reader-test.xml" }, terms);

        terms = getValues("collection()[1]/lux:key('doctype_s')");
        assertArrayEquals(new String[] { "test" }, terms);

        terms = getValues("collection()/lux:key('doctype_s')");
        assertArrayEquals(new String[] { "test", "title", "entities", "entities", "token" }, terms);
    }

    private String[] getValues(String xquery) throws CorruptIndexException, LockObtainFailedException, IOException {
        Evaluator eval = index.makeEvaluator();
        XQueryExecutable exec = eval.getCompiler().compile(xquery);
        XdmResultSet results = eval.evaluate(exec);
        ArrayList<String> terms = new ArrayList<String>();
        for (XdmItem term : results) {
            terms.add(term.getStringValue());
        }
        return terms.toArray(new String[terms.size()]);
    }
}

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */