1 /**
2 * Filename : TestLayoutCreation.cpp
3 * Description : Unit tests for the creation of the layout struvtures from XMLNodes.
4 * Organization: European Media Laboratories Research gGmbH
5 * Created : 2007-02-21
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 <iostream>
41
42 #include <sbml/common/common.h>
43 #include <sbml/common/extern.h>
44
45 #include <sbml/packages/layout/sbml/Layout.h>
46 #include <sbml/packages/layout/sbml/LineSegment.h>
47 #include <sbml/packages/layout/sbml/CubicBezier.h>
48 #include <sbml/packages/layout/util/LayoutAnnotation.h>
49
50 #include <sbml/xml/XMLInputStream.h>
51 #include <sbml/xml/XMLNode.h>
52
53 #include <check.h>
54
55 #include "utility.h"
56
57 using namespace std;
58
59 LIBSBML_CPP_NAMESPACE_USE
60
61 BEGIN_C_DECLS
62
63 static string NOTES;
64
65
66 static void
LayoutCreationTest_setup(void)67 LayoutCreationTest_setup (void)
68 {
69 NOTES = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<notes><body xmlns=\"http://www.w3.org/1999/xhtml\">\n <p>Testnote</p>\n</body></notes>";
70 }
71
72 static void
LayoutCreationTest_teardown(void)73 LayoutCreationTest_teardown (void)
74 {
75 }
76
77
START_TEST(test_LayoutCreation_Layout)78 START_TEST (test_LayoutCreation_Layout)
79 {
80 const char* content =
81 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
82 "<annotation>\n"
83 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\" >\n"
84 " <layout id=\"layout_1\">\n"
85 " <dimensions width=\"200\" height=\"400\"/>\n"
86 " <listOfCompartmentGlyphs>\n"
87 " <compartmentGlyph id=\"compartmentGlyph_1\">\n"
88 " <boundingBox>\n"
89 " <position x=\"0\" y=\"0\"/>\n"
90 " <dimensions width=\"0\" height=\"0\"/>\n"
91 " </boundingBox>\n"
92 " </compartmentGlyph>\n"
93 " </listOfCompartmentGlyphs>\n"
94 " <listOfSpeciesGlyphs>\n"
95 " <speciesGlyph id=\"speciesGlyph_1\">\n"
96 " <boundingBox>\n"
97 " <position x=\"0\" y=\"0\"/>\n"
98 " <dimensions width=\"0\" height=\"0\"/>\n"
99 " </boundingBox>\n"
100 " </speciesGlyph>\n"
101 " </listOfSpeciesGlyphs>\n"
102 " <listOfReactionGlyphs>\n"
103 " <reactionGlyph id=\"reactionGlyph_1\">\n"
104 " <boundingBox>\n"
105 " <position x=\"0\" y=\"0\"/>\n"
106 " <dimensions width=\"0\" height=\"0\"/>\n"
107 " </boundingBox>\n"
108 " </reactionGlyph>\n"
109 " </listOfReactionGlyphs>\n"
110 " <listOfTextGlyphs>\n"
111 " <textGlyph id=\"textGlyph_1\" text=\"test\">\n"
112 " <boundingBox>\n"
113 " <position x=\"0\" y=\"0\"/>\n"
114 " <dimensions width=\"0\" height=\"0\"/>\n"
115 " </boundingBox>\n"
116 " </textGlyph>\n"
117 " </listOfTextGlyphs>\n"
118 " <listOfAdditionalGraphicalObjects>\n"
119 " <graphicalObject id=\"graphicalObject_1\">\n"
120 " <boundingBox>\n"
121 " <position x=\"0\" y=\"0\"/>\n"
122 " <dimensions width=\"0\" height=\"0\"/>\n"
123 " </boundingBox>\n"
124 " </graphicalObject>\n"
125 " </listOfAdditionalGraphicalObjects>\n"
126 " </layout>\n"
127 "</listOfLayouts>\n"
128 "</annotation>\n"
129 ;
130 XMLInputStream *stream= new XMLInputStream(content,false);
131 fail_unless(stream->isError() == false);
132 fail_unless(stream->isGood() == true);
133 XMLNode node=XMLNode(*stream);
134 ListOfLayouts pListOfLayouts;
135 parseLayoutAnnotation(&node, pListOfLayouts );
136
137 fail_unless(pListOfLayouts.size()==1);
138
139 Layout* l=(Layout*)pListOfLayouts.get(0);
140
141 fail_unless(l!=NULL);
142
143 Dimensions* dimensions=l->getDimensions();
144 fail_unless(dimensions->getWidth()==200.0);
145 fail_unless(dimensions->getHeight()==400.0);
146 fail_unless(dimensions->getDepth()==0.0);
147
148 fail_unless(l->getNumCompartmentGlyphs()==1);
149 CompartmentGlyph* cg=l->getCompartmentGlyph(0);
150 fail_unless(cg!=NULL);
151 fail_unless(cg->getId()=="compartmentGlyph_1");
152 BoundingBox* box=cg->getBoundingBox();
153 fail_unless(!box->isSetId());
154 Point* position=box->getPosition();
155 fail_unless(position->getXOffset()==0.0);
156 fail_unless(position->getYOffset()==0.0);
157 fail_unless(position->getZOffset()==0.0);
158 dimensions=box->getDimensions();
159 fail_unless(dimensions->getWidth()==0.0);
160 fail_unless(dimensions->getHeight()==0.0);
161 fail_unless(dimensions->getDepth()==0.0);
162
163 fail_unless(l->getNumSpeciesGlyphs()==1);
164 SpeciesGlyph* sg=l->getSpeciesGlyph(0);
165 fail_unless(sg!=NULL);
166 fail_unless(sg->getId()=="speciesGlyph_1");
167 box=sg->getBoundingBox();
168 fail_unless(!box->isSetId());
169 position=box->getPosition();
170 fail_unless(position->getXOffset()==0.0);
171 fail_unless(position->getYOffset()==0.0);
172 fail_unless(position->getZOffset()==0.0);
173 dimensions=box->getDimensions();
174 fail_unless(dimensions->getWidth()==0.0);
175 fail_unless(dimensions->getHeight()==0.0);
176 fail_unless(dimensions->getDepth()==0.0);
177
178 fail_unless(l->getNumReactionGlyphs()==1);
179 ReactionGlyph* rg=l->getReactionGlyph(0);
180 fail_unless(rg!=NULL);
181 fail_unless(rg->getId()=="reactionGlyph_1");
182 box=rg->getBoundingBox();
183 fail_unless(!box->isSetId());
184 position=box->getPosition();
185 fail_unless(position->getXOffset()==0.0);
186 fail_unless(position->getYOffset()==0.0);
187 fail_unless(position->getZOffset()==0.0);
188 dimensions=box->getDimensions();
189 fail_unless(dimensions->getWidth()==0.0);
190 fail_unless(dimensions->getHeight()==0.0);
191 fail_unless(dimensions->getDepth()==0.0);
192
193
194 fail_unless(l->getNumTextGlyphs()==1);
195 TextGlyph* tg=l->getTextGlyph(0);
196 fail_unless(tg!=NULL);
197 fail_unless(tg->getId()=="textGlyph_1");
198 box=tg->getBoundingBox();
199 fail_unless(!box->isSetId());
200 position=box->getPosition();
201 fail_unless(position->getXOffset()==0.0);
202 fail_unless(position->getYOffset()==0.0);
203 fail_unless(position->getZOffset()==0.0);
204 dimensions=box->getDimensions();
205 fail_unless(dimensions->getWidth()==0.0);
206 fail_unless(dimensions->getHeight()==0.0);
207 fail_unless(dimensions->getDepth()==0.0);
208
209
210 fail_unless(l->getNumAdditionalGraphicalObjects()==1);
211 GraphicalObject* go=l->getAdditionalGraphicalObject(0);
212 fail_unless(go!=NULL);
213 fail_unless(go->getId()=="graphicalObject_1");
214 box=go->getBoundingBox();
215 fail_unless(!box->isSetId());
216 position=box->getPosition();
217 fail_unless(position->getXOffset()==0.0);
218 fail_unless(position->getYOffset()==0.0);
219 fail_unless(position->getZOffset()==0.0);
220 dimensions=box->getDimensions();
221 fail_unless(dimensions->getWidth()==0.0);
222 fail_unless(dimensions->getHeight()==0.0);
223 fail_unless(dimensions->getDepth()==0.0);
224
225 delete stream;
226 }
227 END_TEST
228
229
START_TEST(test_LayoutCreation_Layout_notes)230 START_TEST (test_LayoutCreation_Layout_notes)
231 {
232
233
234 const char* content=
235 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
236 "<annotation>\n"
237 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
238 " <layout id=\"layout_1\">\n"
239 " <notes>"
240 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
241 " <p>Testnote</p>\n"
242 " </body>"
243 " </notes>\n"
244 " <dimensions width=\"200\" height=\"400\"/>\n"
245 " </layout>\n"
246 "</listOfLayouts>\n"
247 "</annotation>\n"
248 ;
249
250 XMLInputStream *stream=new XMLInputStream(content,false);
251 XMLNode node=XMLNode(*stream);
252 ListOfLayouts pListOfLayouts;
253 parseLayoutAnnotation(&node,pListOfLayouts);
254
255 fail_unless(pListOfLayouts.size()==1);
256
257 Layout* l=(Layout*)pListOfLayouts.get(0);
258
259 fail_unless(l!=NULL);
260
261 Dimensions* dimensions=l->getDimensions();
262 fail_unless(dimensions->getWidth()==200.0);
263 fail_unless(dimensions->getHeight()==400.0);
264 fail_unless(dimensions->getDepth()==0.0);
265
266 fail_unless(l->isSetNotes());
267 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
268 XMLNode notes=XMLNode(*stream2);
269 fail_unless(l->getNotes()->equals(notes, true));
270
271 delete stream2;
272 delete stream;
273 }
274 END_TEST
275
START_TEST(test_LayoutCreation_Layout_annotation)276 START_TEST (test_LayoutCreation_Layout_annotation)
277 {
278 const char* content=
279 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
280 "<annotation>\n"
281 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
282 " <layout id=\"layout_1\">\n"
283 " <annotation>\n"
284 " <this-is-a-test>\n"
285 " <another-level> level2 </another-level>\n"
286 " </this-is-a-test>\n"
287 " </annotation>\n"
288 " <dimensions width=\"200\" height=\"400\"/>\n"
289 " </layout>\n"
290 "</listOfLayouts>\n"
291 "</annotation>\n"
292 ;
293
294 const char* a =
295 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
296 "<annotation>\n"
297 " <this-is-a-test>\n"
298 " <another-level> level2 </another-level>\n"
299 " </this-is-a-test>\n"
300 " </annotation>";
301
302
303 XMLInputStream *stream=new XMLInputStream(content,false);
304 XMLNode node=XMLNode(*stream);
305 ListOfLayouts pListOfLayouts;
306 parseLayoutAnnotation(&node,pListOfLayouts);
307
308 fail_unless(pListOfLayouts.size()==1);
309
310 Layout* l=(Layout*)pListOfLayouts.get(0);
311
312 fail_unless(l!=NULL);
313
314 Dimensions* dimensions=l->getDimensions();
315 fail_unless(dimensions->getWidth()==200.0);
316 fail_unless(dimensions->getHeight()==400.0);
317 fail_unless(dimensions->getDepth()==0.0);
318
319 fail_unless(l->isSetAnnotation());
320 XMLInputStream stream2(a,false);
321 XMLNode aNode=XMLNode(stream2);
322 fail_unless(l->getAnnotation()->equals(aNode, true));
323
324
325 delete stream;
326 }
327 END_TEST
328
START_TEST(test_LayoutCreation_Layout_skipOptional)329 START_TEST (test_LayoutCreation_Layout_skipOptional)
330 {
331 const char* content=
332 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
333 "<annotation>\n"
334 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
335 " <layout id=\"layout_1\">\n"
336 " <dimensions width=\"200\" height=\"400\"/>\n"
337 " </layout>\n"
338 "</listOfLayouts>\n"
339 "</annotation>\n"
340 ;
341
342
343 XMLInputStream *stream=new XMLInputStream(content,false);
344 XMLNode node=XMLNode(*stream);
345 ListOfLayouts pListOfLayouts;
346 parseLayoutAnnotation(&node,pListOfLayouts);
347
348 fail_unless(pListOfLayouts.size()==1);
349
350 Layout* l=(Layout*)pListOfLayouts.get(0);
351
352 fail_unless(l!=NULL);
353
354 Dimensions* dimensions=l->getDimensions();
355 fail_unless(dimensions->getWidth()==200.0);
356 fail_unless(dimensions->getHeight()==400.0);
357 fail_unless(dimensions->getDepth()==0.0);
358
359 fail_unless(l->getNumCompartmentGlyphs()==0);
360 fail_unless(l->getNumSpeciesGlyphs()==0);
361 fail_unless(l->getNumReactionGlyphs()==0);
362 fail_unless(l->getNumTextGlyphs()==0);
363 fail_unless(l->getNumAdditionalGraphicalObjects()==0);
364
365
366 delete stream;
367 }
368 END_TEST
369
370
START_TEST(test_LayoutCreation_CompartmentGlyph)371 START_TEST (test_LayoutCreation_CompartmentGlyph)
372 {
373 const char* content=
374 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
375 "<annotation>\n"
376 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
377 " <layout id=\"layout_1\">\n"
378 " <dimensions width=\"200\" height=\"400\"/>\n"
379 " <listOfCompartmentGlyphs>\n"
380 " <compartmentGlyph id=\"compartmentGlyph_1\" compartment=\"compartment_1\">\n"
381 " <boundingBox>\n"
382 " <position x=\"10.3\" y=\"20\"/>\n"
383 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
384 " </boundingBox>\n"
385 " </compartmentGlyph>\n"
386 " </listOfCompartmentGlyphs>\n"
387 " </layout>\n"
388 "</listOfLayouts>\n"
389 "</annotation>\n"
390 ;
391
392
393 XMLInputStream *stream=new XMLInputStream(content,false);
394 XMLNode node=XMLNode(*stream);
395 ListOfLayouts pListOfLayouts;
396 parseLayoutAnnotation(&node,pListOfLayouts);
397
398 fail_unless(pListOfLayouts.size()==1);
399
400 Layout* l=(Layout*)pListOfLayouts.get(0);
401
402 fail_unless(l!=NULL);
403
404 Dimensions* dimensions=l->getDimensions();
405 fail_unless(dimensions->getWidth()==200.0);
406 fail_unless(dimensions->getHeight()==400.0);
407 fail_unless(dimensions->getDepth()==0.0);
408
409 fail_unless(l->getId()=="layout_1");
410
411 fail_unless(l->getNumCompartmentGlyphs()==1);
412 CompartmentGlyph* cg=l->getCompartmentGlyph(0);
413 fail_unless(cg->getId()=="compartmentGlyph_1");
414 fail_unless(cg->getCompartmentId()=="compartment_1");
415
416 BoundingBox* bb=cg->getBoundingBox();
417 Point* position=bb->getPosition();
418 fail_unless(position->getXOffset()==10.3);
419 fail_unless(position->getYOffset()==20.0);
420 fail_unless(position->getZOffset()==0.0);
421 Dimensions* dimensions2=bb->getDimensions();
422 fail_unless(dimensions2->getWidth()==200.5);
423 fail_unless(dimensions2->getHeight()==400.5);
424 fail_unless(dimensions2->getDepth()==0.0);
425
426
427 delete stream;
428 }
429 END_TEST
430
START_TEST(test_LayoutCreation_CompartmentGlyph_notes)431 START_TEST (test_LayoutCreation_CompartmentGlyph_notes)
432 {
433 const char* content=
434 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
435 "<annotation>\n"
436 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
437 " <layout id=\"layout_1\">\n"
438 " <dimensions width=\"200\" height=\"400\"/>\n"
439 " <listOfCompartmentGlyphs>\n"
440 " <compartmentGlyph id=\"compartmentGlyph_1\">\n"
441 " <notes>"
442 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
443 " <p>Testnote</p>\n"
444 " </body>"
445 " </notes>\n"
446 " <boundingBox>\n"
447 " <position x=\"10.3\" y=\"20\"/>\n"
448 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
449 " </boundingBox>\n"
450 " </compartmentGlyph>\n"
451 " </listOfCompartmentGlyphs>\n"
452 " </layout>\n"
453 "</listOfLayouts>\n"
454 "</annotation>\n"
455 ;
456
457
458 XMLInputStream *stream= new XMLInputStream(content,false);
459 XMLNode node=XMLNode(*stream);
460 ListOfLayouts pListOfLayouts;
461 parseLayoutAnnotation(&node,pListOfLayouts);
462
463 fail_unless(pListOfLayouts.size()==1);
464
465 Layout* l=(Layout*)pListOfLayouts.get(0);
466
467 fail_unless(l!=NULL);
468
469 Dimensions* dimensions=l->getDimensions();
470 fail_unless(dimensions->getWidth()==200.0);
471 fail_unless(dimensions->getHeight()==400.0);
472 fail_unless(dimensions->getDepth()==0.0);
473
474 fail_unless(l->getId()=="layout_1");
475
476 fail_unless(l->getNumCompartmentGlyphs()==1);
477 CompartmentGlyph* cg=l->getCompartmentGlyph(0);
478 fail_unless(cg->getId()=="compartmentGlyph_1");
479 fail_unless(!cg->isSetCompartmentId());
480
481 BoundingBox* bb=cg->getBoundingBox();
482 Point* position=bb->getPosition();
483 fail_unless(position->getXOffset()==10.3);
484 fail_unless(position->getYOffset()==20.0);
485 fail_unless(position->getZOffset()==0.0);
486 Dimensions* dimensions2=bb->getDimensions();
487 fail_unless(dimensions2->getWidth()==200.5);
488 fail_unless(dimensions2->getHeight()==400.5);
489 fail_unless(dimensions2->getDepth()==0.0);
490
491 fail_unless(cg->isSetNotes());
492 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
493 XMLNode notes=XMLNode(*stream2);
494 fail_unless(cg->getNotes()->equals(notes, true));
495
496
497 delete stream2;
498 delete stream;
499 }
500 END_TEST
501
START_TEST(test_LayoutCreation_CompartmentGlyph_annotation)502 START_TEST (test_LayoutCreation_CompartmentGlyph_annotation)
503 {
504 const char* a =
505 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
506 "<annotation>\n"
507 " <this-is-a-test>\n"
508 " <another-level> level2 </another-level>\n"
509 " </this-is-a-test>\n"
510 " </annotation>";
511
512 const char* content=
513 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
514 "<annotation>\n"
515 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
516 " <layout id=\"layout_1\">\n"
517 " <dimensions width=\"200\" height=\"400\"/>\n"
518 " <listOfCompartmentGlyphs>\n"
519 " <compartmentGlyph id=\"compartmentGlyph_1\">\n"
520 " <annotation>\n"
521 " <this-is-a-test>\n"
522 " <another-level> level2 </another-level>\n"
523 " </this-is-a-test>\n"
524 " </annotation>\n"
525 " <boundingBox>\n"
526 " <position x=\"10.3\" y=\"20\"/>\n"
527 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
528 " </boundingBox>\n"
529 " </compartmentGlyph>\n"
530 " </listOfCompartmentGlyphs>\n"
531 " </layout>\n"
532 "</listOfLayouts>\n"
533 "</annotation>\n"
534 ;
535
536
537 XMLInputStream *stream=new XMLInputStream(content,false);
538 XMLNode node=XMLNode(*stream);
539 ListOfLayouts pListOfLayouts;
540 parseLayoutAnnotation(&node,pListOfLayouts);
541
542 fail_unless(pListOfLayouts.size()==1);
543
544 Layout* l=(Layout*)pListOfLayouts.get(0);
545
546 fail_unless(l!=NULL);
547
548 Dimensions* dimensions=l->getDimensions();
549 fail_unless(dimensions->getWidth()==200.0);
550 fail_unless(dimensions->getHeight()==400.0);
551 fail_unless(dimensions->getDepth()==0.0);
552
553 fail_unless(l->getId()=="layout_1");
554
555 fail_unless(l->getNumCompartmentGlyphs()==1);
556 CompartmentGlyph* cg=l->getCompartmentGlyph(0);
557 fail_unless(cg->getId()=="compartmentGlyph_1");
558 fail_unless(!cg->isSetCompartmentId());
559
560 BoundingBox* bb=cg->getBoundingBox();
561 Point* position=bb->getPosition();
562 fail_unless(position->getXOffset()==10.3);
563 fail_unless(position->getYOffset()==20.0);
564 fail_unless(position->getZOffset()==0.0);
565 Dimensions* dimensions2=bb->getDimensions();
566 fail_unless(dimensions2->getWidth()==200.5);
567 fail_unless(dimensions2->getHeight()==400.5);
568 fail_unless(dimensions2->getDepth()==0.0);
569
570 fail_unless(cg->isSetAnnotation());
571 XMLInputStream *stream2 = new XMLInputStream(a,false);
572 XMLNode aNode=XMLNode(*stream2);
573 fail_unless(cg->getAnnotation()->equals(aNode, true));
574
575 delete stream2;
576 delete stream;
577
578 }
579 END_TEST
580
START_TEST(test_LayoutCreation_CompartmentGlyph_skipOptional)581 START_TEST (test_LayoutCreation_CompartmentGlyph_skipOptional)
582 {
583 const char* content=
584 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
585 "<annotation>\n"
586 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
587 " <layout id=\"layout_1\">\n"
588 " <dimensions width=\"200\" height=\"400\"/>\n"
589 " <listOfCompartmentGlyphs>\n"
590 " <compartmentGlyph id=\"compartmentGlyph_1\">\n"
591 " <boundingBox>\n"
592 " <position x=\"10.3\" y=\"20\"/>\n"
593 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
594 " </boundingBox>\n"
595 " </compartmentGlyph>\n"
596 " </listOfCompartmentGlyphs>\n"
597 " </layout>\n"
598 "</listOfLayouts>\n"
599 "</annotation>\n"
600 ;
601
602
603 XMLInputStream *stream=new XMLInputStream(content,false);
604 XMLNode node=XMLNode(*stream);
605 ListOfLayouts pListOfLayouts;
606 parseLayoutAnnotation(&node,pListOfLayouts);
607
608 fail_unless(pListOfLayouts.size()==1);
609
610 Layout* l=(Layout*)pListOfLayouts.get(0);
611
612 fail_unless(l!=NULL);
613
614 Dimensions* dimensions=l->getDimensions();
615 fail_unless(dimensions->getWidth()==200.0);
616 fail_unless(dimensions->getHeight()==400.0);
617 fail_unless(dimensions->getDepth()==0.0);
618
619 fail_unless(l->getId()=="layout_1");
620
621 fail_unless(l->getNumCompartmentGlyphs()==1);
622 CompartmentGlyph* cg=l->getCompartmentGlyph(0);
623 fail_unless(cg->getId()=="compartmentGlyph_1");
624 fail_unless(!cg->isSetCompartmentId());
625
626 BoundingBox* bb=cg->getBoundingBox();
627 Point* position=bb->getPosition();
628 fail_unless(position->getXOffset()==10.3);
629 fail_unless(position->getYOffset()==20.0);
630 fail_unless(position->getZOffset()==0.0);
631 Dimensions* dimensions2=bb->getDimensions();
632 fail_unless(dimensions2->getWidth()==200.5);
633 fail_unless(dimensions2->getHeight()==400.5);
634 fail_unless(dimensions2->getDepth()==0.0);
635
636
637 delete stream;
638 }
639 END_TEST
640
START_TEST(test_LayoutCreation_SpeciesGlyph)641 START_TEST (test_LayoutCreation_SpeciesGlyph)
642 {
643 const char* content=
644 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
645 "<annotation>\n"
646 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
647 " <layout id=\"layout_1\">\n"
648 " <dimensions width=\"200\" height=\"400\"/>\n"
649 " <listOfSpeciesGlyphs>\n"
650 " <speciesGlyph id=\"speciesGlyph_1\" species=\"species_1\">\n"
651 " <boundingBox>\n"
652 " <position x=\"10.3\" y=\"20\"/>\n"
653 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
654 " </boundingBox>\n"
655 " </speciesGlyph>\n"
656 " </listOfSpeciesGlyphs>\n"
657 " </layout>\n"
658 "</listOfLayouts>\n"
659 "</annotation>\n"
660 ;
661
662
663 XMLInputStream *stream=new XMLInputStream(content,false);
664 XMLNode node=XMLNode(*stream);
665 ListOfLayouts pListOfLayouts;
666 parseLayoutAnnotation(&node,pListOfLayouts);
667
668 fail_unless(pListOfLayouts.size()==1);
669
670 Layout* l=(Layout*)pListOfLayouts.get(0);
671
672 fail_unless(l!=NULL);
673
674 Dimensions* dimensions=l->getDimensions();
675 fail_unless(dimensions->getWidth()==200.0);
676 fail_unless(dimensions->getHeight()==400.0);
677 fail_unless(dimensions->getDepth()==0.0);
678
679 fail_unless(l->getId()=="layout_1");
680
681 fail_unless(l->getNumSpeciesGlyphs()==1);
682 SpeciesGlyph* sg=l->getSpeciesGlyph(0);
683 fail_unless(sg->getId()=="speciesGlyph_1");
684 fail_unless(sg->getSpeciesId()=="species_1");
685
686 BoundingBox* bb=sg->getBoundingBox();
687 Point* position=bb->getPosition();
688 fail_unless(position->getXOffset()==10.3);
689 fail_unless(position->getYOffset()==20.0);
690 fail_unless(position->getZOffset()==0.0);
691 Dimensions* dimensions2=bb->getDimensions();
692 fail_unless(dimensions2->getWidth()==200.5);
693 fail_unless(dimensions2->getHeight()==400.5);
694 fail_unless(dimensions2->getDepth()==0.0);
695
696
697 delete stream;
698 }
699 END_TEST
700
START_TEST(test_LayoutCreation_SpeciesGlyph_notes)701 START_TEST (test_LayoutCreation_SpeciesGlyph_notes)
702 {
703 const char* content=
704 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
705 "<annotation>\n"
706 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
707 " <layout id=\"layout_1\">\n"
708 " <dimensions width=\"200\" height=\"400\"/>\n"
709 " <listOfSpeciesGlyphs>\n"
710 " <speciesGlyph id=\"speciesGlyph_1\">\n"
711 " <notes>"
712 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
713 " <p>Testnote</p>\n"
714 " </body>"
715 " </notes>\n"
716 " <boundingBox>\n"
717 " <position x=\"10.3\" y=\"20\"/>\n"
718 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
719 " </boundingBox>\n"
720 " </speciesGlyph>\n"
721 " </listOfSpeciesGlyphs>\n"
722 " </layout>\n"
723 "</listOfLayouts>\n"
724 "</annotation>\n"
725 ;
726
727
728 XMLInputStream *stream=new XMLInputStream(content,false);
729 XMLNode node=XMLNode(*stream);
730 ListOfLayouts pListOfLayouts;
731 parseLayoutAnnotation(&node,pListOfLayouts);
732
733 fail_unless(pListOfLayouts.size()==1);
734
735 Layout* l=(Layout*)pListOfLayouts.get(0);
736
737 fail_unless(l!=NULL);
738
739 Dimensions* dimensions=l->getDimensions();
740 fail_unless(dimensions->getWidth()==200.0);
741 fail_unless(dimensions->getHeight()==400.0);
742 fail_unless(dimensions->getDepth()==0.0);
743
744 fail_unless(l->getId()=="layout_1");
745
746 fail_unless(l->getNumSpeciesGlyphs()==1);
747 SpeciesGlyph* sg=l->getSpeciesGlyph(0);
748 fail_unless(sg->getId()=="speciesGlyph_1");
749 fail_unless(!sg->isSetSpeciesId());
750
751 BoundingBox* bb=sg->getBoundingBox();
752 Point* position=bb->getPosition();
753 fail_unless(position->getXOffset()==10.3);
754 fail_unless(position->getYOffset()==20.0);
755 fail_unless(position->getZOffset()==0.0);
756 Dimensions* dimensions2=bb->getDimensions();
757 fail_unless(dimensions2->getWidth()==200.5);
758 fail_unless(dimensions2->getHeight()==400.5);
759 fail_unless(dimensions2->getDepth()==0.0);
760
761 fail_unless(sg->isSetNotes());
762 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
763 XMLNode notes=XMLNode(*stream2);
764 fail_unless(sg->getNotes()->equals(notes, true));
765
766 delete stream2;
767 delete stream;
768
769 }
770 END_TEST
771
START_TEST(test_LayoutCreation_SpeciesGlyph_annotation)772 START_TEST (test_LayoutCreation_SpeciesGlyph_annotation)
773 {
774 const char* a =
775 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
776 "<annotation>\n"
777 " <this-is-a-test>\n"
778 " <another-level> level2 </another-level>\n"
779 " </this-is-a-test>\n"
780 " </annotation>";
781
782 const char* content=
783 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
784 "<annotation>\n"
785 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
786 " <layout id=\"layout_1\">\n"
787 " <dimensions width=\"200\" height=\"400\"/>\n"
788 " <listOfSpeciesGlyphs>\n"
789 " <speciesGlyph id=\"speciesGlyph_1\">\n"
790 " <annotation>\n"
791 " <this-is-a-test>\n"
792 " <another-level> level2 </another-level>\n"
793 " </this-is-a-test>\n"
794 " </annotation>\n"
795 " <boundingBox>\n"
796 " <position x=\"10.3\" y=\"20\"/>\n"
797 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
798 " </boundingBox>\n"
799 " </speciesGlyph>\n"
800 " </listOfSpeciesGlyphs>\n"
801 " </layout>\n"
802 "</listOfLayouts>\n"
803 "</annotation>\n"
804 ;
805
806
807 XMLInputStream *stream=new XMLInputStream(content,false);
808 XMLNode node=XMLNode(*stream);
809 ListOfLayouts pListOfLayouts;
810 parseLayoutAnnotation(&node,pListOfLayouts);
811
812 fail_unless(pListOfLayouts.size()==1);
813
814 Layout* l=(Layout*)pListOfLayouts.get(0);
815
816 fail_unless(l!=NULL);
817
818 Dimensions* dimensions=l->getDimensions();
819 fail_unless(dimensions->getWidth()==200.0);
820 fail_unless(dimensions->getHeight()==400.0);
821 fail_unless(dimensions->getDepth()==0.0);
822
823 fail_unless(l->getId()=="layout_1");
824
825 fail_unless(l->getNumSpeciesGlyphs()==1);
826 SpeciesGlyph* sg=l->getSpeciesGlyph(0);
827 fail_unless(sg->getId()=="speciesGlyph_1");
828 fail_unless(!sg->isSetSpeciesId());
829
830 BoundingBox* bb=sg->getBoundingBox();
831 Point* position=bb->getPosition();
832 fail_unless(position->getXOffset()==10.3);
833 fail_unless(position->getYOffset()==20.0);
834 fail_unless(position->getZOffset()==0.0);
835 Dimensions* dimensions2=bb->getDimensions();
836 fail_unless(dimensions2->getWidth()==200.5);
837 fail_unless(dimensions2->getHeight()==400.5);
838 fail_unless(dimensions2->getDepth()==0.0);
839
840 fail_unless(sg->isSetAnnotation());
841 XMLInputStream *stream2 = new XMLInputStream(a,false);
842 XMLNode aNode=XMLNode(*stream2);
843 fail_unless(sg->getAnnotation()->equals(aNode, true));
844
845 delete stream2;
846 delete stream;
847 }
848 END_TEST
849
START_TEST(test_LayoutCreation_SpeciesGlyph_skipOptional)850 START_TEST (test_LayoutCreation_SpeciesGlyph_skipOptional)
851 {
852 const char* content=
853 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
854 "<annotation>\n"
855 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
856 " <layout id=\"layout_1\">\n"
857 " <dimensions width=\"200\" height=\"400\"/>\n"
858 " <listOfSpeciesGlyphs>\n"
859 " <speciesGlyph id=\"speciesGlyph_1\">\n"
860 " <boundingBox>\n"
861 " <position x=\"10.3\" y=\"20\"/>\n"
862 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
863 " </boundingBox>\n"
864 " </speciesGlyph>\n"
865 " </listOfSpeciesGlyphs>\n"
866 " </layout>\n"
867 "</listOfLayouts>\n"
868 "</annotation>\n"
869 ;
870
871
872 XMLInputStream *stream=new XMLInputStream(content,false);
873 XMLNode node=XMLNode(*stream);
874 ListOfLayouts pListOfLayouts;
875 parseLayoutAnnotation(&node,pListOfLayouts);
876
877 fail_unless(pListOfLayouts.size()==1);
878
879 Layout* l=(Layout*)pListOfLayouts.get(0);
880
881 fail_unless(l!=NULL);
882
883 Dimensions* dimensions=l->getDimensions();
884 fail_unless(dimensions->getWidth()==200.0);
885 fail_unless(dimensions->getHeight()==400.0);
886 fail_unless(dimensions->getDepth()==0.0);
887
888 fail_unless(l->getId()=="layout_1");
889
890 fail_unless(l->getNumSpeciesGlyphs()==1);
891 SpeciesGlyph* sg=l->getSpeciesGlyph(0);
892 fail_unless(sg->getId()=="speciesGlyph_1");
893
894 fail_unless(!sg->isSetSpeciesId());
895
896 BoundingBox* bb=sg->getBoundingBox();
897 Point* position=bb->getPosition();
898 fail_unless(position->getXOffset()==10.3);
899 fail_unless(position->getYOffset()==20.0);
900 fail_unless(position->getZOffset()==0.0);
901 Dimensions* dimensions2=bb->getDimensions();
902 fail_unless(dimensions2->getWidth()==200.5);
903 fail_unless(dimensions2->getHeight()==400.5);
904 fail_unless(dimensions2->getDepth()==0.0);
905
906 delete stream;
907
908 }
909 END_TEST
910
START_TEST(test_LayoutCreation_ReactionGlyph_Curve)911 START_TEST (test_LayoutCreation_ReactionGlyph_Curve)
912 {
913 const char* content=
914 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
915 "<annotation>\n"
916 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
917 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
918 " <dimensions width=\"200\" height=\"400\"/>\n"
919 " <listOfReactionGlyphs>\n"
920 " <reactionGlyph id=\"reactionGlyph_1\" reaction=\"reaction_1\">\n"
921 " <curve>\n"
922 " <listOfCurveSegments>\n"
923 " <curveSegment xsi:type=\"LineSegment\">\n"
924 " <start x=\"10\" y=\"15\"/>\n"
925 " <end x=\"20\" y=\"30\"/>\n"
926 " </curveSegment>\n"
927 " </listOfCurveSegments>\n"
928 " </curve>\n"
929 " </reactionGlyph>\n"
930 " </listOfReactionGlyphs>\n"
931 " </layout>\n"
932 "</listOfLayouts>\n"
933 "</annotation>\n"
934 ;
935
936
937 XMLInputStream *stream=new XMLInputStream(content,false);
938 XMLNode node=XMLNode(*stream);
939 ListOfLayouts pListOfLayouts;
940 parseLayoutAnnotation(&node,pListOfLayouts);
941
942 fail_unless(pListOfLayouts.size()==1);
943
944 Layout* l=(Layout*)pListOfLayouts.get(0);
945
946 fail_unless(l!=NULL);
947
948 Dimensions* dimensions=l->getDimensions();
949 fail_unless(dimensions->getWidth()==200.0);
950 fail_unless(dimensions->getHeight()==400.0);
951 fail_unless(dimensions->getDepth()==0.0);
952
953 fail_unless(l->getId()=="layout_1");
954
955 fail_unless(l->getNumReactionGlyphs()==1);
956 ReactionGlyph* rg=l->getReactionGlyph(0);
957 fail_unless(rg->getId()=="reactionGlyph_1");
958 fail_unless(rg->getReactionId()=="reaction_1");
959
960 fail_unless(rg->isSetCurve());
961 Curve* curve=rg->getCurve();
962 fail_unless(curve->getNumCurveSegments()==1);
963 LineSegment* ls=curve->getCurveSegment(0);
964 fail_unless(ls->getTypeCode()!=SBML_LAYOUT_CUBICBEZIER);
965 Point* start=ls->getStart();
966 fail_unless(start->getXOffset()==10.0);
967 fail_unless(start->getYOffset()==15.0);
968 fail_unless(start->getZOffset()==0.0);
969 Point* end=ls->getEnd();
970 fail_unless(end->getXOffset()==20.0);
971 fail_unless(end->getYOffset()==30.0);
972 fail_unless(end->getZOffset()==0.0);
973
974
975 delete stream;
976 }
977 END_TEST
978
START_TEST(test_LayoutCreation_ReactionGlyph_BoundingBox)979 START_TEST (test_LayoutCreation_ReactionGlyph_BoundingBox)
980 {
981 const char* content=
982 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
983 "<annotation>\n"
984 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
985 " <layout id=\"layout_1\">\n"
986 " <dimensions width=\"200\" height=\"400\"/>\n"
987 " <listOfReactionGlyphs>\n"
988 " <reactionGlyph id=\"reactionGlyph_1\" reaction=\"reaction_1\">\n"
989 " <boundingBox>\n"
990 " <position x=\"10.3\" y=\"20\"/>\n"
991 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
992 " </boundingBox>\n"
993 " </reactionGlyph>\n"
994 " </listOfReactionGlyphs>\n"
995 " </layout>\n"
996 "</listOfLayouts>\n"
997 "</annotation>\n"
998 ;
999
1000
1001 XMLInputStream *stream=new XMLInputStream(content,false);
1002 XMLNode node=XMLNode(*stream);
1003 ListOfLayouts pListOfLayouts;
1004 parseLayoutAnnotation(&node,pListOfLayouts);
1005
1006 fail_unless(pListOfLayouts.size()==1);
1007
1008 Layout* l=(Layout*)pListOfLayouts.get(0);
1009
1010 fail_unless(l!=NULL);
1011
1012 Dimensions* dimensions=l->getDimensions();
1013 fail_unless(dimensions->getWidth()==200.0);
1014 fail_unless(dimensions->getHeight()==400.0);
1015 fail_unless(dimensions->getDepth()==0.0);
1016
1017 fail_unless(l->getId()=="layout_1");
1018
1019 fail_unless(l->getNumReactionGlyphs()==1);
1020 ReactionGlyph* rg=l->getReactionGlyph(0);
1021 fail_unless(rg->getId()=="reactionGlyph_1");
1022 fail_unless(rg->getReactionId()=="reaction_1");
1023
1024 BoundingBox* bb=rg->getBoundingBox();
1025 Point* position=bb->getPosition();
1026 fail_unless(position->getXOffset()==10.3);
1027 fail_unless(position->getYOffset()==20.0);
1028 fail_unless(position->getZOffset()==0.0);
1029 Dimensions* dimensions2=bb->getDimensions();
1030 fail_unless(dimensions2->getWidth()==200.5);
1031 fail_unless(dimensions2->getHeight()==400.5);
1032 fail_unless(dimensions2->getDepth()==0.0);
1033
1034 delete stream;
1035
1036 }
1037 END_TEST
1038
START_TEST(test_LayoutCreation_ReactionGlyph_notes)1039 START_TEST (test_LayoutCreation_ReactionGlyph_notes)
1040 {
1041 const char* content=
1042 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1043 "<annotation>\n"
1044 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1045 " <layout id=\"layout_1\">\n"
1046 " <dimensions width=\"200\" height=\"400\"/>\n"
1047 " <listOfReactionGlyphs>\n"
1048 " <reactionGlyph id=\"reactionGlyph_1\" reaction=\"reaction_1\">\n"
1049 " <notes>"
1050 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
1051 " <p>Testnote</p>\n"
1052 " </body>"
1053 " </notes>\n"
1054 " <boundingBox>\n"
1055 " <position x=\"10.3\" y=\"20\"/>\n"
1056 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1057 " </boundingBox>\n"
1058 " </reactionGlyph>\n"
1059 " </listOfReactionGlyphs>\n"
1060 " </layout>\n"
1061 "</listOfLayouts>\n"
1062 "</annotation>\n"
1063 ;
1064
1065
1066 XMLInputStream *stream=new XMLInputStream(content,false);
1067 XMLNode node=XMLNode(*stream);
1068 ListOfLayouts pListOfLayouts;
1069 parseLayoutAnnotation(&node,pListOfLayouts);
1070
1071 fail_unless(pListOfLayouts.size()==1);
1072
1073 Layout* l=(Layout*)pListOfLayouts.get(0);
1074
1075 fail_unless(l!=NULL);
1076
1077 Dimensions* dimensions=l->getDimensions();
1078 fail_unless(dimensions->getWidth()==200.0);
1079 fail_unless(dimensions->getHeight()==400.0);
1080 fail_unless(dimensions->getDepth()==0.0);
1081
1082 fail_unless(l->getId()=="layout_1");
1083
1084 fail_unless(l->getNumReactionGlyphs()==1);
1085 ReactionGlyph* rg=l->getReactionGlyph(0);
1086 fail_unless(rg->getId()=="reactionGlyph_1");
1087 fail_unless(rg->getReactionId()=="reaction_1");
1088
1089 BoundingBox* bb=rg->getBoundingBox();
1090 Point* position=bb->getPosition();
1091 fail_unless(position->getXOffset()==10.3);
1092 fail_unless(position->getYOffset()==20.0);
1093 fail_unless(position->getZOffset()==0.0);
1094 Dimensions* dimensions2=bb->getDimensions();
1095 fail_unless(dimensions2->getWidth()==200.5);
1096 fail_unless(dimensions2->getHeight()==400.5);
1097 fail_unless(dimensions2->getDepth()==0.0);
1098 fail_unless(rg->isSetNotes());
1099 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
1100 XMLNode notes=XMLNode(*stream2);
1101 fail_unless(rg->getNotes()->equals(notes, true));
1102
1103 delete stream2;
1104 delete stream;
1105 }
1106 END_TEST
1107
START_TEST(test_LayoutCreation_ReactionGlyph_annotation)1108 START_TEST (test_LayoutCreation_ReactionGlyph_annotation)
1109 {
1110 const char* a =
1111 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1112 "<annotation>\n"
1113 " <this-is-a-test>\n"
1114 " <another-level> level2 </another-level>\n"
1115 " </this-is-a-test>\n"
1116 " </annotation>";
1117
1118 const char* content=
1119 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1120 "<annotation>\n"
1121 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1122 " <layout id=\"layout_1\">\n"
1123 " <dimensions width=\"200\" height=\"400\"/>\n"
1124 " <listOfReactionGlyphs>\n"
1125 " <reactionGlyph id=\"reactionGlyph_1\" reaction=\"reaction_1\">\n"
1126 " <annotation>\n"
1127 " <this-is-a-test>\n"
1128 " <another-level> level2 </another-level>\n"
1129 " </this-is-a-test>\n"
1130 " </annotation>\n"
1131 " <boundingBox>\n"
1132 " <position x=\"10.3\" y=\"20\"/>\n"
1133 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1134 " </boundingBox>\n"
1135 " </reactionGlyph>\n"
1136 " </listOfReactionGlyphs>\n"
1137 " </layout>\n"
1138 "</listOfLayouts>\n"
1139 "</annotation>\n"
1140 ;
1141
1142
1143 XMLInputStream *stream=new XMLInputStream(content,false);
1144 XMLNode node=XMLNode(*stream);
1145 ListOfLayouts pListOfLayouts;
1146 parseLayoutAnnotation(&node,pListOfLayouts);
1147
1148 fail_unless(pListOfLayouts.size()==1);
1149
1150 Layout* l=(Layout*)pListOfLayouts.get(0);
1151
1152 fail_unless(l!=NULL);
1153
1154 Dimensions* dimensions=l->getDimensions();
1155 fail_unless(dimensions->getWidth()==200.0);
1156 fail_unless(dimensions->getHeight()==400.0);
1157 fail_unless(dimensions->getDepth()==0.0);
1158
1159 fail_unless(l->getId()=="layout_1");
1160
1161 fail_unless(l->getNumReactionGlyphs()==1);
1162 ReactionGlyph* rg=l->getReactionGlyph(0);
1163 fail_unless(rg->getId()=="reactionGlyph_1");
1164 fail_unless(rg->getReactionId()=="reaction_1");
1165
1166 BoundingBox* bb=rg->getBoundingBox();
1167 Point* position=bb->getPosition();
1168 fail_unless(position->getXOffset()==10.3);
1169 fail_unless(position->getYOffset()==20.0);
1170 fail_unless(position->getZOffset()==0.0);
1171 Dimensions* dimensions2=bb->getDimensions();
1172 fail_unless(dimensions2->getWidth()==200.5);
1173 fail_unless(dimensions2->getHeight()==400.5);
1174 fail_unless(dimensions2->getDepth()==0.0);
1175
1176 fail_unless(rg->isSetAnnotation());
1177 XMLInputStream *stream2 = new XMLInputStream(a,false);
1178 XMLNode aNode=XMLNode(*stream2);
1179 fail_unless(rg->getAnnotation()->equals(aNode, true));
1180
1181 delete stream2;
1182 delete stream;
1183 }
1184 END_TEST
1185
START_TEST(test_LayoutCreation_ReactionGlyph_skipOptional)1186 START_TEST (test_LayoutCreation_ReactionGlyph_skipOptional)
1187 {
1188 const char* content=
1189 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1190 "<annotation>\n"
1191 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1192 " <layout id=\"layout_1\">\n"
1193 " <dimensions width=\"200\" height=\"400\"/>\n"
1194 " <listOfReactionGlyphs>\n"
1195 " <reactionGlyph id=\"reactionGlyph_1\">\n"
1196 " <boundingBox>\n"
1197 " <position x=\"10.3\" y=\"20\"/>\n"
1198 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1199 " </boundingBox>\n"
1200 " </reactionGlyph>\n"
1201 " </listOfReactionGlyphs>\n"
1202 " </layout>\n"
1203 "</listOfLayouts>\n"
1204 "</annotation>\n"
1205 ;
1206
1207
1208 XMLInputStream *stream=new XMLInputStream(content,false);
1209 XMLNode node=XMLNode(*stream);
1210 ListOfLayouts pListOfLayouts;
1211 parseLayoutAnnotation(&node,pListOfLayouts);
1212
1213 fail_unless(pListOfLayouts.size()==1);
1214
1215 Layout* l=(Layout*)pListOfLayouts.get(0);
1216
1217 fail_unless(l!=NULL);
1218
1219 Dimensions* dimensions=l->getDimensions();
1220 fail_unless(dimensions->getWidth()==200.0);
1221 fail_unless(dimensions->getHeight()==400.0);
1222 fail_unless(dimensions->getDepth()==0.0);
1223
1224 fail_unless(l->getId()=="layout_1");
1225
1226 fail_unless(l->getNumReactionGlyphs()==1);
1227 ReactionGlyph* rg=l->getReactionGlyph(0);
1228 fail_unless(rg->getId()=="reactionGlyph_1");
1229 fail_unless(!rg->isSetReactionId());
1230
1231 BoundingBox* bb=rg->getBoundingBox();
1232 Point* position=bb->getPosition();
1233 fail_unless(position->getXOffset()==10.3);
1234 fail_unless(position->getYOffset()==20.0);
1235 fail_unless(position->getZOffset()==0.0);
1236 Dimensions* dimensions2=bb->getDimensions();
1237 fail_unless(dimensions2->getWidth()==200.5);
1238 fail_unless(dimensions2->getHeight()==400.5);
1239 fail_unless(dimensions2->getDepth()==0.0);
1240
1241
1242 delete stream;
1243 }
1244 END_TEST
1245
START_TEST(test_LayoutCreation_SpeciesReferenceGlyph_Curve)1246 START_TEST (test_LayoutCreation_SpeciesReferenceGlyph_Curve)
1247 {
1248 const char* content=
1249 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1250 "<annotation>\n"
1251 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1252 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
1253 " <dimensions width=\"200\" height=\"400\"/>\n"
1254 " <listOfReactionGlyphs>\n"
1255 " <reactionGlyph id=\"reactionGlyph_1\">\n"
1256 " <boundingBox>\n"
1257 " <position x=\"10.3\" y=\"20\"/>\n"
1258 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1259 " </boundingBox>\n"
1260 " <listOfSpeciesReferenceGlyphs>\n"
1261 " <speciesReferenceGlyph id=\"speciesReferenceGlyph_1\" speciesReference=\"speciesReference_1\" speciesGlyph=\"speciesGlyph_1\" role=\"activator\">\n"
1262 " <curve>\n"
1263 " <listOfCurveSegments>\n"
1264 " <curveSegment xsi:type=\"LineSegment\">\n"
1265 " <start x=\"10\" y=\"15\"/>\n"
1266 " <end x=\"20\" y=\"30\"/>\n"
1267 " </curveSegment>\n"
1268 " </listOfCurveSegments>\n"
1269 " </curve>\n"
1270 " </speciesReferenceGlyph>\n"
1271 " </listOfSpeciesReferenceGlyphs>\n"
1272 " </reactionGlyph>\n"
1273 " </listOfReactionGlyphs>\n"
1274 " </layout>\n"
1275 "</listOfLayouts>\n"
1276 "</annotation>\n"
1277 ;
1278
1279
1280 XMLInputStream *stream=new XMLInputStream(content,false);
1281 XMLNode node=XMLNode(*stream);
1282 ListOfLayouts pListOfLayouts;
1283 parseLayoutAnnotation(&node,pListOfLayouts);
1284
1285 fail_unless(pListOfLayouts.size()==1);
1286
1287 Layout* l=(Layout*)pListOfLayouts.get(0);
1288
1289 fail_unless(l!=NULL);
1290
1291 Dimensions* dimensions=l->getDimensions();
1292 fail_unless(dimensions->getWidth()==200.0);
1293 fail_unless(dimensions->getHeight()==400.0);
1294 fail_unless(dimensions->getDepth()==0.0);
1295
1296 fail_unless(l->getId()=="layout_1");
1297
1298 fail_unless(l->getNumReactionGlyphs()==1);
1299 ReactionGlyph* rg=l->getReactionGlyph(0);
1300 fail_unless(rg->getId()=="reactionGlyph_1");
1301 fail_unless(!rg->isSetReactionId());
1302
1303 BoundingBox* bb=rg->getBoundingBox();
1304 Point* position=bb->getPosition();
1305 fail_unless(position->getXOffset()==10.3);
1306 fail_unless(position->getYOffset()==20.0);
1307 fail_unless(position->getZOffset()==0.0);
1308 Dimensions* dimensions2=bb->getDimensions();
1309 fail_unless(dimensions2->getWidth()==200.5);
1310 fail_unless(dimensions2->getHeight()==400.5);
1311 fail_unless(dimensions2->getDepth()==0.0);
1312
1313 fail_unless(rg->getNumSpeciesReferenceGlyphs()==1);
1314 SpeciesReferenceGlyph* srg=rg->getSpeciesReferenceGlyph(0);
1315 fail_unless(srg->getId()=="speciesReferenceGlyph_1");
1316 fail_unless(srg->getRole()==SPECIES_ROLE_ACTIVATOR);
1317 fail_unless(srg->getSpeciesGlyphId()=="speciesGlyph_1");
1318 fail_unless(srg->getSpeciesReferenceId()=="speciesReference_1");
1319
1320 fail_unless(srg->isSetCurve());
1321 Curve* curve=srg->getCurve();
1322 fail_unless(curve->getNumCurveSegments()==1);
1323 LineSegment* ls=curve->getCurveSegment(0);
1324 fail_unless(ls->getTypeCode()!=SBML_LAYOUT_CUBICBEZIER);
1325 Point* start=ls->getStart();
1326 fail_unless(start->getXOffset()==10.0);
1327 fail_unless(start->getYOffset()==15.0);
1328 fail_unless(start->getZOffset()==0.0);
1329 Point* end=ls->getEnd();
1330 fail_unless(end->getXOffset()==20.0);
1331 fail_unless(end->getYOffset()==30.0);
1332 fail_unless(end->getZOffset()==0.0);
1333
1334 delete stream;
1335 }
1336 END_TEST
1337
START_TEST(test_LayoutCreation_SpeciesReferenceGlyph_BoundingBox)1338 START_TEST (test_LayoutCreation_SpeciesReferenceGlyph_BoundingBox)
1339 {
1340 const char* content=
1341 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1342 "<annotation>\n"
1343 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1344 " <layout id=\"layout_1\">\n"
1345 " <dimensions width=\"200\" height=\"400\"/>\n"
1346 " <listOfReactionGlyphs>\n"
1347 " <reactionGlyph id=\"reactionGlyph_1\">\n"
1348 " <boundingBox>\n"
1349 " <position x=\"10.3\" y=\"20\"/>\n"
1350 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1351 " </boundingBox>\n"
1352 " <listOfSpeciesReferenceGlyphs>\n"
1353 " <speciesReferenceGlyph id=\"speciesReferenceGlyph_1\" speciesReference=\"speciesReference_1\" speciesGlyph=\"speciesGlyph_1\" role=\"modifier\">\n"
1354 " <boundingBox>\n"
1355 " <position x=\"110.3\" y=\"120\"/>\n"
1356 " <dimensions width=\"20.5\" height=\"40.5\"/>\n"
1357 " </boundingBox>\n"
1358 " </speciesReferenceGlyph>\n"
1359 " </listOfSpeciesReferenceGlyphs>\n"
1360 " </reactionGlyph>\n"
1361 " </listOfReactionGlyphs>\n"
1362 " </layout>\n"
1363 "</listOfLayouts>\n"
1364 "</annotation>\n"
1365 ;
1366
1367
1368 XMLInputStream *stream=new XMLInputStream(content,false);
1369 XMLNode node=XMLNode(*stream);
1370 ListOfLayouts pListOfLayouts;
1371 parseLayoutAnnotation(&node,pListOfLayouts);
1372
1373 fail_unless(pListOfLayouts.size()==1);
1374
1375 Layout* l=(Layout*)pListOfLayouts.get(0);
1376
1377 fail_unless(l!=NULL);
1378
1379 Dimensions* dimensions=l->getDimensions();
1380 fail_unless(dimensions->getWidth()==200.0);
1381 fail_unless(dimensions->getHeight()==400.0);
1382 fail_unless(dimensions->getDepth()==0.0);
1383
1384 fail_unless(l->getId()=="layout_1");
1385
1386 fail_unless(l->getNumReactionGlyphs()==1);
1387 ReactionGlyph* rg=l->getReactionGlyph(0);
1388 fail_unless(rg->getId()=="reactionGlyph_1");
1389 fail_unless(!rg->isSetReactionId());
1390
1391 BoundingBox* bb=rg->getBoundingBox();
1392 Point* position=bb->getPosition();
1393 fail_unless(position->getXOffset()==10.3);
1394 fail_unless(position->getYOffset()==20.0);
1395 fail_unless(position->getZOffset()==0.0);
1396 Dimensions* dimensions3=bb->getDimensions();
1397 fail_unless(dimensions3->getWidth()==200.5);
1398 fail_unless(dimensions3->getHeight()==400.5);
1399 fail_unless(dimensions3->getDepth()==0.0);
1400
1401 fail_unless(rg->getNumSpeciesReferenceGlyphs()==1);
1402 SpeciesReferenceGlyph* srg=rg->getSpeciesReferenceGlyph(0);
1403 fail_unless(srg->getId()=="speciesReferenceGlyph_1");
1404 fail_unless(srg->getRole()==SPECIES_ROLE_MODIFIER);
1405 fail_unless(srg->getSpeciesGlyphId()=="speciesGlyph_1");
1406 fail_unless(srg->getSpeciesReferenceId()=="speciesReference_1");
1407
1408 BoundingBox* bb2=srg->getBoundingBox();
1409 Point* position2=bb2->getPosition();
1410 fail_unless(position2->getXOffset()==110.3);
1411 fail_unless(position2->getYOffset()==120.0);
1412 fail_unless(position2->getZOffset()==0.0);
1413 Dimensions* dimensions2=bb2->getDimensions();
1414 fail_unless(dimensions2->getWidth()==20.5);
1415 fail_unless(dimensions2->getHeight()==40.5);
1416 fail_unless(dimensions2->getDepth()==0.0);
1417
1418 delete stream;
1419 }
1420 END_TEST
1421
START_TEST(test_LayoutCreation_SpeciesReferenceGlyph_notes)1422 START_TEST (test_LayoutCreation_SpeciesReferenceGlyph_notes)
1423 {
1424 const char* content=
1425 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1426 "<annotation>\n"
1427 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1428 " <layout id=\"layout_1\">\n"
1429 " <dimensions width=\"200\" height=\"400\"/>\n"
1430 " <listOfReactionGlyphs>\n"
1431 " <reactionGlyph id=\"reactionGlyph_1\">\n"
1432 " <boundingBox>\n"
1433 " <position x=\"10.3\" y=\"20\"/>\n"
1434 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1435 " </boundingBox>\n"
1436 " <listOfSpeciesReferenceGlyphs>\n"
1437 " <speciesReferenceGlyph id=\"speciesReferenceGlyph_1\" role=\"substrate\">\n"
1438 " <notes>"
1439 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
1440 " <p>Testnote</p>\n"
1441 " </body>"
1442 " </notes>\n"
1443 " <boundingBox>\n"
1444 " <position x=\"110.3\" y=\"120\"/>\n"
1445 " <dimensions width=\"20.5\" height=\"40.5\"/>\n"
1446 " </boundingBox>\n"
1447 " </speciesReferenceGlyph>\n"
1448 " </listOfSpeciesReferenceGlyphs>\n"
1449 " </reactionGlyph>\n"
1450 " </listOfReactionGlyphs>\n"
1451 " </layout>\n"
1452 "</listOfLayouts>\n"
1453 "</annotation>\n"
1454 ;
1455
1456
1457 XMLInputStream *stream=new XMLInputStream(content,false);
1458 XMLNode node=XMLNode(*stream);
1459 ListOfLayouts pListOfLayouts;
1460 parseLayoutAnnotation(&node,pListOfLayouts);
1461
1462 fail_unless(pListOfLayouts.size()==1);
1463
1464 Layout* l=(Layout*)pListOfLayouts.get(0);
1465
1466 fail_unless(l!=NULL);
1467
1468 Dimensions* dimensions=l->getDimensions();
1469 fail_unless(dimensions->getWidth()==200.0);
1470 fail_unless(dimensions->getHeight()==400.0);
1471 fail_unless(dimensions->getDepth()==0.0);
1472
1473 fail_unless(l->getId()=="layout_1");
1474
1475 fail_unless(l->getNumReactionGlyphs()==1);
1476 ReactionGlyph* rg=l->getReactionGlyph(0);
1477 fail_unless(rg->getId()=="reactionGlyph_1");
1478 fail_unless(!rg->isSetReactionId());
1479
1480 BoundingBox* bb=rg->getBoundingBox();
1481 Point* position=bb->getPosition();
1482 fail_unless(position->getXOffset()==10.3);
1483 fail_unless(position->getYOffset()==20.0);
1484 fail_unless(position->getZOffset()==0.0);
1485 Dimensions* dimensions3=bb->getDimensions();
1486 fail_unless(dimensions3->getWidth()==200.5);
1487 fail_unless(dimensions3->getHeight()==400.5);
1488 fail_unless(dimensions3->getDepth()==0.0);
1489
1490 fail_unless(rg->getNumSpeciesReferenceGlyphs()==1);
1491 SpeciesReferenceGlyph* srg=rg->getSpeciesReferenceGlyph(0);
1492 fail_unless(srg->getId()=="speciesReferenceGlyph_1");
1493 fail_unless(srg->getRole()==SPECIES_ROLE_SUBSTRATE);
1494 fail_unless(!srg->isSetSpeciesGlyphId());
1495 fail_unless(!srg->isSetSpeciesReferenceId());
1496
1497 BoundingBox* bb2=srg->getBoundingBox();
1498 Point* position2=bb2->getPosition();
1499 fail_unless(position2->getXOffset()==110.3);
1500 fail_unless(position2->getYOffset()==120.0);
1501 fail_unless(position2->getZOffset()==0.0);
1502 Dimensions* dimensions2=bb2->getDimensions();
1503 fail_unless(dimensions2->getWidth()==20.5);
1504 fail_unless(dimensions2->getHeight()==40.5);
1505 fail_unless(dimensions2->getDepth()==0.0);
1506
1507 fail_unless(srg->isSetNotes());
1508 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
1509 XMLNode notes=XMLNode(*stream2);
1510 fail_unless(srg->getNotes()->equals(notes, true));
1511
1512 delete stream2;
1513 delete stream;
1514 }
1515 END_TEST
1516
START_TEST(test_LayoutCreation_SpeciesReferenceGlyph_annotation)1517 START_TEST (test_LayoutCreation_SpeciesReferenceGlyph_annotation)
1518 {
1519 const char* a =
1520 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1521 "<annotation>\n"
1522 " <this-is-a-test>\n"
1523 " <another-level> level2 </another-level>\n"
1524 " </this-is-a-test>\n"
1525 " </annotation>";
1526
1527 const char* content=
1528 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1529 "<annotation>\n"
1530 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1531 " <layout id=\"layout_1\">\n"
1532 " <dimensions width=\"200\" height=\"400\"/>\n"
1533 " <listOfReactionGlyphs>\n"
1534 " <reactionGlyph id=\"reactionGlyph_1\">\n"
1535 " <boundingBox>\n"
1536 " <position x=\"10.3\" y=\"20\"/>\n"
1537 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1538 " </boundingBox>\n"
1539 " <listOfSpeciesReferenceGlyphs>\n"
1540 " <speciesReferenceGlyph id=\"speciesReferenceGlyph_1\" role=\"sideproduct\">\n"
1541 " <annotation>\n"
1542 " <this-is-a-test>\n"
1543 " <another-level> level2 </another-level>\n"
1544 " </this-is-a-test>\n"
1545 " </annotation>\n"
1546 " <boundingBox>\n"
1547 " <position x=\"110.3\" y=\"120\"/>\n"
1548 " <dimensions width=\"20.5\" height=\"40.5\"/>\n"
1549 " </boundingBox>\n"
1550 " </speciesReferenceGlyph>\n"
1551 " </listOfSpeciesReferenceGlyphs>\n"
1552 " </reactionGlyph>\n"
1553 " </listOfReactionGlyphs>\n"
1554 " </layout>\n"
1555 "</listOfLayouts>\n"
1556 "</annotation>\n"
1557 ;
1558
1559
1560 XMLInputStream *stream=new XMLInputStream(content,false);
1561 XMLNode node=XMLNode(*stream);
1562 ListOfLayouts pListOfLayouts;
1563 parseLayoutAnnotation(&node,pListOfLayouts);
1564
1565 fail_unless(pListOfLayouts.size()==1);
1566
1567 Layout* l=(Layout*)pListOfLayouts.get(0);
1568
1569 fail_unless(l!=NULL);
1570
1571 Dimensions* dimensions=l->getDimensions();
1572 fail_unless(dimensions->getWidth()==200.0);
1573 fail_unless(dimensions->getHeight()==400.0);
1574 fail_unless(dimensions->getDepth()==0.0);
1575
1576 fail_unless(l->getId()=="layout_1");
1577
1578 fail_unless(l->getNumReactionGlyphs()==1);
1579 ReactionGlyph* rg=l->getReactionGlyph(0);
1580 fail_unless(rg->getId()=="reactionGlyph_1");
1581 fail_unless(!rg->isSetReactionId());
1582
1583 BoundingBox* bb=rg->getBoundingBox();
1584 Point* position=bb->getPosition();
1585 fail_unless(position->getXOffset()==10.3);
1586 fail_unless(position->getYOffset()==20.0);
1587 fail_unless(position->getZOffset()==0.0);
1588 Dimensions* dimensions3=bb->getDimensions();
1589 fail_unless(dimensions3->getWidth()==200.5);
1590 fail_unless(dimensions3->getHeight()==400.5);
1591 fail_unless(dimensions3->getDepth()==0.0);
1592
1593 fail_unless(rg->getNumSpeciesReferenceGlyphs()==1);
1594 SpeciesReferenceGlyph* srg=rg->getSpeciesReferenceGlyph(0);
1595 fail_unless(srg->getId()=="speciesReferenceGlyph_1");
1596 fail_unless(srg->getRole()==SPECIES_ROLE_SIDEPRODUCT);
1597 fail_unless(!srg->isSetSpeciesGlyphId());
1598 fail_unless(!srg->isSetSpeciesReferenceId());
1599
1600 BoundingBox* bb2=srg->getBoundingBox();
1601 Point* position2=bb2->getPosition();
1602 fail_unless(position2->getXOffset()==110.3);
1603 fail_unless(position2->getYOffset()==120.0);
1604 fail_unless(position2->getZOffset()==0.0);
1605 Dimensions* dimensions2=bb2->getDimensions();
1606 fail_unless(dimensions2->getWidth()==20.5);
1607 fail_unless(dimensions2->getHeight()==40.5);
1608 fail_unless(dimensions2->getDepth()==0.0);
1609
1610 fail_unless(srg->isSetAnnotation());
1611 XMLInputStream *stream2 = new XMLInputStream(a,false);
1612 XMLNode aNode=XMLNode(*stream2);
1613 fail_unless(srg->getAnnotation()->equals(aNode, true));
1614
1615 delete stream2;
1616 delete stream;
1617 }
1618 END_TEST
1619
START_TEST(test_LayoutCreation_SpeciesReferenceGlyph_skipOptional)1620 START_TEST (test_LayoutCreation_SpeciesReferenceGlyph_skipOptional)
1621 {
1622 const char* content=
1623 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1624 "<annotation>\n"
1625 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1626 " <layout id=\"layout_1\">\n"
1627 " <dimensions width=\"200\" height=\"400\"/>\n"
1628 " <listOfReactionGlyphs>\n"
1629 " <reactionGlyph id=\"reactionGlyph_1\">\n"
1630 " <boundingBox>\n"
1631 " <position x=\"10.3\" y=\"20\"/>\n"
1632 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1633 " </boundingBox>\n"
1634 " <listOfSpeciesReferenceGlyphs>\n"
1635 " <speciesReferenceGlyph id=\"speciesReferenceGlyph_1\" role=\"sidesubstrate\">\n"
1636 " <boundingBox>\n"
1637 " <position x=\"110.3\" y=\"120\"/>\n"
1638 " <dimensions width=\"20.5\" height=\"40.5\"/>\n"
1639 " </boundingBox>\n"
1640 " </speciesReferenceGlyph>\n"
1641 " </listOfSpeciesReferenceGlyphs>\n"
1642 " </reactionGlyph>\n"
1643 " </listOfReactionGlyphs>\n"
1644 " </layout>\n"
1645 "</listOfLayouts>\n"
1646 "</annotation>\n"
1647 ;
1648
1649
1650 XMLInputStream *stream=new XMLInputStream(content,false);
1651 XMLNode node=XMLNode(*stream);
1652 ListOfLayouts pListOfLayouts;
1653 parseLayoutAnnotation(&node,pListOfLayouts);
1654
1655 fail_unless(pListOfLayouts.size()==1);
1656
1657 Layout* l=(Layout*)pListOfLayouts.get(0);
1658
1659 fail_unless(l!=NULL);
1660
1661 Dimensions* dimensions=l->getDimensions();
1662 fail_unless(dimensions->getWidth()==200.0);
1663 fail_unless(dimensions->getHeight()==400.0);
1664 fail_unless(dimensions->getDepth()==0.0);
1665
1666 fail_unless(l->getId()=="layout_1");
1667
1668 fail_unless(l->getNumReactionGlyphs()==1);
1669 ReactionGlyph* rg=l->getReactionGlyph(0);
1670 fail_unless(rg->getId()=="reactionGlyph_1");
1671 fail_unless(!rg->isSetReactionId());
1672
1673 BoundingBox* bb=rg->getBoundingBox();
1674 Point* position=bb->getPosition();
1675 fail_unless(position->getXOffset()==10.3);
1676 fail_unless(position->getYOffset()==20.0);
1677 fail_unless(position->getZOffset()==0.0);
1678 Dimensions* dimensions3=bb->getDimensions();
1679 fail_unless(dimensions3->getWidth()==200.5);
1680 fail_unless(dimensions3->getHeight()==400.5);
1681 fail_unless(dimensions3->getDepth()==0.0);
1682
1683 fail_unless(rg->getNumSpeciesReferenceGlyphs()==1);
1684 SpeciesReferenceGlyph* srg=rg->getSpeciesReferenceGlyph(0);
1685 fail_unless(srg->getId()=="speciesReferenceGlyph_1");
1686 fail_unless(srg->getRole()==SPECIES_ROLE_SIDESUBSTRATE);
1687 fail_unless(!srg->isSetSpeciesGlyphId());
1688 fail_unless(!srg->isSetSpeciesReferenceId());
1689
1690 BoundingBox* bb2=srg->getBoundingBox();
1691 Point* position2=bb2->getPosition();
1692 fail_unless(position2->getXOffset()==110.3);
1693 fail_unless(position2->getYOffset()==120.0);
1694 fail_unless(position2->getZOffset()==0.0);
1695 Dimensions* dimensions2=bb2->getDimensions();
1696 fail_unless(dimensions2->getWidth()==20.5);
1697 fail_unless(dimensions2->getHeight()==40.5);
1698 fail_unless(dimensions2->getDepth()==0.0);
1699
1700 delete stream;
1701 }
1702 END_TEST
1703
START_TEST(test_LayoutCreation_TextGlyph_text)1704 START_TEST (test_LayoutCreation_TextGlyph_text)
1705 {
1706 const char* content=
1707 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1708 "<annotation>\n"
1709 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1710 " <layout id=\"layout_1\">\n"
1711 " <dimensions width=\"200\" height=\"400\"/>\n"
1712 " <listOfTextGlyphs>\n"
1713 " <textGlyph id=\"textGlyph_1\" graphicalObject=\"speciesGlyph_1\" text=\"test text\">\n"
1714 " <boundingBox>\n"
1715 " <position x=\"10.3\" y=\"20\"/>\n"
1716 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1717 " </boundingBox>\n"
1718 " </textGlyph>\n"
1719 " </listOfTextGlyphs>\n"
1720 " </layout>\n"
1721 "</listOfLayouts>\n"
1722 "</annotation>\n"
1723 ;
1724
1725
1726 XMLInputStream *stream=new XMLInputStream(content,false);
1727 XMLNode node=XMLNode(*stream);
1728 ListOfLayouts pListOfLayouts;
1729 parseLayoutAnnotation(&node,pListOfLayouts);
1730
1731 fail_unless(pListOfLayouts.size()==1);
1732
1733 Layout* l=(Layout*)pListOfLayouts.get(0);
1734
1735 fail_unless(l!=NULL);
1736
1737 Dimensions* dimensions=l->getDimensions();
1738 fail_unless(dimensions->getWidth()==200.0);
1739 fail_unless(dimensions->getHeight()==400.0);
1740 fail_unless(dimensions->getDepth()==0.0);
1741
1742 fail_unless(l->getId()=="layout_1");
1743
1744 fail_unless(l->getNumTextGlyphs()==1);
1745 TextGlyph* tg=l->getTextGlyph(0);
1746 fail_unless(tg->getId()=="textGlyph_1");
1747
1748 fail_unless(tg->getGraphicalObjectId()=="speciesGlyph_1");
1749 fail_unless(tg->getText()=="test text");
1750
1751 BoundingBox* bb=tg->getBoundingBox();
1752 Point* position=bb->getPosition();
1753 fail_unless(position->getXOffset()==10.3);
1754 fail_unless(position->getYOffset()==20.0);
1755 fail_unless(position->getZOffset()==0.0);
1756 Dimensions* dimensions2=bb->getDimensions();
1757 fail_unless(dimensions2->getWidth()==200.5);
1758 fail_unless(dimensions2->getHeight()==400.5);
1759 fail_unless(dimensions2->getDepth()==0.0);
1760
1761 delete stream;
1762
1763 }
1764 END_TEST
1765
START_TEST(test_LayoutCreation_TextGlyph_originOfText)1766 START_TEST (test_LayoutCreation_TextGlyph_originOfText)
1767 {
1768 const char* content=
1769 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1770 "<annotation>\n"
1771 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1772 " <layout id=\"layout_1\">\n"
1773 " <dimensions width=\"200\" height=\"400\"/>\n"
1774 " <listOfTextGlyphs>\n"
1775 " <textGlyph id=\"textGlyph_1\" graphicalObject=\"speciesGlyph_1\" originOfText=\"reactionGlyph_1\">\n"
1776 " <boundingBox>\n"
1777 " <position x=\"10.3\" y=\"20\"/>\n"
1778 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1779 " </boundingBox>\n"
1780 " </textGlyph>\n"
1781 " </listOfTextGlyphs>\n"
1782 " </layout>\n"
1783 "</listOfLayouts>\n"
1784 "</annotation>\n"
1785 ;
1786
1787
1788 XMLInputStream *stream=new XMLInputStream(content,false);
1789 XMLNode node=XMLNode(*stream);
1790 ListOfLayouts pListOfLayouts;
1791 parseLayoutAnnotation(&node,pListOfLayouts);
1792
1793 fail_unless(pListOfLayouts.size()==1);
1794
1795 Layout* l=(Layout*)pListOfLayouts.get(0);
1796
1797 fail_unless(l!=NULL);
1798
1799 Dimensions* dimensions=l->getDimensions();
1800 fail_unless(dimensions->getWidth()==200.0);
1801 fail_unless(dimensions->getHeight()==400.0);
1802 fail_unless(dimensions->getDepth()==0.0);
1803
1804 fail_unless(l->getId()=="layout_1");
1805
1806 fail_unless(l->getNumTextGlyphs()==1);
1807 TextGlyph* tg=l->getTextGlyph(0);
1808 fail_unless(tg->getId()=="textGlyph_1");
1809
1810 fail_unless(tg->getGraphicalObjectId()=="speciesGlyph_1");
1811 fail_unless(tg->getOriginOfTextId()=="reactionGlyph_1");
1812
1813 BoundingBox* bb=tg->getBoundingBox();
1814 Point* position=bb->getPosition();
1815 fail_unless(position->getXOffset()==10.3);
1816 fail_unless(position->getYOffset()==20.0);
1817 fail_unless(position->getZOffset()==0.0);
1818 Dimensions* dimensions2=bb->getDimensions();
1819 fail_unless(dimensions2->getWidth()==200.5);
1820 fail_unless(dimensions2->getHeight()==400.5);
1821 fail_unless(dimensions2->getDepth()==0.0);
1822
1823 delete stream;
1824
1825 }
1826 END_TEST
1827
START_TEST(test_LayoutCreation_TextGlyph_notes)1828 START_TEST (test_LayoutCreation_TextGlyph_notes)
1829 {
1830 const char* content=
1831 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1832 "<annotation>\n"
1833 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1834 " <layout id=\"layout_1\">\n"
1835 " <dimensions width=\"200\" height=\"400\"/>\n"
1836 " <listOfTextGlyphs>\n"
1837 " <textGlyph id=\"textGlyph_1\" graphicalObject=\"speciesGlyph_1\" originOfText=\"reactionGlyph_1\">\n"
1838 " <notes>"
1839 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
1840 " <p>Testnote</p>\n"
1841 " </body>"
1842 " </notes>\n"
1843 " <boundingBox>\n"
1844 " <position x=\"10.3\" y=\"20\"/>\n"
1845 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1846 " </boundingBox>\n"
1847 " </textGlyph>\n"
1848 " </listOfTextGlyphs>\n"
1849 " </layout>\n"
1850 "</listOfLayouts>\n"
1851 "</annotation>\n"
1852 ;
1853
1854
1855 XMLInputStream *stream= new XMLInputStream(content,false);
1856 XMLNode node=XMLNode(*stream);
1857 ListOfLayouts pListOfLayouts;
1858 parseLayoutAnnotation(&node,pListOfLayouts);
1859
1860 fail_unless(pListOfLayouts.size()==1);
1861
1862 Layout* l=(Layout*)pListOfLayouts.get(0);
1863
1864 fail_unless(l!=NULL);
1865
1866 Dimensions* dimensions=l->getDimensions();
1867 fail_unless(dimensions->getWidth()==200.0);
1868 fail_unless(dimensions->getHeight()==400.0);
1869 fail_unless(dimensions->getDepth()==0.0);
1870
1871 fail_unless(l->getId()=="layout_1");
1872
1873 fail_unless(l->getNumTextGlyphs()==1);
1874 TextGlyph* tg=l->getTextGlyph(0);
1875 fail_unless(tg->getId()=="textGlyph_1");
1876
1877 fail_unless(tg->getGraphicalObjectId()=="speciesGlyph_1");
1878 fail_unless(tg->getOriginOfTextId()=="reactionGlyph_1");
1879
1880 BoundingBox* bb=tg->getBoundingBox();
1881 Point* position=bb->getPosition();
1882 fail_unless(position->getXOffset()==10.3);
1883 fail_unless(position->getYOffset()==20.0);
1884 fail_unless(position->getZOffset()==0.0);
1885 Dimensions* dimensions2=bb->getDimensions();
1886 fail_unless(dimensions2->getWidth()==200.5);
1887 fail_unless(dimensions2->getHeight()==400.5);
1888 fail_unless(dimensions2->getDepth()==0.0);
1889
1890 fail_unless(tg->isSetNotes());
1891 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
1892 XMLNode notes=XMLNode(*stream2);
1893 fail_unless(tg->getNotes()->equals(notes, true));
1894
1895 delete stream2;
1896 delete stream;
1897
1898 }
1899 END_TEST
1900
START_TEST(test_LayoutCreation_TextGlyph_annotation)1901 START_TEST (test_LayoutCreation_TextGlyph_annotation)
1902 {
1903 const char* a =
1904 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1905 "<annotation>\n"
1906 " <this-is-a-test>\n"
1907 " <another-level> level2 </another-level>\n"
1908 " </this-is-a-test>\n"
1909 " </annotation>";
1910
1911 const char* content=
1912 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1913 "<annotation>\n"
1914 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1915 " <layout id=\"layout_1\">\n"
1916 " <dimensions width=\"200\" height=\"400\"/>\n"
1917 " <listOfTextGlyphs>\n"
1918 " <textGlyph id=\"textGlyph_1\" graphicalObject=\"speciesGlyph_1\" originOfText=\"reactionGlyph_1\">\n"
1919 " <annotation>\n"
1920 " <this-is-a-test>\n"
1921 " <another-level> level2 </another-level>\n"
1922 " </this-is-a-test>\n"
1923 " </annotation>\n"
1924 " <boundingBox>\n"
1925 " <position x=\"10.3\" y=\"20\"/>\n"
1926 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1927 " </boundingBox>\n"
1928 " </textGlyph>\n"
1929 " </listOfTextGlyphs>\n"
1930 " </layout>\n"
1931 "</listOfLayouts>\n"
1932 "</annotation>\n"
1933 ;
1934
1935
1936 XMLInputStream *stream=new XMLInputStream(content,false);
1937 XMLNode node=XMLNode(*stream);
1938 ListOfLayouts pListOfLayouts;
1939 parseLayoutAnnotation(&node,pListOfLayouts);
1940
1941 fail_unless(pListOfLayouts.size()==1);
1942
1943 Layout* l=(Layout*)pListOfLayouts.get(0);
1944
1945 fail_unless(l!=NULL);
1946
1947 Dimensions* dimensions=l->getDimensions();
1948 fail_unless(dimensions->getWidth()==200.0);
1949 fail_unless(dimensions->getHeight()==400.0);
1950 fail_unless(dimensions->getDepth()==0.0);
1951
1952 fail_unless(l->getId()=="layout_1");
1953
1954 fail_unless(l->getNumTextGlyphs()==1);
1955 TextGlyph* tg=l->getTextGlyph(0);
1956 fail_unless(tg->getId()=="textGlyph_1");
1957
1958 fail_unless(tg->getGraphicalObjectId()=="speciesGlyph_1");
1959 fail_unless(tg->getOriginOfTextId()=="reactionGlyph_1");
1960
1961 BoundingBox* bb=tg->getBoundingBox();
1962 Point* position=bb->getPosition();
1963 fail_unless(position->getXOffset()==10.3);
1964 fail_unless(position->getYOffset()==20.0);
1965 fail_unless(position->getZOffset()==0.0);
1966 Dimensions* dimensions2=bb->getDimensions();
1967 fail_unless(dimensions2->getWidth()==200.5);
1968 fail_unless(dimensions2->getHeight()==400.5);
1969 fail_unless(dimensions2->getDepth()==0.0);
1970
1971 fail_unless(tg->isSetAnnotation());
1972 XMLInputStream *stream2 = new XMLInputStream(a,false);
1973 XMLNode aNode=XMLNode(*stream2);
1974 fail_unless(tg->getAnnotation()->equals(aNode, true));
1975
1976 delete stream2;
1977 delete stream;
1978
1979 }
1980 END_TEST
1981
START_TEST(test_LayoutCreation_TextGlyph_skipOptional)1982 START_TEST (test_LayoutCreation_TextGlyph_skipOptional)
1983 {
1984 const char* content=
1985 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1986 "<annotation>\n"
1987 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
1988 " <layout id=\"layout_1\">\n"
1989 " <dimensions width=\"200\" height=\"400\"/>\n"
1990 " <listOfTextGlyphs>\n"
1991 " <textGlyph id=\"textGlyph_1\">\n"
1992 " <boundingBox>\n"
1993 " <position x=\"10.3\" y=\"20\"/>\n"
1994 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
1995 " </boundingBox>\n"
1996 " </textGlyph>\n"
1997 " </listOfTextGlyphs>\n"
1998 " </layout>\n"
1999 "</listOfLayouts>\n"
2000 "</annotation>\n"
2001 ;
2002
2003
2004 XMLInputStream *stream=new XMLInputStream(content,false);
2005 XMLNode node=XMLNode(*stream);
2006 ListOfLayouts pListOfLayouts;
2007 parseLayoutAnnotation(&node,pListOfLayouts);
2008
2009 fail_unless(pListOfLayouts.size()==1);
2010
2011 Layout* l=(Layout*)pListOfLayouts.get(0);
2012
2013 fail_unless(l!=NULL);
2014
2015 Dimensions* dimensions=l->getDimensions();
2016 fail_unless(dimensions->getWidth()==200.0);
2017 fail_unless(dimensions->getHeight()==400.0);
2018 fail_unless(dimensions->getDepth()==0.0);
2019
2020 fail_unless(l->getId()=="layout_1");
2021
2022 fail_unless(l->getNumTextGlyphs()==1);
2023 TextGlyph* tg=l->getTextGlyph(0);
2024 fail_unless(tg->getId()=="textGlyph_1");
2025
2026 fail_unless(!tg->isSetGraphicalObjectId());
2027 fail_unless(!tg->isSetOriginOfTextId());
2028 fail_unless(!tg->isSetText());
2029
2030 BoundingBox* bb=tg->getBoundingBox();
2031 Point* position=bb->getPosition();
2032 fail_unless(position->getXOffset()==10.3);
2033 fail_unless(position->getYOffset()==20.0);
2034 fail_unless(position->getZOffset()==0.0);
2035 Dimensions* dimensions2=bb->getDimensions();
2036 fail_unless(dimensions2->getWidth()==200.5);
2037 fail_unless(dimensions2->getHeight()==400.5);
2038 fail_unless(dimensions2->getDepth()==0.0);
2039
2040 delete stream;
2041
2042 }
2043 END_TEST
2044
START_TEST(test_LayoutCreation_GraphicalObject)2045 START_TEST (test_LayoutCreation_GraphicalObject)
2046 {
2047 const char* content=
2048 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2049 "<annotation>\n"
2050 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2051 " <layout id=\"layout_1\">\n"
2052 " <dimensions width=\"200\" height=\"400\"/>\n"
2053 " <listOfAdditionalGraphicalObjects>\n"
2054 " <graphicalObject id=\"graphicalObject_1\">\n"
2055 " <boundingBox>\n"
2056 " <position x=\"10.3\" y=\"20\"/>\n"
2057 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
2058 " </boundingBox>\n"
2059 " </graphicalObject>\n"
2060 " </listOfAdditionalGraphicalObjects>\n"
2061 " </layout>\n"
2062 "</listOfLayouts>\n"
2063 "</annotation>\n"
2064 ;
2065
2066
2067 XMLInputStream *stream=new XMLInputStream(content,false);
2068 XMLNode node=XMLNode(*stream);
2069 ListOfLayouts pListOfLayouts;
2070 parseLayoutAnnotation(&node,pListOfLayouts);
2071
2072 fail_unless(pListOfLayouts.size()==1);
2073
2074 Layout* l=(Layout*)pListOfLayouts.get(0);
2075
2076 fail_unless(l!=NULL);
2077
2078 Dimensions* dimensions=l->getDimensions();
2079 fail_unless(dimensions->getWidth()==200.0);
2080 fail_unless(dimensions->getHeight()==400.0);
2081 fail_unless(dimensions->getDepth()==0.0);
2082
2083 fail_unless(l->getId()=="layout_1");
2084
2085 fail_unless(l->getNumAdditionalGraphicalObjects()==1);
2086 GraphicalObject* go=l->getAdditionalGraphicalObject(0);
2087 fail_unless(go->getId()=="graphicalObject_1");
2088 BoundingBox* bb=go->getBoundingBox();
2089 Point* position=bb->getPosition();
2090 fail_unless(position->getXOffset()==10.3);
2091 fail_unless(position->getYOffset()==20.0);
2092 fail_unless(position->getZOffset()==0.0);
2093 Dimensions* dimensions2=bb->getDimensions();
2094 fail_unless(dimensions2->getWidth()==200.5);
2095 fail_unless(dimensions2->getHeight()==400.5);
2096 fail_unless(dimensions2->getDepth()==0.0);
2097
2098 delete stream;
2099
2100 }
2101 END_TEST
2102
START_TEST(test_LayoutCreation_GraphicalObject_notes)2103 START_TEST (test_LayoutCreation_GraphicalObject_notes)
2104 {
2105 const char* content=
2106 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2107 "<annotation>\n"
2108 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2109 " <layout id=\"layout_1\">\n"
2110 " <dimensions width=\"200\" height=\"400\"/>\n"
2111 " <listOfAdditionalGraphicalObjects>\n"
2112 " <graphicalObject id=\"graphicalObject_1\">\n"
2113 " <notes>"
2114 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
2115 " <p>Testnote</p>\n"
2116 " </body>"
2117 " </notes>\n"
2118 " <boundingBox>\n"
2119 " <position x=\"10.3\" y=\"20\"/>\n"
2120 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
2121 " </boundingBox>\n"
2122 " </graphicalObject>\n"
2123 " </listOfAdditionalGraphicalObjects>\n"
2124 " </layout>\n"
2125 "</listOfLayouts>\n"
2126 "</annotation>\n"
2127 ;
2128
2129
2130 XMLInputStream *stream=new XMLInputStream(content,false);
2131 XMLNode node=XMLNode(*stream);
2132 ListOfLayouts pListOfLayouts;
2133 parseLayoutAnnotation(&node,pListOfLayouts);
2134
2135 fail_unless(pListOfLayouts.size()==1);
2136
2137 Layout* l=(Layout*)pListOfLayouts.get(0);
2138
2139 fail_unless(l!=NULL);
2140
2141 Dimensions* dimensions=l->getDimensions();
2142 fail_unless(dimensions->getWidth()==200.0);
2143 fail_unless(dimensions->getHeight()==400.0);
2144 fail_unless(dimensions->getDepth()==0.0);
2145
2146 fail_unless(l->getId()=="layout_1");
2147
2148 fail_unless(l->getNumAdditionalGraphicalObjects()==1);
2149 GraphicalObject* go=l->getAdditionalGraphicalObject(0);
2150 fail_unless(go->getId()=="graphicalObject_1");
2151 BoundingBox* bb=go->getBoundingBox();
2152 Point* position=bb->getPosition();
2153 fail_unless(position->getXOffset()==10.3);
2154 fail_unless(position->getYOffset()==20.0);
2155 fail_unless(position->getZOffset()==0.0);
2156 Dimensions* dimensions2=bb->getDimensions();
2157 fail_unless(dimensions2->getWidth()==200.5);
2158 fail_unless(dimensions2->getHeight()==400.5);
2159 fail_unless(dimensions2->getDepth()==0.0);
2160 fail_unless(go->isSetNotes());
2161 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
2162 XMLNode notes=XMLNode(*stream2);
2163 fail_unless(go->getNotes()->equals(notes, true));
2164
2165
2166 delete stream2;
2167 delete stream;
2168
2169 }
2170 END_TEST
2171
START_TEST(test_LayoutCreation_GraphicalObject_annotation)2172 START_TEST (test_LayoutCreation_GraphicalObject_annotation)
2173 {
2174 const char* a =
2175 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2176 "<annotation>\n"
2177 " <this-is-a-test>\n"
2178 " <another-level> level2 </another-level>\n"
2179 " </this-is-a-test>\n"
2180 " </annotation>";
2181
2182 const char* content=
2183 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2184 "<annotation>\n"
2185 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2186 " <layout id=\"layout_1\">\n"
2187 " <dimensions width=\"200\" height=\"400\"/>\n"
2188 " <listOfAdditionalGraphicalObjects>\n"
2189 " <graphicalObject id=\"graphicalObject_1\">\n"
2190 " <annotation>\n"
2191 " <this-is-a-test>\n"
2192 " <another-level> level2 </another-level>\n"
2193 " </this-is-a-test>\n"
2194 " </annotation>\n"
2195 " <boundingBox>\n"
2196 " <position x=\"10.3\" y=\"20\"/>\n"
2197 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
2198 " </boundingBox>\n"
2199 " </graphicalObject>\n"
2200 " </listOfAdditionalGraphicalObjects>\n"
2201 " </layout>\n"
2202 "</listOfLayouts>\n"
2203 "</annotation>\n"
2204 ;
2205
2206
2207
2208 XMLInputStream *stream=new XMLInputStream(content,false);
2209 XMLNode node=XMLNode(*stream);
2210 ListOfLayouts pListOfLayouts;
2211 parseLayoutAnnotation(&node,pListOfLayouts);
2212
2213 fail_unless(pListOfLayouts.size()==1);
2214
2215 Layout* l=(Layout*)pListOfLayouts.get(0);
2216
2217 fail_unless(l!=NULL);
2218
2219 Dimensions* dimensions=l->getDimensions();
2220 fail_unless(dimensions->getWidth()==200.0);
2221 fail_unless(dimensions->getHeight()==400.0);
2222 fail_unless(dimensions->getDepth()==0.0);
2223
2224 fail_unless(l->getId()=="layout_1");
2225
2226 fail_unless(l->getNumAdditionalGraphicalObjects()==1);
2227 GraphicalObject* go=l->getAdditionalGraphicalObject(0);
2228 fail_unless(go->getId()=="graphicalObject_1");
2229 BoundingBox* bb=go->getBoundingBox();
2230 Point* position=bb->getPosition();
2231 fail_unless(position->getXOffset()==10.3);
2232 fail_unless(position->getYOffset()==20.0);
2233 fail_unless(position->getZOffset()==0.0);
2234 Dimensions* dimensions2=bb->getDimensions();
2235 fail_unless(dimensions2->getWidth()==200.5);
2236 fail_unless(dimensions2->getHeight()==400.5);
2237 fail_unless(dimensions2->getDepth()==0.0);
2238
2239 fail_unless(go->isSetAnnotation());
2240 XMLInputStream *stream2 = new XMLInputStream(a,false);
2241 XMLNode aNode=XMLNode(*stream2);
2242 fail_unless(go->getAnnotation()->equals(aNode, true));
2243
2244 delete stream2;
2245 delete stream;
2246
2247 }
2248 END_TEST
2249
START_TEST(test_LayoutCreation_Curve)2250 START_TEST (test_LayoutCreation_Curve)
2251 {
2252 const char* content=
2253 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2254 "<annotation>\n"
2255 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2256 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
2257 " <dimensions width=\"200\" height=\"400\"/>\n"
2258 " <listOfReactionGlyphs>\n"
2259 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2260 " <curve>\n"
2261 " <listOfCurveSegments>\n"
2262 " <curveSegment xsi:type=\"LineSegment\">\n"
2263 " <start x=\"10\" y=\"15\"/>\n"
2264 " <end x=\"20\" y=\"30\"/>\n"
2265 " </curveSegment>\n"
2266 " </listOfCurveSegments>\n"
2267 " </curve>\n"
2268 " </reactionGlyph>\n"
2269 " </listOfReactionGlyphs>\n"
2270 " </layout>\n"
2271 "</listOfLayouts>\n"
2272 "</annotation>\n"
2273 ;
2274
2275
2276 XMLInputStream *stream=new XMLInputStream(content,false);
2277 XMLNode node=XMLNode(*stream);
2278 ListOfLayouts pListOfLayouts;
2279 parseLayoutAnnotation(&node,pListOfLayouts);
2280
2281 fail_unless(pListOfLayouts.size()==1);
2282
2283 Layout* l=(Layout*)pListOfLayouts.get(0);
2284
2285 fail_unless(l!=NULL);
2286
2287 Dimensions* dimensions=l->getDimensions();
2288 fail_unless(dimensions->getWidth()==200.0);
2289 fail_unless(dimensions->getHeight()==400.0);
2290 fail_unless(dimensions->getDepth()==0.0);
2291
2292 fail_unless(l->getId()=="layout_1");
2293
2294 fail_unless(l->getNumReactionGlyphs()==1);
2295 ReactionGlyph* rg=l->getReactionGlyph(0);
2296 fail_unless(rg->getId()=="reactionGlyph_1");
2297 fail_unless(!rg->isSetReactionId());
2298
2299 fail_unless(rg->isSetCurve());
2300 Curve* curve=rg->getCurve();
2301 fail_unless(curve->getNumCurveSegments()==1);
2302 LineSegment* ls=curve->getCurveSegment(0);
2303 fail_unless(ls->getTypeCode()!=SBML_LAYOUT_CUBICBEZIER);
2304 Point* start=ls->getStart();
2305 fail_unless(start->getXOffset()==10.0);
2306 fail_unless(start->getYOffset()==15.0);
2307 fail_unless(start->getZOffset()==0.0);
2308 Point* end=ls->getEnd();
2309 fail_unless(end->getXOffset()==20.0);
2310 fail_unless(end->getYOffset()==30.0);
2311 fail_unless(end->getZOffset()==0.0);
2312
2313 delete stream;
2314
2315 }
2316 END_TEST
2317
START_TEST(test_LayoutCreation_Curve_notes)2318 START_TEST (test_LayoutCreation_Curve_notes)
2319 {
2320 const char* content=
2321 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2322 "<annotation>\n"
2323 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2324 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
2325 " <dimensions width=\"200\" height=\"400\"/>\n"
2326 " <listOfReactionGlyphs>\n"
2327 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2328 " <curve>\n"
2329 " <notes>"
2330 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
2331 " <p>Testnote</p>\n"
2332 " </body>"
2333 " </notes>\n"
2334 " <listOfCurveSegments>\n"
2335 " <curveSegment xsi:type=\"LineSegment\">\n"
2336 " <start x=\"10\" y=\"15\"/>\n"
2337 " <end x=\"20\" y=\"30\"/>\n"
2338 " </curveSegment>\n"
2339 " </listOfCurveSegments>\n"
2340 " </curve>\n"
2341 " </reactionGlyph>\n"
2342 " </listOfReactionGlyphs>\n"
2343 " </layout>\n"
2344 "</listOfLayouts>\n"
2345 "</annotation>\n"
2346 ;
2347
2348
2349 XMLInputStream *stream=new XMLInputStream(content,false);
2350 XMLNode node=XMLNode(*stream);
2351 ListOfLayouts pListOfLayouts;
2352 parseLayoutAnnotation(&node,pListOfLayouts);
2353
2354 fail_unless(pListOfLayouts.size()==1);
2355
2356 Layout* l=(Layout*)pListOfLayouts.get(0);
2357
2358 fail_unless(l!=NULL);
2359
2360 Dimensions* dimensions=l->getDimensions();
2361 fail_unless(dimensions->getWidth()==200.0);
2362 fail_unless(dimensions->getHeight()==400.0);
2363 fail_unless(dimensions->getDepth()==0.0);
2364
2365 fail_unless(l->getId()=="layout_1");
2366
2367 fail_unless(l->getNumReactionGlyphs()==1);
2368 ReactionGlyph* rg=l->getReactionGlyph(0);
2369 fail_unless(rg->getId()=="reactionGlyph_1");
2370 fail_unless(!rg->isSetReactionId());
2371
2372 fail_unless(rg->isSetCurve());
2373 Curve* curve=rg->getCurve();
2374 fail_unless(curve->getNumCurveSegments()==1);
2375 LineSegment* ls=curve->getCurveSegment(0);
2376 fail_unless(ls->getTypeCode()!=SBML_LAYOUT_CUBICBEZIER);
2377 Point* start=ls->getStart();
2378 fail_unless(start->getXOffset()==10.0);
2379 fail_unless(start->getYOffset()==15.0);
2380 fail_unless(start->getZOffset()==0.0);
2381 Point* end=ls->getEnd();
2382 fail_unless(end->getXOffset()==20.0);
2383 fail_unless(end->getYOffset()==30.0);
2384 fail_unless(end->getZOffset()==0.0);
2385 fail_unless(curve->isSetNotes()==true);
2386 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
2387 XMLNode notes=XMLNode(*stream2);
2388 fail_unless(curve->getNotes()->equals(notes, true));
2389
2390 delete stream;
2391 delete stream2;
2392
2393 }
2394 END_TEST
2395
START_TEST(test_LayoutCreation_Curve_annotation)2396 START_TEST (test_LayoutCreation_Curve_annotation)
2397 {
2398 const char* a =
2399 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2400 "<annotation>\n"
2401 " <this-is-a-test>\n"
2402 " <another-level> level2 </another-level>\n"
2403 " </this-is-a-test>\n"
2404 " </annotation>";
2405
2406 const char* content=
2407 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2408 "<annotation>\n"
2409 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2410 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
2411 " <dimensions width=\"200\" height=\"400\"/>\n"
2412 " <listOfReactionGlyphs>\n"
2413 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2414 " <curve>\n"
2415 " <annotation>\n"
2416 " <this-is-a-test>\n"
2417 " <another-level> level2 </another-level>\n"
2418 " </this-is-a-test>\n"
2419 " </annotation>\n"
2420 " <listOfCurveSegments>\n"
2421 " <curveSegment xsi:type=\"LineSegment\">\n"
2422 " <start x=\"10\" y=\"15\"/>\n"
2423 " <end x=\"20\" y=\"30\"/>\n"
2424 " </curveSegment>\n"
2425 " </listOfCurveSegments>\n"
2426 " </curve>\n"
2427 " </reactionGlyph>\n"
2428 " </listOfReactionGlyphs>\n"
2429 " </layout>\n"
2430 "</listOfLayouts>\n"
2431 "</annotation>\n"
2432 ;
2433
2434
2435 XMLInputStream *stream=new XMLInputStream(content,false);
2436 XMLNode node=XMLNode(*stream);
2437 ListOfLayouts pListOfLayouts;
2438 parseLayoutAnnotation(&node,pListOfLayouts);
2439
2440 fail_unless(pListOfLayouts.size()==1);
2441
2442 Layout* l=(Layout*)pListOfLayouts.get(0);
2443
2444 fail_unless(l!=NULL);
2445
2446 Dimensions* dimensions=l->getDimensions();
2447 fail_unless(dimensions->getWidth()==200.0);
2448 fail_unless(dimensions->getHeight()==400.0);
2449 fail_unless(dimensions->getDepth()==0.0);
2450
2451 fail_unless(l->getId()=="layout_1");
2452
2453 fail_unless(l->getNumReactionGlyphs()==1);
2454 ReactionGlyph* rg=l->getReactionGlyph(0);
2455 fail_unless(rg->getId()=="reactionGlyph_1");
2456 fail_unless(!rg->isSetReactionId());
2457
2458 fail_unless(rg->isSetCurve());
2459 Curve* curve=rg->getCurve();
2460 fail_unless(curve->getNumCurveSegments()==1);
2461 LineSegment* ls=curve->getCurveSegment(0);
2462 fail_unless(ls->getTypeCode()!=SBML_LAYOUT_CUBICBEZIER);
2463 Point* start=ls->getStart();
2464 fail_unless(start->getXOffset()==10.0);
2465 fail_unless(start->getYOffset()==15.0);
2466 Point* end=ls->getEnd();
2467 fail_unless(end->getXOffset()==20.0);
2468 fail_unless(end->getYOffset()==30.0);
2469
2470 fail_unless(curve->isSetAnnotation());
2471 XMLInputStream *stream2 = new XMLInputStream(a,false);
2472 XMLNode aNode=XMLNode(*stream2);
2473 fail_unless(curve->getAnnotation()->equals(aNode, true));
2474
2475 delete stream2;
2476 delete stream;
2477 }
2478 END_TEST
2479
START_TEST(test_LayoutCreation_Curve_skipOptional)2480 START_TEST (test_LayoutCreation_Curve_skipOptional)
2481 {
2482 const char* content=
2483 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2484 "<annotation>\n"
2485 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2486 " <layout id=\"layout_1\">\n"
2487 " <dimensions width=\"200\" height=\"400\"/>\n"
2488 " <listOfReactionGlyphs>\n"
2489 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2490 " <curve>\n"
2491 " </curve>\n"
2492 " </reactionGlyph>\n"
2493 " </listOfReactionGlyphs>\n"
2494 " </layout>\n"
2495 "</listOfLayouts>\n"
2496 "</annotation>\n"
2497 ;
2498
2499
2500 XMLInputStream *stream=new XMLInputStream(content,false);
2501 XMLNode node=XMLNode(*stream);
2502 ListOfLayouts pListOfLayouts;
2503 parseLayoutAnnotation(&node,pListOfLayouts);
2504
2505 fail_unless(pListOfLayouts.size()==1);
2506
2507 Layout* l=(Layout*)pListOfLayouts.get(0);
2508
2509 fail_unless(l!=NULL);
2510
2511 Dimensions* dimensions=l->getDimensions();
2512 fail_unless(dimensions->getWidth()==200.0);
2513 fail_unless(dimensions->getHeight()==400.0);
2514 fail_unless(dimensions->getDepth()==0.0);
2515
2516 fail_unless(l->getId()=="layout_1");
2517
2518 fail_unless(l->getNumReactionGlyphs()==1);
2519 ReactionGlyph* rg=l->getReactionGlyph(0);
2520 fail_unless(rg->getId()=="reactionGlyph_1");
2521 fail_unless(!rg->isSetReactionId());
2522
2523 fail_unless(!rg->isSetCurve());
2524 delete stream;
2525 }
2526 END_TEST
2527
START_TEST(test_LayoutCreation_LineSegment)2528 START_TEST (test_LayoutCreation_LineSegment)
2529 {
2530 const char* content=
2531 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2532 "<annotation>\n"
2533 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2534 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
2535 " <dimensions width=\"200\" height=\"400\"/>\n"
2536 " <listOfReactionGlyphs>\n"
2537 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2538 " <curve>\n"
2539 " <listOfCurveSegments>\n"
2540 " <curveSegment xsi:type=\"LineSegment\">\n"
2541 " <start x=\"10\" y=\"15\"/>\n"
2542 " <end x=\"20\" y=\"30\"/>\n"
2543 " </curveSegment>\n"
2544 " </listOfCurveSegments>\n"
2545 " </curve>\n"
2546 " </reactionGlyph>\n"
2547 " </listOfReactionGlyphs>\n"
2548 " </layout>\n"
2549 "</listOfLayouts>\n"
2550 "</annotation>\n"
2551 ;
2552
2553
2554 XMLInputStream *stream=new XMLInputStream(content,false);
2555 XMLNode node=XMLNode(*stream);
2556 ListOfLayouts pListOfLayouts;
2557 parseLayoutAnnotation(&node,pListOfLayouts);
2558
2559 fail_unless(pListOfLayouts.size()==1);
2560
2561 Layout* l=(Layout*)pListOfLayouts.get(0);
2562
2563 fail_unless(l!=NULL);
2564
2565 Dimensions* dimensions=l->getDimensions();
2566 fail_unless(dimensions->getWidth()==200.0);
2567 fail_unless(dimensions->getHeight()==400.0);
2568 fail_unless(dimensions->getDepth()==0.0);
2569
2570 fail_unless(l->getId()=="layout_1");
2571
2572 fail_unless(l->getNumReactionGlyphs()==1);
2573 ReactionGlyph* rg=l->getReactionGlyph(0);
2574 fail_unless(rg->getId()=="reactionGlyph_1");
2575 fail_unless(!rg->isSetReactionId());
2576
2577 fail_unless(rg->isSetCurve());
2578 Curve* curve=rg->getCurve();
2579 fail_unless(curve->getNumCurveSegments()==1);
2580 LineSegment* ls=curve->getCurveSegment(0);
2581 fail_unless(ls->getTypeCode()!=SBML_LAYOUT_CUBICBEZIER);
2582 Point* start=ls->getStart();
2583 fail_unless(start->getXOffset()==10.0);
2584 fail_unless(start->getYOffset()==15.0);
2585 Point* end=ls->getEnd();
2586 fail_unless(end->getXOffset()==20.0);
2587 fail_unless(end->getYOffset()==30.0);
2588 delete stream;
2589 }
2590 END_TEST
2591
START_TEST(test_LayoutCreation_LineSegment_notes)2592 START_TEST (test_LayoutCreation_LineSegment_notes)
2593 {
2594 const char* content=
2595 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2596 "<annotation>\n"
2597 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2598 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
2599 " <dimensions width=\"200\" height=\"400\"/>\n"
2600 " <listOfReactionGlyphs>\n"
2601 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2602 " <curve>\n"
2603 " <listOfCurveSegments>\n"
2604 " <curveSegment xsi:type=\"LineSegment\">\n"
2605 " <notes>"
2606 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
2607 " <p>Testnote</p>\n"
2608 " </body>"
2609 " </notes>\n"
2610 " <start x=\"10\" y=\"15\"/>\n"
2611 " <end x=\"20\" y=\"30\"/>\n"
2612 " </curveSegment>\n"
2613 " </listOfCurveSegments>\n"
2614 " </curve>\n"
2615 " </reactionGlyph>\n"
2616 " </listOfReactionGlyphs>\n"
2617 " </layout>\n"
2618 "</listOfLayouts>\n"
2619 "</annotation>\n"
2620 ;
2621
2622
2623 XMLInputStream *stream=new XMLInputStream(content,false);
2624 XMLNode node=XMLNode(*stream);
2625 ListOfLayouts pListOfLayouts;
2626 parseLayoutAnnotation(&node,pListOfLayouts);
2627
2628 fail_unless(pListOfLayouts.size()==1);
2629
2630 Layout* l=(Layout*)pListOfLayouts.get(0);
2631
2632 fail_unless(l!=NULL);
2633
2634 Dimensions* dimensions=l->getDimensions();
2635 fail_unless(dimensions->getWidth()==200.0);
2636 fail_unless(dimensions->getHeight()==400.0);
2637 fail_unless(dimensions->getDepth()==0.0);
2638
2639 fail_unless(l->getId()=="layout_1");
2640
2641 fail_unless(l->getNumReactionGlyphs()==1);
2642 ReactionGlyph* rg=l->getReactionGlyph(0);
2643 fail_unless(rg->getId()=="reactionGlyph_1");
2644 fail_unless(!rg->isSetReactionId());
2645
2646 fail_unless(rg->isSetCurve());
2647 Curve* curve=rg->getCurve();
2648 fail_unless(curve->getNumCurveSegments()==1);
2649 LineSegment* ls=curve->getCurveSegment(0);
2650 fail_unless(ls->getTypeCode()!=SBML_LAYOUT_CUBICBEZIER);
2651 Point* start=ls->getStart();
2652 fail_unless(start->getXOffset()==10.0);
2653 fail_unless(start->getYOffset()==15.0);
2654 Point* end=ls->getEnd();
2655 fail_unless(end->getXOffset()==20.0);
2656 fail_unless(end->getYOffset()==30.0);
2657 fail_unless(ls->isSetNotes());
2658 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
2659 XMLNode notes=XMLNode(*stream2);
2660 fail_unless(ls->getNotes()->equals(notes, true));
2661 delete stream2;
2662 delete stream;
2663
2664 }
2665 END_TEST
2666
START_TEST(test_LayoutCreation_LineSegment_annotation)2667 START_TEST (test_LayoutCreation_LineSegment_annotation)
2668 {
2669 const char* a =
2670 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2671 "<annotation>\n"
2672 " <this-is-a-test>\n"
2673 " <another-level> level2 </another-level>\n"
2674 " </this-is-a-test>\n"
2675 " </annotation>";
2676
2677 const char* content=
2678 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2679 "<annotation>\n"
2680 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2681 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
2682 " <dimensions width=\"200\" height=\"400\"/>\n"
2683 " <listOfReactionGlyphs>\n"
2684 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2685 " <curve>\n"
2686 " <listOfCurveSegments>\n"
2687 " <curveSegment xsi:type=\"LineSegment\">\n"
2688 " <annotation>\n"
2689 " <this-is-a-test>\n"
2690 " <another-level> level2 </another-level>\n"
2691 " </this-is-a-test>\n"
2692 " </annotation>\n"
2693 " <start x=\"10\" y=\"15\"/>\n"
2694 " <end x=\"20\" y=\"30\"/>\n"
2695 " </curveSegment>\n"
2696 " </listOfCurveSegments>\n"
2697 " </curve>\n"
2698 " </reactionGlyph>\n"
2699 " </listOfReactionGlyphs>\n"
2700 " </layout>\n"
2701 "</listOfLayouts>\n"
2702 "</annotation>\n"
2703 ;
2704
2705
2706 XMLInputStream *stream=new XMLInputStream(content,false);
2707 XMLNode node=XMLNode(*stream);
2708 ListOfLayouts pListOfLayouts;
2709 parseLayoutAnnotation(&node,pListOfLayouts);
2710
2711 fail_unless(pListOfLayouts.size()==1);
2712
2713 Layout* l=(Layout*)pListOfLayouts.get(0);
2714
2715 fail_unless(l!=NULL);
2716
2717 Dimensions* dimensions=l->getDimensions();
2718 fail_unless(dimensions->getWidth()==200.0);
2719 fail_unless(dimensions->getHeight()==400.0);
2720 fail_unless(dimensions->getDepth()==0.0);
2721
2722 fail_unless(l->getId()=="layout_1");
2723
2724 fail_unless(l->getNumReactionGlyphs()==1);
2725 ReactionGlyph* rg=l->getReactionGlyph(0);
2726 fail_unless(rg->getId()=="reactionGlyph_1");
2727 fail_unless(!rg->isSetReactionId());
2728
2729 fail_unless(rg->isSetCurve());
2730 Curve* curve=rg->getCurve();
2731 fail_unless(curve->getNumCurveSegments()==1);
2732 LineSegment* ls=curve->getCurveSegment(0);
2733 fail_unless(ls->getTypeCode()!=SBML_LAYOUT_CUBICBEZIER);
2734 Point* start=ls->getStart();
2735 fail_unless(start->getXOffset()==10.0);
2736 fail_unless(start->getYOffset()==15.0);
2737 Point* end=ls->getEnd();
2738 fail_unless(end->getXOffset()==20.0);
2739 fail_unless(end->getYOffset()==30.0);
2740
2741 fail_unless(ls->isSetAnnotation());
2742 XMLInputStream *stream2 = new XMLInputStream(a,false);
2743 XMLNode aNode=XMLNode(*stream2);
2744 fail_unless(ls->getAnnotation()->equals(aNode, true));
2745 delete stream2;
2746 delete stream;
2747 }
2748 END_TEST
2749
START_TEST(test_LayoutCreation_CubicBezier)2750 START_TEST (test_LayoutCreation_CubicBezier)
2751 {
2752 const char* content=
2753 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2754 "<annotation>\n"
2755 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2756 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
2757 " <dimensions width=\"200\" height=\"400\"/>\n"
2758 " <listOfReactionGlyphs>\n"
2759 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2760 " <curve>\n"
2761 " <listOfCurveSegments>\n"
2762 " <curveSegment xsi:type=\"CubicBezier\">\n"
2763 " <start x=\"10\" y=\"15\"/>\n"
2764 " <end x=\"20\" y=\"30\"/>\n"
2765 " <basePoint1 x=\"15\" y=\"5\"/>\n"
2766 " <basePoint2 x=\"15\" y=\"17\"/>\n"
2767 " </curveSegment>\n"
2768 " </listOfCurveSegments>\n"
2769 " </curve>\n"
2770 " </reactionGlyph>\n"
2771 " </listOfReactionGlyphs>\n"
2772 " </layout>\n"
2773 "</listOfLayouts>\n"
2774 "</annotation>\n"
2775 ;
2776
2777
2778 XMLInputStream *stream=new XMLInputStream(content,false);
2779 XMLNode node=XMLNode(*stream);
2780 ListOfLayouts pListOfLayouts;
2781 parseLayoutAnnotation(&node,pListOfLayouts);
2782
2783 fail_unless(pListOfLayouts.size()==1);
2784
2785 Layout* l=(Layout*)pListOfLayouts.get(0);
2786
2787 fail_unless(l!=NULL);
2788
2789 Dimensions* dimensions=l->getDimensions();
2790 fail_unless(dimensions->getWidth()==200.0);
2791 fail_unless(dimensions->getHeight()==400.0);
2792 fail_unless(dimensions->getDepth()==0.0);
2793
2794 fail_unless(l->getId()=="layout_1");
2795
2796 fail_unless(l->getNumReactionGlyphs()==1);
2797 ReactionGlyph* rg=l->getReactionGlyph(0);
2798 fail_unless(rg->getId()=="reactionGlyph_1");
2799 fail_unless(!rg->isSetReactionId());
2800
2801 fail_unless(rg->isSetCurve());
2802 Curve* curve=rg->getCurve();
2803 fail_unless(curve->getNumCurveSegments()==1);
2804 LineSegment* ls=curve->getCurveSegment(0);
2805 CubicBezier* cb=static_cast< CubicBezier*>(ls);
2806 fail_unless(cb!=NULL);
2807 Point* start=cb->getStart();
2808 fail_unless(start!=NULL);
2809 fail_unless(start->getXOffset()==10.0);
2810 fail_unless(start->getYOffset()==15.0);
2811 fail_unless(start->getZOffset()==0.0);
2812 Point* end=cb->getEnd();
2813 fail_unless(end->getXOffset()==20.0);
2814 fail_unless(end->getYOffset()==30.0);
2815 fail_unless(end->getZOffset()==0.0);
2816 Point* base1=cb->getBasePoint1();
2817 fail_unless(base1->getXOffset()==15.0);
2818 fail_unless(base1->getYOffset()==5.0);
2819 fail_unless(base1->getZOffset()==0.0);
2820 Point* base2=cb->getBasePoint2();
2821 fail_unless(base2->getXOffset()==15.0);
2822 fail_unless(base2->getYOffset()==17.0);
2823 fail_unless(base2->getZOffset()==0.0);
2824
2825 delete stream;
2826 }
2827 END_TEST
2828
START_TEST(test_LayoutCreation_CubicBezier_notes)2829 START_TEST (test_LayoutCreation_CubicBezier_notes)
2830 {
2831 const char* content=
2832 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2833 "<annotation>\n"
2834 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2835 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
2836 " <dimensions width=\"200\" height=\"400\"/>\n"
2837 " <listOfReactionGlyphs>\n"
2838 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2839 " <curve>\n"
2840 " <listOfCurveSegments>\n"
2841 " <curveSegment xsi:type=\"CubicBezier\">\n"
2842 " <notes>"
2843 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
2844 " <p>Testnote</p>\n"
2845 " </body>"
2846 " </notes>\n"
2847 " <start x=\"10\" y=\"15\"/>\n"
2848 " <end x=\"20\" y=\"30\"/>\n"
2849 " <basePoint1 x=\"15\" y=\"5\"/>\n"
2850 " <basePoint2 x=\"16\" y=\"17\"/>\n"
2851 " </curveSegment>\n"
2852 " </listOfCurveSegments>\n"
2853 " </curve>\n"
2854 " </reactionGlyph>\n"
2855 " </listOfReactionGlyphs>\n"
2856 " </layout>\n"
2857 "</listOfLayouts>\n"
2858 "</annotation>\n"
2859 ;
2860
2861
2862 XMLInputStream *stream=new XMLInputStream(content,false);
2863 XMLNode node=XMLNode(*stream);
2864 ListOfLayouts pListOfLayouts;
2865 parseLayoutAnnotation(&node,pListOfLayouts);
2866
2867 fail_unless(pListOfLayouts.size()==1);
2868
2869 Layout* l=(Layout*)pListOfLayouts.get(0);
2870
2871 fail_unless(l!=NULL);
2872
2873 Dimensions* dimensions=l->getDimensions();
2874 fail_unless(dimensions->getWidth()==200.0);
2875 fail_unless(dimensions->getHeight()==400.0);
2876 fail_unless(dimensions->getDepth()==0.0);
2877
2878 fail_unless(l->getId()=="layout_1");
2879
2880 fail_unless(l->getNumReactionGlyphs()==1);
2881 ReactionGlyph* rg=l->getReactionGlyph(0);
2882 fail_unless(rg->getId()=="reactionGlyph_1");
2883 fail_unless(!rg->isSetReactionId());
2884
2885 fail_unless(rg->isSetCurve());
2886 Curve* curve=rg->getCurve();
2887 fail_unless(curve->getNumCurveSegments()==1);
2888 LineSegment* ls=curve->getCurveSegment(0);
2889 CubicBezier* cb=static_cast< CubicBezier*>(ls);
2890 fail_unless(cb!=NULL);
2891 Point* start=cb->getStart();
2892 fail_unless(start->getXOffset()==10.0);
2893 fail_unless(start->getYOffset()==15.0);
2894 fail_unless(start->getZOffset()==0.0);
2895 Point* end=cb->getEnd();
2896 fail_unless(end->getXOffset()==20.0);
2897 fail_unless(end->getYOffset()==30.0);
2898 fail_unless(end->getZOffset()==0.0);
2899 Point* base1=cb->getBasePoint1();
2900 fail_unless(base1->getXOffset()==15.0);
2901 fail_unless(base1->getYOffset()==5.0);
2902 fail_unless(base1->getZOffset()==0.0);
2903 Point* base2=cb->getBasePoint2();
2904 fail_unless(base2->getXOffset()==16.0);
2905 fail_unless(base2->getYOffset()==17.0);
2906 fail_unless(base2->getZOffset()==0.0);
2907 fail_unless(cb->isSetNotes());
2908 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
2909 XMLNode notes=XMLNode(*stream2);
2910 fail_unless(cb->getNotes()->equals(notes, true)==true);
2911
2912 delete stream2;
2913 delete stream;
2914 }
2915 END_TEST
2916
START_TEST(test_LayoutCreation_CubicBezier_annotation)2917 START_TEST (test_LayoutCreation_CubicBezier_annotation)
2918 {
2919 const char* a =
2920 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2921 "<annotation>\n"
2922 " <this-is-a-test>\n"
2923 " <another-level> level2 </another-level>\n"
2924 " </this-is-a-test>\n"
2925 " </annotation>";
2926
2927 const char* content=
2928 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2929 "<annotation>\n"
2930 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
2931 " <layout id=\"layout_1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"
2932 " <dimensions width=\"200\" height=\"400\"/>\n"
2933 " <listOfReactionGlyphs>\n"
2934 " <reactionGlyph id=\"reactionGlyph_1\">\n"
2935 " <curve>\n"
2936 " <listOfCurveSegments>\n"
2937 " <curveSegment xsi:type=\"CubicBezier\">\n"
2938 " <annotation>\n"
2939 " <this-is-a-test>\n"
2940 " <another-level> level2 </another-level>\n"
2941 " </this-is-a-test>\n"
2942 " </annotation>\n"
2943 " <start x=\"10\" y=\"15\"/>\n"
2944 " <end x=\"20\" y=\"30\"/>\n"
2945 " <basePoint1 x=\"15\" y=\"5\"/>\n"
2946 " <basePoint2 x=\"16\" y=\"17\"/>\n"
2947 " </curveSegment>\n"
2948 " </listOfCurveSegments>\n"
2949 " </curve>\n"
2950 " </reactionGlyph>\n"
2951 " </listOfReactionGlyphs>\n"
2952 " </layout>\n"
2953 "</listOfLayouts>\n"
2954 "</annotation>\n"
2955 ;
2956
2957
2958 XMLInputStream *stream=new XMLInputStream(content,false);
2959 XMLNode node=XMLNode(*stream);
2960 ListOfLayouts pListOfLayouts;
2961 parseLayoutAnnotation(&node,pListOfLayouts);
2962
2963 fail_unless(pListOfLayouts.size()==1);
2964
2965 Layout* l=(Layout*)pListOfLayouts.get(0);
2966
2967 fail_unless(l!=NULL);
2968
2969 Dimensions* dimensions=l->getDimensions();
2970 fail_unless(dimensions->getWidth()==200.0);
2971 fail_unless(dimensions->getHeight()==400.0);
2972 fail_unless(dimensions->getDepth()==0.0);
2973
2974 fail_unless(l->getId()=="layout_1");
2975
2976 fail_unless(l->getNumReactionGlyphs()==1);
2977 ReactionGlyph* rg=l->getReactionGlyph(0);
2978 fail_unless(rg->getId()=="reactionGlyph_1");
2979 fail_unless(!rg->isSetReactionId());
2980
2981 fail_unless(rg->isSetCurve());
2982 Curve* curve=rg->getCurve();
2983 fail_unless(curve->getNumCurveSegments()==1);
2984 LineSegment* ls=curve->getCurveSegment(0);
2985 CubicBezier* cb=static_cast< CubicBezier*>(ls);
2986 fail_unless(cb!=NULL);
2987 Point* start=cb->getStart();
2988 fail_unless(start->getXOffset()==10.0);
2989 fail_unless(start->getYOffset()==15.0);
2990 fail_unless(start->getZOffset()==0.0);
2991 Point* end=cb->getEnd();
2992 fail_unless(end->getXOffset()==20.0);
2993 fail_unless(end->getYOffset()==30.0);
2994 fail_unless(end->getZOffset()==0.0);
2995 Point* base1=cb->getBasePoint1();
2996 fail_unless(base1->getXOffset()==15.0);
2997 fail_unless(base1->getYOffset()==5.0);
2998 fail_unless(base1->getZOffset()==0.0);
2999 Point* base2=cb->getBasePoint2();
3000 fail_unless(base2->getXOffset()==16.0);
3001 fail_unless(base2->getYOffset()==17.0);
3002 fail_unless(base2->getZOffset()==0.0);
3003
3004 fail_unless(cb->isSetAnnotation());
3005 XMLInputStream *stream2= new XMLInputStream(a,false);
3006 XMLNode aNode=XMLNode(*stream2);
3007 fail_unless(cb->getAnnotation()->equals(aNode, true)==true);
3008 delete stream2;
3009 delete stream;
3010 }
3011 END_TEST
3012
START_TEST(test_LayoutCreation_Dimensions)3013 START_TEST (test_LayoutCreation_Dimensions)
3014 {
3015 const char* content=
3016 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3017 "<annotation>\n"
3018 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
3019 " <layout id=\"layout_1\">\n"
3020 " <dimensions width=\"200.5\" height=\"400.5\" depth=\"455.2\"/>\n"
3021 " </layout>\n"
3022 "</listOfLayouts>\n"
3023 "</annotation>\n"
3024 ;
3025
3026
3027 XMLInputStream *stream=new XMLInputStream(content,false);
3028 XMLNode node=XMLNode(*stream);
3029 ListOfLayouts pListOfLayouts;
3030 parseLayoutAnnotation(&node,pListOfLayouts);
3031
3032 fail_unless(pListOfLayouts.size()==1);
3033
3034 Layout* l=(Layout*)pListOfLayouts.get(0);
3035
3036 fail_unless(l!=NULL);
3037
3038 fail_unless(l->getId()=="layout_1");
3039
3040 Dimensions* dimensions=l->getDimensions();
3041 fail_unless(dimensions->getWidth()==200.5);
3042 fail_unless(dimensions->getHeight()==400.5);
3043 fail_unless(dimensions->getDepth()==455.2);
3044
3045 delete stream;
3046 }
3047 END_TEST
3048
START_TEST(test_LayoutCreation_Dimensions_notes)3049 START_TEST (test_LayoutCreation_Dimensions_notes)
3050 {
3051 const char* content=
3052 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3053 "<annotation>\n"
3054 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
3055 " <layout id=\"layout_1\">\n"
3056 " <dimensions width=\"200.5\" height=\"400.5\" depth=\"455.2\">\n"
3057 " <notes>"
3058 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
3059 " <p>Testnote</p>\n"
3060 " </body>"
3061 " </notes>\n"
3062 " </dimensions>\n"
3063 " </layout>\n"
3064 "</listOfLayouts>\n"
3065 "</annotation>\n"
3066 ;
3067
3068
3069
3070 XMLInputStream *stream=new XMLInputStream(content,false);
3071 XMLNode node=XMLNode(*stream);
3072 ListOfLayouts pListOfLayouts;
3073 parseLayoutAnnotation(&node,pListOfLayouts);
3074
3075 fail_unless(pListOfLayouts.size()==1);
3076
3077 Layout* l=(Layout*)pListOfLayouts.get(0);
3078
3079 fail_unless(l!=NULL);
3080
3081 fail_unless(l->getId()=="layout_1");
3082
3083 Dimensions* dimensions=l->getDimensions();
3084 fail_unless(dimensions->getWidth()==200.5);
3085 fail_unless(dimensions->getHeight()==400.5);
3086 fail_unless(dimensions->getDepth()==455.2);
3087 fail_unless(dimensions->isSetNotes());
3088 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
3089 XMLNode notes=XMLNode(*stream2);
3090 fail_unless(dimensions->getNotes()->equals(notes, true)==true);
3091
3092
3093 delete stream2;
3094 delete stream;
3095
3096 }
3097 END_TEST
3098
START_TEST(test_LayoutCreation_Dimensions_annotation)3099 START_TEST (test_LayoutCreation_Dimensions_annotation)
3100 {
3101 const char* a =
3102 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3103 "<annotation>\n"
3104 " <this-is-a-test>\n"
3105 " <another-level> level2 </another-level>\n"
3106 " </this-is-a-test>\n"
3107 " </annotation>";
3108
3109 const char* content=
3110 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3111 "<annotation>\n"
3112 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
3113 " <layout id=\"layout_1\">\n"
3114 " <dimensions width=\"200.5\" height=\"400.5\" depth=\"455.2\">\n"
3115 " <annotation>\n"
3116 " <this-is-a-test>\n"
3117 " <another-level> level2 </another-level>\n"
3118 " </this-is-a-test>\n"
3119 " </annotation>\n"
3120 " </dimensions>\n"
3121 " </layout>\n"
3122 "</listOfLayouts>\n"
3123 "</annotation>\n"
3124 ;
3125
3126
3127
3128 XMLInputStream *stream=new XMLInputStream(content,false);
3129 XMLNode node=XMLNode(*stream);
3130 ListOfLayouts pListOfLayouts;
3131 parseLayoutAnnotation(&node,pListOfLayouts);
3132
3133 fail_unless(pListOfLayouts.size()==1);
3134
3135 Layout* l=(Layout*)pListOfLayouts.get(0);
3136
3137 fail_unless(l!=NULL);
3138
3139 fail_unless(l->getId()=="layout_1");
3140
3141 Dimensions* dimensions=l->getDimensions();
3142 fail_unless(dimensions->getWidth()==200.5);
3143 fail_unless(dimensions->getHeight()==400.5);
3144 fail_unless(dimensions->getDepth()==455.2);
3145
3146 fail_unless(dimensions->isSetAnnotation());
3147 XMLInputStream *stream2 = new XMLInputStream(a,false);
3148 XMLNode aNode=XMLNode(*stream2);
3149 fail_unless(dimensions->getAnnotation()->equals(aNode, true)==true);
3150
3151 delete stream2;
3152 delete stream;
3153
3154
3155 }
3156 END_TEST
3157
START_TEST(test_LayoutCreation_Dimensions_skipOptional)3158 START_TEST (test_LayoutCreation_Dimensions_skipOptional)
3159 {
3160 const char* content=
3161 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3162 "<annotation>\n"
3163 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
3164 " <layout id=\"layout_1\">\n"
3165 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
3166 " </layout>\n"
3167 "</listOfLayouts>\n"
3168 "</annotation>"
3169 ;
3170
3171
3172
3173 XMLInputStream *stream=new XMLInputStream(content,false);
3174 XMLNode node=XMLNode(*stream);
3175 ListOfLayouts pListOfLayouts;
3176 parseLayoutAnnotation(&node,pListOfLayouts);
3177
3178 fail_unless(pListOfLayouts.size()==1);
3179
3180 Layout* l=(Layout*)pListOfLayouts.get(0);
3181
3182 fail_unless(l!=NULL);
3183
3184 fail_unless(l->getId()=="layout_1");
3185
3186 Dimensions* dimensions=l->getDimensions();
3187 fail_unless(dimensions->getWidth()==200.5);
3188 fail_unless(dimensions->getHeight()==400.5);
3189 fail_unless(dimensions->getDepth()==0.0);
3190
3191
3192 delete stream;
3193
3194 }
3195 END_TEST
3196
3197
START_TEST(test_LayoutCreation_BoundingBox)3198 START_TEST (test_LayoutCreation_BoundingBox)
3199 {
3200 const char* content=
3201 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3202 "<annotation>\n"
3203 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
3204 " <layout id=\"layout_1\">\n"
3205 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
3206 " <listOfReactionGlyphs>\n"
3207 " <reactionGlyph id=\"reactionGlyph_1\">\n"
3208 " <boundingBox id=\"boundingBox_1\">\n"
3209 " <position x=\"10.3\" y=\"20\" z=\"30.23\"/>\n"
3210 " <dimensions width=\"200.5\" height=\"400.5\" depth=\"100.2\"/>\n"
3211 " </boundingBox>\n"
3212 " </reactionGlyph>\n"
3213 " </listOfReactionGlyphs>\n"
3214 " </layout>\n"
3215 "</listOfLayouts>\n"
3216 "</annotation>\n"
3217 ;
3218
3219
3220 XMLInputStream *stream=new XMLInputStream(content,false);
3221 XMLNode node=XMLNode(*stream);
3222 ListOfLayouts pListOfLayouts;
3223 parseLayoutAnnotation(&node,pListOfLayouts);
3224
3225 fail_unless(pListOfLayouts.size()==1);
3226
3227 Layout* l=(Layout*)pListOfLayouts.get(0);
3228
3229 fail_unless(l!=NULL);
3230
3231 fail_unless(l->getId()=="layout_1");
3232
3233 Dimensions* dimensions=l->getDimensions();
3234 fail_unless(dimensions->getWidth()==200.5);
3235 fail_unless(dimensions->getHeight()==400.5);
3236 fail_unless(dimensions->getDepth()==0.0);
3237
3238 fail_unless(l->getNumReactionGlyphs()==1);
3239 ReactionGlyph* rg=l->getReactionGlyph(0);
3240 fail_unless(rg->getId()=="reactionGlyph_1");
3241 fail_unless(!rg->isSetReactionId());
3242
3243 BoundingBox* bb=rg->getBoundingBox();
3244 fail_unless(bb->getId()=="boundingBox_1");
3245
3246 Point* position=bb->getPosition();
3247 fail_unless(position->getXOffset()==10.3);
3248 fail_unless(position->getYOffset()==20.0);
3249 fail_unless(position->getZOffset()==30.23);
3250 Dimensions* dimensions2=bb->getDimensions();
3251 fail_unless(dimensions2->getWidth()==200.5);
3252 fail_unless(dimensions2->getHeight()==400.5);
3253 fail_unless(dimensions2->getDepth()==100.2);
3254
3255 delete stream;
3256
3257 }
3258 END_TEST
3259
START_TEST(test_LayoutCreation_BoundingBox_notes)3260 START_TEST (test_LayoutCreation_BoundingBox_notes)
3261 {
3262 const char* content=
3263 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3264 "<annotation>\n"
3265 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
3266 " <layout id=\"layout_1\">\n"
3267 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
3268 " <listOfReactionGlyphs>\n"
3269 " <reactionGlyph id=\"reactionGlyph_1\">\n"
3270 " <boundingBox>\n"
3271 " <notes>"
3272 " <body xmlns=\"http://www.w3.org/1999/xhtml\">\n"
3273 " <p>Testnote</p>\n"
3274 " </body>"
3275 " </notes>\n"
3276 " <position x=\"10.3\" y=\"20\"/>\n"
3277 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
3278 " </boundingBox>\n"
3279 " </reactionGlyph>\n"
3280 " </listOfReactionGlyphs>\n"
3281 " </layout>\n"
3282 "</listOfLayouts>\n"
3283 "</annotation>\n"
3284 ;
3285
3286
3287 XMLInputStream *stream=new XMLInputStream(content,false);
3288 XMLNode node=XMLNode(*stream);
3289 ListOfLayouts pListOfLayouts;
3290 parseLayoutAnnotation(&node,pListOfLayouts);
3291
3292 fail_unless(pListOfLayouts.size()==1);
3293
3294 Layout* l=(Layout*)pListOfLayouts.get(0);
3295
3296 fail_unless(l!=NULL);
3297
3298 fail_unless(l->getId()=="layout_1");
3299
3300 Dimensions* dimensions=l->getDimensions();
3301 fail_unless(dimensions->getWidth()==200.5);
3302 fail_unless(dimensions->getHeight()==400.5);
3303 fail_unless(dimensions->getDepth()==0.0);
3304
3305 fail_unless(l->getNumReactionGlyphs()==1);
3306 ReactionGlyph* rg=l->getReactionGlyph(0);
3307 fail_unless(rg->getId()=="reactionGlyph_1");
3308 fail_unless(!rg->isSetReactionId());
3309
3310 BoundingBox* bb=rg->getBoundingBox();
3311 Point* position=bb->getPosition();
3312 fail_unless(position->getXOffset()==10.3);
3313 fail_unless(position->getYOffset()==20.0);
3314 fail_unless(position->getZOffset()==0.0);
3315 Dimensions* dimensions2=bb->getDimensions();
3316 fail_unless(dimensions2->getWidth()==200.5);
3317 fail_unless(dimensions2->getHeight()==400.5);
3318 fail_unless(dimensions2->getDepth()==0.0);
3319 fail_unless(bb->isSetNotes());
3320 XMLInputStream *stream2 = new XMLInputStream(NOTES.c_str(),false);
3321 XMLNode notes=XMLNode(*stream2);
3322 fail_unless(bb->getNotes()->equals(notes, true)==true);
3323
3324 delete stream2;
3325 delete stream;
3326
3327 }
3328 END_TEST
3329
START_TEST(test_LayoutCreation_BoundingBox_annotation)3330 START_TEST (test_LayoutCreation_BoundingBox_annotation)
3331 {
3332 const char* a =
3333 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3334 "<annotation>\n"
3335 " <this-is-a-test>\n"
3336 " <another-level> level2 </another-level>\n"
3337 " </this-is-a-test>\n"
3338 " </annotation>";
3339
3340 const char* content=
3341 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3342 "<annotation>\n"
3343 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
3344 " <layout id=\"layout_1\">\n"
3345 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
3346 " <listOfReactionGlyphs>\n"
3347 " <reactionGlyph id=\"reactionGlyph_1\">\n"
3348 " <boundingBox>\n"
3349 " <annotation>\n"
3350 " <this-is-a-test>\n"
3351 " <another-level> level2 </another-level>\n"
3352 " </this-is-a-test>\n"
3353 " </annotation>\n"
3354 " <position x=\"10.3\" y=\"20\"/>\n"
3355 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
3356 " </boundingBox>\n"
3357 " </reactionGlyph>\n"
3358 " </listOfReactionGlyphs>\n"
3359 " </layout>\n"
3360 "</listOfLayouts>\n"
3361 "</annotation>\n"
3362 ;
3363
3364
3365 XMLInputStream *stream=new XMLInputStream(content,false);
3366 XMLNode node=XMLNode(*stream);
3367 ListOfLayouts pListOfLayouts;
3368 parseLayoutAnnotation(&node,pListOfLayouts);
3369
3370 fail_unless(pListOfLayouts.size()==1);
3371
3372 Layout* l=(Layout*)pListOfLayouts.get(0);
3373
3374 fail_unless(l!=NULL);
3375
3376 fail_unless(l->getId()=="layout_1");
3377
3378 Dimensions* dimensions=l->getDimensions();
3379 fail_unless(dimensions->getWidth()==200.5);
3380 fail_unless(dimensions->getHeight()==400.5);
3381 fail_unless(dimensions->getDepth()==0.0);
3382
3383 fail_unless(l->getNumReactionGlyphs()==1);
3384 ReactionGlyph* rg=l->getReactionGlyph(0);
3385 fail_unless(rg->getId()=="reactionGlyph_1");
3386 fail_unless(!rg->isSetReactionId());
3387
3388 BoundingBox* bb=rg->getBoundingBox();
3389 Point* position=bb->getPosition();
3390 fail_unless(position->getXOffset()==10.3);
3391 fail_unless(position->getYOffset()==20.0);
3392 fail_unless(position->getZOffset()==0.0);
3393 Dimensions* dimensions2=bb->getDimensions();
3394 fail_unless(dimensions2->getWidth()==200.5);
3395 fail_unless(dimensions2->getHeight()==400.5);
3396 fail_unless(dimensions2->getDepth()==0.0);
3397
3398 fail_unless(bb->isSetAnnotation());
3399 XMLInputStream *stream2 = new XMLInputStream(a,false);
3400 XMLNode aNode=XMLNode(*stream2);
3401 fail_unless(bb->getAnnotation()->equals(aNode, true)==true);
3402
3403 delete stream2;
3404 delete stream;
3405
3406 }
3407 END_TEST
3408
START_TEST(test_LayoutCreation_BoundingBox_skipOptional)3409 START_TEST (test_LayoutCreation_BoundingBox_skipOptional)
3410 {
3411 const char* content=
3412 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3413 "<annotation>\n"
3414 "<listOfLayouts xmlns=\"http://projects.eml.org/bcb/sbml/level2\">\n"
3415 " <layout id=\"layout_1\" >\n"
3416 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
3417 " <listOfReactionGlyphs>\n"
3418 " <reactionGlyph id=\"reactionGlyph_1\">\n"
3419 " <boundingBox>\n"
3420 " <position x=\"10.3\" y=\"20\"/>\n"
3421 " <dimensions width=\"200.5\" height=\"400.5\"/>\n"
3422 " </boundingBox>\n"
3423 " </reactionGlyph>\n"
3424 " </listOfReactionGlyphs>\n"
3425 " </layout>\n"
3426 "</listOfLayouts>\n"
3427 "</annotation>\n"
3428 ;
3429
3430
3431 XMLInputStream *stream=new XMLInputStream(content,false);
3432 XMLNode node=XMLNode(*stream);
3433 ListOfLayouts pListOfLayouts;
3434 parseLayoutAnnotation(&node,pListOfLayouts);
3435
3436 fail_unless(pListOfLayouts.size()==1);
3437
3438 Layout* l=(Layout*)pListOfLayouts.get(0);
3439
3440 fail_unless(l!=NULL);
3441
3442 fail_unless(l->getId()=="layout_1");
3443
3444 Dimensions* dimensions=l->getDimensions();
3445 fail_unless(dimensions->getWidth()==200.5);
3446 fail_unless(dimensions->getHeight()==400.5);
3447 fail_unless(dimensions->getDepth()==0.0);
3448
3449 fail_unless(l->getNumReactionGlyphs()==1);
3450 ReactionGlyph* rg=l->getReactionGlyph(0);
3451 fail_unless(rg->getId()=="reactionGlyph_1");
3452 fail_unless(!rg->isSetReactionId());
3453
3454 BoundingBox* bb=rg->getBoundingBox();
3455 Point* position=bb->getPosition();
3456 fail_unless(position->getXOffset()==10.3);
3457 fail_unless(position->getYOffset()==20.0);
3458 fail_unless(position->getZOffset()==0.0);
3459 Dimensions* dimensions2=bb->getDimensions();
3460 fail_unless(dimensions2->getWidth()==200.5);
3461 fail_unless(dimensions2->getHeight()==400.5);
3462 fail_unless(dimensions2->getDepth()==0.0);
3463
3464
3465 delete stream;
3466
3467 }
3468 END_TEST
3469
3470 Suite *
create_suite_LayoutCreation(void)3471 create_suite_LayoutCreation (void)
3472 {
3473 Suite *suite = suite_create("LayoutCreation");
3474 TCase *tcase = tcase_create("LayoutCreation");
3475
3476 tcase_add_checked_fixture( tcase,
3477 LayoutCreationTest_setup,
3478 LayoutCreationTest_teardown );
3479
3480
3481 tcase_add_test( tcase, test_LayoutCreation_Layout );
3482 tcase_add_test( tcase, test_LayoutCreation_Layout_notes );
3483 tcase_add_test( tcase, test_LayoutCreation_Layout_annotation );
3484 tcase_add_test( tcase, test_LayoutCreation_Layout_skipOptional );
3485 tcase_add_test( tcase, test_LayoutCreation_CompartmentGlyph );
3486 tcase_add_test( tcase, test_LayoutCreation_CompartmentGlyph_notes );
3487 tcase_add_test( tcase, test_LayoutCreation_CompartmentGlyph_annotation );
3488 tcase_add_test( tcase, test_LayoutCreation_CompartmentGlyph_skipOptional );
3489 tcase_add_test( tcase, test_LayoutCreation_SpeciesGlyph );
3490 tcase_add_test( tcase, test_LayoutCreation_SpeciesGlyph_notes );
3491 tcase_add_test( tcase, test_LayoutCreation_SpeciesGlyph_annotation );
3492 tcase_add_test( tcase, test_LayoutCreation_SpeciesGlyph_skipOptional );
3493 tcase_add_test( tcase, test_LayoutCreation_ReactionGlyph_Curve );
3494 tcase_add_test( tcase, test_LayoutCreation_ReactionGlyph_BoundingBox );
3495 tcase_add_test( tcase, test_LayoutCreation_ReactionGlyph_notes );
3496 tcase_add_test( tcase, test_LayoutCreation_ReactionGlyph_annotation );
3497 tcase_add_test( tcase, test_LayoutCreation_ReactionGlyph_skipOptional );
3498 tcase_add_test( tcase, test_LayoutCreation_SpeciesReferenceGlyph_Curve );
3499 tcase_add_test( tcase, test_LayoutCreation_SpeciesReferenceGlyph_BoundingBox );
3500 tcase_add_test( tcase, test_LayoutCreation_SpeciesReferenceGlyph_notes );
3501 tcase_add_test( tcase, test_LayoutCreation_SpeciesReferenceGlyph_annotation );
3502 tcase_add_test( tcase, test_LayoutCreation_SpeciesReferenceGlyph_skipOptional);
3503 tcase_add_test( tcase, test_LayoutCreation_TextGlyph_text );
3504 tcase_add_test( tcase, test_LayoutCreation_TextGlyph_notes );
3505 tcase_add_test( tcase, test_LayoutCreation_TextGlyph_annotation );
3506 tcase_add_test( tcase, test_LayoutCreation_TextGlyph_originOfText );
3507 tcase_add_test( tcase, test_LayoutCreation_TextGlyph_skipOptional );
3508 tcase_add_test( tcase, test_LayoutCreation_GraphicalObject );
3509 tcase_add_test( tcase, test_LayoutCreation_GraphicalObject_notes );
3510 tcase_add_test( tcase, test_LayoutCreation_GraphicalObject_annotation );
3511 tcase_add_test( tcase, test_LayoutCreation_Curve );
3512 tcase_add_test( tcase, test_LayoutCreation_Curve_notes );
3513 tcase_add_test( tcase, test_LayoutCreation_Curve_annotation );
3514 tcase_add_test( tcase, test_LayoutCreation_Curve_skipOptional );
3515 tcase_add_test( tcase, test_LayoutCreation_LineSegment );
3516 tcase_add_test( tcase, test_LayoutCreation_LineSegment_notes );
3517 tcase_add_test( tcase, test_LayoutCreation_LineSegment_annotation );
3518 tcase_add_test( tcase, test_LayoutCreation_CubicBezier );
3519 tcase_add_test( tcase, test_LayoutCreation_CubicBezier_notes );
3520 tcase_add_test( tcase, test_LayoutCreation_CubicBezier_annotation );
3521 tcase_add_test( tcase, test_LayoutCreation_Dimensions );
3522 tcase_add_test( tcase, test_LayoutCreation_Dimensions_notes );
3523 tcase_add_test( tcase, test_LayoutCreation_Dimensions_annotation );
3524 tcase_add_test( tcase, test_LayoutCreation_Dimensions_skipOptional );
3525 tcase_add_test( tcase, test_LayoutCreation_BoundingBox );
3526 tcase_add_test( tcase, test_LayoutCreation_BoundingBox_notes );
3527 tcase_add_test( tcase, test_LayoutCreation_BoundingBox_annotation );
3528 tcase_add_test( tcase, test_LayoutCreation_BoundingBox_skipOptional );
3529 suite_add_tcase(suite, tcase);
3530
3531 return suite;
3532 }
3533
3534
3535
3536
3537 END_C_DECLS
3538