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