/******************************************************************************* * Copyright 2015-2016 - CNRS (Centre National de Recherche Scientifique) * * 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 eu.project.ttc.test.unit.models; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Before; import org.junit.Test; import eu.project.ttc.models.Document; import eu.project.ttc.models.OccurrenceType; import eu.project.ttc.models.Term; import eu.project.ttc.models.TermOccurrence; import eu.project.ttc.test.unit.Fixtures; public class DocumentSpec { private Document doc1; private Term term1; private Term term2; private Term term3; private TermOccurrence o1; private TermOccurrence o2; private TermOccurrence o3; private TermOccurrence o4; private TermOccurrence o5; private TermOccurrence o6; private TermOccurrence o7; @Before public void setTerms() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { this.term1 = Fixtures.term1(); this.term2 = Fixtures.term2(); // single word this.term3 = Fixtures.term3(); this.doc1 = Fixtures.document1(); o1 = new TermOccurrence(term1, "o1", doc1, 4, 6); o1.setPrimaryOccurrence(true); o2 = new TermOccurrence(term2, "o2", doc1, 7, 10); o2.setPrimaryOccurrence(true); o3 = new TermOccurrence(term2, "o3", doc1, 10, 18); o3.setPrimaryOccurrence(true); o4 = new TermOccurrence(term1, "o4", doc1, 18, 25); o4.setPrimaryOccurrence(false); o5 = new TermOccurrence(term2, "o5", doc1, 25, 30); o5.setPrimaryOccurrence(true); o6 = new TermOccurrence(term3, "o6", doc1, 30, 35); o6.setPrimaryOccurrence(true); o7 = new TermOccurrence(term3, "o7", doc1, 35, 40); o7.setPrimaryOccurrence(false); addOcc(o1); addOcc(o2); addOcc(o3); addOcc(o4); addOcc(o5); addOcc(o6); addOcc(o7); } private void addOcc(TermOccurrence occ) { occ.getTerm().addOccurrence(occ); doc1.indexTermOccurrence(occ); } @Test public void testGetOccurrences() { // should order the occurrence list assertThat(doc1.getOccurrences()).extracting("coveredText").containsExactly( "o1","o2","o3","o4","o5","o6", "o7" ); } @Test public void testAddOccurrence() { assertThat(doc1.getOccurrences()).extracting("coveredText").containsExactly( "o1","o2","o3","o4","o5","o6", "o7" ); // Should reorder the occurrence list addOcc(new TermOccurrence(term1, "o8", doc1, 14, 20)); assertThat(doc1.getOccurrences()).extracting("coveredText").containsExactly( "o1","o2","o3","o8", "o4","o5","o6", "o7" ); } @Test public void testGetOccurrenceContextDoNotOverlap1() { assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.PRIMARY, 1)).containsExactly(o3, o5); TermOccurrence o8 = new TermOccurrence(term2, "o8", doc1, 20, 28); addOcc(o8); // o8 does not overlap with o4 and is returned instead of o5 assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.PRIMARY, 1)).containsExactly(o3, o5); } @Test public void testGetOccurrenceContextDoNotOverlap2() { assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.PRIMARY, 1)).containsExactly(o3, o5); TermOccurrence o8 = new TermOccurrence(term2, "o8", doc1, 20, 28); addOcc(o8); // o8 overlaps with o4 and is returned instead of o5 assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.PRIMARY, 1)).containsExactly(o3, o5); } @Test public void testGetOccurrenceContextPrimaryOnly() { // size 0 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.PRIMARY, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.PRIMARY, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.PRIMARY, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.PRIMARY, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.PRIMARY, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.PRIMARY, 0)).isEmpty(); // size 1 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.PRIMARY, 1)).containsExactly(o2); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.PRIMARY, 1)).containsExactly(o1, o3); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.PRIMARY, 1)).containsExactly(o2, o5); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.PRIMARY, 1)).containsExactly(o3, o5); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.PRIMARY, 1)).containsExactly(o3, o6); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.PRIMARY, 1)).containsExactly(o5); assertThat(doc1.getOccurrenceContext(o7, OccurrenceType.PRIMARY, 1)).containsExactly(o6); // size 2 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.PRIMARY, 2)).containsExactly(o2, o3); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.PRIMARY, 2)).containsExactly(o1, o3, o5); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.PRIMARY, 2)).hasSize(4).contains(o1, o2, o5, o6); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.PRIMARY, 2)).hasSize(4).contains(o2, o3, o5, o6); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.PRIMARY, 2)).hasSize(3).contains(o2, o3, o6); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.PRIMARY, 2)).hasSize(2).contains(o3, o5); assertThat(doc1.getOccurrenceContext(o7, OccurrenceType.PRIMARY, 2)).hasSize(2).contains(o5, o6); // size 3 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.PRIMARY, 3)).hasSize(3).contains(o2, o3, o5); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.PRIMARY, 3)).hasSize(4).contains(o1, o3, o5, o6); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.PRIMARY, 3)).hasSize(4).contains(o1, o2, o5, o6); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.PRIMARY, 3)).hasSize(5).contains(o1, o2, o3, o5, o6); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.PRIMARY, 3)).hasSize(4).contains(o1, o2, o3, o6); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.PRIMARY, 3)).hasSize(3).contains(o2, o3, o5); assertThat(doc1.getOccurrenceContext(o7, OccurrenceType.PRIMARY, 3)).hasSize(3).contains(o3, o5, o6); // size 10 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.PRIMARY, 13)).hasSize(4).contains(o2, o3, o5, o6); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.PRIMARY, 13)).hasSize(4).contains(o1, o3, o5, o6); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.PRIMARY, 13)).hasSize(4).contains(o1, o2, o5, o6); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.PRIMARY, 13)).hasSize(5).contains(o1, o2, o3, o5, o6); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.PRIMARY, 13)).hasSize(4).contains(o1, o2, o3, o6); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.PRIMARY, 13)).hasSize(4).contains(o1, o2, o3, o5); assertThat(doc1.getOccurrenceContext(o7,OccurrenceType.PRIMARY, 13)).hasSize(5).contains(o1, o2, o3, o5, o6); } @Test public void testGetOccurrenceContext() { // size 0 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.SINGLE_WORD, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.SINGLE_WORD, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.SINGLE_WORD, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.SINGLE_WORD, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.SINGLE_WORD, 0)).isEmpty(); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.SINGLE_WORD, 0)).isEmpty(); // size 1 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.SINGLE_WORD, 1)).containsExactly(o2); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.SINGLE_WORD, 1)).containsExactly(o3); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.SINGLE_WORD, 1)).containsExactly(o2, o5); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.SINGLE_WORD, 1)).containsExactly(o3, o5); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.SINGLE_WORD, 1)).containsExactly(o3); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.SINGLE_WORD, 1)).containsExactly(o5); assertThat(doc1.getOccurrenceContext(o7, OccurrenceType.SINGLE_WORD, 1)).containsExactly(o5); // size 2 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.SINGLE_WORD, 2)).containsExactly(o2, o3); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.SINGLE_WORD, 2)).containsExactly(o3, o5); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.SINGLE_WORD, 2)).containsExactly(o2, o5); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.SINGLE_WORD, 2)).containsExactly(o3, o2, o5); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.SINGLE_WORD, 2)).containsExactly(o3, o2); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.SINGLE_WORD, 2)).containsExactly(o5, o3); assertThat(doc1.getOccurrenceContext(o7, OccurrenceType.SINGLE_WORD, 2)).containsExactly(o5, o3); // size 3 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.SINGLE_WORD, 3)).containsExactly(o2, o3, o5); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.SINGLE_WORD, 3)).containsExactly(o3, o5); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.SINGLE_WORD, 3)).containsExactly(o2, o5); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.SINGLE_WORD, 3)).containsExactly(o3, o2, o5); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.SINGLE_WORD, 3)).containsExactly(o3, o2); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.SINGLE_WORD, 3)).containsExactly(o5, o3, o2); assertThat(doc1.getOccurrenceContext(o7, OccurrenceType.SINGLE_WORD, 3)).containsExactly(o5, o3, o2); // size 10 assertThat(doc1.getOccurrenceContext(o1, OccurrenceType.SINGLE_WORD, 13)).containsExactly(o2, o3, o5); assertThat(doc1.getOccurrenceContext(o2, OccurrenceType.SINGLE_WORD, 13)).containsExactly(o3, o5); assertThat(doc1.getOccurrenceContext(o3, OccurrenceType.SINGLE_WORD, 13)).containsExactly(o2, o5); assertThat(doc1.getOccurrenceContext(o4, OccurrenceType.SINGLE_WORD, 13)).containsExactly(o3, o2, o5); assertThat(doc1.getOccurrenceContext(o5, OccurrenceType.SINGLE_WORD, 13)).containsExactly(o3, o2); assertThat(doc1.getOccurrenceContext(o6, OccurrenceType.SINGLE_WORD, 13)).containsExactly(o5, o3, o2); assertThat(doc1.getOccurrenceContext(o7, OccurrenceType.SINGLE_WORD, 13)).containsExactly(o5, o3, o2); } }