Salome HOME
refs #430: incorrect coordinates in dump polyline
[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   // check initially there is no references
77   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 0);
78
79   // append reference
80   anImage3->AppendReference(anImage1);
81   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
82   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage1));
83
84   // change reference
85   anImage3->ChangeReference(0, anImage2);
86   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
87   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage2));
88
89   // append one more reference
90   anImage3->AppendReference(anImage1);
91   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 2);
92   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage2));
93   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(1), anImage1));
94
95   // remove reference
96   anImage3->RemoveReference(0);
97   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
98   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage1));
99
100   // remove reference
101   anImage3->RemoveReference(0);
102   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 0);
103
104   // append two references once again and remove all references
105   anImage3->ChangeReference(0, anImage1);
106   anImage3->ChangeReference(1, anImage2);
107   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 2);
108   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage1));
109   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(1), anImage2));
110   anImage3->ClearReferences();
111   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 0);
112
113   aDoc->Close();
114 }
115
116 void test_HYDROData_Image::testCopy()
117 {
118   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
119
120   Handle(HYDROData_Image) anImage1 = 
121     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
122   // fill image 1
123   anImage1->SetImage(TestImage());
124
125   QTransform aTrsf;
126   aTrsf.translate(50, 50);
127   aTrsf.rotate(45);
128   aTrsf.scale(0.5, 1.0);
129   anImage1->SetTrsf(aTrsf);
130
131   Handle(HYDROData_Image) anImage2 = 
132     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
133
134   anImage1->AppendReference(anImage2);
135
136   // copy image to the new one
137   Handle(HYDROData_Image) anImage3 = 
138     Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
139   anImage1->CopyTo(anImage3);
140
141   // check all fields are correctly copied
142   CPPUNIT_ASSERT(anImage1->Image() == anImage3->Image());
143   CPPUNIT_ASSERT(anImage1->Trsf() == anImage3->Trsf());
144   CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
145   CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage2));
146
147   aDoc->Close();
148 }