1 /**
2  * Filename    : TestReferenceGlyph.cpp
3  * Description : Unit tests for ReferenceGlyph
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/ReferenceGlyph.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 ReferenceGlyph * SRG;
58 static LayoutPkgNamespaces* LN;
59 
60 void
ReferenceGlyphTest_setup(void)61 ReferenceGlyphTest_setup (void)
62 {
63   LN = new LayoutPkgNamespaces();
64   SRG = new (std::nothrow) ReferenceGlyph(LN);
65 
66   if (SRG == NULL)
67   {
68     fail("new(std::nothrow) ReferenceGlyph() returned a NULL pointer.");
69   }
70 
71 }
72 
73 void
ReferenceGlyphTest_teardown(void)74 ReferenceGlyphTest_teardown (void)
75 {
76   delete SRG;
77   delete LN;
78 }
79 
START_TEST(test_ReferenceGlyph_new)80 START_TEST (test_ReferenceGlyph_new )
81 {
82   fail_unless( SRG->getTypeCode()   == SBML_LAYOUT_REFERENCEGLYPH );
83   fail_unless( SRG->getMetaId()     == "" );
84   fail_unless( !SRG->isSetId() );
85   fail_unless( !SRG->isSetReferenceId() );
86   fail_unless( !SRG->isSetGlyphId() );
87   fail_unless( !SRG->isSetRole() );
88   fail_unless( SRG->getRole() == "" );
89   fail_unless( SRG->getCurve() != NULL);
90   fail_unless( !SRG->isSetCurve());
91 }
92 END_TEST
93 
START_TEST(test_ReferenceGlyph_new_with_data)94 START_TEST (test_ReferenceGlyph_new_with_data)
95 {
96   std::string sid="TestReferenceGlyph";
97   std::string glyphId="TestGlyph";
98   std::string referenceId="TestReference";
99   ReferenceGlyph* srg=new ReferenceGlyph( LN, sid,
100                                          glyphId,
101                                          referenceId,
102                                          "substrate"
103                                          );
104 
105   fail_unless( srg->getTypeCode()   == SBML_LAYOUT_REFERENCEGLYPH );
106   fail_unless( srg->getMetaId()     == "" );
107   fail_unless( srg->isSetId() );
108   fail_unless( srg->getId() == sid);
109   fail_unless( srg->isSetReferenceId() );
110   fail_unless( srg->getReferenceId() == referenceId);
111   fail_unless( srg->isSetGlyphId() );
112   fail_unless( srg->getGlyphId() == glyphId);
113   fail_unless( srg->isSetRole());
114   fail_unless( srg->getRole() == "substrate" );
115   fail_unless( srg->getCurve() != NULL);
116   fail_unless( !srg->isSetCurve());
117 
118   delete srg;
119 }
120 END_TEST
121 
START_TEST(test_ReferenceGlyph_setGlyphId)122 START_TEST (test_ReferenceGlyph_setGlyphId)
123 {
124   std::string glyphId="TestGlyph";
125   SRG->setGlyphId(glyphId);
126   fail_unless(SRG->isSetGlyphId());
127   fail_unless(SRG->getGlyphId() == glyphId);
128   SRG->setGlyphId("");
129   fail_unless(!SRG->isSetGlyphId());
130 }
131 END_TEST
132 
START_TEST(test_ReferenceGlyph_setReferenceId)133 START_TEST (test_ReferenceGlyph_setReferenceId)
134 {
135   std::string referenceId="TestReference";
136   SRG->setReferenceId(referenceId);
137   fail_unless(SRG->isSetReferenceId());
138   fail_unless(SRG->getReferenceId() == referenceId);
139   SRG->setReferenceId("");
140   fail_unless(!SRG->isSetReferenceId());
141 }
142 END_TEST
143 
START_TEST(test_ReferenceGlyph_setRole)144 START_TEST (test_ReferenceGlyph_setRole)
145 {
146   SRG->setRole("modifier");
147   fail_unless(SRG->isSetRole());
148   fail_unless(SRG->getRole() == "modifier");
149 }
150 END_TEST
151 
152 
START_TEST(test_ReferenceGlyph_getRole)153 START_TEST ( test_ReferenceGlyph_getRole )
154 {
155   SRG->setRole("undefined");
156   fail_unless(SRG->getRole() == "undefined");
157   SRG->setRole("substrate");
158   fail_unless(SRG->getRole() == "substrate");
159 }
160 END_TEST
161 
START_TEST(test_ReferenceGlyph_setCurve)162 START_TEST (test_ReferenceGlyph_setCurve)
163 {
164   Curve* c=new Curve();
165   LineSegment* ls=new LineSegment();
166   c->addCurveSegment(ls);
167   delete ls;
168   ls=new LineSegment();
169   c->addCurveSegment(ls);
170   delete ls;
171   SRG->setCurve(c);
172   fail_unless(SRG->isSetCurve());
173   fail_unless(SRG->getCurve()->getNumCurveSegments() == 2);
174   delete c;
175 }
176 END_TEST
177 
START_TEST(test_ReferenceGlyph_setCurve_NULL)178 START_TEST (test_ReferenceGlyph_setCurve_NULL)
179 {
180   SRG->setCurve(NULL);
181   fail_unless(!SRG->isSetCurve());
182   fail_unless(SRG->getCurve() != NULL);
183 }
184 END_TEST
185 
START_TEST(test_ReferenceGlyph_createLineSegment)186 START_TEST (test_ReferenceGlyph_createLineSegment)
187 {
188   LineSegment* ls=SRG->createLineSegment();
189   fail_unless(SRG->isSetCurve());
190   Point* p=ls->getStart();
191   fail_unless(p->getXOffset() == 0.0);
192   fail_unless(p->getYOffset() == 0.0);
193   fail_unless(p->getZOffset() == 0.0);
194   p=ls->getEnd();
195   fail_unless(p->getXOffset() == 0.0);
196   fail_unless(p->getYOffset() == 0.0);
197   fail_unless(p->getZOffset() == 0.0);
198 }
199 END_TEST
200 
START_TEST(test_ReferenceGlyph_createCubicBezier)201 START_TEST (test_ReferenceGlyph_createCubicBezier)
202 {
203   CubicBezier* cb=SRG->createCubicBezier();
204   fail_unless(SRG->isSetCurve());
205   Point* p=cb->getStart();
206   fail_unless(p->getXOffset() == 0.0);
207   fail_unless(p->getYOffset() == 0.0);
208   fail_unless(p->getZOffset() == 0.0);
209   p=cb->getBasePoint1();
210   fail_unless(p->getXOffset() == 0.0);
211   fail_unless(p->getYOffset() == 0.0);
212   fail_unless(p->getZOffset() == 0.0);
213   p=cb->getBasePoint2();
214   fail_unless(p->getXOffset() == 0.0);
215   fail_unless(p->getYOffset() == 0.0);
216   fail_unless(p->getZOffset() == 0.0);
217   p=cb->getEnd();
218   fail_unless(p->getXOffset() == 0.0);
219   fail_unless(p->getYOffset() == 0.0);
220   fail_unless(p->getZOffset() == 0.0);
221 }
222 END_TEST
223 
START_TEST(test_ReferenceGlyph_copyConstructor)224 START_TEST ( test_ReferenceGlyph_copyConstructor )
225 {
226   ReferenceGlyph* srg1=new ReferenceGlyph();
227   XMLNode notes;
228   srg1->setNotes(&notes);
229   XMLNode annotation;
230   srg1->setAnnotation(&annotation);
231   srg1->getCurve()->createLineSegment();
232   srg1->getCurve()->createLineSegment();
233   srg1->getCurve()->createCubicBezier();
234   srg1->getCurve()->createLineSegment();
235   srg1->getCurve()->createLineSegment();
236   srg1->getCurve()->createCubicBezier();
237   srg1->getCurve()->createLineSegment();
238   srg1->getCurve()->createLineSegment();
239   srg1->getCurve()->createCubicBezier();
240   ReferenceGlyph* srg2=new ReferenceGlyph(*srg1);
241   delete srg2;
242   delete srg1;
243 }
244 END_TEST
245 
START_TEST(test_ReferenceGlyph_assignmentOperator)246 START_TEST ( test_ReferenceGlyph_assignmentOperator )
247 {
248   ReferenceGlyph* srg1=new ReferenceGlyph();
249   XMLNode notes;
250   srg1->setNotes(&notes);
251   XMLNode annotation;
252   srg1->setAnnotation(&annotation);
253   srg1->getCurve()->createLineSegment();
254   srg1->getCurve()->createLineSegment();
255   srg1->getCurve()->createCubicBezier();
256   srg1->getCurve()->createLineSegment();
257   srg1->getCurve()->createLineSegment();
258   srg1->getCurve()->createCubicBezier();
259   srg1->getCurve()->createLineSegment();
260   srg1->getCurve()->createLineSegment();
261   srg1->getCurve()->createCubicBezier();
262   ReferenceGlyph srg2=*srg1;
263   delete srg1;
264 }
265 END_TEST
266 
267 
START_TEST(test_ReferenceGlyph_createWith)268 START_TEST ( test_ReferenceGlyph_createWith )
269 {
270   ReferenceGlyph* srg1= ReferenceGlyph_createWith("id", "glyphId", "referenceId", "product");
271   fail_unless(srg1->getId()          == "id");
272   fail_unless(srg1->getGlyphId()     == "glyphId");
273   fail_unless(srg1->getReferenceId() == "referenceId");
274   fail_unless(srg1->getRole()        == "product");
275   delete srg1;
276 
277   LayoutPkgNamespaces layoutns(3, 1, 1, "layout");
278   ReferenceGlyph srg(&layoutns, "id", "glyphId", "referenceId", "product");
279   fail_unless(srg.getId()          == "id");
280   fail_unless(srg.getGlyphId()     == "glyphId");
281   fail_unless(srg.getReferenceId() == "referenceId");
282   fail_unless(srg.getRole()        == "product");
283 }
284 END_TEST
285 
286 
287 
288 Suite *
create_suite_ReferenceGlyph(void)289 create_suite_ReferenceGlyph (void)
290 {
291   Suite *suite = suite_create("ReferenceGlyph");
292   TCase *tcase = tcase_create("ReferenceGlyph");
293 
294   tcase_add_checked_fixture( tcase,
295                             ReferenceGlyphTest_setup,
296                             ReferenceGlyphTest_teardown );
297 
298   tcase_add_test( tcase, test_ReferenceGlyph_new                );
299   tcase_add_test( tcase, test_ReferenceGlyph_new_with_data      );
300   tcase_add_test( tcase, test_ReferenceGlyph_setGlyphId         );
301   tcase_add_test( tcase, test_ReferenceGlyph_setReferenceId     );
302   tcase_add_test( tcase, test_ReferenceGlyph_setRole            );
303   tcase_add_test( tcase, test_ReferenceGlyph_getRole            );
304   tcase_add_test( tcase, test_ReferenceGlyph_setCurve           );
305   tcase_add_test( tcase, test_ReferenceGlyph_setCurve_NULL      );
306   tcase_add_test( tcase, test_ReferenceGlyph_createLineSegment  );
307   tcase_add_test( tcase, test_ReferenceGlyph_createCubicBezier  );
308   tcase_add_test( tcase, test_ReferenceGlyph_copyConstructor    );
309   tcase_add_test( tcase, test_ReferenceGlyph_assignmentOperator );
310   tcase_add_test( tcase, test_ReferenceGlyph_createWith         );
311 
312   suite_add_tcase(suite, tcase);
313 
314   return suite;
315 }
316 
317 
318 
319 END_C_DECLS
320