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
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
71 assertFalse( parents.contains( t ) );
72
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
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
88 assertTrue( children.contains( uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_6003624" ) ) );
89
90 assertTrue( children.contains( uberon.getTerm( "http://purl.obolibrary.org/obo/UBERON_0002308" ) ) );
91
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 }