1 /**
2 * \file TestCopyAndClone.cpp
3 * \brief Test the copy and clone methods for annotation classes
4 * \author Sarah Keating
5 *
6 * <!--------------------------------------------------------------------------
7 * This file is part of libSBML. Please visit http://sbml.org for more
8 * information about SBML, and the latest version of libSBML.
9 *
10 * Copyright (C) 2020 jointly by the following organizations:
11 * 1. California Institute of Technology, Pasadena, CA, USA
12 * 2. University of Heidelberg, Heidelberg, Germany
13 * 3. University College London, London, UK
14 *
15 * Copyright (C) 2019 jointly by the following organizations:
16 * 1. California Institute of Technology, Pasadena, CA, USA
17 * 2. University of Heidelberg, Heidelberg, Germany
18 *
19 * Copyright (C) 2013-2018 jointly by the following organizations:
20 * 1. California Institute of Technology, Pasadena, CA, USA
21 * 2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
22 * 3. University of Heidelberg, Heidelberg, Germany
23 *
24 * Copyright (C) 2009-2013 jointly by the following organizations:
25 * 1. California Institute of Technology, Pasadena, CA, USA
26 * 2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
27 *
28 * Copyright (C) 2006-2008 by the California Institute of Technology,
29 * Pasadena, CA, USA
30 *
31 * Copyright (C) 2002-2005 jointly by the following organizations:
32 * 1. California Institute of Technology, Pasadena, CA, USA
33 * 2. Japan Science and Technology Agency, Japan
34 *
35 * This library is free software; you can redistribute it and/or modify it
36 * under the terms of the GNU Lesser General Public License as published by
37 * the Free Software Foundation. A copy of the license agreement is provided
38 * in the file named "LICENSE.txt" included with this software distribution
39 * and also available online as http://sbml.org/software/libsbml/license.html
40 * ---------------------------------------------------------------------- -->*/
41
42 #include <sbml/annotation/ModelHistory.h>
43 #include <sbml/annotation/ModelCreator.h>
44 #include <sbml/annotation/Date.h>
45 #include <sbml/annotation/CVTerm.h>
46 #include <sbml/SBase.h>
47
48 #include <check.h>
49
50
51 using namespace std;
52 LIBSBML_CPP_NAMESPACE_USE
53
54 static const string errMsg = "Level/version/namespaces combination is invalid";
55 static const string errMsg1 = "Null argument to copy constructor";
56 static const string errMsg2 = "Null argument to assignment operator";
57
58 CK_CPPSTART
START_TEST(test_Date_copyConstructor)59 START_TEST ( test_Date_copyConstructor )
60 {
61 Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
62
63 fail_unless(date->getMonth() == 12);
64 fail_unless(date->getSecond() == 45);
65
66 Date* date2=new Date(*date);
67
68 fail_unless(date2->getMonth() == 12);
69 fail_unless(date2->getSecond() == 45);
70
71 delete date2;
72 delete date;
73 }
74 END_TEST
75
START_TEST(test_Date_assignmentOperator)76 START_TEST ( test_Date_assignmentOperator )
77 {
78 Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
79
80 fail_unless(date->getMonth() == 12);
81 fail_unless(date->getSecond() == 45);
82
83 Date* date2=new Date();
84 (*date2) = *date;
85
86 fail_unless(date2->getMonth() == 12);
87 fail_unless(date2->getSecond() == 45);
88
89 delete date2;
90 delete date;
91
92 }
93 END_TEST
94
95
START_TEST(test_Date_clone)96 START_TEST ( test_Date_clone )
97 {
98 Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
99
100 fail_unless(date->getMonth() == 12);
101 fail_unless(date->getSecond() == 45);
102
103 Date* date2 = static_cast<Date*>(date->clone());
104
105 fail_unless(date2->getMonth() == 12);
106 fail_unless(date2->getSecond() == 45);
107
108 delete date2;
109 delete date;
110
111 }
112 END_TEST
113
114
START_TEST(test_Date_ConstructorException)115 START_TEST ( test_Date_ConstructorException )
116 {
117 string msg;
118 try
119 {
120 Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
121 delete date;
122 }
123 catch (SBMLConstructorException &e)
124 {
125 msg = e.what();
126 }
127 fail_unless(msg == "");
128
129
130 }
131 END_TEST
132
133
START_TEST(test_ModelCreator_copyConstructor)134 START_TEST ( test_ModelCreator_copyConstructor )
135 {
136 ModelCreator * mc = new ModelCreator();
137 mc->setFamilyName("Keating");
138 mc->setEmail("sbml-team@caltech.edu");
139
140 fail_unless(mc->getFamilyName() == "Keating");
141 fail_unless(mc->getEmail() == "sbml-team@caltech.edu");
142
143 ModelCreator* mc2=new ModelCreator(*mc);
144
145 fail_unless(mc2->getFamilyName() == "Keating");
146 fail_unless(mc2->getEmail() == "sbml-team@caltech.edu");
147
148 delete mc2;
149 delete mc;
150 }
151 END_TEST
152
153
START_TEST(test_ModelCreator_assignmentOperator)154 START_TEST ( test_ModelCreator_assignmentOperator )
155 {
156 ModelCreator * mc = new ModelCreator();
157 mc->setFamilyName("Keating");
158 mc->setEmail("sbml-team@caltech.edu");
159
160 fail_unless(mc->getFamilyName() == "Keating");
161 fail_unless(mc->getEmail() == "sbml-team@caltech.edu");
162
163 ModelCreator* mc2=new ModelCreator();
164 (*mc2) = *mc;
165
166 fail_unless(mc2->getFamilyName() == "Keating");
167 fail_unless(mc2->getEmail() == "sbml-team@caltech.edu");
168
169 delete mc2;
170 delete mc;
171
172 }
173 END_TEST
174
175
START_TEST(test_ModelCreator_clone)176 START_TEST ( test_ModelCreator_clone )
177 {
178 ModelCreator * mc = new ModelCreator();
179 mc->setFamilyName("Keating");
180 mc->setEmail("sbml-team@caltech.edu");
181
182 fail_unless(mc->getFamilyName() == "Keating");
183 fail_unless(mc->getEmail() == "sbml-team@caltech.edu");
184
185 ModelCreator* mc2 = static_cast<ModelCreator*>(mc->clone());
186
187 fail_unless(mc2->getFamilyName() == "Keating");
188 fail_unless(mc2->getEmail() == "sbml-team@caltech.edu");
189
190 delete mc2;
191 delete mc;
192
193 }
194 END_TEST
195
196
START_TEST(test_ModelCreator_ConstructorException)197 START_TEST ( test_ModelCreator_ConstructorException )
198 {
199 string msg;
200 try
201 {
202 ModelCreator * mc = new ModelCreator();
203 delete mc;
204 }
205 catch (SBMLConstructorException &e)
206 {
207 msg = e.what();
208 }
209 fail_unless(msg == "");
210
211 }
212 END_TEST
213
214
START_TEST(test_ModelHistory_copyConstructor)215 START_TEST ( test_ModelHistory_copyConstructor )
216 {
217 ModelHistory * mh = new ModelHistory();
218
219 ModelCreator *mc = new ModelCreator();
220 mc->setFamilyName("Keating");
221 mc->setGivenName("Sarah");
222 mc->setEmail("sbml-team@caltech.edu");
223
224 mh->addCreator(mc);
225 delete mc;
226
227 Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
228
229 mh->setCreatedDate(date);
230 delete date;
231
232 fail_unless(mh->getCreatedDate()->getMonth() == 12);
233 fail_unless(mh->getCreatedDate()->getSecond() == 45);
234
235 fail_unless(static_cast <ModelCreator*>
236 (mh->getListCreators()->get(0))->getFamilyName() == "Keating");
237
238 ModelHistory* mh2=new ModelHistory(*mh);
239
240 fail_unless(mh2->getCreatedDate()->getMonth() == 12);
241 fail_unless(mh2->getCreatedDate()->getSecond() == 45);
242
243 fail_unless(static_cast <ModelCreator*>(mh2->getListCreators()->get(0))->getFamilyName() == "Keating");
244
245 delete mh2;
246 delete mh;
247 }
248 END_TEST
249
250
START_TEST(test_ModelHistory_assignmentOperator)251 START_TEST ( test_ModelHistory_assignmentOperator )
252 {
253 ModelHistory * mh = new ModelHistory();
254
255 ModelCreator *mc = new ModelCreator();
256 mc->setGivenName("Sarah");
257 mc->setFamilyName("Keating");
258 mc->setEmail("sbml-team@caltech.edu");
259
260 mh->addCreator(mc);
261 delete mc;
262
263 Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
264
265 mh->setCreatedDate(date);
266 delete date;
267
268 fail_unless(mh->getCreatedDate()->getMonth() == 12);
269 fail_unless(mh->getCreatedDate()->getSecond() == 45);
270
271 fail_unless(static_cast <ModelCreator*>(mh->getListCreators()->get(0))->getFamilyName() == "Keating");
272
273 ModelHistory* mh2=new ModelHistory();
274 (*mh2) = *mh;
275
276 fail_unless(mh2->getCreatedDate()->getMonth() == 12);
277 fail_unless(mh2->getCreatedDate()->getSecond() == 45);
278
279 fail_unless(static_cast <ModelCreator*>(mh2->getListCreators()->get(0))->getFamilyName() == "Keating");
280
281 delete mh2;
282 delete mh;
283
284 }
285 END_TEST
286
287
START_TEST(test_ModelHistory_clone)288 START_TEST ( test_ModelHistory_clone )
289 {
290 ModelHistory * mh = new ModelHistory();
291
292 ModelCreator *mc = new ModelCreator();
293 mc->setFamilyName("Keating");
294 mc->setGivenName("Sarah");
295 mc->setEmail("sbml-team@caltech.edu");
296
297 mh->addCreator(mc);
298 delete mc;
299
300 Date * date = new Date(2005, 12, 30, 12, 15, 45, 1, 2, 0);
301
302 mh->setCreatedDate(date);
303 delete date;
304
305 fail_unless(mh->getCreatedDate()->getMonth() == 12);
306 fail_unless(mh->getCreatedDate()->getSecond() == 45);
307
308 fail_unless(static_cast <ModelCreator*>(mh->getListCreators()->get(0))->getFamilyName() == "Keating");
309
310 ModelHistory* mh2 = static_cast<ModelHistory*>(mh->clone());
311
312 fail_unless(mh2->getCreatedDate()->getMonth() == 12);
313 fail_unless(mh2->getCreatedDate()->getSecond() == 45);
314
315 fail_unless(static_cast <ModelCreator*>(mh2->getListCreators()->get(0))->getFamilyName() == "Keating");
316
317 delete mh2;
318 delete mh;
319
320 }
321 END_TEST
322
323
START_TEST(test_ModelHistory_ConstructorException)324 START_TEST ( test_ModelHistory_ConstructorException )
325 {
326 string msg;
327 try
328 {
329 ModelHistory * mh = new ModelHistory();
330 delete mh;
331 }
332 catch (SBMLConstructorException &e)
333 {
334 msg = e.what();
335 }
336 fail_unless(msg == "");
337
338 }
339 END_TEST
340
341
START_TEST(test_CVTerm_copyConstructor)342 START_TEST ( test_CVTerm_copyConstructor )
343 {
344
345 CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
346 CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
347
348 fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
349 fail_unless(CVTerm1->getResources()->getLength() == 1);
350 fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
351
352 CVTerm* CVTerm2=new CVTerm(*CVTerm1);
353
354 fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
355 fail_unless(CVTerm2->getResources()->getLength() == 1);
356 fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
357
358 delete CVTerm2;
359 delete CVTerm1;
360 }
361 END_TEST
362
363
START_TEST(test_CVTerm_assignmentOperator)364 START_TEST ( test_CVTerm_assignmentOperator )
365 {
366 CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
367 CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
368
369 fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
370 fail_unless(CVTerm1->getResources()->getLength() == 1);
371 fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
372
373
374 CVTerm* CVTerm2=new CVTerm();
375 (*CVTerm2) = *CVTerm1;
376
377 fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
378 fail_unless(CVTerm2->getResources()->getLength() == 1);
379 fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
380
381 delete CVTerm2;
382 delete CVTerm1;
383 }
384 END_TEST
385
386
START_TEST(test_CVTerm_clone)387 START_TEST ( test_CVTerm_clone )
388 {
389 CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
390 CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
391
392 fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
393 fail_unless(CVTerm1->getResources()->getLength() == 1);
394 fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
395
396
397 CVTerm* CVTerm2 = static_cast<CVTerm*>(CVTerm1->clone());
398
399 fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
400 fail_unless(CVTerm2->getResources()->getLength() == 1);
401 fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
402
403 delete CVTerm2;
404 delete CVTerm1;
405 }
406 END_TEST
407
408
START_TEST(test_CVTerm_ConstructorException)409 START_TEST ( test_CVTerm_ConstructorException )
410 {
411 string msg;
412 try
413 {
414 CVTerm * cvterm = new CVTerm(BIOLOGICAL_QUALIFIER);
415 delete cvterm;
416 }
417 catch (SBMLConstructorException &e)
418 {
419 msg = e.what();
420 }
421 fail_unless(msg == "");
422
423 }
424 END_TEST
425
426
START_TEST(test_NestedCVTerm_copyConstructor)427 START_TEST ( test_NestedCVTerm_copyConstructor )
428 {
429
430 CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
431 CVTerm_setBiologicalQualifierType(CVTerm1, BQB_IS);
432 CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
433
434 fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
435 fail_unless(CVTerm1->getResources()->getLength() == 1);
436 fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
437
438 CVTerm * CVTermN = new CVTerm(BIOLOGICAL_QUALIFIER);
439 CVTerm_setBiologicalQualifierType(CVTermN, BQB_IS);
440 CVTermN->addResource("nested resource");
441
442 fail_unless(CVTermN->getQualifierType() == BIOLOGICAL_QUALIFIER);
443 fail_unless(CVTermN->getResources()->getLength() == 1);
444 fail_unless(CVTermN->getResources()->getValue(0) == "nested resource");
445
446 CVTerm1->addNestedCVTerm(CVTermN);
447
448 fail_unless(CVTerm1->getNumNestedCVTerms() == 1);
449 fail_unless(CVTerm1->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
450 fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getLength() == 1);
451 fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
452
453 CVTerm* CVTerm2=new CVTerm(*CVTerm1);
454
455 fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
456 fail_unless(CVTerm2->getResources()->getLength() == 1);
457 fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
458 fail_unless(CVTerm2->getNumNestedCVTerms() == 1);
459 fail_unless(CVTerm2->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
460 fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getLength() == 1);
461 fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
462
463 delete CVTerm2;
464 delete CVTerm1;
465 delete CVTermN;
466 }
467 END_TEST
468
469
START_TEST(test_NestedCVTerm_assignmentOperator)470 START_TEST ( test_NestedCVTerm_assignmentOperator )
471 {
472 CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
473 CVTerm_setBiologicalQualifierType(CVTerm1, BQB_IS);
474 CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
475
476 CVTerm * CVTermN = new CVTerm(BIOLOGICAL_QUALIFIER);
477 CVTerm_setBiologicalQualifierType(CVTermN, BQB_IS);
478 CVTermN->addResource("nested resource");
479
480 fail_unless(CVTermN->getQualifierType() == BIOLOGICAL_QUALIFIER);
481 fail_unless(CVTermN->getResources()->getLength() == 1);
482 fail_unless(CVTermN->getResources()->getValue(0) == "nested resource");
483
484 CVTerm1->addNestedCVTerm(CVTermN);
485
486 fail_unless(CVTerm1->getNumNestedCVTerms() == 1);
487 fail_unless(CVTerm1->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
488 fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getLength() == 1);
489 fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
490
491 CVTerm* CVTerm2=new CVTerm();
492 (*CVTerm2) = *CVTerm1;
493
494 fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
495 fail_unless(CVTerm2->getResources()->getLength() == 1);
496 fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
497 fail_unless(CVTerm2->getNumNestedCVTerms() == 1);
498 fail_unless(CVTerm2->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
499 fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getLength() == 1);
500 fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
501
502 delete CVTerm2;
503 delete CVTerm1;
504 delete CVTermN;
505 }
506 END_TEST
507
508
START_TEST(test_NestedCVTerm_clone)509 START_TEST ( test_NestedCVTerm_clone )
510 {
511 CVTerm * CVTerm1 = new CVTerm(BIOLOGICAL_QUALIFIER);
512 CVTerm_setBiologicalQualifierType(CVTerm1, BQB_IS);
513 CVTerm1->addResource("http://www.geneontology.org/#GO:0005892");
514
515 fail_unless(CVTerm1->getQualifierType() == BIOLOGICAL_QUALIFIER);
516 fail_unless(CVTerm1->getResources()->getLength() == 1);
517 fail_unless(CVTerm1->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
518
519 CVTerm * CVTermN = new CVTerm(BIOLOGICAL_QUALIFIER);
520 CVTerm_setBiologicalQualifierType(CVTermN, BQB_IS);
521 CVTermN->addResource("nested resource");
522
523 fail_unless(CVTermN->getQualifierType() == BIOLOGICAL_QUALIFIER);
524 fail_unless(CVTermN->getResources()->getLength() == 1);
525 fail_unless(CVTermN->getResources()->getValue(0) == "nested resource");
526
527 CVTerm1->addNestedCVTerm(CVTermN);
528
529 fail_unless(CVTerm1->getNumNestedCVTerms() == 1);
530 fail_unless(CVTerm1->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
531 fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getLength() == 1);
532 fail_unless(CVTerm1->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
533
534 CVTerm* CVTerm2 = static_cast<CVTerm*>(CVTerm1->clone());
535
536 fail_unless(CVTerm2->getQualifierType() == BIOLOGICAL_QUALIFIER);
537 fail_unless(CVTerm2->getResources()->getLength() == 1);
538 fail_unless(CVTerm2->getResources()->getValue(0) == "http://www.geneontology.org/#GO:0005892");
539 fail_unless(CVTerm2->getNumNestedCVTerms() == 1);
540 fail_unless(CVTerm2->getNestedCVTerm(0)->getQualifierType() == BIOLOGICAL_QUALIFIER);
541 fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getLength() == 1);
542 fail_unless(CVTerm2->getNestedCVTerm(0)->getResources()->getValue(0) == "nested resource");
543
544 delete CVTerm2;
545 delete CVTerm1;
546 delete CVTermN;
547 }
548 END_TEST
549
550
551 Suite *
create_suite_CopyAndClone(void)552 create_suite_CopyAndClone (void)
553 {
554 Suite *suite = suite_create("CopyAndClone");
555 TCase *tcase = tcase_create("CopyAndClone");
556
557 tcase_add_test( tcase, test_Date_copyConstructor );
558 tcase_add_test( tcase, test_Date_assignmentOperator );
559 tcase_add_test( tcase, test_Date_clone );
560 tcase_add_test( tcase, test_Date_ConstructorException );
561 tcase_add_test( tcase, test_ModelCreator_copyConstructor );
562 tcase_add_test( tcase, test_ModelCreator_assignmentOperator );
563 tcase_add_test( tcase, test_ModelCreator_clone );
564 tcase_add_test( tcase, test_ModelCreator_ConstructorException );
565 tcase_add_test( tcase, test_ModelHistory_copyConstructor );
566 tcase_add_test( tcase, test_ModelHistory_assignmentOperator );
567 tcase_add_test( tcase, test_ModelHistory_clone );
568 tcase_add_test( tcase, test_ModelHistory_ConstructorException );
569 tcase_add_test( tcase, test_CVTerm_copyConstructor );
570 tcase_add_test( tcase, test_CVTerm_assignmentOperator );
571 tcase_add_test( tcase, test_CVTerm_clone );
572 tcase_add_test( tcase, test_CVTerm_ConstructorException );
573 tcase_add_test( tcase, test_NestedCVTerm_copyConstructor );
574 tcase_add_test( tcase, test_NestedCVTerm_assignmentOperator );
575 tcase_add_test( tcase, test_NestedCVTerm_clone );
576 suite_add_tcase(suite, tcase);
577
578 return suite;
579 }
580 CK_CPPEND
581
582