1 //
2 // Filename    : TestRenderExtension.cpp
3 // Description : Tests for the RenderExtension
4 
5 #include <sbml/common/common.h>
6 #include <sbml/common/extern.h>
7 #include <sbml/conversion/ConversionProperties.h>
8 #include <sbml/SBMLReader.h>
9 #include <sbml/SBMLWriter.h>
10 #include <sbml/xml/XMLNode.h>
11 #include <sbml/xml/XMLInputStream.h>
12 #include <sbml/packages/layout/sbml/test/utility.h>
13 #include <sbml/packages/render/common/RenderExtensionTypes.h>
14 #include <sbml/packages/layout/common/LayoutExtensionTypes.h>
15 
16 #include <RenderPoint.h>
17 
18 #include <check.h>
19 #include <limits>
20 #include <string>
21 
22 
23 LIBSBML_CPP_NAMESPACE_USE
24 using namespace std;
25 
26 BEGIN_C_DECLS
27 
28 extern char *TestDataDirectory;
29 
START_TEST(test_RenderExtension_createPkgNs)30 START_TEST ( test_RenderExtension_createPkgNs )
31 {
32   RenderPkgNamespaces ns;
33   fail_unless(ns.getLevel() == 3);
34   fail_unless(ns.getVersion() == 1);
35   fail_unless(ns.getPackageVersion() == 1);
36   fail_unless(ns.getPackageName() == "render");
37 
38   RenderPkgNamespaces ns1 (2, 1, 1, "render");
39   fail_unless(ns1.getLevel() == 2);
40   fail_unless(ns1.getVersion() == 1);
41   fail_unless(ns1.getPackageVersion() == 1);
42   fail_unless(ns1.getPackageName() == "render");
43 
44 
45 }
46 END_TEST
47 
START_TEST(test_RenderExtension_writeL3Render)48 START_TEST ( test_RenderExtension_writeL3Render )
49 {
50   RenderPkgNamespaces renderns;
51   LayoutPkgNamespaces layoutns;
52 
53   SBMLDocument doc(3,1);
54 
55   doc.enablePackage(layoutns.getURI(), "layout", true);
56   doc.enablePackage(renderns.getURI(), "render", true);
57 
58   Model* model = doc.createModel();
59 
60   LayoutModelPlugin *lPlugin = (LayoutModelPlugin*)model->getPlugin("layout");
61   fail_unless(lPlugin != NULL);
62 
63   Layout* layout = lPlugin->createLayout();
64   Dimensions dim(&layoutns, 100,100 );
65   layout->setDimensions(&dim);
66 
67   GraphicalObject* additional = layout->createAdditionalGraphicalObject();
68   additional->setId("go1");
69   BoundingBox bb(&layoutns, "bb1", 10, 10, 90, 90);
70   additional->setBoundingBox(&bb);
71 
72   RenderLayoutPlugin *rPlugin = (RenderLayoutPlugin*)layout->getPlugin("render");
73   fail_unless(rPlugin != NULL);
74 
75   LocalRenderInformation* local = rPlugin->createLocalRenderInformation();
76 
77   ColorDefinition *black = local->createColorDefinition();
78   black->setId("black");
79   black->setColorValue("#000000");
80 
81   LocalStyle *lStyle = local->createStyle("style_go1");
82   lStyle->addId("go1");
83   RenderGroup* group = lStyle->getGroup();
84   group->setStroke("black");
85 
86 
87   std::string sbml = writeSBMLToStdString(&doc);
88 
89   fail_unless (sbml.length() != 0);
90 
91 }
92 END_TEST
93 
94 
START_TEST(test_RenderExtension_graphicalObject)95 START_TEST ( test_RenderExtension_graphicalObject )
96 {
97   RenderPkgNamespaces renderns;
98   LayoutPkgNamespaces layoutns;
99 
100   SBMLDocument doc(3,1);
101 
102   doc.enablePackage(layoutns.getURI(), "layout", true);
103   doc.enablePackage(renderns.getURI(), "render", true);
104 
105   Model* model = doc.createModel();
106 
107   LayoutModelPlugin *lPlugin = (LayoutModelPlugin*)model->getPlugin("layout");
108   fail_unless(lPlugin != NULL);
109 
110   Layout* layout = lPlugin->createLayout();
111   Dimensions dim(&layoutns, 100,100 );
112   layout->setDimensions(&dim);
113 
114   GraphicalObject* additional = layout->createAdditionalGraphicalObject();
115   additional->setId("go1");
116   BoundingBox bb(&layoutns, "bb1", 10, 10, 90, 90);
117   additional->setBoundingBox(&bb);
118   RenderGraphicalObjectPlugin* goPlugin = (RenderGraphicalObjectPlugin*)additional->getPlugin("render");
119   fail_unless(goPlugin != NULL);
120   goPlugin->setObjectRole("myRole");
121 
122 
123   RenderLayoutPlugin *rPlugin = (RenderLayoutPlugin*)layout->getPlugin("render");
124   fail_unless(rPlugin != NULL);
125 
126   LocalRenderInformation* local = rPlugin->createLocalRenderInformation();
127 
128   ColorDefinition *black = local->createColorDefinition();
129   black->setId("black");
130   black->setColorValue("#000000");
131 
132   LocalStyle *lStyle = local->createStyle("style_go1");
133   lStyle->addId("go1");
134   RenderGroup* group = lStyle->getGroup();
135   group->setStroke("black");
136 
137 
138   std::string sbml = writeSBMLToStdString(&doc);
139 
140   fail_unless (sbml.length() != 0);
141 
142   // read back
143 
144   SBMLDocument *doc2 = readSBMLFromString(sbml.c_str());
145   LayoutModelPlugin *lPlugin2 = (LayoutModelPlugin*)doc2->getModel()->getPlugin("layout");
146   fail_unless(lPlugin2 != NULL);
147   GraphicalObject *go2 = lPlugin2->getLayout(0)->getAdditionalGraphicalObject(0);
148   fail_unless(go2 != NULL);
149   RenderGraphicalObjectPlugin* goPlugin2 = (RenderGraphicalObjectPlugin*)go2->getPlugin("render");
150   fail_unless(goPlugin2 != NULL);
151   fail_unless(goPlugin2->getObjectRole() == "myRole");
152 
153   delete doc2;
154 }
155 END_TEST
156 
157 
START_TEST(test_RenderExtension_gradient)158 START_TEST ( test_RenderExtension_gradient )
159 {
160   RenderPkgNamespaces renderns;
161   LayoutPkgNamespaces layoutns;
162 
163   SBMLDocument doc(3,1);
164 
165   doc.enablePackage(layoutns.getURI(), "layout", true);
166   doc.enablePackage(renderns.getURI(), "render", true);
167 
168   Model* model = doc.createModel();
169 
170   LayoutModelPlugin *lPlugin = (LayoutModelPlugin*)model->getPlugin("layout");
171   fail_unless(lPlugin != NULL);
172 
173   Layout* layout = lPlugin->createLayout();
174   Dimensions dim(&layoutns, 100,100 );
175   layout->setDimensions(&dim);
176 
177   GraphicalObject* additional = layout->createAdditionalGraphicalObject();
178   additional->setId("go1");
179   BoundingBox bb(&layoutns, "bb1", 10, 10, 90, 90);
180   additional->setBoundingBox(&bb);
181   RenderGraphicalObjectPlugin* goPlugin = (RenderGraphicalObjectPlugin*)additional->getPlugin("render");
182   fail_unless(goPlugin != NULL);
183   goPlugin->setObjectRole("myRole");
184 
185 
186   RenderLayoutPlugin *rPlugin = (RenderLayoutPlugin*)layout->getPlugin("render");
187   fail_unless(rPlugin != NULL);
188 
189   LocalRenderInformation* local = rPlugin->createLocalRenderInformation();
190 
191   ColorDefinition *black = local->createColorDefinition();
192   black->setId("black");
193   black->setColorValue("#000000");
194 
195   ColorDefinition *grey = local->createColorDefinition();
196   grey->setId("grey");
197   grey->setColorValue("#F0F0F0");
198 
199   LinearGradient* gradient = local->createLinearGradientDefinition();
200   gradient->setId("test");
201   gradient->setPoint1(RelAbsVector(), RelAbsVector());
202   gradient->setPoint2(RelAbsVector(0,100), RelAbsVector(0,100));
203 
204   GradientStop *stop = gradient->createGradientStop();
205   stop->setOffset(RelAbsVector());
206   stop->setStopColor("white");
207 
208   stop = gradient->createGradientStop();
209   stop->setOffset(RelAbsVector(0, 100));
210   stop->setStopColor("silver");
211 
212   std::string smodel = writeSBMLToStdString(&doc);
213 
214   fail_unless( stop->getStopColor() == "silver" );
215 }
216 END_TEST
217 
START_TEST(test_RenderExtension_convertLevel)218 START_TEST ( test_RenderExtension_convertLevel )
219 {
220   string filename(TestDataDirectory);
221   filename += "FutileCycle.xml";
222   // read document
223   SBMLDocument* doc = readSBMLFromFile(filename.c_str());
224   doc->checkConsistency();
225 
226   // assert all is good
227   fail_unless (doc->getModel() != NULL);
228   fail_unless (doc->getNumErrors(LIBSBML_SEV_ERROR) == 0);
229 
230   // convert to L3 *without* upgrading the layout / render package
231   bool result = doc->setLevelAndVersion(3,1, false, true);
232   fail_unless(result == true);
233 
234   // write to string
235   std::string l3SBML = writeSBMLToStdString(doc);
236 
237   delete doc;
238 
239   // read string back
240   doc = readSBMLFromString(l3SBML.c_str());
241   doc->checkConsistency();
242 
243   // assert all is good
244   fail_unless (doc->getModel() != NULL);
245   fail_unless (doc->getNumErrors(LIBSBML_SEV_ERROR) == 0);
246 
247   delete doc;
248 
249   filename = TestDataDirectory;
250   filename += "FutileCycle.xml";
251   // read document
252   doc = readSBMLFromFile(filename.c_str());
253 
254   SBMLNamespaces nsl3v1(3, 1);
255   ConversionProperties prop(&nsl3v1);
256   prop.addOption("strict", false);
257   prop.addOption("setLevelAndVersion", true);
258   prop.addOption("ignorePackages", true);
259 
260   fail_unless(doc->convert(prop) == LIBSBML_OPERATION_SUCCESS);
261 
262   // now upgrade layout / render package
263   SBMLDocumentPlugin *docPlugin = (SBMLDocumentPlugin*)doc->getPlugin("layout");
264   if (docPlugin != NULL)
265       docPlugin->setElementNamespace(LayoutExtension::getXmlnsL3V1V1());
266   doc->getSBMLNamespaces()->addPackageNamespace("layout", 1);
267   doc->setPackageRequired("layout", false);
268 
269 
270   docPlugin = (SBMLDocumentPlugin*)doc->getPlugin("render");
271   if (docPlugin != NULL)
272       docPlugin->setElementNamespace(RenderExtension::getXmlnsL3V1V1());
273   else
274     doc->enablePackage(RenderExtension::getXmlnsL3V1V1(), "render", true);
275 
276   doc->getSBMLNamespaces()->addPackageNamespace("render", 1);
277   doc->setPackageRequired("render", false);
278 
279 
280   doc->checkConsistency();
281 
282   // assert all is good
283   fail_unless (doc->getModel() != NULL);
284   fail_unless (doc->getNumErrors(LIBSBML_SEV_ERROR) == 0);
285 
286   //l3SBML = writeSBMLToString(doc);
287 
288   delete doc;
289 }
290 END_TEST
291 
292 Suite *
create_suite_RenderExtension(void)293 create_suite_RenderExtension (void)
294 {
295   Suite *suite = suite_create("RenderExtension");
296   TCase *tcase = tcase_create("RenderExtension");
297 
298 
299   tcase_add_test( tcase, test_RenderExtension_createPkgNs            );
300   tcase_add_test( tcase, test_RenderExtension_writeL3Render          );
301   tcase_add_test( tcase, test_RenderExtension_convertLevel           );
302   tcase_add_test( tcase, test_RenderExtension_graphicalObject        );
303   tcase_add_test( tcase, test_RenderExtension_gradient               );
304 
305   suite_add_tcase(suite, tcase);
306 
307   return suite;
308 }
309 
310 END_C_DECLS
311