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