Skip to content

Commit f0a8f9f

Browse files
author
Linas Beresna
committed
Include image driver tests in merge tests
1 parent 9c2a2e1 commit f0a8f9f

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

src/IECoreImage/DisplayDriverServer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ IE_CORE_DEFINERUNTIMETYPED( DisplayDriverServer );
7373
namespace
7474
{
7575

76-
static DisplayDriverServer::MergeMap g_mergeMap;
76+
DisplayDriverServer::MergeMap g_mergeMap;
7777

7878
/* Set the FD_CLOEXEC flag for the given socket descriptor, so that it will not exist on child processes.*/
7979
static void fixSocketFlags( int socketDesc )

test/IECoreImage/DisplayDriverServerTest.py

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,20 @@
3434

3535
import unittest
3636
import sys
37+
import os
3738
import imath
3839

3940
import IECore
4041
import IECoreImage
4142

4243
class DisplayDriverServerTest( unittest.TestCase ) :
4344

45+
def __prepareBuf( self, buf, width, offset, red, green, blue ):
46+
for i in range( 0, width ):
47+
buf[3*i] = blue[i+offset]
48+
buf[3*i+1] = green[i+offset]
49+
buf[3*i+2] = red[i+offset]
50+
4451
def testPortNumber( self ) :
4552

4653
s1 = IECoreImage.DisplayDriverServer( 1559 )
@@ -122,22 +129,37 @@ def testPortRangeRegistry( self ) :
122129
def testMergeMap( self ) :
123130
server = IECoreImage.DisplayDriverServer( 45001 )
124131

125-
displayWindow = imath.Box2i( imath.V2i(0,0), imath.V2i(100,100) )
126-
dataWindow = imath.Box2i( imath.V2i(0,0), imath.V2i(100,100) )
132+
img = IECore.Reader.create( os.path.join( "test", "IECoreImage", "data", "tiff", "bluegreen_noise.400x300.tif" ) )()
133+
self.assertEqual( img.keys(), [ 'B', 'G', 'R' ] )
134+
red = img['R']
135+
green = img['G']
136+
blue = img['B']
137+
width = img.dataWindow.max().x - img.dataWindow.min().x + 1
127138

128139
params = IECore.CompoundData()
129140
params['displayHost'] = IECore.StringData('localhost')
130141
params['displayPort'] = IECore.StringData( '45001' )
131142
params['displayDriverServer:mergeId'] = IECore.IntData( 42 )
132143
params['displayDriverServer:mergeClients'] = IECore.IntData( 2 )
133144
params["remoteDisplayType"] = IECore.StringData( "ImageDisplayDriver" )
145+
params["handle"] = IECore.StringData( "myHandle1" )
146+
147+
idd1 = IECoreImage.ClientDisplayDriver( img.displayWindow, img.dataWindow, list( img.channelNames() ), params )
134148

135-
idd1 = IECoreImage.ClientDisplayDriver( displayWindow, dataWindow, list( ["R", "G"] ), params )
136-
idd2 = IECoreImage.ClientDisplayDriver( displayWindow, dataWindow, list( ["R", "G"] ), params )
149+
params["handle"] = IECore.StringData( "myHandle2" )
150+
idd2 = IECoreImage.ClientDisplayDriver( img.displayWindow, img.dataWindow, list( img.channelNames() ), params )
137151

138152
params['displayDriverServer:mergeId'] = IECore.IntData( 666 )
139153
params['displayDriverServer:mergeClients'] = IECore.IntData( 1 )
140-
idd3 = IECoreImage.ClientDisplayDriver( displayWindow, dataWindow, list( ["R", "G"] ), params )
154+
params["handle"] = IECore.StringData( "myHandle3" )
155+
idd3 = IECoreImage.ClientDisplayDriver( img.displayWindow, img.dataWindow, list( img.channelNames() ), params )
156+
157+
buf = IECore.FloatVectorData( width * 3 )
158+
for i in range( 0, img.dataWindow.max().y - img.dataWindow.min().y + 1 ):
159+
self.__prepareBuf( buf, width, i*width, red, green, blue )
160+
idd1.imageData( imath.Box2i( imath.V2i( img.dataWindow.min().x, i + img.dataWindow.min().y ), imath.V2i( img.dataWindow.max().x, i + img.dataWindow.min().y) ), buf )
161+
idd2.imageData( imath.Box2i( imath.V2i( img.dataWindow.min().x, i + img.dataWindow.min().y ), imath.V2i( img.dataWindow.max().x, i + img.dataWindow.min().y) ), buf )
162+
idd3.imageData( imath.Box2i( imath.V2i( img.dataWindow.min().x, i + img.dataWindow.min().y ), imath.V2i( img.dataWindow.max().x, i + img.dataWindow.min().y) ), buf )
141163

142164
# Test that the merge map has merge id 42 and that there are two clients
143165
mergeDriverInfo = IECoreImage.DisplayDriverServer.getMergeDriverInfo( 42 )
@@ -158,6 +180,22 @@ def testMergeMap( self ) :
158180

159181
idd3.imageClose()
160182

183+
newImg = IECoreImage.ImageDisplayDriver.removeStoredImage( "myHandle1" )
184+
newImg2 = IECoreImage.ImageDisplayDriver.removeStoredImage( "myHandle2" )
185+
newImg3 = IECoreImage.ImageDisplayDriver.removeStoredImage( "myHandle3" )
186+
187+
# merge drivers share the same display driver - so second image should be none,
188+
# as there is no image drivere associated with it.
189+
self.assertIsNone( newImg2 )
190+
191+
# remove blindData for comparison
192+
newImg.blindData().clear()
193+
img.blindData().clear()
194+
self.assertEqual( newImg, img )
195+
196+
newImg3.blindData().clear()
197+
self.assertEqual( newImg3, img )
198+
161199
server = None
162200

163201
if __name__ == "__main__":

0 commit comments

Comments
 (0)