1 #include<test_HYDROData_Image.h>
3 #include <HYDROData_Document.h>
4 #include <HYDROData_Image.h>
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);
18 void test_HYDROData_Image::testQImage()
20 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
22 Handle(HYDROData_Image) anImage =
23 Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
25 QImage anEmpty = anImage->Image();
26 CPPUNIT_ASSERT(anEmpty.isNull());
28 // prepare Qt Image for testing
29 QImage aPic(TestImage());
30 anImage->SetImage(aPic);
31 QImage aRestored = anImage->Image();
33 CPPUNIT_ASSERT(!aRestored.isNull());
34 //aRestored.save("pic2.bmp");
35 CPPUNIT_ASSERT(aPic == aRestored);
40 void test_HYDROData_Image::testTrsf()
42 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
44 Handle(HYDROData_Image) anImage =
45 Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
47 QTransform anEmpty = anImage->Trsf();
48 CPPUNIT_ASSERT(anEmpty.isIdentity());
50 // prepare Qt transformation for testing
52 aTrsf.translate(50, 50);
54 aTrsf.scale(0.5, 1.0);
56 anImage->SetTrsf(aTrsf);
57 QTransform aRestored = anImage->Trsf();
59 CPPUNIT_ASSERT(!aRestored.isIdentity());
60 CPPUNIT_ASSERT(aTrsf == aRestored);
65 void test_HYDROData_Image::testReferences()
67 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
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));
76 // check initially there is no references
77 CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 0);
80 anImage3->AppendReference(anImage1);
81 CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
82 CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage1));
85 anImage3->ChangeReference(0, anImage2);
86 CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
87 CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage2));
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));
96 anImage3->RemoveReference(0);
97 CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 1);
98 CPPUNIT_ASSERT(IsEqual(anImage3->Reference(0), anImage1));
101 anImage3->RemoveReference(0);
102 CPPUNIT_ASSERT_EQUAL(anImage3->NbReferences(), 0);
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);
116 void test_HYDROData_Image::testCopy()
118 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
120 Handle(HYDROData_Image) anImage1 =
121 Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
123 anImage1->SetImage(TestImage());
126 aTrsf.translate(50, 50);
128 aTrsf.scale(0.5, 1.0);
129 anImage1->SetTrsf(aTrsf);
131 Handle(HYDROData_Image) anImage2 =
132 Handle(HYDROData_Image)::DownCast(aDoc->CreateObject(KIND_IMAGE));
134 anImage1->AppendReference(anImage2);
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);
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));