View Javadoc
1   package ubic.basecode.ontology.providers;
2   
3   import com.hp.hpl.jena.vocabulary.OWL2;
4   import org.junit.BeforeClass;
5   import org.junit.Test;
6   import ubic.basecode.ontology.AbstractOntologyTest;
7   import ubic.basecode.ontology.OntologyTermTest;
8   import ubic.basecode.ontology.model.OntologyTerm;
9   import ubic.basecode.ontology.search.OntologySearchException;
10  import ubic.basecode.ontology.search.OntologySearchResult;
11  
12  import java.io.IOException;
13  import java.io.InputStream;
14  import java.util.Arrays;
15  import java.util.Collection;
16  import java.util.stream.Collectors;
17  import java.util.zip.GZIPInputStream;
18  
19  import static java.util.Objects.requireNonNull;
20  import static org.junit.Assert.*;
21  
22  public class UberonOntologyServiceTest extends AbstractOntologyTest {
23  
24      private static OntologyService uberon;
25  
26      @BeforeClass
27      public static void initializeUberon() throws IOException {
28          uberon = new UberonOntologyService();
29          try ( InputStream is = new GZIPInputStream( requireNonNull( OntologyTermTest.class.getResourceAsStream( "/data/uberon.owl.gz" ) ) ) ) {
30              // FIXME: indexing Uberon is very slow, so we disable it so if the tests are breaking, try force-indexing
31              uberon.initialize( is, false );
32          }
33      }
34  
35      @Test
36      public void testUberon() {
37          assertEquals( "Uber-anatomy ontology", uberon.getName() );
38          assertNotNull( uberon.getDescription() );
39  
40          OntologyTerm t = uberon.getTerm( "http://purl.obolibrary.org/obo/BFO_0000001" );
41          assertNotNull( t );
42          assertTrue( t.isRoot() );
43          assertFalse( t.isObsolete() );
44  
45          OntologyTerm t2 = uberon.getTerm( "http://purl.obolibrary.org/obo/BFO_0000002" );
46          assertNotNull( t2 );
47          assertFalse( t2.isRoot() );
48          assertFalse( t2.isObsolete() );
49  
50          OntologyTerm t3 = uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0007234" );
51          assertNotNull( t3 );
52          assertTrue( t3.isObsolete() );
53      }
54  
55      @Test
56      public void testGetParentsFromMultipleTerms() {
57          OntologyTerm brain = uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0000955" );
58          OntologyTerm liver = uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0002107" );
59          Collection<OntologyTerm> children = uberon.getParents( Arrays.asList( brain, liver ), false, true );
60          assertEquals( 41, children.size() );
61          assertFalse( children.contains( uberon.getTerm( OWL2.Nothing.getURI() ) ) );
62      }
63  
64      @Test
65      public void testGetParentsHasPart() {
66          OntologyTerm t = uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0000955" );
67          assertNotNull( t );
68          Collection<OntologyTerm> parents = t.getParents( true );
69          assertEquals( 4, parents.size() );
70          // does not contain itself
71          assertFalse( parents.contains( t ) );
72          // via subclass
73          assertTrue( parents.contains( uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0004121" ) ) );
74          assertTrue( parents.contains( uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0000062" ) ) );
75          // via part of, central nervous system
76          assertTrue( parents.contains( uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0001017" ) ) );
77          assertFalse( parents.contains( uberon.getTerm( OWL2.Thing.getURI() ) ) );
78      }
79  
80      @Test
81      public void testGetChildrenHasPart() {
82          OntologyTerm t = uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0000955" );
83          assertNotNull( t );
84          assertEquals( 81, t.getChildren( true ).size() );
85          Collection<OntologyTerm> children = t.getChildren( false );
86          assertEquals( 1995, children.size() );
87          // via subclass of, insect adult brain
88          assertTrue( children.contains( uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_6003624" ) ) );
89          // via part of, nucleus of brain
90          assertTrue( children.contains( uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0002308" ) ) );
91          // does not contain owl:Nothing
92          assertFalse( children.contains( uberon.getTerm( OWL2.Nothing.getURI() ) ) );
93      }
94  
95      @Test
96      public void testGetChildrenFromMultipleTerms() {
97          OntologyTerm brain = uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0000955" );
98          OntologyTerm liver = uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0002107" );
99          Collection<OntologyTerm> children = uberon.getChildren( Arrays.asList( brain, liver ), false, true );
100         assertEquals( 2077, children.size() );
101     }
102 
103     @Test
104     public void testGetChildrenFromMultipleTermsWithSearch() throws OntologySearchException {
105         Collection<OntologySearchResult<OntologyTerm>> terms = uberon.findTerm( "brain", 500 );
106         Collection<OntologyTerm> matches = uberon.getChildren( terms.stream().map( OntologySearchResult::getResult ).collect( Collectors.toSet() ), false, true );
107         assertEquals( 2684, matches.size() );
108     }
109 
110     @Test
111     public void testFindTerm() throws OntologySearchException {
112         assertEquals( 98, uberon.findTerm( "brain", 500 ).size() );
113         assertEquals( 103, uberon.findTerm( "brain", 500, true ).size() );
114         OntologySearchResult<OntologyTerm> firstResult = uberon.findTerm( "brain", 500 ).iterator().next();
115         assertNotNull( firstResult );
116         assertEquals( 1.5367, firstResult.getScore(), 0.0001 );
117     }
118 }