1 /**
2 * @file TestWriteQualExtension.cpp
3 * @brief Unit tests of writing QualExtension
4 * @author Akiya Jouraku
5 *
6 * $Id: $
7 * $HeadURL: $
8 *
9 * <!--------------------------------------------------------------------------
10 * This file is part of libSBML. Please visit http://sbml.org for more
11 * information about SBML, and the latest version of libSBML.
12 *
13 * Copyright (C) 2020 jointly by the following organizations:
14 * 1. California Institute of Technology, Pasadena, CA, USA
15 * 2. University of Heidelberg, Heidelberg, Germany
16 * 3. University College London, London, UK
17 *
18 * Copyright (C) 2019 jointly by the following organizations:
19 * 1. California Institute of Technology, Pasadena, CA, USA
20 * 2. University of Heidelberg, Heidelberg, Germany
21 *
22 * Copyright (C) 2013-2018 jointly by the following organizations:
23 * 1. California Institute of Technology, Pasadena, CA, USA
24 * 2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
25 * 3. University of Heidelberg, Heidelberg, Germany
26 *
27 * Copyright (C) 2009-2011 jointly by the following organizations:
28 * 1. California Institute of Technology, Pasadena, CA, USA
29 * 2. EMBL European Bioinformatics Institute (EMBL-EBI), Hinxton, UK
30 *
31 * Copyright (C) 2006-2008 by the California Institute of Technology,
32 * Pasadena, CA, USA
33 *
34 * Copyright (C) 2002-2005 jointly by the following organizations:
35 * 1. California Institute of Technology, Pasadena, CA, USA
36 * 2. Japan Science and Technology Agency, Japan
37 *
38 * This library is free software; you can redistribute it and/or modify it
39 * under the terms of the GNU Lesser General Public License as published by
40 * the Free Software Foundation. A copy of the license agreement is provided
41 * in the file named "LICENSE.txt" included with this software distribution
42 * and also available online as http://sbml.org/software/libsbml/license.html
43 * ---------------------------------------------------------------------- -->*/
44
45
46 #include <limits>
47
48 #include <iostream>
49 #include <check.h>
50 #include <sbml/SBMLTypes.h>
51 #include <sbml/extension/SBMLExtensionRegistry.h>
52 #include <sbml/packages/qual/extension/QualModelPlugin.h>
53 #include <sbml/packages/qual/extension/QualExtension.h>
54 #include <sbml/packages/qual/common/QualExtensionTypes.h>
55 #include <string>
56
57 /** @cond doxygenIgnored */
58
59 using namespace std;
60 LIBSBML_CPP_NAMESPACE_USE
61
62 /** @endcond doxygenIgnored */
63
64
65 CK_CPPSTART
66
67 static string QUAL_XMLNS_L3V1V1;
68 static QualExtension* G;
69 static QualPkgNamespaces* GNS;
70
71 void
WriteQualExtensionTest_setup(void)72 WriteQualExtensionTest_setup (void)
73 {
74 try
75 {
76 G = new QualExtension();
77 GNS = new QualPkgNamespaces();
78 QUAL_XMLNS_L3V1V1 = GNS->getURI();
79 }
80 catch(...)
81 {
82 fail("Failed to create a QualExtension object");
83 }
84 }
85
86
87 void
WriteQualExtensionTest_teardown(void)88 WriteQualExtensionTest_teardown (void)
89 {
90 delete G;
91 delete GNS;
92 }
93
START_TEST(test_QualExtension_create_and_write_L3V1V1)94 START_TEST (test_QualExtension_create_and_write_L3V1V1)
95 {
96 const char* s1 =
97 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
98 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" xmlns:qual=\"http://www.sbml.org/sbml/level3/version1/qual/version1\" level=\"3\" version=\"1\" qual:required=\"true\">\n"
99 " <model>\n"
100 " <listOfCompartments>\n"
101 " <compartment id=\"c\" constant=\"true\"/>\n"
102 " </listOfCompartments>\n"
103 " <qual:listOfQualitativeSpecies>\n"
104 " <qual:qualitativeSpecies metaid=\"ddd\" qual:id=\"s1\" qual:compartment=\"c\" qual:constant=\"false\" qual:name=\"sss\" qual:initialLevel=\"1\" qual:maxLevel=\"4\"/>\n"
105 " </qual:listOfQualitativeSpecies>\n"
106 " <qual:listOfTransitions>\n"
107 " <qual:transition sboTerm=\"SBO:0000001\" qual:id=\"d\">\n"
108 " <qual:listOfInputs>\n"
109 " <qual:input qual:id=\"RD\" qual:qualitativeSpecies=\"s1\" qual:transitionEffect=\"none\" qual:name=\"aa\" qual:sign=\"negative\" qual:thresholdLevel=\"2\"/>\n"
110 " </qual:listOfInputs>\n"
111 " <qual:listOfOutputs>\n"
112 " <qual:output qual:id=\"wd\" qual:qualitativeSpecies=\"s1\" qual:transitionEffect=\"production\" qual:name=\"aa\" qual:outputLevel=\"2\"/>\n"
113 " </qual:listOfOutputs>\n"
114 " <qual:listOfFunctionTerms>\n"
115 " <qual:defaultTerm qual:resultLevel=\"1\"/>\n"
116 " <qual:functionTerm qual:resultLevel=\"2\">\n"
117 " <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n"
118 " <apply>\n"
119 " <geq/>\n"
120 " <ci> s1 </ci>\n"
121 " <cn type=\"integer\"> 2 </cn>\n"
122 " </apply>\n"
123 " </math>\n"
124 " </qual:functionTerm>\n"
125 " </qual:listOfFunctionTerms>\n"
126 " </qual:transition>\n"
127 " </qual:listOfTransitions>\n"
128 " </model>\n"
129 "</sbml>\n"
130 ;
131
132 QualPkgNamespaces sbmlns(3,1,1);
133
134 // create the document
135
136 SBMLDocument document(&sbmlns);
137
138 //// mark qual as required
139
140 document.setPackageRequired("qual", true);
141
142 // create the Model
143
144 Model* model=document.createModel();
145
146 // create the Compartment
147
148 Compartment* compartment = model->createCompartment();
149 compartment->setId("c");
150 compartment->setConstant(true);
151
152 //// create the QualitativeSpecies
153
154 QualModelPlugin* mplugin = static_cast<QualModelPlugin*>(model->getPlugin("qual"));
155
156 fail_unless(mplugin != NULL);
157
158 QualitativeSpecies* qs = mplugin->createQualitativeSpecies();
159 fail_unless(qs->setId("s1") == LIBSBML_OPERATION_SUCCESS);
160 fail_unless(qs->setCompartment("c") == LIBSBML_OPERATION_SUCCESS);
161 fail_unless(qs->setConstant(false) == LIBSBML_OPERATION_SUCCESS);
162 fail_unless(qs->setInitialLevel(1) == LIBSBML_OPERATION_SUCCESS);
163 fail_unless(qs->setMaxLevel(4) == LIBSBML_OPERATION_SUCCESS);
164 fail_unless(qs->setName("sss") == LIBSBML_OPERATION_SUCCESS);
165 fail_unless(qs->setMetaId("ddd") == LIBSBML_OPERATION_SUCCESS);
166
167 Transition* t = mplugin->createTransition();
168 fail_unless(t->setId("d") == LIBSBML_OPERATION_SUCCESS);
169 fail_unless(t->setSBOTerm(1) == LIBSBML_OPERATION_SUCCESS);
170
171 Input* i = t->createInput();
172 fail_unless(i->setId("RD") == LIBSBML_OPERATION_SUCCESS);
173 fail_unless(i->setQualitativeSpecies("s1") == LIBSBML_OPERATION_SUCCESS);
174 fail_unless(i->setTransitionEffect
175 (InputTransitionEffect_fromString("none")) == LIBSBML_OPERATION_SUCCESS);
176 fail_unless(i->setSign(InputSign_fromString("negative"))
177 == LIBSBML_OPERATION_SUCCESS);
178 fail_unless(i->setThresholdLevel(2) == LIBSBML_OPERATION_SUCCESS);
179 fail_unless(i->setName("aa") == LIBSBML_OPERATION_SUCCESS);
180
181 Output* o = t->createOutput();
182 fail_unless(o->setId("wd") == LIBSBML_OPERATION_SUCCESS);
183 fail_unless(o->setQualitativeSpecies("s1") == LIBSBML_OPERATION_SUCCESS);
184 fail_unless(o->setTransitionEffect
185 (OutputTransitionEffect_fromString("production")) == LIBSBML_OPERATION_SUCCESS);
186 fail_unless(o->setOutputLevel(2) == LIBSBML_OPERATION_SUCCESS);
187 fail_unless(o->setName("aa") == LIBSBML_OPERATION_SUCCESS);
188
189 DefaultTerm* dt = t->createDefaultTerm();
190 fail_unless(dt->setResultLevel(1) == LIBSBML_OPERATION_SUCCESS);
191
192 FunctionTerm* ft = t->createFunctionTerm();
193 ASTNode* math = SBML_parseL3Formula("geq(s1, 2)");
194 fail_unless(ft->setResultLevel(2) == LIBSBML_OPERATION_SUCCESS);
195 fail_unless(ft->setMath(math) == LIBSBML_OPERATION_SUCCESS);
196 delete math;
197
198
199 string s2 = writeSBMLToStdString(&document);
200
201 fail_unless(strcmp(s1,s2.c_str()) == 0);
202
203 // check clone()
204
205 SBMLDocument document2 = document;
206 s2 = writeSBMLToStdString(&document2);
207 fail_unless(strcmp(s1,s2.c_str()) == 0);
208
209 // check operator=
210
211 Model* m = document.getModel();
212 document2.setModel(m);
213 s2 = writeSBMLToStdString(&document2);
214
215 fail_unless(strcmp(s1,s2.c_str()) == 0);
216 }
217 END_TEST
218
219
START_TEST(test_QualExtension_create_add_and_write_L3V1V1)220 START_TEST (test_QualExtension_create_add_and_write_L3V1V1)
221 {
222 const char* s1 =
223 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
224 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" xmlns:qual=\"http://www.sbml.org/sbml/level3/version1/qual/version1\" level=\"3\" version=\"1\" qual:required=\"true\">\n"
225 " <model>\n"
226 " <listOfCompartments>\n"
227 " <compartment id=\"c\" constant=\"true\"/>\n"
228 " </listOfCompartments>\n"
229 " <qual:listOfQualitativeSpecies>\n"
230 " <qual:qualitativeSpecies metaid=\"ddd\" qual:id=\"s1\" qual:compartment=\"c\" qual:constant=\"false\" qual:name=\"sss\" qual:initialLevel=\"1\" qual:maxLevel=\"4\"/>\n"
231 " </qual:listOfQualitativeSpecies>\n"
232 " <qual:listOfTransitions>\n"
233 " <qual:transition sboTerm=\"SBO:0000001\" qual:id=\"d\">\n"
234 " <qual:listOfInputs>\n"
235 " <qual:input qual:id=\"RD\" qual:qualitativeSpecies=\"s1\" qual:transitionEffect=\"none\" qual:name=\"aa\" qual:sign=\"negative\" qual:thresholdLevel=\"2\"/>\n"
236 " </qual:listOfInputs>\n"
237 " <qual:listOfOutputs>\n"
238 " <qual:output qual:id=\"wd\" qual:qualitativeSpecies=\"s1\" qual:transitionEffect=\"production\" qual:name=\"aa\" qual:outputLevel=\"2\"/>\n"
239 " </qual:listOfOutputs>\n"
240 " <qual:listOfFunctionTerms>\n"
241 " <qual:defaultTerm qual:resultLevel=\"1\"/>\n"
242 " <qual:functionTerm qual:resultLevel=\"2\">\n"
243 " <math xmlns=\"http://www.w3.org/1998/Math/MathML\">\n"
244 " <apply>\n"
245 " <geq/>\n"
246 " <ci> s1 </ci>\n"
247 " <cn type=\"integer\"> 2 </cn>\n"
248 " </apply>\n"
249 " </math>\n"
250 " </qual:functionTerm>\n"
251 " </qual:listOfFunctionTerms>\n"
252 " </qual:transition>\n"
253 " </qual:listOfTransitions>\n"
254 " </model>\n"
255 "</sbml>\n"
256 ;
257
258 QualPkgNamespaces sbmlns(3,1,1);
259
260 // create the document
261
262 SBMLDocument document(&sbmlns);
263
264 //// mark qual as required
265
266 document.setPackageRequired("qual", true);
267
268 // create the Model
269
270 Model model(&sbmlns);
271
272 // create the Compartment
273
274 Compartment compartment(&sbmlns);
275 compartment.setId("c");
276 compartment.setConstant(true);
277
278 fail_unless(model.addCompartment(&compartment) == LIBSBML_OPERATION_SUCCESS);
279
280 //// create the QualitativeSpecies
281
282 QualModelPlugin* mplugin = static_cast<QualModelPlugin*>(model.getPlugin("qual"));
283
284 fail_unless(mplugin != NULL);
285
286 QualitativeSpecies qs(&sbmlns);
287 fail_unless(qs.setId("s1") == LIBSBML_OPERATION_SUCCESS);
288 fail_unless(qs.setCompartment("c") == LIBSBML_OPERATION_SUCCESS);
289 fail_unless(qs.setConstant(false) == LIBSBML_OPERATION_SUCCESS);
290 fail_unless(qs.setInitialLevel(1) == LIBSBML_OPERATION_SUCCESS);
291 fail_unless(qs.setMaxLevel(4) == LIBSBML_OPERATION_SUCCESS);
292 fail_unless(qs.setName("sss") == LIBSBML_OPERATION_SUCCESS);
293 fail_unless(qs.setMetaId("ddd") == LIBSBML_OPERATION_SUCCESS);
294
295 fail_unless(mplugin->addQualitativeSpecies(&qs) == LIBSBML_OPERATION_SUCCESS);
296
297 Transition t(&sbmlns);
298 fail_unless(t.setId("d") == LIBSBML_OPERATION_SUCCESS);
299 fail_unless(t.setSBOTerm(1) == LIBSBML_OPERATION_SUCCESS);
300
301 Input i(&sbmlns);
302 fail_unless(i.setId("RD") == LIBSBML_OPERATION_SUCCESS);
303 fail_unless(i.setQualitativeSpecies("s1") == LIBSBML_OPERATION_SUCCESS);
304 fail_unless(i.setTransitionEffect
305 (InputTransitionEffect_fromString("none")) == LIBSBML_OPERATION_SUCCESS);
306 fail_unless(i.setSign(InputSign_fromString("negative"))
307 == LIBSBML_OPERATION_SUCCESS);
308 fail_unless(i.setThresholdLevel(2) == LIBSBML_OPERATION_SUCCESS);
309 fail_unless(i.setName("aa") == LIBSBML_OPERATION_SUCCESS);
310
311 fail_unless(t.addInput(&i) == LIBSBML_OPERATION_SUCCESS);
312
313 Output o(&sbmlns);
314 fail_unless(o.setId("wd") == LIBSBML_OPERATION_SUCCESS);
315 fail_unless(o.setQualitativeSpecies("s1") == LIBSBML_OPERATION_SUCCESS);
316 fail_unless(o.setTransitionEffect
317 (OutputTransitionEffect_fromString("production")) == LIBSBML_OPERATION_SUCCESS);
318 fail_unless(o.setOutputLevel(2) == LIBSBML_OPERATION_SUCCESS);
319 fail_unless(o.setName("aa") == LIBSBML_OPERATION_SUCCESS);
320
321 fail_unless(t.addOutput(&o) == LIBSBML_OPERATION_SUCCESS);
322
323 FunctionTerm ft(&sbmlns);
324 ASTNode* math = SBML_parseL3Formula("geq(s1, 2)");
325 fail_unless(ft.setResultLevel(2) == LIBSBML_OPERATION_SUCCESS);
326 fail_unless(ft.setMath(math) == LIBSBML_OPERATION_SUCCESS);
327 delete math;
328
329 fail_unless(t.addFunctionTerm(&ft) == LIBSBML_OPERATION_SUCCESS);
330
331 DefaultTerm dt(&sbmlns);
332 fail_unless(dt.setResultLevel(1) == LIBSBML_OPERATION_SUCCESS);
333
334
335 fail_unless(t.setDefaultTerm(&dt) == LIBSBML_OPERATION_SUCCESS);
336
337 fail_unless(mplugin->addTransition(&t) == LIBSBML_OPERATION_SUCCESS);
338
339 fail_unless(document.setModel(&model) == LIBSBML_OPERATION_SUCCESS);
340
341 string s2 = writeSBMLToStdString(&document);
342
343 fail_unless(strcmp(s1,s2.c_str()) == 0);
344 }
345 END_TEST
346
347
START_TEST(test_QualExtension_read_enable_via_model_and_write_L3V1V1)348 START_TEST (test_QualExtension_read_enable_via_model_and_write_L3V1V1)
349 {
350 const char* s1 =
351 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
352 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" level=\"3\" version=\"1\">\n"
353 " <model>\n"
354 " <listOfCompartments>\n"
355 " <compartment id=\"c\" constant=\"true\"/>\n"
356 " </listOfCompartments>\n"
357 " </model>\n"
358 "</sbml>\n"
359 ;
360
361 const char* s1a =
362 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
363 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" xmlns:qual=\"http://www.sbml.org/sbml/level3/version1/qual/version1\" level=\"3\" version=\"1\" qual:required=\"true\">\n"
364 " <model>\n"
365 " <listOfCompartments>\n"
366 " <compartment id=\"c\" constant=\"true\"/>\n"
367 " </listOfCompartments>\n"
368 " <qual:listOfQualitativeSpecies>\n"
369 " <qual:qualitativeSpecies qual:id=\"s1\" qual:compartment=\"c\" qual:constant=\"false\" qual:name=\"sss\" qual:initialLevel=\"1\" qual:maxLevel=\"4\"/>\n"
370 " </qual:listOfQualitativeSpecies>\n"
371 " </model>\n"
372 "</sbml>\n"
373 ;
374
375 SBMLDocument *document = readSBMLFromString(s1);
376
377 fail_unless(document->getNumPlugins() == 0);
378
379 Model *model = document->getModel();
380
381 fail_unless(model != NULL);
382 fail_unless(model->getNumPlugins() == 0);
383
384 //
385 // enable the qual package by invoking enablePackage function with Model object
386 //
387 fail_unless(model->enablePackage(QUAL_XMLNS_L3V1V1, "qual", true) == LIBSBML_OPERATION_SUCCESS);
388
389 // mark qual as required
390
391 document->setPackageRequired("qual", true);
392
393 fail_unless(document->getNumPlugins() == 1);
394 fail_unless(model->getNumPlugins() == 1);
395
396 //// create the QualitativeSpecies
397
398 QualModelPlugin* mplugin = static_cast<QualModelPlugin*>(model->getPlugin("qual"));
399
400 fail_unless(mplugin != NULL);
401
402 QualitativeSpecies* qs = mplugin->createQualitativeSpecies();
403 fail_unless(qs->setId("s1") == LIBSBML_OPERATION_SUCCESS);
404 fail_unless(qs->setCompartment("c") == LIBSBML_OPERATION_SUCCESS);
405 fail_unless(qs->setConstant(false) == LIBSBML_OPERATION_SUCCESS);
406 fail_unless(qs->setInitialLevel(1) == LIBSBML_OPERATION_SUCCESS);
407 fail_unless(qs->setMaxLevel(4) == LIBSBML_OPERATION_SUCCESS);
408 fail_unless(qs->setName("sss") == LIBSBML_OPERATION_SUCCESS);
409
410 char *s2 = writeSBMLToString(document);
411
412 fail_unless(strcmp(s1a,s2) == 0);
413
414 free(s2);
415 delete document;
416 }
417 END_TEST
418
419
START_TEST(test_QualExtension_read_disable_via_model_and_write_L3V1V1)420 START_TEST (test_QualExtension_read_disable_via_model_and_write_L3V1V1)
421 {
422 const char* s1 =
423 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
424 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" xmlns:qual=\"http://www.sbml.org/sbml/level3/version1/qual/version1\" level=\"3\" version=\"1\" qual:required=\"true\">\n"
425 " <model>\n"
426 " <listOfCompartments>\n"
427 " <compartment id=\"c\" constant=\"true\"/>\n"
428 " </listOfCompartments>\n"
429 " <qual:listOfQualitativeSpecies>\n"
430 " <qual:qualitativeSpecies qual:id=\"s1\" qual:compartment=\"c\" qual:constant=\"false\" qual:name=\"sss\" qual:initialLevel=\"1\" qual:maxLevel=\"4\"/>\n"
431 " </qual:listOfQualitativeSpecies>\n"
432 " </model>\n"
433 "</sbml>\n"
434 ;
435
436 const char* s1d =
437 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
438 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" level=\"3\" version=\"1\">\n"
439 " <model>\n"
440 " <listOfCompartments>\n"
441 " <compartment id=\"c\" constant=\"true\"/>\n"
442 " </listOfCompartments>\n"
443 " </model>\n"
444 "</sbml>\n"
445 ;
446
447 SBMLDocument *document = readSBMLFromString(s1);
448
449 fail_unless(document->getNumPlugins() == 1);
450
451 Model *model = document->getModel();
452
453 fail_unless(model != NULL);
454 fail_unless(model->getNumPlugins() == 1);
455
456 //
457 // disable the qual package by invoking enablePackage function with Model object
458 //
459 fail_unless(model->enablePackage(QUAL_XMLNS_L3V1V1, "qual", false) == LIBSBML_OPERATION_SUCCESS);
460
461 fail_unless(document->getNumPlugins() == 0);
462 fail_unless(model->getNumPlugins() == 0);
463
464 char *s2 = writeSBMLToString(document);
465
466 fail_unless(strcmp(s1d,s2) == 0);
467
468 free(s2);
469 delete document;
470 }
471 END_TEST
472
473
START_TEST(test_QualExtension_read_enable_via_sbmldocument_and_write_L3V1V1)474 START_TEST (test_QualExtension_read_enable_via_sbmldocument_and_write_L3V1V1)
475 {
476 const char* s1 =
477 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
478 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" level=\"3\" version=\"1\">\n"
479 " <model>\n"
480 " <listOfCompartments>\n"
481 " <compartment id=\"c\" constant=\"true\"/>\n"
482 " </listOfCompartments>\n"
483 " </model>\n"
484 "</sbml>\n"
485 ;
486
487 const char* s1a =
488 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
489 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" xmlns:qual=\"http://www.sbml.org/sbml/level3/version1/qual/version1\" level=\"3\" version=\"1\" qual:required=\"true\">\n"
490 " <model>\n"
491 " <listOfCompartments>\n"
492 " <compartment id=\"c\" constant=\"true\"/>\n"
493 " </listOfCompartments>\n"
494 " <qual:listOfQualitativeSpecies>\n"
495 " <qual:qualitativeSpecies qual:id=\"s1\" qual:compartment=\"c\" qual:constant=\"false\" qual:name=\"sss\" qual:initialLevel=\"1\" qual:maxLevel=\"4\"/>\n"
496 " </qual:listOfQualitativeSpecies>\n"
497 " </model>\n"
498 "</sbml>\n"
499 ;
500
501 SBMLDocument *document = readSBMLFromString(s1);
502
503 fail_unless(document->getNumPlugins() == 0);
504
505 //
506 // enable the qual package by invoking enablePackage function with SBMLDocument object
507 //
508 fail_unless(document->enablePackage(QUAL_XMLNS_L3V1V1, "qual", true) == LIBSBML_OPERATION_SUCCESS);
509
510 // mark qual as required
511
512 document->setPackageRequired("qual", true);
513
514 fail_unless(document->getNumPlugins() == 1);
515
516 Model *model = document->getModel();
517
518 fail_unless(model != NULL);
519 fail_unless(model->getNumPlugins() == 1);
520
521 //// create the QualitativeSpecies
522
523 QualModelPlugin* mplugin = static_cast<QualModelPlugin*>(model->getPlugin("qual"));
524
525 fail_unless(mplugin != NULL);
526
527 QualitativeSpecies* qs = mplugin->createQualitativeSpecies();
528 fail_unless(qs->setId("s1") == LIBSBML_OPERATION_SUCCESS);
529 fail_unless(qs->setCompartment("c") == LIBSBML_OPERATION_SUCCESS);
530 fail_unless(qs->setConstant(false) == LIBSBML_OPERATION_SUCCESS);
531 fail_unless(qs->setInitialLevel(1) == LIBSBML_OPERATION_SUCCESS);
532 fail_unless(qs->setMaxLevel(4) == LIBSBML_OPERATION_SUCCESS);
533 fail_unless(qs->setName("sss") == LIBSBML_OPERATION_SUCCESS);
534
535 char *s2 = writeSBMLToString(document);
536
537 fail_unless(strcmp(s1a,s2) == 0);
538
539 free(s2);
540 delete document;
541 }
542 END_TEST
543
544
START_TEST(test_QualExtension_read_disable_via_sbmldocument_and_write_L3V1V1)545 START_TEST (test_QualExtension_read_disable_via_sbmldocument_and_write_L3V1V1)
546 {
547 const char* s1 =
548 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
549 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" xmlns:qual=\"http://www.sbml.org/sbml/level3/version1/qual/version1\" level=\"3\" version=\"1\" qual:required=\"true\">\n"
550 " <model>\n"
551 " <listOfCompartments>\n"
552 " <compartment id=\"c\" constant=\"true\"/>\n"
553 " </listOfCompartments>\n"
554 " <qual:listOfQualitativeSpecies>\n"
555 " <qual:qualitativeSpecies qual:id=\"s1\" qual:compartment=\"c\" qual:constant=\"false\" qual:name=\"sss\" qual:initialLevel=\"1\" qual:maxLevel=\"4\"/>\n"
556 " </qual:listOfQualitativeSpecies>\n"
557 " </model>\n"
558 "</sbml>\n"
559 ;
560
561 const char* s1d =
562 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
563 "<sbml xmlns=\"http://www.sbml.org/sbml/level3/version1/core\" level=\"3\" version=\"1\">\n"
564 " <model>\n"
565 " <listOfCompartments>\n"
566 " <compartment id=\"c\" constant=\"true\"/>\n"
567 " </listOfCompartments>\n"
568 " </model>\n"
569 "</sbml>\n"
570 ;
571
572 SBMLDocument *document = readSBMLFromString(s1);
573
574 fail_unless(document->getNumPlugins() == 1);
575
576 //
577 // disable the qual package by invoking enablePackage function with Model object
578 //
579 fail_unless(document->enablePackage(QUAL_XMLNS_L3V1V1, "qual", false) == LIBSBML_OPERATION_SUCCESS);
580
581 fail_unless(document->getNumPlugins() == 0);
582
583 Model *model = document->getModel();
584
585 fail_unless(model != NULL);
586 fail_unless(model->getNumPlugins() == 0);
587
588 char *s2 = writeSBMLToString(document);
589
590 fail_unless(strcmp(s1d,s2) == 0);
591
592 free(s2);
593 delete document;
594 }
595 END_TEST
596
597
598
599 Suite *
create_suite_WriteQualExtension(void)600 create_suite_WriteQualExtension (void)
601 {
602 Suite *suite = suite_create("WriteQualExtension");
603 TCase *tcase = tcase_create("WriteQualExtension");
604
605 tcase_add_checked_fixture(tcase, WriteQualExtensionTest_setup, WriteQualExtensionTest_teardown);
606
607 tcase_add_test( tcase, test_QualExtension_create_and_write_L3V1V1);
608 tcase_add_test( tcase, test_QualExtension_create_add_and_write_L3V1V1);
609 tcase_add_test( tcase, test_QualExtension_read_enable_via_model_and_write_L3V1V1);
610 tcase_add_test( tcase, test_QualExtension_read_disable_via_model_and_write_L3V1V1);
611 tcase_add_test( tcase, test_QualExtension_read_enable_via_sbmldocument_and_write_L3V1V1);
612 tcase_add_test( tcase, test_QualExtension_read_disable_via_sbmldocument_and_write_L3V1V1);
613 suite_add_tcase(suite, tcase);
614
615 return suite;
616 }
617
618
619 CK_CPPEND
620