1 // This may look like C code, but it is really -*- C++ -*-
2 //
3 // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003
4 //
5 // Tests for setting/getting Magick::Image attributes
6 //
7
8 #include <Magick++.h>
9 #include <string>
10 #include <iostream>
11
12 using namespace std;
13
14 using namespace Magick;
15
main(int,char ** argv)16 int main( int /*argc*/, char ** argv)
17 {
18
19 // Initialize ImageMagick install location for Windows
20 InitializeMagick(*argv);
21
22 volatile int failures=0;
23
24 try {
25
26 size_t columns = 640;
27 size_t rows = 480;
28 Geometry geometry(columns,rows);
29 Color canvasColor( "red" );
30 Image image( geometry, canvasColor);
31
32 //
33 // antiAlias
34 //
35
36 // Test default value
37 if ( image.textAntiAlias() != true )
38 {
39 ++failures;
40 cout << "Line: " << __LINE__ << ", textAntiAlias default not true" << endl;
41 }
42
43 // Test setting false
44 image.textAntiAlias( false );
45 if ( image.textAntiAlias() != false )
46 {
47 ++failures;
48 cout << "Line: " << __LINE__ << ", textAntiAlias not false" << endl;
49 }
50
51 // Test setting true
52 image.textAntiAlias( true );
53 if ( image.textAntiAlias() != true )
54 {
55 ++failures;
56 cout << "Line: " << __LINE__ << ", textAntiAlias not true" << endl;
57 }
58
59 //
60 // adjoin
61 //
62
63 // Test default value
64 if ( image.adjoin() != true )
65 {
66 ++failures;
67 cout << "Line: " << __LINE__
68 << ", adjoin default not 'true' as expected" << endl;
69 }
70
71 // Test setting false
72 image.adjoin( false );
73 if ( image.adjoin() != false )
74 {
75 ++failures;
76 cout << "Line: " << __LINE__ << ", adjoin failed set to 'false'" << endl;
77 }
78
79 // Test setting true
80 image.adjoin( true );
81 if ( image.adjoin() != true )
82 {
83 ++failures;
84 cout << "Line: " << __LINE__ << ", adjoin failed set to 'true'" << endl;
85 }
86
87 //
88 // animationDelay
89 //
90
91 // Test default value
92 if ( image.animationDelay() != 0 )
93 {
94 ++failures;
95 cout << "Line: " << __LINE__ << ", animationDelay default ("
96 << image.animationDelay()
97 << ") not 0 as expected" << endl;
98 }
99
100 // Test setting to 0
101 image.animationDelay( 0 );
102 if ( image.animationDelay() != 0 )
103 {
104 ++failures;
105 cout << "Line: " << __LINE__
106 << ", failed to set animationDelay to 0" << endl;
107 }
108
109 // Test setting to 100
110 image.animationDelay( 100 );
111 if ( image.animationDelay() != 100 )
112 {
113 ++failures;
114 cout << "Line: " << __LINE__
115 << ", failed to set animationDelay to 100" << endl;
116 }
117 image.animationDelay(0);
118
119 //
120 // animationIterations
121 //
122
123 // Test default value
124 if ( image.animationIterations() != 0 )
125 {
126 ++failures;
127 cout << "Line: " << __LINE__
128 << ", animationIterations default ("
129 << image.animationIterations()
130 << ") not 0 as expected" << endl;
131 }
132
133 // Test setting to 0
134 image.animationIterations( 0 );
135 if ( image.animationIterations() != 0 )
136 {
137 ++failures;
138 cout << "Line: " << __LINE__
139 << ", failed to set animationIterations to 0" << endl;
140 }
141
142 // Test setting to 100
143 image.animationIterations( 100 );
144 if ( image.animationIterations() != 100 )
145 {
146 ++failures;
147 cout << "Line: " << __LINE__
148 << ", failed to set animationIterations to 100" << endl;
149 }
150 image.animationIterations( 0 );
151
152 //
153 // backgroundColor
154 //
155
156 // Test default value.
157 if ( image.backgroundColor() != string(ColorRGB("white")) )
158 {
159 ++failures;
160 cout << "Line: " << __LINE__ << ", backgroundColor default ("
161 << string(image.backgroundColor())
162 << ") is incorrect" << endl;
163 }
164
165 // Test setting to blue
166 image.backgroundColor("blue");
167 if ( !image.backgroundColor().isValid() )
168 {
169 ++failures;
170 cout << "Line: " << __LINE__ << ", backgroundColor ("
171 << string(image.backgroundColor())
172 << ") failed set to 'blue'" << endl;
173 }
174 else
175 if ( string(image.backgroundColor()) != "#0000FF" &&
176 string(image.backgroundColor()) != "#00000000FFFF" &&
177 string(image.backgroundColor()) != "#0000000000000000FFFFFFFF" )
178 {
179 ++failures;
180 cout << "Line: " << __LINE__ << ", backgroundColor ("
181 << string(image.backgroundColor()) << ") is incorrect"
182 << endl;
183 }
184
185 // Test setting using hex color
186 image.backgroundColor("#00AAFF");
187 if ( !image.backgroundColor().isValid() )
188 {
189 ++failures;
190 cout << "Line: " << __LINE__ << ", backgroundColor ("
191 << string(image.backgroundColor())
192 << ") is incorrectly invalid" << endl;
193 }
194 else
195 if ( string(image.backgroundColor()) != "#00AAFF" &&
196 string(image.backgroundColor()) != "#0000AAAAFFFF" &&
197 string(image.backgroundColor()) != "#00000000AAAAAAAAFFFFFFFF" )
198 {
199 ++failures;
200 cout << "Line: " << __LINE__
201 << ", backgroundColor ("
202 << string(image.backgroundColor())
203 << ") is incorrect"
204 << endl;
205 }
206
207 //
208 // backgroundTexture
209 //
210
211 // Test default value
212 if ( image.backgroundTexture() != "" )
213 {
214 ++failures;
215 cout << "Line: " << __LINE__ << ", backgroundTexture default ("
216 << image.backgroundTexture()
217 << ") is incorrect" << endl;
218 }
219
220 // Test setting/getting value
221 image.backgroundTexture("afile.jpg");
222 if ( image.backgroundTexture() != "afile.jpg" )
223 {
224 ++failures;
225 cout << "Line: " << __LINE__ << ", backgroundTexture ("
226 << image.backgroundTexture()
227 << ") is incorrect" << endl;
228 }
229
230 // Test setting back to default
231 image.backgroundTexture("");
232 if ( image.backgroundTexture() != "" )
233 {
234 ++failures;
235 cout << "Line: " << __LINE__
236 << ", backgroundTexture ("
237 << image.backgroundTexture()
238 << ") failed to set to \"\"" << endl;
239 }
240
241 //
242 // baseColumns
243 //
244 if ( image.baseColumns() != columns )
245 {
246 ++failures;
247 cout << "Line: " << __LINE__
248 << ", baseColumns ("
249 << image.baseColumns()
250 << ") is not equal to "
251 << columns
252 << " as expected"
253 << endl;
254 }
255
256
257 //
258 // baseFilename
259 //
260 // Base filename is color for xc images
261 if ( image.baseFilename() != "xc:#FF0000" &&
262 image.baseFilename() != "xc:#FFFF00000000" &&
263 image.baseFilename() != "xc:#FFFFFFFF0000000000000000")
264 {
265 ++failures;
266 cout << "Line: " << __LINE__
267 << ", baseFilename ("
268 << image.baseFilename()
269 << ") is incorrect"
270 << endl;
271 }
272
273 //
274 // baseRows
275 //
276 if ( image.baseRows() != rows )
277 {
278 ++failures;
279 cout << "Line: " << __LINE__
280 << ", baseRows ("
281 << image.baseRows()
282 << ") != rows ("
283 << rows
284 << ")"
285 << endl;
286 }
287
288 //
289 // borderColor
290 //
291 if ( image.borderColor() != ColorRGB("#dfdfdf") )
292 {
293 ++failures;
294 cout << "Line: " << __LINE__
295 << ", borderColor default ("
296 << string(image.borderColor())
297 << ") is incorrect" << endl;
298 }
299
300 image.borderColor("#FF0000");
301 if ( image.borderColor() != Color("#FF0000") )
302 {
303 ++failures;
304 cout << "Line: " << __LINE__
305 << ", failed to set borderColor ("
306 << string(image.borderColor())
307 << ")" << endl;
308 }
309
310 image.borderColor("black");
311 if ( image.borderColor() != Color("#000000") )
312 {
313 ++failures;
314 cout << "Line: " << __LINE__
315 << ", failed to set borderColor ("
316 << string(image.borderColor())
317 << ")"
318 << endl;
319 }
320
321 //
322 // boxColor
323 //
324 image.boxColor("#FF0000");
325 if ( image.boxColor() != Color("#FF0000") )
326 {
327 ++failures;
328 cout << "Line: " << __LINE__
329 << ", failed to set boxColor ("
330 << string(image.boxColor())
331 << ")"
332 << endl;
333 }
334
335 image.boxColor("black");
336 if ( image.boxColor() != Color("#000000") )
337 {
338 ++failures;
339 cout << "Line: " << __LINE__
340 << ", failed to set boxColor ("
341 << string(image.boxColor())
342 << ") to #000000"
343 << endl;
344 }
345
346 //
347 // chromaBluePrimary
348 //
349 {
350 // Test default setting
351 double x, y, z;
352 image.chromaBluePrimary(&x, &y, &z);
353 if ( x == 0.0f || y == 0.0f )
354 {
355 ++failures;
356 cout << "Line: " << __LINE__
357 << ", chromaBluePrimary x/y defaults are zero"
358 << endl;
359 }
360
361 // Test set/get
362 image.chromaBluePrimary(50, 100, 150 );
363 image.chromaBluePrimary(&x, &y, &z);
364 if ( x != 50 || y != 100 || z != 150 )
365 {
366 ++failures;
367 cout << "Line: " << __LINE__
368 << ", chromaBluePrimary x/y failed set/get" << endl;
369 }
370 }
371
372 //
373 // chromaGreenPrimary
374 //
375 {
376 // Test default setting
377 double x, y, z;
378 image.chromaGreenPrimary(&x, &y, &z);
379 if ( x == 0.0f || y == 0.0f )
380 {
381 ++failures;
382 cout << "Line: " << __LINE__
383 << ", chromaGreenPrimary x/y defaults are zero" << endl;
384 }
385
386 // Test set/get
387 image.chromaGreenPrimary(50, 100, 150);
388 image.chromaGreenPrimary(&x, &y, &z);
389 if (x != 50 || y != 100 || z != 150)
390 {
391 ++failures;
392 cout << "Line: " << __LINE__
393 << ", chromaGreenPrimary x/y failed set/get" << endl;
394 }
395 }
396
397 //
398 // chromaRedPrimary
399 //
400 {
401 // Test default setting
402 double x, y, z;
403 image.chromaRedPrimary(&x, &y, &z);
404 if ( x == 0.0f || y == 0.0f )
405 {
406 ++failures;
407 cout << "Line: " << __LINE__
408 << ", chromaRedPrimary x/y defaults are zero" << endl;
409 }
410
411 // Test set/get
412 image.chromaRedPrimary(50, 100, 150);
413 image.chromaRedPrimary(&x, &y, &z);
414 if (x != 50 || y != 100 || z != 150)
415 {
416 ++failures;
417 cout << "Line: " << __LINE__
418 << ", chromaRedPrimary x/y failed set/get" << endl;
419 }
420 }
421
422 //
423 // chromaWhitePoint
424 //
425 {
426 // Test default setting
427 double x, y, z;
428 image.chromaWhitePoint(&x, &y, &z);
429 if ( x == 0.0f || y == 0.0f )
430 {
431 ++failures;
432 cout << "Line: " << __LINE__
433 << ", chromaWhitePoint x/y defaults are zero" << endl;
434 }
435
436 // Test set/get
437 image.chromaWhitePoint(50, 100, 150);
438 image.chromaWhitePoint(&x, &y, &z);
439 if (x != 50 || y != 100 || z != 150)
440 {
441 ++failures;
442 cout << "Line: " << __LINE__
443 << ", chromaWhitePoint x/y failed set/get" << endl;
444 }
445 }
446
447 //
448 // classType
449 //
450 if ( image.classType() != DirectClass )
451 {
452 ++failures;
453 cout << "Line: " << __LINE__ << ", classType is not DirectClass" << endl;
454 }
455
456 //
457 // colorFuzz
458 //
459
460 // Test default
461 if ( image.colorFuzz() != 0 )
462 {
463 ++failures;
464 cout << "Line: " << __LINE__ << ", colorFuzz default is non-zero" << endl;
465 }
466
467 // Test set/get
468 image.colorFuzz( 2 );
469 if ( image.colorFuzz() != 2 )
470 {
471 ++failures;
472 cout << "Line: " << __LINE__ << ", colorFuzz failed to set/get" << endl;
473 }
474 image.colorFuzz( 0 );
475
476 //
477 // columns
478 //
479 if ( image.columns() != columns )
480 {
481 ++failures;
482 cout << "Line: " << __LINE__
483 << ", columns is not equal to canvas image columns" << endl;
484 }
485
486 //
487 // comment
488 //
489 // Test default
490 if ( image.comment().length() != 0 )
491 {
492 ++failures;
493 cout << "Line: " << __LINE__
494 << ", comment default non-zero length" << endl;
495 }
496
497 // Test set/get
498 {
499 std::string comment("This is a comment.");
500 image.comment( comment );
501 if ( image.comment() != comment )
502 {
503 ++failures;
504 cout << "Line: " << __LINE__ << ", comment set/get failed" << endl;
505 }
506 }
507
508 // Test resetting comment
509 image.comment( string() );
510 if ( image.comment().length() != 0 )
511 {
512 ++failures;
513 cout << "Line: " << __LINE__ << ", comment failed to reset" << endl;
514 }
515
516 //
517 // compressType
518 //
519 // Test default
520 if ( image.compressType() != UndefinedCompression )
521 {
522 ++failures;
523 cout << "Line: " << __LINE__
524 << ", compressType default is incorrect" << endl;
525 }
526
527 // Test set/get
528 image.compressType(RLECompression);
529 if ( image.compressType() != RLECompression )
530 {
531 ++failures;
532 cout << "Line: " << __LINE__ << ", compressType set/get failed" << endl;
533 }
534 image.compressType(UndefinedCompression);
535
536 //
537 // density
538 //
539 {
540 // Test defaults
541 if ( image.density() != Point(72) )
542 {
543 ++failures;
544 cout << "Line: " << __LINE__
545 << ", density default is not 72x72 as expected" << endl;
546 }
547
548 // Test set/get
549 Point density(150,75);
550 image.density(density);
551 if ( image.density() != density )
552 {
553 ++failures;
554 cout << "Line: " << __LINE__ << ", density set/get failed" << endl;
555 }
556
557
558 if ( image.xResolution() != 150 ||
559 image.yResolution() != 75 )
560 {
561 ++failures;
562 cout << "Line: " << __LINE__ << ", density set/get failed" << endl;
563 }
564
565 image.density("72x72");
566
567 }
568
569 //
570 // Format specific defines
571 //
572 if (image.defineSet("foo","bar"))
573 {
574 ++failures;
575 cout << "Line: " << __LINE__
576 << ", define for foo:bar incorrectly reports set."
577 << endl;
578 }
579
580 image.defineSet("foo","bar",true);
581 if (!image.defineSet("foo","bar"))
582 {
583 ++failures;
584 cout << "Line: " << __LINE__
585 << ", define for foo:bar incorrectly reports not set."
586 << endl;
587 }
588
589 image.defineSet("foo","bar",false);
590 if (image.defineSet("foo","bar"))
591 {
592 ++failures;
593 cout << "Line: " << __LINE__
594 << ", define for foo:bar incorrectly reports set."
595 << endl;
596 }
597
598 image.defineValue("foo","bar","value");
599 std::string value = image.defineValue("foo","bar");
600 if (image.defineValue("foo","bar") != "value")
601 {
602 ++failures;
603 cout << "Line: " << __LINE__
604 << ", define for foo:bar incorrectly reports value \""
605 << value << "\""
606 << endl;
607 }
608
609 image.defineSet("foo","bar",false);
610 if (image.defineSet("foo","bar"))
611 {
612 ++failures;
613 cout << "Line: " << __LINE__
614 << ", define for foo:bar incorrectly reports set."
615 << endl;
616 }
617
618 //
619 // depth
620 //
621 if ( image.depth() != MAGICKCORE_QUANTUM_DEPTH )
622 {
623 ++failures;
624 cout << "Line: " << __LINE__
625 << ", depth ("
626 << image.depth()
627 << ") is not equal to " << MAGICKCORE_QUANTUM_DEPTH << endl;
628 }
629
630 //
631 // Directory
632 //
633 {
634 // Since this is not a montage image, simply verify error report
635 bool caughtException = false;
636 cout << "Testing throwing and catching exceptions. A program crash or a message" << endl
637 << "that the exception was not caught indicates a test failure. A properly" << endl
638 << "formatted exception message indicates success:" << endl;
639 try
640 {
641 //image.directory();
642 Magick::Image bad_image("foo");
643 }
644 catch ( Exception &exception_)
645 {
646 cout << "Caught exception, good!:" << endl
647 << " \"" << exception_.what() << "\"" << endl;
648 caughtException = true;
649 }
650 if ( caughtException != true )
651 {
652 ++failures;
653 cout << "failed to catch exception!" << endl;
654 }
655 }
656
657 //
658 // fileName
659 //
660 // Test default
661 if ( image.fileName() != string("xc:") + string(canvasColor) )
662 {
663 ++failures;
664 cout << "Line: "
665 << __LINE__
666 << ", fileName ("
667 << image.fileName()
668 << ") is not canvas color ("
669 << string(canvasColor)
670 <<") as expected" << endl;
671 }
672
673 // Set/get value
674 image.fileName("filename.jpg");
675 if ( image.fileName() != "filename.jpg" )
676 {
677 ++failures;
678 cout << "Line: "
679 << __LINE__
680 << ", fileName ("
681 << image.fileName()
682 << ") failed to set/get" << endl;
683 }
684 image.fileName(canvasColor);
685
686 //
687 // fileSize
688 //
689 // Test default
690 if ( image.fileSize() != 0 )
691 {
692 ++failures;
693 cout << "Line: " << __LINE__ << ", fileSize ("
694 << static_cast<ssize_t>(image.fileSize())
695 << ") is not zero as expected" << endl;
696 }
697
698 //
699 // filterType
700 //
701 // Test default
702 if ( image.filterType() != UndefinedFilter )
703 {
704 ++failures;
705 cout << "Line: " << __LINE__
706 << ", filterType default ("
707 << (int)image.filterType()
708 << ") is incorrect" << endl;
709 }
710
711 // Test set/get
712 image.filterType( TriangleFilter );
713 if ( image.filterType() != TriangleFilter )
714 {
715 ++failures;
716 cout << "Line: " << __LINE__ << ", filterType set/get failed"
717 << endl;
718 }
719
720 //
721 // font
722 //
723
724 // Test set/get
725 image.font("helvetica");
726 if ( image.font() != "helvetica" )
727 {
728 ++failures;
729 cout << "Line: " << __LINE__ << ", font set/get failed" << endl;
730 }
731 // Test set to null font
732 image.font( string() );
733 if ( image.font().length() != 0 )
734 {
735 ++failures;
736 cout << "Line: " << __LINE__ << ", font failed to unset" << endl;
737 }
738
739 //
740 // fontPointsize
741 //
742 // Test default
743 if ( image.fontPointsize() != 0 )
744 {
745 ++failures;
746 cout << "Line: " << __LINE__
747 << ", fontPointsize ("
748 << image.fontPointsize()
749 << ") is not default of 0 as expected"
750 << endl;
751 }
752
753 // Test set/get
754 image.fontPointsize(10);
755 if ( image.fontPointsize() != 10 )
756 {
757 ++failures;
758 cout << "Line: " << __LINE__
759 << ", fontPointsize set/get failed" << endl;
760 }
761 image.fontPointsize(12);
762
763 //
764 // format
765 //
766 if ( image.format() != "Constant image uniform color" )
767 {
768 ++failures;
769 cout << "Line: " << __LINE__
770 << ", format (" << image.format() << ") is not expected value" << endl;
771 }
772
773 //
774 // gamma
775 //
776 if ( image.gamma() == 1.0f)
777 {
778 ++failures;
779 cout << "Line: " << __LINE__
780 << ", gamma correction is unity as expected" << endl;
781 }
782
783 //
784 // geometry
785 //
786 {
787 bool caughtException = false;
788 try
789 {
790 image.geometry();
791 }
792 catch ( Exception& )
793 {
794 caughtException = true;
795 }
796 if ( caughtException != true )
797 {
798 ++failures;
799 cout << "Line: " << __LINE__
800 << ", geometry failed to report missing image geometry";
801 }
802 }
803
804 //
805 // gifDisposeMethod
806 //
807 // Test default
808 if ( image.gifDisposeMethod() != 0 )
809 {
810 ++failures;
811 cout << "Line: " << __LINE__
812 << ", gifDisposeMethod default is not zero as expected" << endl;
813 }
814
815 // Test set/get
816 image.gifDisposeMethod(BackgroundDispose);
817 if ( image.gifDisposeMethod() != BackgroundDispose )
818 {
819 ++failures;
820 cout << "Line: " << __LINE__
821 << ", gifDisposeMethod set/get failed" << endl;
822 }
823 image.gifDisposeMethod(UndefinedDispose);
824
825 //
826 // interlaceType
827 //
828 // Test default
829 if ( image.interlaceType() != NoInterlace )
830 {
831 ++failures;
832 cout << "Line: " << __LINE__
833 << ", interlaceType default is not NoInterlace as expected" << endl;
834 }
835
836 // Test set/get
837 image.interlaceType( PlaneInterlace );
838 if ( image.interlaceType() != PlaneInterlace )
839 {
840 ++failures;
841 cout << "Line: " << __LINE__ << ", interlaceType set/get failed" << endl;
842 }
843 image.interlaceType(NoInterlace);
844
845 //
846 // label
847 //
848 // Test default
849 if ( image.label().length() != 0 )
850 {
851 ++failures;
852 cout << "Line: " << __LINE__
853 << ", label default is not empty string as expected" << endl;
854 }
855
856 // Test set/get
857 image.label("How now brown cow?");
858 if ( image.label() != "How now brown cow?" )
859 {
860 ++failures;
861 cout << "Line: " << __LINE__ << ", label set/get failed" << endl;
862 }
863 // Test set to default
864 image.label( string() );
865 if ( image.label().length() != 0 )
866 {
867 ++failures;
868 cout << "Line: " << __LINE__ << ", label failed to unset" << endl;
869 }
870
871 //
872 // strokeWidth
873 //
874 // Test default
875 if ( image.strokeWidth() != 1 )
876 {
877 ++failures;
878 cout << "Line: " << __LINE__
879 << ", strokeWidth default is not 1 as expected" << endl;
880 }
881
882 // Test set/get
883 image.strokeWidth(2);
884 if ( image.strokeWidth() != 2 )
885 {
886 ++failures;
887 cout << "Line: " << __LINE__ << ", strokeWidth set/get failed" << endl;
888 }
889 image.strokeWidth(1);
890
891 //
892 // magick
893 //
894 // Test canvas default
895 if ( image.magick() != "XC" )
896 {
897 ++failures;
898 cout << "Line: " << __LINE__
899 << ", magick canvas default is not XC as expected" << endl;
900 }
901
902 // Test set/get
903 image.magick("GIF");
904 if ( image.magick() != "GIF" )
905 {
906 ++failures;
907 cout << "Line: " << __LINE__ << ", magick set/get failed" << endl;
908 }
909
910 image.magick("XC");
911
912 //
913 // alpha
914 //
915 // Test default
916 if ( image.alpha() != false )
917 {
918 ++failures;
919 cout << "Line: " << __LINE__
920 << ", alpha default is not false as expected" << endl;
921 }
922
923 // Test set/get
924 image.alpha(true);
925 if ( image.alpha() != true )
926 {
927 ++failures;
928 cout << "Line: " << __LINE__ << ", alpha set/get failed" << endl;
929 }
930 image.alpha(false);
931
932 //
933 // matteColor
934 //
935 // Test default
936 if ( image.matteColor() != Color("#BDBDBD") )
937 {
938 ++failures;
939 cout << "Line: " << __LINE__
940 << ", matteColor default is not #BDBDBD as expected" << endl;
941 }
942
943 // Test set/get
944 image.matteColor(ColorRGB(0.5,0.5,1));
945 if ( image.matteColor() != ColorRGB(0.5,0.5,1) )
946 {
947 ++failures;
948 cout << "Line: " << __LINE__ << ", matteColor set/get failed" << endl;
949 }
950
951 // Test unset
952 image.matteColor( Color() );
953
954 image.matteColor("#BDBDBD");
955
956 //
957 // meanErrorPerPixel
958 //
959 if ( image.meanErrorPerPixel() != 0 )
960 {
961 ++failures;
962 cout << "Line: " << __LINE__
963 << ", meanErrorPerPixel is not zero as expected" << endl;
964 }
965
966 //
967 // montageGeometry
968 //
969 {
970 bool caughtException = false;
971 try
972 {
973 image.montageGeometry();
974 }
975 catch ( Exception& )
976 {
977 caughtException = true;
978 }
979 if ( caughtException != true )
980 {
981 ++failures;
982 cout << "Line: " << __LINE__
983 << ", montageGeometry failed to report missing montage geometry";
984 }
985 }
986
987 //
988 // monochrome
989 //
990 // Test default
991 if ( image.monochrome() != false )
992 {
993 ++failures;
994 cout << "Line: " << __LINE__
995 << ", monochrome is not false as expected" << endl;
996 }
997
998 // Test set/get
999 image.monochrome(true);
1000 if ( image.monochrome() != true )
1001 {
1002 ++failures;
1003 cout << "Line: " << __LINE__ << ", monochrome get/set failed" << endl;
1004 }
1005 image.monochrome(false);
1006
1007 //
1008 // normalizedMaxError
1009 //
1010 if ( image.normalizedMaxError() != 0 )
1011 {
1012 ++failures;
1013 cout << "Line: " << __LINE__
1014 << ",normalizedMaxError is not zero as expected" << endl;
1015 }
1016
1017 //
1018 // normalizedMeanError
1019 //
1020 if ( image.normalizedMeanError() != 0 )
1021 {
1022 ++failures;
1023 cout << "Line: " << __LINE__
1024 << ", normalizedMeanError is not zero as expected" << endl;
1025 }
1026
1027 //
1028 // strokeColor
1029 //
1030
1031 image.strokeColor(ColorRGB(0.5,0.5,1));
1032 if ( image.strokeColor() != ColorRGB(0.5,0.5,1) )
1033 {
1034 ++failures;
1035 cout << "Line: " << __LINE__ << ", strokeColor ("
1036 << string(image.strokeColor())
1037 << ") set/get failed" << endl;
1038 }
1039
1040
1041 //
1042 // fillColor
1043 //
1044
1045 image.fillColor(ColorRGB(0.5,0.5,1));
1046 if ( image.fillColor() != ColorRGB(0.5,0.5,1) )
1047 {
1048 ++failures;
1049 cout << "Line: " << __LINE__ << ", fillColor ("
1050 << string(image.fillColor())
1051 << ") set/get failed" << endl;
1052 }
1053
1054 //
1055 // pixelColor
1056 //
1057 // Test default
1058 if ( image.pixelColor(40,60) != string(canvasColor) )
1059 {
1060 ++failures;
1061 cout << "Line: " << __LINE__ << ", pixelColor default ("
1062 << string(image.pixelColor(40,60))
1063 << ") is not canvas color ("
1064 << string(canvasColor)
1065 << ") as expected" << endl;
1066 }
1067
1068 // Test set/get
1069 image.pixelColor(40,60, ColorRGB(0.5,1,1));
1070 if ( image.pixelColor(40,60) != ColorRGB(0.5,1,1) )
1071 {
1072 ++failures;
1073 cout << "Line: " << __LINE__ << ", pixelColor set/get failed" << endl;
1074 }
1075
1076 //
1077 // page
1078 //
1079 // Test default
1080 if ( image.page() != Geometry(640,480,0,0) )
1081 {
1082 ++failures;
1083 cout << "Line: " << __LINE__ << ", page default "
1084 << "(" << string(image.page()) << ")"
1085 << " is not 640x480 as expected" << endl;
1086 }
1087
1088 // Test set/get
1089 image.page("letter+43+43>");
1090 if ( image.page() != "612x792+43+43" )
1091 {
1092 ++failures;
1093 cout << "Line: " << __LINE__
1094 << ", page set/get failed (" << string(image.page()) << ")" << endl;
1095 }
1096
1097 //
1098 // quality
1099 //
1100 // Test default
1101 if ( image.quality() != 0 )
1102 {
1103 ++failures;
1104 cout << "Line: " << __LINE__
1105 << ", quality default is not 0 as expected" << endl;
1106 }
1107
1108 // Test set/get
1109 image.quality(65);
1110 if ( image.quality() != 65 )
1111 {
1112 ++failures;
1113 cout << "Line: " << __LINE__ << ", quality set/get failed" << endl;
1114 }
1115 image.quality(0);
1116
1117 //
1118 // quantizeColors
1119 //
1120 // Test default
1121 if ( image.quantizeColors() != 256 )
1122 {
1123 ++failures;
1124 cout << "Line: " << __LINE__
1125 << ", quantizeColors is not 256 as expected" << endl;
1126 }
1127
1128 // Test set/get
1129 image.quantizeColors(200);
1130 if ( image.quantizeColors() != 200 )
1131 {
1132 ++failures;
1133 cout << "Line: " << __LINE__ << ", quantizeColors set/get failed" << endl;
1134 }
1135 image.quantizeColors(0);
1136
1137 //
1138 // quantizeColorSpace
1139 //
1140 // Test default
1141 if ( image.quantizeColorSpace() != UndefinedColorspace )
1142 {
1143 ++failures;
1144 cout << "Line: " << __LINE__
1145 << ", quantizeColorSpace is not RGBColorspace as expected" << endl;
1146 }
1147
1148 // Test set/get
1149 image.quantizeColorSpace(YIQColorspace);
1150 if ( image.quantizeColorSpace() != YIQColorspace )
1151 {
1152 ++failures;
1153 cout << "Line: " << __LINE__
1154 << ", quantizeColorSpace set/get failed" << endl;
1155 }
1156 image.quantizeColorSpace(RGBColorspace);
1157
1158 //
1159 // quantizeDither
1160 //
1161 // Test default
1162 if ( image.quantizeDither() == false )
1163 {
1164 ++failures;
1165 cout << "Line: " << __LINE__
1166 << ", quantizeDither is not false as expected" << endl;
1167 }
1168
1169 // Test set/get
1170 image.quantizeDither(false);
1171 if ( image.quantizeDither() != false )
1172 {
1173 ++failures;
1174 cout << "Line: " << __LINE__
1175 << ", quantizeDither get/set failed" << endl;
1176 }
1177 image.quantizeDither(true);
1178
1179 //
1180 // quantizeTreeDepth
1181 //
1182 if ( image.quantizeTreeDepth() != 0 )
1183 {
1184 ++failures;
1185 cout << "Line: " << __LINE__ << ", quantizeTreeDepth default is "
1186 << image.quantizeTreeDepth()
1187 << " rather than zero as expected" << endl;
1188 }
1189
1190 image.quantizeTreeDepth(7);
1191 if ( image.quantizeTreeDepth() != 7 )
1192 {
1193 ++failures;
1194 cout << "Line: " << __LINE__
1195 << ", quantizeTreeDepth set/get failed" << endl;
1196 }
1197 image.quantizeTreeDepth(8);
1198
1199 //
1200 // renderingIntent
1201 //
1202 if ( image.renderingIntent() == UndefinedIntent )
1203 {
1204 ++failures;
1205 cout << "Line: " << __LINE__
1206 << ", renderingIntent default is UndefinedIntent as expected"
1207 << endl;
1208 }
1209
1210 image.renderingIntent(PerceptualIntent);
1211 if ( image.renderingIntent() != PerceptualIntent )
1212 {
1213 ++failures;
1214 cout << "Line: " << __LINE__
1215 << ", renderingIntent set/get failed" << endl;
1216 }
1217 image.renderingIntent(UndefinedIntent);
1218
1219 //
1220 // resolutionUnits
1221 //
1222 if ( image.resolutionUnits() != UndefinedResolution )
1223 {
1224 ++failures;
1225 cout << "Line: " << __LINE__
1226 << ", resolutionUnits default is not UndefinedResolution as expected"
1227 << endl;
1228 }
1229
1230 image.resolutionUnits(PixelsPerCentimeterResolution);
1231 if ( image.resolutionUnits() != PixelsPerCentimeterResolution )
1232 {
1233 ++failures;
1234 cout << "Line: " << __LINE__
1235 << ", resolutionUnits set/get failed" << endl;
1236 }
1237 image.resolutionUnits(UndefinedResolution);
1238
1239 //
1240 // rows
1241 //
1242 if ( image.rows() != rows )
1243 {
1244 ++failures;
1245 cout << "Line: " << __LINE__
1246 << ", rows is canvas rows as expected" << endl;
1247 }
1248
1249 //
1250 // scene
1251 //
1252 if ( image.scene() != 0 )
1253 {
1254 ++failures;
1255 cout << "Line: " << __LINE__
1256 << ", scene default is not zero as expected" << endl;
1257 }
1258
1259 image.scene(5);
1260 if ( image.scene() != 5 )
1261 {
1262 ++failures;
1263 cout << "Line: " << __LINE__
1264 << ", scene set/get failed" << endl;
1265 }
1266 image.scene(0);
1267
1268 //
1269 // signature
1270 //
1271
1272 if ( image.signature() != "146366a0f4150adc7b28f4f5da750ec2ca2c50ff8b14f894ce1e4d7d4058f465" &&
1273 image.signature() != "b89bff8473dd6fe2302bcfd365e7d20daf7bd97ad667fe42d1a87469fce0d138" &&
1274 image.signature() != "5caa527c00cf9e59345de4aaef4f0c2312d1955c2f391ccafa98f8e11370e6e0" &&
1275 image.signature() != "b891ddb1d32cd45c6329180e5bd733eebb8dd06c401a9c721841ec43e4a662f8")
1276 {
1277 ++failures;
1278 cout << "Line: " << __LINE__ << ", signature ("
1279 << image.signature()
1280 << ") is incorrect" << endl;
1281 image.display();
1282 }
1283
1284 //
1285 // size
1286 //
1287 if ( image.size() != geometry )
1288 {
1289 ++failures;
1290 cout << "Line: " << __LINE__ << ", size ("
1291 << string(image.size())
1292 << ") is not equal to geometry ("
1293 << string(geometry)
1294 << ")"
1295 << endl;
1296 }
1297
1298 image.size("800x600");
1299 if ( image.size() != Geometry("800x600") )
1300 {
1301 ++failures;
1302 cout << "Line: " << __LINE__ << ", size set/get failed" << endl;
1303 }
1304 image.size( geometry );
1305
1306 //
1307 // subImage
1308 //
1309 if ( image.subImage() != 0 )
1310 {
1311 ++failures;
1312 cout << "Line: " << __LINE__
1313 << ", subImage default is not zero as expected" << endl;
1314 }
1315
1316 image.subImage(5);
1317 if ( image.subImage() != 5 )
1318 {
1319 ++failures;
1320 cout << "Line: " << __LINE__
1321 << ", subImage set/get failed" << endl;
1322 }
1323 image.subImage(0);
1324
1325 //
1326 // subRange
1327 //
1328 if ( image.subRange() != 0 )
1329 {
1330 ++failures;
1331 cout << "Line: " << __LINE__
1332 << ", subRange default is not zero as expected" << endl;
1333 }
1334
1335 image.subRange(5);
1336 if ( image.subRange() != 5 )
1337 {
1338 ++failures;
1339 cout << "Line: " << __LINE__
1340 << ", subRange set/get failed" << endl;
1341 }
1342 image.subRange(0);
1343
1344 //
1345 // totalColors
1346 //
1347 if ( image.totalColors() != 2 )
1348 {
1349 ++failures;
1350 cout << "Line: " << __LINE__ << ", totalColors is " << image.totalColors()
1351 << " rather than 2 as expected" << endl;
1352 }
1353
1354 //
1355 // type
1356 //
1357 image.type(PaletteType);
1358 if ( image.type() != PaletteType )
1359 {
1360 ++failures;
1361 cout << "Line: " << __LINE__
1362 << ", type is not PaletteType as expected. Reported type "
1363 << (int) image.type() << endl;
1364
1365 }
1366
1367 //
1368 // verbose
1369 //
1370 if ( image.verbose() != false )
1371 {
1372 ++failures;
1373 cout << "Line: " << __LINE__
1374 << ", verbose is not false as expected" << endl;
1375 }
1376
1377 //
1378 // x11Display
1379 //
1380 if ( image.x11Display().length() != 0 )
1381 {
1382 ++failures;
1383 cout << "Line: " << __LINE__
1384 << ", x11Display default is not empty string as expected" << endl;
1385 }
1386
1387 image.x11Display(":0.0");
1388 if ( image.x11Display() != ":0.0" )
1389 {
1390 ++failures;
1391 cout << "Line: " << __LINE__
1392 << ", x11Display set/get failed" << endl;
1393 }
1394
1395 image.x11Display( string() );
1396 if ( image.x11Display().length() != 0 )
1397 {
1398 ++failures;
1399 cout << "Line: " << __LINE__
1400 << ", x11Display failed to unset" << endl;
1401 }
1402
1403 //
1404 // xResolution
1405 //
1406 if ( image.xResolution() != 72 )
1407 {
1408 ++failures;
1409 cout << "Line: " << __LINE__
1410 << ", xResolution default (" << image.xResolution()
1411 << ") is not zero as expected" << endl;
1412 }
1413
1414 //
1415 // yResolution
1416 //
1417 if ( image.yResolution() != 72 )
1418 {
1419 ++failures;
1420 cout << "Line: " << __LINE__
1421 << ", yResolution default (" << image.yResolution()
1422 << ") is not zero as expected" << endl;
1423 }
1424 }
1425 catch( Exception &error_ )
1426 {
1427 cout << "Caught exception: " << error_.what() << endl;
1428 return 1;
1429 }
1430 catch( exception &error_ )
1431 {
1432 cout << "Caught exception: " << error_.what() << endl;
1433 return 1;
1434 }
1435
1436 if ( failures )
1437 {
1438 cout << failures << " failures" << endl;
1439 return 1;
1440 }
1441
1442 return 0;
1443 }
1444