Package org.apache.uima.lucas.indexer.analysis

Source Code of org.apache.uima.lucas.indexer.analysis.AnnotationTokenStreamTest

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.apache.uima.lucas.indexer.analysis;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.util.ArrayList;
import java.util.List;

import org.apache.lucene.analysis.Token;
import org.apache.uima.UIMAFramework;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.CASException;
import org.apache.uima.cas.Type;
import org.apache.uima.collection.CollectionReader;
import org.apache.uima.collection.CollectionReaderDescription;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.cas.FSArray;
import org.apache.uima.jcas.cas.StringArray;
import org.apache.uima.lucas.indexer.types.test.Annotation1;
import org.apache.uima.lucas.indexer.types.test.FeatureStructure1;
import org.apache.uima.lucas.indexer.types.test.FeatureStructure2;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.util.CasCreationUtils;
import org.apache.uima.util.XMLInputSource;
import org.junit.Before;
import org.junit.Test;

import com.google.common.collect.Lists;

public class AnnotationTokenStreamTest {
 
  private final static String READER_DESCRIPTOR = "src/test/resources/AnnotationTokenStreamTestDummyCollectionReader.xml";
  private CollectionReader reader;
 
  @Before
  public void setUp() throws Exception {
    CollectionReaderDescription readerDescription = (CollectionReaderDescription) UIMAFramework.getXMLParser().parseCollectionReaderDescription(new XMLInputSource(READER_DESCRIPTOR));
    reader = UIMAFramework.produceCollectionReader(readerDescription);   
  }
 
  public JCas createCasWithText(String documentText) throws ResourceInitializationException, CASException{   
    JCas cas = CasCreationUtils.createCas(reader.getProcessingResourceMetaData()).getJCas();
    cas.setDocumentText(documentText);
    return cas;
  }

