Salome HOME
Minor changes.
[modules/hydro.git] / src / HYDROData / test_HYDROData_Image.cxx
1 #include<test_HYDROData_Image.h>
2
3 #include <HYDROData_Document.h>
4 #include <HYDROData_Image.h>
5 #include <QPainter>
6
7 static QImage TestImage() {
8   QImage aPic(50, 40, QImage::Format_RGB32);
9   QPainter aPainter(&aPic);
10   aPainter.drawEllipse(6, 7, 38, 30);
11   aPainter.drawLine(0, 40, 10, 0);
12   aPainter.drawLine(10, 0, 25, 35);
13   aPainter.drawLine(25, 35, 40, 0);
14   aPainter.drawLine(40, 0, 50, 40);
15   return aPic;
16 }
17
18 void test_HYDROData_Image::testQImage()
19 {
20   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
21
22   Handle(HYDROData_Image) anImage = 
23     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
24   // empty image
25   QImage anEmpty = anImage->Image();
26   CPPUNIT_ASSERT(anEmpty.isNull());
27
28   // prepare Qt Image for testing
29   QImage aPic(TestImage());
30   anImage->SetImage(aPic);
31   QImage aRestored = anImage->Image();
32
33   CPPUNIT_ASSERT(!aRestored.isNull());
34   //aRestored.save("pic2.bmp");
35   CPPUNIT_ASSERT(aPic == aRestored);
36
37   aDoc->Close();
38 }
39
40 void test_HYDROData_Image::testTrsf()
41 {
42   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
43
44   Handle(HYDROData_Image) anImage = 
45     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
46   // empty trsf
47   QTransform anEmpty = anImage->Trsf();
48   CPPUNIT_ASSERT(anEmpty.isIdentity());
49
50   // prepare Qt transformation for testing
51   QTransform aTrsf;
52   aTrsf.translate(50, 50);
53   aTrsf.rotate(45);
54   aTrsf.scale(0.5, 1.0);
55
56   anImage->SetTrsf(aTrsf);
57   QTransform aRestored = anImage->Trsf();
58
59   CPPUNIT_ASSERT(!aRestored.isIdentity());
60   CPPUNIT_ASSERT(aTrsf == aRestored);
61
62   aDoc->Close();
63 }
64
65 void test_HYDROData_Image::testReferences()
66 {
67   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
68
69   Handle(HYDROData_Image) anImage1 = 
70     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
71   Handle(HYDROData_Image) anImage2 = 
72     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
73   Handle(HYDROData_Image) anImage3 = 
74     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
75
76   CPPUNIT_ASSERT(anImage1->ID() != anImage2->ID());
77   CPPUNIT_ASSERT(anImage2->ID() != anImage3->ID());
78
79   // check initially there is no references
80   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 0);
81
82   // append reference
83   anImage3->AppendReference(anImage1);
84   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
85   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage1));
86
87   // change reference
88   anImage3->ChangeReference(0, anImage2);
89   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
90   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage2));
91
92   // append one more reference
93   anImage3->AppendReference(anImage1);
94   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 2);
95   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage2));
96   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(1), anImage1));
97
98   // remove reference
99   anImage3->RemoveReference(0);
100   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
101   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage1));
102
103   // remove reference
104   anImage3->RemoveReference(0);
105   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 0);
106
107   // append two references once again and remove all references
108   anImage3->ChangeReference(0, anImage1);
109   anImage3->ChangeReference(1, anImage2);
110   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 2);
111   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage1));
112   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(1), anImage2));
113   anImage3->ClearReferences();
114   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 0);
115
116   aDoc->Close();
117 }
118
119 void test_HYDROData_Image::testCopy()
120 {
121   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
122
123   Handle(HYDROData_Image) anImage1 = 
124     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
125   // fill image 1
126   anImage1->SetImage(TestImage());
127
128   QTransform aTrsf;
129   aTrsf.translate(50, 50);
130   aTrsf.rotate(45);
131   aTrsf.scale(0.5, 1.0);
132   anImage1->SetTrsf(aTrsf);
133
134   Handle(HYDROData_Image) anImage2 = 
135     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
136
137   anImage1->AppendReference(anImage2);
138
139   // copy image to the new one
140   Handle(HYDROData_Image) anImage3 = 
141     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
142   anImage1->CopyTo(anImage3);
143
144   // check all fields are correctly copied
145   CPPUNIT_ASSERT(anImage1->Image() == anImage3->Image());
146   CPPUNIT_ASSERT(anImage1->Trsf() == anImage3->Trsf());
147   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
148   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage2));
149
150   aDoc->Close();
151 }