1 //
2 // Filename : TestRadialGradient.cpp
3 // Description : Tests for the RadialGradient class
4 // Organization: University of Heidelberg
5 // Created : 2009-09-30
6 //
7 // Copyright 2008 University of Heidelberg
8 //
9 // This library is free software; you can redistribute it and/or modify it
10 // under the terms of the GNU Lesser General Public License as published
11 // by the Free Software Foundation; either version 2.1 of the License, or
12 // any later version.
13 //
14 // This library is distributed in the hope that it will be useful, but
15 // WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF
16 // MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. The software and
17 // documentation provided hereunder is on an "as is" basis, and the
18 // University of Heidelberg have no obligations to
19 // provide maintenance, support, updates, enhancements or modifications.
20 // In no event shall the University of Heidelberg be
21 // liable to any party for direct, indirect, special, incidental or
22 // consequential damages, including lost profits, arising out of the use of
23 // this software and its documentation, even if the University of
24 // Heidelberg have been advised of the possibility of such
25 // damage. See the GNU Lesser General Public License for more details.
26 //
27 // You should have received a copy of the GNU Lesser General Public License
28 // along with this library; if not, write to the Free Software Foundation,
29 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
30 //
31 // The original code contained here was initially developed by:
32 //
33 // Ralph Gauges
34 // BIOQUANT/BQ0018
35 // Im Neuenheimer Feld 267
36 // 69120 Heidelberg
37 // Germany
38 //
39 // mailto:ralph.gauges@bioquant.uni-heidelberg.de
40 //
41 // Contributor(s):
42
43
44
45 #include <sbml/common/common.h>
46 #include <sbml/common/extern.h>
47 #include <sbml/xml/XMLNode.h>
48 #include <sbml/xml/XMLInputStream.h>
49 #include <sbml/packages/layout/sbml/test/utility.h>
50 #include <sbml/packages/render/extension/RenderExtension.h>
51
52 #include <RadialGradient.h>
53
54 #include <check.h>
55 #include <limits>
56 #include <string>
57
58
59 LIBSBML_CPP_NAMESPACE_USE
60
61 BEGIN_C_DECLS
62
63 static RadialGradient *G;
64 static RenderPkgNamespaces *renderns;
65
66 void
RadialGradientTest_setup(void)67 RadialGradientTest_setup (void)
68 {
69 renderns = new (std::nothrow) RenderPkgNamespaces();
70 G = new (std::nothrow) RadialGradient(renderns);
71
72 if (G == NULL)
73 {
74 fail("new(std::nothrow)RadialGradient(renderns) returned a NULL pointer.");
75 }
76
77 }
78
79 void
RadialGradientTest_teardown(void)80 RadialGradientTest_teardown (void)
81 {
82 delete G;
83 delete renderns;
84 }
85
START_TEST(test_RadialGradient_setters)86 START_TEST (test_RadialGradient_setters )
87 {
88 fail_unless(G->getCenterX().getAbsoluteValue() < 1e-9);
89 fail_unless(fabs((G->getCenterX().getRelativeValue() - 50.0) / 50.0) < 1e-9);
90 fail_unless(G->getCenterY().getAbsoluteValue() < 1e-9);
91 fail_unless(fabs((G->getCenterY().getRelativeValue() - 50.0) / 50.0) < 1e-9);
92 fail_unless(G->getCenterZ().getAbsoluteValue() < 1e-9);
93 fail_unless(fabs((G->getCenterZ().getRelativeValue() - 50.0) / 50.0) < 1e-9);
94 fail_unless(G->getRadius().getAbsoluteValue() < 1e-9);
95 fail_unless(fabs((G->getRadius().getRelativeValue() - 50.0) / 50.0) < 1e-9);
96 fail_unless(G->getFocalPointX().getAbsoluteValue() < 1e-9);
97 fail_unless(fabs((G->getFocalPointX().getRelativeValue() - G->getCenterX().getRelativeValue()) / G->getCenterX().getRelativeValue()) < 1e-9);
98 fail_unless(G->getFocalPointY().getAbsoluteValue() < 1e-9);
99 fail_unless(fabs((G->getFocalPointY().getRelativeValue() - G->getCenterY().getRelativeValue()) / G->getCenterY().getRelativeValue()) < 1e-9);
100 fail_unless(G->getFocalPointZ().getAbsoluteValue() < 1e-9);
101 fail_unless(fabs((G->getFocalPointZ().getRelativeValue() - G->getCenterZ().getRelativeValue()) / G->getCenterZ().getRelativeValue()) < 1e-9);
102 G->setCoordinates(RelAbsVector(1.1,2.2),RelAbsVector(3.3,4.4),RelAbsVector(5.5,6.6)
103 ,RelAbsVector(13.13,14.14)
104 ,RelAbsVector(7.7,8.8),RelAbsVector(9.9,10.10),RelAbsVector(11.11,12.12)
105 );
106 fail_unless(fabs((G->getCenterX().getAbsoluteValue() -1.1) / 1.1) < 1e-9);
107 fail_unless(fabs((G->getCenterX().getRelativeValue() -2.2) / 2.2) < 1e-9);
108 fail_unless(fabs((G->getCenterY().getAbsoluteValue() -3.3) / 3.3) < 1e-9);
109 fail_unless(fabs((G->getCenterY().getRelativeValue() -4.4) / 4.4) < 1e-9);
110 fail_unless(fabs((G->getCenterZ().getAbsoluteValue() -5.5) / 5.5) < 1e-9);
111 fail_unless(fabs((G->getCenterZ().getRelativeValue() -6.6) / 6.6) < 1e-9);
112 fail_unless(fabs((G->getRadius().getAbsoluteValue() -13.13) / 13.13) < 1e-9);
113 fail_unless(fabs((G->getRadius().getRelativeValue() -14.14) / 14.14) < 1e-9);
114 fail_unless(fabs((G->getFocalPointX().getAbsoluteValue() -7.7) / 7.7) < 1e-9);
115 fail_unless(fabs((G->getFocalPointX().getRelativeValue() -8.8) / 8.8) < 1e-9);
116 fail_unless(fabs((G->getFocalPointY().getAbsoluteValue() -9.9) / 9.9) < 1e-9);
117 fail_unless(fabs((G->getFocalPointY().getRelativeValue() -10.10) / 10.10) < 1e-9);
118 fail_unless(fabs((G->getFocalPointZ().getAbsoluteValue() -11.11) / 11.11) < 1e-9);
119 fail_unless(fabs((G->getFocalPointZ().getRelativeValue() -12.12) / 12.12) < 1e-9);
120 G->setCoordinates(RelAbsVector(3.3,4.4),RelAbsVector(5.5,6.6)
121 ,RelAbsVector(17.17,18.18)
122 ,RelAbsVector(9.9,10.10),RelAbsVector(11.11,12.12)
123 );
124 fail_unless(fabs((G->getCenterX().getAbsoluteValue() - 3.3) / 3.3) < 1e-9);
125 fail_unless(fabs((G->getCenterX().getRelativeValue() - 4.4) / 4.4) < 1e-9);
126 fail_unless(fabs((G->getCenterY().getAbsoluteValue() - 5.5) / 5.5) < 1e-9);
127 fail_unless(fabs((G->getCenterY().getRelativeValue() - 6.6) / 6.6) < 1e-9);
128 fail_unless(G->getCenterZ().getAbsoluteValue() < 1e-9);
129 fail_unless(fabs((G->getCenterZ().getRelativeValue() - 50.0) / 50.0) < 1e-9);
130 fail_unless(fabs((G->getRadius().getAbsoluteValue() - 17.17) / 17.17) < 1e-9);
131 fail_unless(fabs((G->getRadius().getRelativeValue() - 18.18) / 18.18) < 1e-9);
132 fail_unless(fabs((G->getFocalPointX().getAbsoluteValue() - 9.9) / 9.9) < 1e-9);
133 fail_unless(fabs((G->getFocalPointX().getRelativeValue() - 10.10) / 10.10) < 1e-9);
134 fail_unless(fabs((G->getFocalPointY().getAbsoluteValue() - 11.11) / 11.11) < 1e-9);
135 fail_unless(fabs((G->getFocalPointY().getRelativeValue() - 12.12) / 12.12) < 1e-9);
136 fail_unless(G->getFocalPointZ().getAbsoluteValue() < 1e-9);
137 fail_unless(fabs((G->getFocalPointZ().getRelativeValue() - 50.0) / 50.0) < 1e-9);
138 G->setCenter(RelAbsVector(1.1,2.2),RelAbsVector(3.3,4.4),RelAbsVector(5.5,6.6));
139 fail_unless(fabs((G->getCenterX().getAbsoluteValue() - 1.1) / 1.1) < 1e-9);
140 fail_unless(fabs((G->getCenterX().getRelativeValue() - 2.2) / 2.2) < 1e-9);
141 fail_unless(fabs((G->getCenterY().getAbsoluteValue() - 3.3) / 3.3) < 1e-9);
142 fail_unless(fabs((G->getCenterY().getRelativeValue() - 4.4) / 4.4) < 1e-9);
143 fail_unless(fabs((G->getCenterZ().getAbsoluteValue() - 5.5) / 5.5) < 1e-9);
144 fail_unless(fabs((G->getCenterZ().getRelativeValue() - 6.6) / 6.6) < 1e-9);
145 fail_unless(fabs((G->getRadius().getAbsoluteValue() - 17.17) / 17.17) < 1e-9);
146 fail_unless(fabs((G->getRadius().getRelativeValue() - 18.18) / 18.18) < 1e-9);
147 fail_unless(fabs((G->getFocalPointX().getAbsoluteValue() - 9.9) / 9.9) < 1e-9);
148 fail_unless(fabs((G->getFocalPointX().getRelativeValue() - 10.10) / 10.10) < 1e-9);
149 fail_unless(fabs((G->getFocalPointY().getAbsoluteValue() - 11.11) / 11.11) < 1e-9);
150 fail_unless(fabs((G->getFocalPointY().getRelativeValue() -12.12) / 12.12) < 1e-9);
151 fail_unless(G->getFocalPointZ().getAbsoluteValue() < 1e-9);
152 fail_unless(fabs((G->getFocalPointZ().getRelativeValue() - 50.0) / 50.0) < 1e-9);
153 G->setCenter(RelAbsVector(3.3,4.4),RelAbsVector(5.5,6.6));
154 fail_unless(fabs((G->getCenterX().getAbsoluteValue() - 3.3) / 3.3) < 1e-9);
155 fail_unless(fabs((G->getCenterX().getRelativeValue() - 4.4) / 4.4) < 1e-9);
156 fail_unless(fabs((G->getCenterY().getAbsoluteValue() - 5.5) / 5.5) < 1e-9);
157 fail_unless(fabs((G->getCenterY().getRelativeValue() - 6.6) / 6.6) < 1e-9);
158 fail_unless(G->getCenterZ().getAbsoluteValue() < 1e-9);
159 fail_unless(G->getCenterZ().getRelativeValue() < 1e-9);
160 fail_unless(fabs((G->getRadius().getAbsoluteValue() - 17.17) / 17.17) < 1e-9);
161 fail_unless(fabs((G->getRadius().getRelativeValue() - 18.18) / 18.18) < 1e-9);
162 fail_unless(fabs((G->getFocalPointX().getAbsoluteValue() - 9.9) / 9.9) < 1e-9);
163 fail_unless(fabs((G->getFocalPointX().getRelativeValue() - 10.10) / 10.10) < 1e-9);
164 fail_unless(fabs((G->getFocalPointY().getAbsoluteValue() - 11.11) / 11.11) < 1e-9);
165 fail_unless(fabs((G->getFocalPointY().getRelativeValue() - 12.12) / 12.12) < 1e-9);
166 fail_unless(G->getFocalPointZ().getAbsoluteValue() < 1e-9);
167 fail_unless(fabs((G->getFocalPointZ().getRelativeValue() - 50.0) / 50.0) < 1e-9);
168 G->setFocalPoint(RelAbsVector(1.1,2.2),RelAbsVector(3.3,4.4),RelAbsVector(5.5,6.6));
169 fail_unless(fabs((G->getCenterX().getAbsoluteValue() - 3.3) / 3.3) < 1e-9);
170 fail_unless(fabs((G->getCenterX().getRelativeValue() - 4.4) / 4.4) < 1e-9);
171 fail_unless(fabs((G->getCenterY().getAbsoluteValue() - 5.5) / 5.5) < 1e-9);
172 fail_unless(fabs((G->getCenterY().getRelativeValue() - 6.6) / 6.6) < 1e-9);
173 fail_unless(G->getCenterZ().getAbsoluteValue() < 1e-9);
174 fail_unless(G->getCenterZ().getRelativeValue() < 1e-9);
175 fail_unless(fabs((G->getRadius().getAbsoluteValue() - 17.17) / 17.17) < 1e-9);
176 fail_unless(fabs((G->getRadius().getRelativeValue() - 18.18) / 18.18) < 1e-9);
177 fail_unless(fabs((G->getFocalPointX().getAbsoluteValue() - 1.1) / 1.1) < 1e-9);
178 fail_unless(fabs((G->getFocalPointX().getRelativeValue() - 2.2) / 2.2) < 1e-9);
179 fail_unless(fabs((G->getFocalPointY().getAbsoluteValue() - 3.3) / 3.3) < 1e-9);
180 fail_unless(fabs((G->getFocalPointY().getRelativeValue() - 4.4) / 4.4) < 1e-9);
181 fail_unless(fabs((G->getFocalPointZ().getAbsoluteValue() - 5.5) / 5.5) < 1e-9);
182 fail_unless(fabs((G->getFocalPointZ().getRelativeValue() - 6.6) / 6.6) < 1e-9);
183 G->setFocalPoint(RelAbsVector(9.9,10.10),RelAbsVector(11.11,12.12));
184 fail_unless(fabs((G->getCenterX().getAbsoluteValue() - 3.3) / 3.3) < 1e-9);
185 fail_unless(fabs((G->getCenterX().getRelativeValue() - 4.4) / 4.4) < 1e-9);
186 fail_unless(fabs((G->getCenterY().getAbsoluteValue() - 5.5) / 5.5) < 1e-9);
187 fail_unless(fabs((G->getCenterY().getRelativeValue() - 6.6) / 6.6) < 1e-9);
188 fail_unless(G->getCenterZ().getAbsoluteValue() < 1e-9);
189 fail_unless(G->getCenterZ().getRelativeValue() < 1e-9);
190 fail_unless(fabs((G->getRadius().getAbsoluteValue() - 17.17) / 17.17) < 1e-9);
191 fail_unless(fabs((G->getRadius().getRelativeValue() - 18.18) / 18.18) < 1e-9);
192 fail_unless(fabs((G->getFocalPointX().getAbsoluteValue() - 9.9) / 9.9) < 1e-9);
193 fail_unless(fabs((G->getFocalPointX().getRelativeValue() - 10.10) / 10.10) < 1e-9);
194 fail_unless(fabs((G->getFocalPointY().getAbsoluteValue() - 11.11) / 11.11) < 1e-9);
195 fail_unless(fabs((G->getFocalPointY().getRelativeValue() - 12.12) / 12.12) < 1e-9);
196 fail_unless(G->getFocalPointZ().getAbsoluteValue() < 1e-9);
197 fail_unless(G->getFocalPointZ().getRelativeValue() < 1e-9);
198 G->setRadius(RelAbsVector(20.20,21.21));
199 fail_unless(fabs((G->getCenterX().getAbsoluteValue() - 3.3) / 3.3) < 1e-9);
200 fail_unless(fabs((G->getCenterX().getRelativeValue() - 4.4) / 4.4) < 1e-9);
201 fail_unless(fabs((G->getCenterY().getAbsoluteValue() - 5.5) / 5.5) < 1e-9);
202 fail_unless(fabs((G->getCenterY().getRelativeValue() - 6.6) / 6.6) < 1e-9);
203 fail_unless(G->getCenterZ().getAbsoluteValue() < 1e-9);
204 fail_unless(G->getCenterZ().getRelativeValue() < 1e-9);
205 fail_unless(fabs((G->getRadius().getAbsoluteValue() - 20.20) / 20.20) < 1e-9);
206 fail_unless(fabs((G->getRadius().getRelativeValue() - 21.21) / 21.21) < 1e-9);
207 fail_unless(fabs((G->getFocalPointX().getAbsoluteValue() - 9.9) / 9.9) < 1e-9);
208 fail_unless(fabs((G->getFocalPointX().getRelativeValue() - 10.10) / 10.10) < 1e-9);
209 fail_unless(fabs((G->getFocalPointY().getAbsoluteValue() - 11.11) / 11.11) < 1e-9);
210 fail_unless(fabs((G->getFocalPointY().getRelativeValue() - 12.12) / 12.12) < 1e-9);
211 fail_unless(G->getFocalPointZ().getAbsoluteValue() < 1e-9);
212 fail_unless(G->getFocalPointZ().getRelativeValue() < 1e-9);
213 }
214 END_TEST
215
216
START_TEST(test_RadialGradient_read)217 START_TEST ( test_RadialGradient_read )
218 {
219 std::string s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
220 "<radialGradient id=\"gradient\">\n"
221 " <stop offset=\"20%\" stop-color=\"#FF0000\"/>\n"
222 " <stop offset=\"80%\" stop-color=\"#0000FF\"/>\n"
223 "</radialGradient>\n"
224 ;
225
226 XMLInputStream* pStream= new XMLInputStream(s.c_str(),false);
227 XMLNode* pNode = new XMLNode(*pStream);
228
229 // required attributes
230 RadialGradient r(*pNode, 4);
231 fail_unless(r.isSetId());
232 fail_unless(r.getId() == "gradient");
233 fail_unless(r.getSpreadMethod() == GradientBase::PAD);
234 fail_unless(r.getNumGradientStops() == 2);
235 fail_unless(r.getGradientStop(0)->getOffset().getAbsoluteValue() < 1e-9);
236 fail_unless(fabs((r.getGradientStop(0)->getOffset().getRelativeValue() - 20.0) / 20.0) < 1e-9);
237 fail_unless(r.getGradientStop(0)->getStopColor() == "#FF0000");
238 fail_unless(r.getGradientStop(1)->getOffset().getAbsoluteValue() < 1e-9);
239 fail_unless(fabs((r.getGradientStop(1)->getOffset().getRelativeValue() - 80.0) / 80.0) < 1e-9);
240 fail_unless(r.getGradientStop(1)->getStopColor() == "#0000FF");
241 // radial gradient attributes
242 fail_unless(r.getCenterX().getAbsoluteValue() < 1e-9);
243 fail_unless(fabs((r.getCenterX().getRelativeValue() - 50.0) / 50.0) < 1e-9);
244 fail_unless(r.getCenterY().getAbsoluteValue() < 1e-9);
245 fail_unless(fabs((r.getCenterY().getRelativeValue() - 50.0) / 50.0) < 1e-9);
246 fail_unless(r.getCenterZ().getAbsoluteValue() < 1e-9);
247 fail_unless(fabs((r.getCenterZ().getRelativeValue() - 50.0) / 50.0) < 1e-9);
248 fail_unless(r.getFocalPointX().getAbsoluteValue() < 1e-9);
249 fail_unless(fabs((r.getFocalPointX().getRelativeValue() - r.getCenterX().getRelativeValue()) / r.getCenterX().getRelativeValue()) < 1e-9);
250 fail_unless(r.getFocalPointY().getAbsoluteValue() < 1e-9);
251 fail_unless(fabs((r.getFocalPointY().getRelativeValue() - r.getCenterY().getRelativeValue()) / r.getCenterY().getRelativeValue()) < 1e-9);
252 fail_unless(r.getFocalPointZ().getAbsoluteValue() < 1e-9);
253 fail_unless(fabs((r.getFocalPointZ().getRelativeValue() - r.getCenterZ().getRelativeValue()) / r.getCenterZ().getRelativeValue()) < 1e-9);
254 fail_unless(r.getRadius().getAbsoluteValue() < 1e-9);
255 fail_unless(fabs((r.getRadius().getRelativeValue() - 50.0) / 50.0) < 1e-9);
256
257 delete pNode;
258 delete pStream;
259
260 s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
261 "<radialGradient id=\"gradient\" spreadMethod=\"reflect\"\n"
262 " cx=\"3.0\" cy=\"4.0\" cz=\"5.0\"\n"
263 " fx=\"6.0\" fy=\"7.0\" fz=\"8.0\" r=\"9.0\">\n"
264 " <stop offset=\"20%\" stop-color=\"#FF0000\"/>\n"
265 " <stop offset=\"80%\" stop-color=\"#0000FF\"/>\n"
266 "</radialGradient>\n"
267 ;
268
269 pStream= new XMLInputStream(s.c_str(),false);
270 pNode = new XMLNode(*pStream);
271
272 // optional attributes
273 r = RadialGradient(*pNode, 4);
274 fail_unless(r.isSetId());
275 fail_unless(r.getId() == "gradient");
276 fail_unless(r.getSpreadMethod() == GradientBase::REFLECT);
277 fail_unless(r.getNumGradientStops() == 2);
278 fail_unless(r.getGradientStop(0)->getOffset().getAbsoluteValue() < 1e-9);
279 fail_unless(fabs((r.getGradientStop(0)->getOffset().getRelativeValue() - 20.0) / 20.0) < 1e-9);
280 fail_unless(r.getGradientStop(0)->getStopColor() == "#FF0000");
281 fail_unless(r.getGradientStop(1)->getOffset().getAbsoluteValue() < 1e-9);
282 fail_unless(fabs((r.getGradientStop(1)->getOffset().getRelativeValue() - 80.0) / 80.0) < 1e-9);
283 fail_unless(r.getGradientStop(1)->getStopColor() == "#0000FF");
284 // radial gradient attributes
285 fail_unless(fabs((r.getCenterX().getAbsoluteValue() - 3.0) / 3.0) < 1e-9);
286 fail_unless(r.getCenterX().getRelativeValue() < 1e-9);
287 fail_unless(fabs((r.getCenterY().getAbsoluteValue() - 4.0) / 4.0) < 1e-9);
288 fail_unless(r.getCenterY().getRelativeValue() < 1e-9);
289 fail_unless(fabs((r.getCenterZ().getAbsoluteValue() - 5.0) / 5.0) < 1e-9);
290 fail_unless(r.getCenterZ().getRelativeValue() < 1e-9);
291 fail_unless(fabs((r.getFocalPointX().getAbsoluteValue() - 6.0) / 6.0) < 1e-9);
292 fail_unless(r.getFocalPointX().getRelativeValue() < 1e-9);
293 fail_unless(fabs((r.getFocalPointY().getAbsoluteValue() - 7.0) / 7.0) < 1e-9);
294 fail_unless(r.getFocalPointY().getRelativeValue() < 1e-9);
295 fail_unless(fabs((r.getFocalPointZ().getAbsoluteValue() - 8.0) / 8.0) < 1e-9);
296 fail_unless(r.getFocalPointZ().getRelativeValue() < 1e-9);
297 fail_unless(fabs((r.getRadius().getAbsoluteValue() - 9.0) / 9.0) < 1e-9);
298 fail_unless(r.getRadius().getRelativeValue() < 1e-9);
299
300 delete pNode;
301 delete pStream;
302
303
304 s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
305 "<radialGradient id=\"gradient\" spreadMethod=\"reflect\"\n"
306 " cx=\"3.0\" cy=\"4.0\" cz=\"5.0\" r=\"9.0\">\n"
307 " <stop offset=\"20%\" stop-color=\"#FF0000\"/>\n"
308 " <stop offset=\"80%\" stop-color=\"#0000FF\"/>\n"
309 "</radialGradient>\n"
310 ;
311
312 pStream= new XMLInputStream(s.c_str(),false);
313 pNode = new XMLNode(*pStream);
314
315 // optional focal point attributes
316 r = RadialGradient(*pNode, 4);
317 fail_unless(r.isSetId());
318 fail_unless(r.getId() == "gradient");
319 fail_unless(r.getSpreadMethod() == GradientBase::REFLECT);
320 fail_unless(r.getNumGradientStops() == 2);
321 fail_unless(r.getGradientStop(0)->getOffset().getAbsoluteValue() < 1e-9);
322 fail_unless(fabs((r.getGradientStop(0)->getOffset().getRelativeValue() - 20.0) / 20.0) < 1e-9);
323 fail_unless(r.getGradientStop(0)->getStopColor() == "#FF0000");
324 fail_unless(r.getGradientStop(1)->getOffset().getAbsoluteValue() < 1e-9);
325 fail_unless(fabs((r.getGradientStop(1)->getOffset().getRelativeValue() - 80.0) / 80.0) < 1e-9);
326 fail_unless(r.getGradientStop(1)->getStopColor() == "#0000FF");
327 // radial gradient attributes
328 fail_unless(fabs((r.getCenterX().getAbsoluteValue() - 3.0) / 3.0) < 1e-9);
329 fail_unless(r.getCenterX().getRelativeValue() < 1e-9);
330 fail_unless(fabs((r.getCenterY().getAbsoluteValue() - 4.0) / 4.0) < 1e-9);
331 fail_unless(r.getCenterY().getRelativeValue() < 1e-9);
332 fail_unless(fabs((r.getCenterZ().getAbsoluteValue() - 5.0) / 5.0) < 1e-9);
333 fail_unless(r.getCenterZ().getRelativeValue() < 1e-9);
334 fail_unless(fabs((r.getFocalPointX().getAbsoluteValue() - r.getCenterX().getAbsoluteValue()) / r.getCenterX().getAbsoluteValue()) < 1e-9);
335 fail_unless(r.getFocalPointX().getRelativeValue() < 1e-9);
336 fail_unless(fabs((r.getFocalPointY().getAbsoluteValue() - r.getCenterY().getAbsoluteValue()) / r.getCenterY().getAbsoluteValue()) < 1e-9);
337 fail_unless(r.getFocalPointY().getRelativeValue() < 1e-9);
338 fail_unless(fabs((r.getFocalPointZ().getAbsoluteValue() - r.getCenterZ().getAbsoluteValue()) / r.getCenterZ().getAbsoluteValue()) < 1e-9);
339 fail_unless(r.getFocalPointZ().getRelativeValue() < 1e-9);
340 fail_unless(fabs((r.getRadius().getAbsoluteValue() - 9.0) / 9.0) < 1e-9);
341 fail_unless(r.getRadius().getRelativeValue() < 1e-9);
342
343 delete pNode;
344 delete pStream;
345 }
346 END_TEST
347
START_TEST(test_RadialGradient_write)348 START_TEST ( test_RadialGradient_write )
349 {
350 std::string s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
351 "<radialGradient id=\"gradient\">\n"
352 " <stop offset=\"20%\" stop-color=\"#FF0000\"/>\n"
353 " <stop offset=\"80%\" stop-color=\"#0000FF\"/>\n"
354 "</radialGradient>\n"
355 ;
356
357 XMLInputStream* pStream = new XMLInputStream(s.c_str(),false);
358 XMLNode* pNode1 = new XMLNode(*pStream);
359 fail_unless(pNode1 != NULL);
360 RadialGradient* pRG = new RadialGradient(*pNode1, 4);
361 fail_unless(pRG != NULL);
362 // create the XMLNode from the object
363 XMLNode* pNode2 = new XMLNode(pRG->toXML());
364 fail_unless(pNode1 != NULL);
365 // compare the two nodes
366 fail_unless(pNode1->equals(*pNode2, true));
367 delete pNode1;
368 delete pNode2;
369 delete pStream;
370 delete pRG;
371
372 s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
373 "<radialGradient id=\"gradient\" spreadMethod=\"reflect\"\n"
374 " cx=\"3\" cy=\"4\" cz=\"5\"\n"
375 " fx=\"6\" fy=\"7\" fz=\"8\" r=\"9\">\n"
376 " <stop offset=\"20%\" stop-color=\"#ff0000\"/>\n"
377 " <stop offset=\"80%\" stop-color=\"#0000ff\"/>\n"
378 "</radialGradient>\n"
379 ;
380
381 pStream = new XMLInputStream(s.c_str(),false);
382 pNode1 = new XMLNode(*pStream);
383 fail_unless(pNode1 != NULL);
384 pRG = new RadialGradient(*pNode1, 4);
385 fail_unless(pRG != NULL);
386 // create the XMLNode from the object
387 pNode2 = new XMLNode(pRG->toXML());
388 fail_unless(pNode1 != NULL);
389 // compare the two nodes
390 fail_unless(pNode1->equals(*pNode2, true));
391 delete pNode1;
392 delete pNode2;
393 delete pStream;
394 delete pRG;
395
396 s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
397 "<radialGradient id=\"gradient\" spreadMethod=\"reflect\"\n"
398 " cx=\"3\" cy=\"4\" cz=\"5\" r=\"9\">\n"
399 " <stop offset=\"20%\" stop-color=\"#ff0000\"/>\n"
400 " <stop offset=\"80%\" stop-color=\"#0000ff\"/>\n"
401 "</radialGradient>\n"
402 ;
403
404 pStream = new XMLInputStream(s.c_str(),false);
405 pNode1 = new XMLNode(*pStream);
406 fail_unless(pNode1 != NULL);
407 pRG = new RadialGradient(*pNode1, 4);
408 fail_unless(pRG != NULL);
409 // create the XMLNode from the object
410 pNode2 = new XMLNode(pRG->toXML());
411 fail_unless(pNode1 != NULL);
412 // compare the two nodes
413 fail_unless(pNode1->equals(*pNode2, true));
414 delete pNode1;
415 delete pNode2;
416 delete pStream;
417 delete pRG;
418
419 }
420 END_TEST
421
422 Suite *
create_suite_RadialGradient(void)423 create_suite_RadialGradient (void)
424 {
425 Suite *suite = suite_create("RadialGradient");
426 TCase *tcase = tcase_create("RadialGradient");
427
428
429 tcase_add_checked_fixture( tcase,
430 RadialGradientTest_setup,
431 RadialGradientTest_teardown );
432
433 tcase_add_test( tcase, test_RadialGradient_setters );
434 tcase_add_test( tcase, test_RadialGradient_read );
435 tcase_add_test( tcase, test_RadialGradient_write );
436
437 suite_add_tcase(suite, tcase);
438
439 return suite;
440 }
441
442 END_C_DECLS
443