  @Test
  public void testCreateDocumentTextTokens() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);
    annotation1.addToIndexes();
    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setBegin(7);
    annotation2.setEnd(13);
    annotation2.addToIndexes();
   
    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setBegin(14);
    annotation3.setEnd(20);
    annotation3.addToIndexes();
   
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1");
    Token nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
  }
 
  @Test
  public void testCreateFeatureTokens() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);
    annotation1.setFeatureString("token1Feature1");
    annotation1.addToIndexes();
   
    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setFeatureString("token2Feature1");
    annotation2.setBegin(7);
    annotation2.setEnd(13);
    annotation2.addToIndexes();
   
    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setFeatureString("token3Feature1");
    annotation3.setBegin(14);
    annotation3.setEnd(20);
    annotation3.addToIndexes();   

    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureString", null);
    Token nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
  }
  
  @Test
  public void testCreateMultipleFeatureTokens() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);
    annotation1.setFeatureString("token1Feature1");
    annotation1.setFeatureInteger(1);
    annotation1.addToIndexes();
   
    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setFeatureString("token2Feature1");
    annotation2.setFeatureInteger(2);
    annotation2.setBegin(7);
    annotation2.setEnd(13);
    annotation2.addToIndexes();
   
    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setFeatureString("token3Feature1");
    annotation3.setFeatureInteger(3);
    annotation3.setBegin(14);
    annotation3.setEnd(20);
    annotation3.addToIndexes();   

    List<String> featureNames = new ArrayList<String>();
    featureNames.add("featureString");
    featureNames.add("featureInteger");
   
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", featureNames, "_", null);
    Token nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1Feature1_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2Feature1_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3Feature1_3", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
 
 
  @Test
  public void testCreateArrayFeatureTokensWithoutDelimiter() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);
    StringArray stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token1FeatureStringArray1");
    stringArray1.set(1, "token1FeatureStringArray2");
    stringArray1.set(2, "token1FeatureStringArray3");
    annotation1.setFeatureStringArray(stringArray1);
    annotation1.addToIndexes();
   
    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setBegin(7);
    annotation2.setEnd(13);
    StringArray stringArray2 = new StringArray(cas, 3);
    stringArray2.set(0, "token2FeatureStringArray1");
    stringArray2.set(1, "token2FeatureStringArray2");
    stringArray2.set(2, "token2FeatureStringArray3");
    annotation2.setFeatureStringArray(stringArray2);
   
    annotation2.addToIndexes();
   
    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setBegin(14);
    annotation3.setEnd(20);
    StringArray stringArray3 = new StringArray(cas, 3);
    stringArray3.set(0, "token3FeatureStringArray1");
    stringArray3.set(1, "token3FeatureStringArray2");
    stringArray3.set(2, "token3FeatureStringArray3");
    annotation3.setFeatureStringArray(stringArray3);
    annotation3.addToIndexes();   
   
    List<String> featureNames = new ArrayList<String>();
    featureNames.add("featureStringArray");
   
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", featureNames, null);
    Token nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStringArray1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStringArray2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStringArray1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStringArray2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStringArray1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStringArray2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());   
  }
 
  @Test
  public void testCreateArrayFeatureTokensWithDelimiter() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);
    StringArray stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token1FeatureStringArray1");
    stringArray1.set(1, "token1FeatureStringArray2");
    stringArray1.set(2, "token1FeatureStringArray3");
    annotation1.setFeatureStringArray(stringArray1);
    annotation1.addToIndexes();
   
    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setBegin(7);
    annotation2.setEnd(13);
    StringArray stringArray2 = new StringArray(cas, 3);
    stringArray2.set(0, "token2FeatureStringArray1");
    stringArray2.set(1, "token2FeatureStringArray2");
    stringArray2.set(2, "token2FeatureStringArray3");
    annotation2.setFeatureStringArray(stringArray2);
   
    annotation2.addToIndexes();
   
    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setBegin(14);
    annotation3.setEnd(20);
    StringArray stringArray3 = new StringArray(cas, 3);
    stringArray3.set(0, "token3FeatureStringArray1");
    stringArray3.set(1, "token3FeatureStringArray2");
    stringArray3.set(2, "token3FeatureStringArray3");
    annotation3.setFeatureStringArray(stringArray3);
    annotation3.addToIndexes();   
   
    List<String> featureNames = new ArrayList<String>();
    featureNames.add("featureStringArray");
   
   
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", featureNames, " ", null);
    Token nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStringArray1 token1FeatureStringArray2 token1FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStringArray1 token2FeatureStringArray2 token2FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStringArray1 token3FeatureStringArray2 token3FeatureStringArray3", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
  }
 
  @Test
  public void testCreateFeatureStructureTokens() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);
    FeatureStructure1 featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token1Feature1");
    FeatureStructure2 featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token1Feature3Feature1");
    featureStructure1.setFeature3(featureStructure2);
    annotation1.setFeatureStructure1(featureStructure1);
    annotation1.addToIndexes();
   
    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setBegin(7);
    annotation2.setEnd(13);
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token2Feature1");
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token2Feature3Feature1");
    featureStructure1.setFeature3(featureStructure2);
    annotation2.setFeatureStructure1(featureStructure1);   
    annotation2.addToIndexes();
   
    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setBegin(14);
    annotation3.setEnd(20);
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token3Feature1");
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token3Feature3Feature1");
    featureStructure1.setFeature3(featureStructure2);   
    annotation3.setFeatureStructure1(featureStructure1);   
    annotation3.addToIndexes();
    List<String> featureNames = new ArrayList<String>();
    featureNames.add("feature1");
   
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructure1", featureNames, null);
    Token nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
   
    annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructure1.feature3", featureNames, null);
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1Feature3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2Feature3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3Feature3Feature1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());   
  }
 
  @Test
  public void testCreateArrayFeatureStructuresWithDelimterTokens() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);
   
    FSArray featureStructure1Array = new FSArray(cas, 3);
    FeatureStructure1 featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token1FeatureStructures1Feature10");
    featureStructure1.setFeature2("token1FeatureStructures1Feature20");
 
    featureStructure1Array.set(0, featureStructure1);
 
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token1FeatureStructures1Feature11");
    featureStructure1.setFeature2("token1FeatureStructures1Feature21");
   
    featureStructure1Array.set(1, featureStructure1);
 
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token1FeatureStructures1Feature12");
    featureStructure1.setFeature2("token1FeatureStructures1Feature22");
   
    featureStructure1Array.set(2, featureStructure1);
   
    annotation1.setFeatureStructures1(featureStructure1Array);
    annotation1.addToIndexes();
   
    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setBegin(7);
    annotation2.setEnd(13);
 
    featureStructure1Array = new FSArray(cas, 3);
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token2FeatureStructures1Feature10");
    featureStructure1.setFeature2("token2FeatureStructures1Feature20");
       
    featureStructure1Array.set(0, featureStructure1);
 
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token2FeatureStructures1Feature11");
    featureStructure1.setFeature2("token2FeatureStructures1Feature21");
   
    featureStructure1Array.set(1, featureStructure1);
 
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token2FeatureStructures1Feature12");
    featureStructure1.setFeature2("token2FeatureStructures1Feature22");   
   
    featureStructure1Array.set(2, featureStructure1);
   
    annotation2.setFeatureStructures1(featureStructure1Array);
    annotation2.addToIndexes();
   
    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setBegin(14);
    annotation3.setEnd(20);
   
    featureStructure1Array = new FSArray(cas, 3);
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token3FeatureStructures1Feature10");
    featureStructure1.setFeature2("token3FeatureStructures1Feature20");
   
    featureStructure1Array.set(0, featureStructure1);
 
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token3FeatureStructures1Feature11");
    featureStructure1.setFeature2("token3FeatureStructures1Feature21");
   
    featureStructure1Array.set(1, featureStructure1);
 
    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token3FeatureStructures1Feature12");
    featureStructure1.setFeature2("token3FeatureStructures1Feature22");
   
    featureStructure1Array.set(2, featureStructure1);
   
    annotation3.setFeatureStructures1(featureStructure1Array);
    annotation3.addToIndexes();
 
    List<String> featureNames = new ArrayList<String>();
    featureNames.add("feature1");
    featureNames.add("feature2");
 
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1", featureNames, ", ", null);
    Token nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature10, token1FeatureStructures1Feature20", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature11, token1FeatureStructures1Feature21", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature12, token1FeatureStructures1Feature22", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature10, token2FeatureStructures1Feature20", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature11, token2FeatureStructures1Feature21", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature12, token2FeatureStructures1Feature22", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature10, token3FeatureStructures1Feature20", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature11, token3FeatureStructures1Feature21", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
 
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature12, token3FeatureStructures1Feature22", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());   
  }

