1 /**
2  * Filename    : TestSpeciesReferenceGlyph.cpp
3  * Description : Unit tests for SpeciesReferenceGlyph
4  * Organization: European Media Laboratories Research gGmbH
5  * Created     : 2005-05-03
6  *
7  * <!--------------------------------------------------------------------------
8  * This file is part of libSBML.  Please visit http://sbml.org for more
9  * information about SBML, and the latest version of libSBML.
10  *
11  * Copyright (C) 2020 jointly by the following organizations:
12  *     1. California Institute of Technology, Pasadena, CA, USA
13  *     2. University of Heidelberg, Heidelberg, Germany
14  *     3. University College London, London, UK
15  *
16  * Copyright (C) 2019 jointly by the following organizations:
17  *     1. California Institute of Technology, Pasadena, CA, USA
18  *     2. University of Heidelberg, Heidelberg, Germany
19  *
20  * Copyright (C) 2013-2018 jointly by the following organizations:
21  *     1. California Institute of Technology, Pasadena, CA, USA
22  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
23  *     3. University of Heidelberg, Heidelberg, Germany
24  *
25  * Copyright (C) 2009-2013 jointly by the following organizations:
26  *     1. California Institute of Technology, Pasadena, CA, USA
27  *     2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
28  *
29  * Copyright (C) 2004-2008 by European Media Laboratories Research gGmbH,
30  *     Heidelberg, Germany
31  *
32  * This library is free software; you can redistribute it and/or modify it
33  * under the terms of the GNU Lesser General Public License as published by
34  * the Free Software Foundation.  A copy of the license agreement is provided
35  * in the file named "LICENSE.txt" included with this software distribution
36  * and also available online as http://sbml.org/software/libsbml/license.html
37  * ------------------------------------------------------------------------ -->
38  */
39 
40 #include <string>
41 
42 #include <sbml/common/common.h>
43 #include <sbml/common/extern.h>
44 
45 #include <sbml/packages/layout/sbml/SpeciesReferenceGlyph.h>
46 #include <sbml/packages/layout/sbml/LineSegment.h>
47 #include <sbml/packages/layout/sbml/CubicBezier.h>
48 #include <sbml/packages/layout/sbml/Curve.h>
49 #include <sbml/packages/layout/sbml/Point.h>
50 
51 #include <check.h>
52 
53 LIBSBML_CPP_NAMESPACE_USE
54 
55 BEGIN_C_DECLS
56 
57 static SpeciesReferenceGlyph * SRG;
58 static LayoutPkgNamespaces* LN;
59 
60 void
SpeciesReferenceGlyphTest_setup(void)61 SpeciesReferenceGlyphTest_setup (void)
62 {
63   LN = new LayoutPkgNamespaces();
64   SRG = new (std::nothrow) SpeciesReferenceGlyph(LN);
65 
66   if (SRG == NULL)
67   {
68     fail("new(std::nothrow) SpeciesReferenceGlyph() returned a NULL pointer.");
69   }
70 
71 }
72 
73 void
SpeciesReferenceGlyphTest_teardown(void)74 SpeciesReferenceGlyphTest_teardown (void)
75 {
76   delete SRG;
77   delete LN;
78 }
79 
START_TEST(test_SpeciesReferenceGlyph_new)80 START_TEST (test_SpeciesReferenceGlyph_new )
81 {
82   fail_unless( SRG->getTypeCode()   == SBML_LAYOUT_SPECIESREFERENCEGLYPH );
83   fail_unless( SRG->getMetaId()     == "" );
84   //   fail_unless( SRG->getNotes()      == "" );
85   //   fail_unless( SRG->getAnnotation() == "" );
86 
87   fail_unless( !SRG->isSetId() );
88   fail_unless( !SRG->isSetSpeciesReferenceId() );
89   fail_unless( !SRG->isSetSpeciesGlyphId() );
90   fail_unless( !SRG->isSetRole() );
91   fail_unless(SRG->getRole() == SPECIES_ROLE_INVALID);
92   fail_unless( SRG->getCurve() != NULL);
93   fail_unless( !SRG->isSetCurve());
94 }
95 END_TEST
96 
START_TEST(test_SpeciesReferenceGlyph_new_with_data)97 START_TEST (test_SpeciesReferenceGlyph_new_with_data)
98 {
99   std::string sid="TestSpeciesReferenceGlyph";
100   std::string glyphId="TestSpeciesGlyph";
101   std::string referenceId="TestSpeciesReference";
102   SpeciesReferenceGlyph* srg=new SpeciesReferenceGlyph( LN, sid,
103                                                        glyphId,
104                                                        referenceId,
105                                                        SPECIES_ROLE_SUBSTRATE
106                                                        );
107 
108   fail_unless( srg->getTypeCode()   == SBML_LAYOUT_SPECIESREFERENCEGLYPH );
109   fail_unless( srg->getMetaId()     == "" );
110   //   fail_unless( srg->getNotes()      == "" );
111   //   fail_unless( srg->getAnnotation() == "" );
112 
113   fail_unless( srg->isSetId() );
114   fail_unless( srg->getId() == sid);
115   fail_unless( srg->isSetSpeciesReferenceId() );
116   fail_unless( srg->getSpeciesReferenceId() == referenceId);
117   fail_unless( srg->isSetSpeciesGlyphId() );
118   fail_unless( srg->getSpeciesGlyphId() == glyphId);
119   fail_unless( srg->isSetRole());
120   fail_unless( srg->getRole() == SPECIES_ROLE_SUBSTRATE );
121   fail_unless( srg->getCurve() != NULL);
122   fail_unless( !srg->isSetCurve());
123 
124   delete srg;
125 }
126 END_TEST
127 
START_TEST(test_SpeciesReferenceGlyph_setSpeciesGlyphId)128 START_TEST (test_SpeciesReferenceGlyph_setSpeciesGlyphId)
129 {
130   std::string glyphId="TestSpeciesGlyph";
131   SRG->setSpeciesGlyphId(glyphId);
132   fail_unless(SRG->isSetSpeciesGlyphId());
133   fail_unless(SRG->getSpeciesGlyphId() == glyphId);
134   SRG->setSpeciesGlyphId("");
135   fail_unless(!SRG->isSetSpeciesGlyphId());
136 }
137 END_TEST
138 
START_TEST(test_SpeciesReferenceGlyph_setSpeciesReferenceId)139 START_TEST (test_SpeciesReferenceGlyph_setSpeciesReferenceId)
140 {
141   std::string referenceId="TestSpeciesReference";
142   SRG->setSpeciesReferenceId(referenceId);
143   fail_unless(SRG->isSetSpeciesReferenceId());
144   fail_unless(SRG->getSpeciesReferenceId() == referenceId);
145   SRG->setSpeciesReferenceId("");
146   fail_unless(!SRG->isSetSpeciesReferenceId());
147 }
148 END_TEST
149 
START_TEST(test_SpeciesReferenceGlyph_setRole)150 START_TEST (test_SpeciesReferenceGlyph_setRole)
151 {
152   SRG->setRole(SPECIES_ROLE_MODIFIER);
153   fail_unless(SRG->isSetRole());
154   fail_unless(SRG->getRole() == SPECIES_ROLE_MODIFIER);
155 }
156 END_TEST
157 
START_TEST(test_SpeciesReferenceGlyph_setRole_by_string)158 START_TEST (test_SpeciesReferenceGlyph_setRole_by_string)
159 {
160   SRG->setRole("undefined");
161   fail_unless(SRG->getRole()==SPECIES_ROLE_UNDEFINED);
162   SRG->setRole("substrate");
163   fail_unless(SRG->getRole()==SPECIES_ROLE_SUBSTRATE);
164   SRG->setRole("product");
165   fail_unless(SRG->getRole()==SPECIES_ROLE_PRODUCT);
166   SRG->setRole("sidesubstrate");
167   fail_unless(SRG->getRole()==SPECIES_ROLE_SIDESUBSTRATE);
168   SRG->setRole("sideproduct");
169   fail_unless(SRG->getRole()==SPECIES_ROLE_SIDEPRODUCT);
170   SRG->setRole("modifier");
171   fail_unless(SRG->getRole()==SPECIES_ROLE_MODIFIER);
172   SRG->setRole("activator");
173   fail_unless(SRG->getRole()==SPECIES_ROLE_ACTIVATOR);
174   SRG->setRole("inhibitor");
175   fail_unless(SRG->getRole()==SPECIES_ROLE_INHIBITOR);
176   SRG->setRole("test");
177   fail_unless(SRG->getRole() == SPECIES_ROLE_INVALID);
178 }
179 END_TEST
180 
START_TEST(test_SpeciesReferenceGlyph_getRoleString)181 START_TEST ( test_SpeciesReferenceGlyph_getRoleString )
182 {
183   SRG->setRole(SPECIES_ROLE_INVALID);
184   fail_unless(SRG->getRoleString() == "invalid");
185   SRG->setRole(SPECIES_ROLE_UNDEFINED);
186   fail_unless(SRG->getRoleString() == "undefined");
187   SRG->setRole(SPECIES_ROLE_SUBSTRATE);
188   fail_unless(SRG->getRoleString() == "substrate");
189   SRG->setRole(SPECIES_ROLE_PRODUCT);
190   fail_unless(SRG->getRoleString() == "product");
191   SRG->setRole(SPECIES_ROLE_SIDESUBSTRATE);
192   fail_unless(SRG->getRoleString() == "sidesubstrate");
193   SRG->setRole(SPECIES_ROLE_SIDEPRODUCT);
194   fail_unless(SRG->getRoleString() == "sideproduct");
195   SRG->setRole(SPECIES_ROLE_MODIFIER);
196   fail_unless(SRG->getRoleString() == "modifier");
197   SRG->setRole(SPECIES_ROLE_ACTIVATOR);
198   fail_unless(SRG->getRoleString() == "activator");
199   SRG->setRole(SPECIES_ROLE_INHIBITOR);
200   fail_unless(SRG->getRoleString() == "inhibitor");
201 }
202 END_TEST
203 
START_TEST(test_SpeciesReferenceGlyph_setCurve)204 START_TEST (test_SpeciesReferenceGlyph_setCurve)
205 {
206   Curve* c=new Curve();
207   LineSegment* ls=new LineSegment();
208   c->addCurveSegment(ls);
209   delete ls;
210   ls=new LineSegment();
211   c->addCurveSegment(ls);
212   delete ls;
213   SRG->setCurve(c);
214   fail_unless(SRG->isSetCurve());
215   fail_unless(SRG->getCurve()->getNumCurveSegments() == 2);
216   delete c;
217 }
218 END_TEST
219 
START_TEST(test_SpeciesReferenceGlyph_setCurve_NULL)220 START_TEST (test_SpeciesReferenceGlyph_setCurve_NULL)
221 {
222   SRG->setCurve(NULL);
223   fail_unless(!SRG->isSetCurve());
224   fail_unless(SRG->getCurve() != NULL);
225 }
226 END_TEST
227 
START_TEST(test_SpeciesReferenceGlyph_createLineSegment)228 START_TEST (test_SpeciesReferenceGlyph_createLineSegment)
229 {
230   LineSegment* ls=SRG->createLineSegment();
231   fail_unless(SRG->isSetCurve());
232   Point* p=ls->getStart();
233   fail_unless(p->getXOffset() == 0.0);
234   fail_unless(p->getYOffset() == 0.0);
235   fail_unless(p->getZOffset() == 0.0);
236   p=ls->getEnd();
237   fail_unless(p->getXOffset() == 0.0);
238   fail_unless(p->getYOffset() == 0.0);
239   fail_unless(p->getZOffset() == 0.0);
240 }
241 END_TEST
242 
START_TEST(test_SpeciesReferenceGlyph_createCubicBezier)243 START_TEST (test_SpeciesReferenceGlyph_createCubicBezier)
244 {
245   CubicBezier* cb=SRG->createCubicBezier();
246   fail_unless(SRG->isSetCurve());
247   Point* p=cb->getStart();
248   fail_unless(p->getXOffset() == 0.0);
249   fail_unless(p->getYOffset() == 0.0);
250   fail_unless(p->getZOffset() == 0.0);
251   p=cb->getBasePoint1();
252   fail_unless(p->getXOffset() == 0.0);
253   fail_unless(p->getYOffset() == 0.0);
254   fail_unless(p->getZOffset() == 0.0);
255   p=cb->getBasePoint2();
256   fail_unless(p->getXOffset() == 0.0);
257   fail_unless(p->getYOffset() == 0.0);
258   fail_unless(p->getZOffset() == 0.0);
259   p=cb->getEnd();
260   fail_unless(p->getXOffset() == 0.0);
261   fail_unless(p->getYOffset() == 0.0);
262   fail_unless(p->getZOffset() == 0.0);
263 }
264 END_TEST
265 
START_TEST(test_SpeciesReferenceGlyph_copyConstructor)266 START_TEST ( test_SpeciesReferenceGlyph_copyConstructor )
267 {
268   SpeciesReferenceGlyph* srg1=new SpeciesReferenceGlyph();
269   XMLNode notes;
270   srg1->setNotes(&notes);
271   XMLNode annotation;
272   srg1->setAnnotation(&annotation);
273   srg1->getCurve()->createLineSegment();
274   srg1->getCurve()->createLineSegment();
275   srg1->getCurve()->createCubicBezier();
276   srg1->getCurve()->createLineSegment();
277   srg1->getCurve()->createLineSegment();
278   srg1->getCurve()->createCubicBezier();
279   srg1->getCurve()->createLineSegment();
280   srg1->getCurve()->createLineSegment();
281   srg1->getCurve()->createCubicBezier();
282   SpeciesReferenceGlyph* srg2=new SpeciesReferenceGlyph(*srg1);
283   delete srg2;
284   delete srg1;
285 }
286 END_TEST
287 
START_TEST(test_SpeciesReferenceGlyph_assignmentOperator)288 START_TEST ( test_SpeciesReferenceGlyph_assignmentOperator )
289 {
290   SpeciesReferenceGlyph* srg1=new SpeciesReferenceGlyph();
291   XMLNode notes;
292   srg1->setNotes(&notes);
293   XMLNode annotation;
294   srg1->setAnnotation(&annotation);
295   srg1->getCurve()->createLineSegment();
296   srg1->getCurve()->createLineSegment();
297   srg1->getCurve()->createCubicBezier();
298   srg1->getCurve()->createLineSegment();
299   srg1->getCurve()->createLineSegment();
300   srg1->getCurve()->createCubicBezier();
301   srg1->getCurve()->createLineSegment();
302   srg1->getCurve()->createLineSegment();
303   srg1->getCurve()->createCubicBezier();
304   SpeciesReferenceGlyph srg2=*srg1;
305   delete srg1;
306 }
307 END_TEST
308 
309 
310 
START_TEST(test_SpeciesReferenceGlyph_createWith)311 START_TEST ( test_SpeciesReferenceGlyph_createWith )
312 {
313   SpeciesReferenceGlyph* srg1= SpeciesReferenceGlyph_createWith("id", "glyphId", "referenceId", SPECIES_ROLE_PRODUCT);
314   fail_unless(srg1->getId()                 == "id");
315   fail_unless(srg1->getSpeciesGlyphId()     == "glyphId");
316   fail_unless(srg1->getSpeciesReferenceId() == "referenceId");
317   fail_unless(srg1->getRole()               == SPECIES_ROLE_PRODUCT);
318   delete srg1;
319 
320   LayoutPkgNamespaces layoutns(3, 1, 1, "layout");
321   SpeciesReferenceGlyph srg(&layoutns, "id", "glyphId", "referenceId", SPECIES_ROLE_PRODUCT);
322   fail_unless(srg.getId()                 == "id");
323   fail_unless(srg.getSpeciesGlyphId()     == "glyphId");
324   fail_unless(srg.getSpeciesReferenceId() == "referenceId");
325   fail_unless(srg.getRole()               == SPECIES_ROLE_PRODUCT);
326 }
327 END_TEST
328 
329 
330 Suite *
create_suite_SpeciesReferenceGlyph(void)331 create_suite_SpeciesReferenceGlyph (void)
332 {
333   Suite *suite = suite_create("SpeciesReferenceGlyph");
334   TCase *tcase = tcase_create("SpeciesReferenceGlyph");
335 
336   tcase_add_checked_fixture( tcase,
337                             SpeciesReferenceGlyphTest_setup,
338                             SpeciesReferenceGlyphTest_teardown );
339 
340   tcase_add_test( tcase, test_SpeciesReferenceGlyph_new                   );
341   tcase_add_test( tcase, test_SpeciesReferenceGlyph_new_with_data         );
342   tcase_add_test( tcase, test_SpeciesReferenceGlyph_setSpeciesGlyphId     );
343   tcase_add_test( tcase, test_SpeciesReferenceGlyph_setSpeciesReferenceId );
344   tcase_add_test( tcase, test_SpeciesReferenceGlyph_setRole               );
345   tcase_add_test( tcase, test_SpeciesReferenceGlyph_getRoleString         );
346   tcase_add_test( tcase, test_SpeciesReferenceGlyph_setRole_by_string     );
347   tcase_add_test( tcase, test_SpeciesReferenceGlyph_setCurve              );
348   tcase_add_test( tcase, test_SpeciesReferenceGlyph_setCurve_NULL         );
349   tcase_add_test( tcase, test_SpeciesReferenceGlyph_createLineSegment     );
350   tcase_add_test( tcase, test_SpeciesReferenceGlyph_createCubicBezier     );
351   tcase_add_test( tcase, test_SpeciesReferenceGlyph_copyConstructor       );
352   tcase_add_test( tcase, test_SpeciesReferenceGlyph_assignmentOperator    );
353   tcase_add_test( tcase, test_SpeciesReferenceGlyph_createWith            );
354 
355   suite_add_tcase(suite, tcase);
356 
357   return suite;
358 }
359 
360 
361 
362 END_C_DECLS
363