//  public void testCreateArrayFeatureStructuresWithoutDelimterTokens() throws Exception{
//    JCas cas = createCasWithText("token1 token2 token3");
//    Annotation1 annotation1 = new Annotation1(cas);
//    annotation1.setBegin(0);
//    annotation1.setEnd(6);
//   
//    FSArray featureStructure1Array = new FSArray(cas, 3);
//    FeatureStructure1 featureStructure1 = new FeatureStructure1(cas);
//    featureStructure1.setFeature1("token1FeatureStructures1Feature10");
//    featureStructure1.setFeature2("token1FeatureStructures1Feature20");
// 
//    featureStructure1Array.set(0, featureStructure1);
// 
//    featureStructure1 = new FeatureStructure1(cas);
//    featureStructure1.setFeature1("token1FeatureStructures1Feature11");
//    featureStructure1.setFeature2("token1FeatureStructures1Feature21");
//   
//    featureStructure1Array.set(1, featureStructure1);
// 
//    featureStructure1 = new FeatureStructure1(cas);
//    featureStructure1.setFeature1("token1FeatureStructures1Feature12");
//    featureStructure1.setFeature2("token1FeatureStructures1Feature22");
//   
//    featureStructure1Array.set(2, featureStructure1);
//   
//    annotation1.setFeatureStructures1(featureStructure1Array);
//    annotation1.addToIndexes();
//   
//    Annotation1 annotation2 = new Annotation1(cas);
//    annotation2.setBegin(7);
//    annotation2.setEnd(13);
// 
//    featureStructure1Array = new FSArray(cas, 3);
//    featureStructure1 = new FeatureStructure1(cas);
//    featureStructure1.setFeature1("token2FeatureStructures1Feature10");
//    featureStructure1.setFeature2("token2FeatureStructures1Feature20");
//       
//    featureStructure1Array.set(0, featureStructure1);
// 
//    featureStructure1 = new FeatureStructure1(cas);
//    featureStructure1.setFeature1("token2FeatureStructures1Feature11");
//    featureStructure1.setFeature2("token2FeatureStructures1Feature21");
//   
//    featureStructure1Array.set(1, featureStructure1);
// 
//    featureStructure1 = new FeatureStructure1(cas);
//    featureStructure1.setFeature1("token2FeatureStructures1Feature12");
//    featureStructure1.setFeature2("token2FeatureStructures1Feature22");   
//   
//    featureStructure1Array.set(2, featureStructure1);
//   
//    annotation2.setFeatureStructures1(featureStructure1Array);
//    annotation2.addToIndexes();
//   
//    Annotation1 annotation3 = new Annotation1(cas);
//    annotation3.setBegin(14);
//    annotation3.setEnd(20);
//   
//    featureStructure1Array = new FSArray(cas, 3);
//    featureStructure1 = new FeatureStructure1(cas);
//    featureStructure1.setFeature1("token3FeatureStructures1Feature10");
//    featureStructure1.setFeature2("token3FeatureStructures1Feature20");
//   
//    featureStructure1Array.set(0, featureStructure1);
// 
//    featureStructure1 = new FeatureStructure1(cas);
//    featureStructure1.setFeature1("token3FeatureStructures1Feature11");
//    featureStructure1.setFeature2("token3FeatureStructures1Feature21");
//   
//    featureStructure1Array.set(1, featureStructure1);
// 
//    featureStructure1 = new FeatureStructure1(cas);
//    featureStructure1.setFeature1("token3FeatureStructures1Feature12");
//    featureStructure1.setFeature2("token3FeatureStructures1Feature22");
//   
//    featureStructure1Array.set(2, featureStructure1);
//   
//    annotation3.setFeatureStructures1(featureStructure1Array);
//    annotation3.addToIndexes();
// 
//    List<String> featureNames = new ArrayList<String>();
//    featureNames.add("feature1");
//    featureNames.add("feature2");
// 
//
//    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1", featureNames, null);
//    Token nextToken = annotationTokenStream.next();
//    assertNotNull(nextToken);
//    assertEquals("token1FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
//    assertEquals(0, nextToken.startOffset());
//    assertEquals(6, nextToken.endOffset());
// 
//    nextToken = annotationTokenStream.next();
//    assertNotNull(nextToken);
//    assertEquals("token1FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
//    assertEquals(0, nextToken.startOffset());
//    assertEquals(6, nextToken.endOffset());
//   
//    nextToken = annotationTokenStream.next();
//    assertNotNull(nextToken);
//    assertEquals("token1FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
//    assertEquals(0, nextToken.startOffset());
//    assertEquals(6, nextToken.endOffset());
//   
//    nextToken = annotationTokenStream.next();
//    assertNotNull(nextToken);
//    assertEquals("token2FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
//    assertEquals(7, nextToken.startOffset());
//    assertEquals(13, nextToken.endOffset());
// 
//    nextToken = annotationTokenStream.next();
//    assertNotNull(nextToken);
//    assertEquals("token2FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
//    assertEquals(7, nextToken.startOffset());
//    assertEquals(13, nextToken.endOffset());
// 
//    nextToken = annotationTokenStream.next();
//    assertNotNull(nextToken);
//    assertEquals("token2FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
//    assertEquals(7, nextToken.startOffset());
//    assertEquals(13, nextToken.endOffset());
//   
//    nextToken = annotationTokenStream.next();
//    assertNotNull(nextToken);
//    assertEquals("token3FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
//    assertEquals(14, nextToken.startOffset());
//    assertEquals(20, nextToken.endOffset());
// 
//    nextToken = annotationTokenStream.next();
//    assertNotNull(nextToken);
//    assertEquals("token3FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
//    assertEquals(14, nextToken.startOffset());
//    assertEquals(20, nextToken.endOffset());
// 
//    nextToken = annotationTokenStream.next();
//    assertNotNull(nextToken);
//    assertEquals("token3FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
//    assertEquals(14, nextToken.startOffset());
//    assertEquals(20, nextToken.endOffset());
//  }

 
  @Test
  public void testCreateArrayFeatureStructuresWithSinleFeature() throws Exception{
      JCas cas = createCasWithText("token1 token2 token3");
      Annotation1 annotation1 = new Annotation1(cas);
      annotation1.setBegin(0);
      annotation1.setEnd(6);
     
      FSArray featureStructure1Array = new FSArray(cas, 3);
     
      FeatureStructure1 featureStructure1 = new FeatureStructure1(cas);
      featureStructure1.setFeature1("token1FeatureStructures1Feature10");
      featureStructure1Array.set(0, featureStructure1);
     
      featureStructure1 = new FeatureStructure1(cas);
      featureStructure1.setFeature1("token1FeatureStructures1Feature11");     
      featureStructure1Array.set(1, featureStructure1);

      featureStructure1 = new FeatureStructure1(cas);
      featureStructure1.setFeature1("token1FeatureStructures1Feature12");         
      featureStructure1Array.set(2, featureStructure1);
     
      annotation1.setFeatureStructures1(featureStructure1Array);
      annotation1.addToIndexes();
     
      Annotation1 annotation2 = new Annotation1(cas);
      annotation2.setBegin(7);
      annotation2.setEnd(13);

      featureStructure1Array = new FSArray(cas, 3);

      featureStructure1 = new FeatureStructure1(cas);
      featureStructure1.setFeature1("token2FeatureStructures1Feature10");     
      featureStructure1Array.set(0, featureStructure1);

      featureStructure1 = new FeatureStructure1(cas);
      featureStructure1.setFeature1("token2FeatureStructures1Feature11");     
      featureStructure1Array.set(1, featureStructure1);

      featureStructure1 = new FeatureStructure1(cas);
      featureStructure1.setFeature1("token2FeatureStructures1Feature12");
      featureStructure1Array.set(2, featureStructure1);
     
      annotation2.setFeatureStructures1(featureStructure1Array);
      annotation2.addToIndexes();
     
      Annotation1 annotation3 = new Annotation1(cas);
      annotation3.setBegin(14);
      annotation3.setEnd(20);
     
      featureStructure1Array = new FSArray(cas, 3);
      featureStructure1 = new FeatureStructure1(cas);
      featureStructure1.setFeature1("token3FeatureStructures1Feature10");
      featureStructure1Array.set(0, featureStructure1);

      featureStructure1 = new FeatureStructure1(cas);
      featureStructure1.setFeature1("token3FeatureStructures1Feature11");
      featureStructure1Array.set(1, featureStructure1);

      featureStructure1 = new FeatureStructure1(cas);
      featureStructure1.setFeature1("token3FeatureStructures1Feature12");
      featureStructure1Array.set(2, featureStructure1);
     
      annotation3.setFeatureStructures1(featureStructure1Array);
      annotation3.addToIndexes();

      List<String> featureNames = new ArrayList<String>();
      featureNames.add("feature1");
         
      AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1", featureNames, null);
      Token nextToken = annotationTokenStream.next();
      assertNotNull(nextToken);
      assertEquals("token1FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
      assertEquals(0, nextToken.startOffset());
      assertEquals(6, nextToken.endOffset());

      nextToken = annotationTokenStream.next();
      assertNotNull(nextToken);
      assertEquals("token1FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
      assertEquals(0, nextToken.startOffset());
      assertEquals(6, nextToken.endOffset());
     
      nextToken = annotationTokenStream.next();
      assertNotNull(nextToken);
      assertEquals("token1FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
      assertEquals(0, nextToken.startOffset());
      assertEquals(6, nextToken.endOffset());
     
      nextToken = annotationTokenStream.next();
      assertNotNull(nextToken);
      assertEquals("token2FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
      assertEquals(7, nextToken.startOffset());
      assertEquals(13, nextToken.endOffset());

      nextToken = annotationTokenStream.next();
      assertNotNull(nextToken);
      assertEquals("token2FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
      assertEquals(7, nextToken.startOffset());
      assertEquals(13, nextToken.endOffset());

      nextToken = annotationTokenStream.next();
      assertNotNull(nextToken);
      assertEquals("token2FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
      assertEquals(7, nextToken.startOffset());
      assertEquals(13, nextToken.endOffset());
     
      nextToken = annotationTokenStream.next();
      assertNotNull(nextToken);
      assertEquals("token3FeatureStructures1Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
      assertEquals(14, nextToken.startOffset());
      assertEquals(20, nextToken.endOffset());

      nextToken = annotationTokenStream.next();
      assertNotNull(nextToken);
      assertEquals("token3FeatureStructures1Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
      assertEquals(14, nextToken.startOffset());
      assertEquals(20, nextToken.endOffset());

      nextToken = annotationTokenStream.next();
      assertNotNull(nextToken);
      assertEquals("token3FeatureStructures1Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
      assertEquals(14, nextToken.startOffset());
      assertEquals(20, nextToken.endOffset());   
  }
 
  @Test
  public void testCreateArrayFeatureWithFeaturePath() throws Exception{   
    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);
   
    FSArray featureStructure1Array = new FSArray(cas, 3);
    FeatureStructure1 featureStructure1 = new FeatureStructure1(cas);

    FeatureStructure2 featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token1FeatureStructures1Feature3Feature10");
 
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(0, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);
   
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token1FeatureStructures1Feature3Feature11");

    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(1, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);
   
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token1FeatureStructures1Feature3Feature12");
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(2, featureStructure1);
   
    annotation1.setFeatureStructures1(featureStructure1Array);
    annotation1.addToIndexes();
   
    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setBegin(7);
    annotation2.setEnd(13);

    featureStructure1Array = new FSArray(cas, 3);
    featureStructure1 = new FeatureStructure1(cas);
 
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token2FeatureStructures1Feature3Feature10");
   
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(0, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);
   
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token2FeatureStructures1Feature3Feature11");
   
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(1, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);
   
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token2FeatureStructures1Feature3Feature12");
   
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(2, featureStructure1);
   
    annotation2.setFeatureStructures1(featureStructure1Array);
    annotation2.addToIndexes();
   
    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setBegin(14);
    annotation3.setEnd(20);
   
    featureStructure1Array = new FSArray(cas, 3);
    featureStructure1 = new FeatureStructure1(cas);
   
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token3FeatureStructures1Feature3Feature10");
   
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(0, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);
   
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token3FeatureStructures1Feature3Feature11");
       
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(1, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token3FeatureStructures1Feature12");
    featureStructure1.setFeature2("token3FeatureStructures1Feature22");
     
    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token3FeatureStructures1Feature3Feature12");
   
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(2, featureStructure1);
   
    annotation3.setFeatureStructures1(featureStructure1Array);
    annotation3.addToIndexes();

    List<String> featureNames = new ArrayList<String>();
    featureNames.add("feature1");
       
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1.feature3", featureNames, null);
    Token nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature10", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature11", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature12", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
  }
 
  @Test
  public void testCreateArrayFeaturesWithFeaturePathAndStringArray() throws Exception{

    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);

    FSArray featureStructure1Array = new FSArray(cas, 3);
    FeatureStructure1 featureStructure1 = new FeatureStructure1(cas);
    featureStructure1.setFeature1("token1FeatureStructures1Feature10");
    featureStructure1.setFeature2("token1FeatureStructures1Feature20");
    StringArray stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token1FeatureStructures1Feature3Feature3_0_0");
    stringArray1.set(1, "token1FeatureStructures1Feature3Feature3_0_1");
    stringArray1.set(2, "token1FeatureStructures1Feature3Feature3_0_2");

    FeatureStructure2 featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature1("token1FeatureStructures1Feature3Feature10");
    featureStructure2.setFeature3(stringArray1);   
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(0, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);

    stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token1FeatureStructures1Feature3Feature3_1_0");
    stringArray1.set(1, "token1FeatureStructures1Feature3Feature3_1_1");
    stringArray1.set(2, "token1FeatureStructures1Feature3Feature3_1_2");

    featureStructure2 = new FeatureStructure2(cas);

    featureStructure2.setFeature3(stringArray1);
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(1, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);

    stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token1FeatureStructures1Feature3Feature3_2_0");
    stringArray1.set(1, "token1FeatureStructures1Feature3Feature3_2_1");
    stringArray1.set(2, "token1FeatureStructures1Feature3Feature3_2_2");
    featureStructure2 = new FeatureStructure2(cas);

    featureStructure2.setFeature3(stringArray1);
    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(2, featureStructure1);

    annotation1.setFeatureStructures1(featureStructure1Array);
    annotation1.addToIndexes();

    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setBegin(7);
    annotation2.setEnd(13);

    featureStructure1Array = new FSArray(cas, 3);
    featureStructure1 = new FeatureStructure1(cas);

    stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token2FeatureStructures1Feature3Feature3_0_0");
    stringArray1.set(1, "token2FeatureStructures1Feature3Feature3_0_1");
    stringArray1.set(2, "token2FeatureStructures1Feature3Feature3_0_2");

    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature3(stringArray1);

    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(0, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);

    stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token2FeatureStructures1Feature3Feature3_1_0");
    stringArray1.set(1, "token2FeatureStructures1Feature3Feature3_1_1");
    stringArray1.set(2, "token2FeatureStructures1Feature3Feature3_1_2");

    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature3(stringArray1);

    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(1, featureStructure1);

    stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token2FeatureStructures1Feature3Feature3_2_0");
    stringArray1.set(1, "token2FeatureStructures1Feature3Feature3_2_1");
    stringArray1.set(2, "token2FeatureStructures1Feature3Feature3_2_2");

    featureStructure1 = new FeatureStructure1(cas);

    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature3(stringArray1);

    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(2, featureStructure1);

    annotation2.setFeatureStructures1(featureStructure1Array);
    annotation2.addToIndexes();

    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setBegin(14);
    annotation3.setEnd(20);

    featureStructure1Array = new FSArray(cas, 3);
    featureStructure1 = new FeatureStructure1(cas);

    stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token3FeatureStructures1Feature3Feature3_0_0");
    stringArray1.set(1, "token3FeatureStructures1Feature3Feature3_0_1");
    stringArray1.set(2, "token3FeatureStructures1Feature3Feature3_0_2");

    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature3(stringArray1);

    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(0, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);

    stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token3FeatureStructures1Feature3Feature3_1_0");
    stringArray1.set(1, "token3FeatureStructures1Feature3Feature3_1_1");
    stringArray1.set(2, "token3FeatureStructures1Feature3Feature3_1_2");   

    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature3(stringArray1);

    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(1, featureStructure1);

    featureStructure1 = new FeatureStructure1(cas);

    stringArray1 = new StringArray(cas, 3);
    stringArray1.set(0, "token3FeatureStructures1Feature3Feature3_2_0");
    stringArray1.set(1, "token3FeatureStructures1Feature3Feature3_2_1");
    stringArray1.set(2, "token3FeatureStructures1Feature3Feature3_2_2");   

    featureStructure2 = new FeatureStructure2(cas);
    featureStructure2.setFeature3(stringArray1);

    featureStructure1.setFeature3(featureStructure2);
    featureStructure1Array.set(2, featureStructure1);

    annotation3.setFeatureStructures1(featureStructure1Array);
    annotation3.addToIndexes();

    List<String> featureNames = new ArrayList<String>();
    featureNames.add("feature3");

    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1", "featureStructures1.feature3", featureNames, null);

    Token nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature3_0_0", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature3_0_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature3_0_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature3_1_0", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature3_1_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature3_1_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature3_2_0", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature3_2_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1FeatureStructures1Feature3Feature3_2_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature3_0_0", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature3_0_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature3_0_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature3_1_0", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature3_1_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature3_1_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature3_2_0", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature3_2_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2FeatureStructures1Feature3Feature3_2_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature3_0_0", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature3_0_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature3_0_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature3_1_0", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature3_1_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature3_1_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature3_2_0", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature3_2_1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3FeatureStructures1Feature3Feature3_2_2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());   

  }
 
  @Test
  public void testReset() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    Annotation1 annotation1 = new Annotation1(cas);
    annotation1.setBegin(0);
    annotation1.setEnd(6);
    annotation1.addToIndexes();
    Annotation1 annotation2 = new Annotation1(cas);
    annotation2.setBegin(7);
    annotation2.setEnd(13);
    annotation2.addToIndexes();
   
    Annotation1 annotation3 = new Annotation1(cas);
    annotation3.setBegin(14);
    annotation3.setEnd(20);
    annotation3.addToIndexes();
   
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1");
    Token nextToken = annotationTokenStream.next();
    nextToken = annotationTokenStream.next();
    nextToken = annotationTokenStream.next();
    annotationTokenStream.reset();

    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token1", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(0, nextToken.startOffset());
    assertEquals(6, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token2", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(7, nextToken.startOffset());
    assertEquals(13, nextToken.endOffset());
   
    nextToken = annotationTokenStream.next();
    assertNotNull(nextToken);
    assertEquals("token3", new String(nextToken.termBuffer(), 0, nextToken.termLength()));
    assertEquals(14, nextToken.startOffset());
    assertEquals(20, nextToken.endOffset());
  }
 
  @Test
  public void testValidate() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1");
    Type annotation1Type = (Type) cas.getTypeSystem().getType(Annotation1.class.getCanonicalName());
    annotationTokenStream.validate(annotation1Type, Lists.newArrayList("featureString"), null);   
  }
 
  @Test(expected= InvalidTokenSourceException.class)
  public void testValidateFail() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    AnnotationTokenStream annotationTokenStream = new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation1");
    Type annotation1Type = (Type) cas.getTypeSystem().getType(Annotation1.class.getCanonicalName());
    annotationTokenStream.validate(annotation1Type, Lists.newArrayList("featureStringss"), null);   
  }

  @Test(expected= InvalidTokenSourceException.class)
  public void testValidateFailWithWrongType() throws Exception{
    JCas cas = createCasWithText("token1 token2 token3");
    new AnnotationTokenStream(cas, CAS.NAME_DEFAULT_SOFA, "org.apache.uima.lucas.indexer.types.test.Annotation3");   
  }
}
TOP

Related Classes of org.apache.uima.lucas.indexer.analysis.AnnotationTokenStreamTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.