def testUseUsesTheShaderProgram(self, mockGl): program = ShaderProgram() program.getLinkStatus = lambda: True program.use() self.assertEquals(mockGl.glUseProgram.call_args, ((program.id,), {}))
def testUseRaisesOnLinkFailure(self): program = ShaderProgram() program.getLinkStatus = lambda: False program.getInfoLog = lambda: 'linkerror' try: program.use() self.fail('should raise') except LinkError, e: self.assertTrue('linkerror' in str(e))
def testUseCreatesProgram(self, mockGl): mockGl.glCreateProgram.return_value = 123 program = ShaderProgram() program.getLinkStatus = lambda: True program.use() self.assertTrue(mockGl.glCreateProgram.called) self.assertEquals(program.id, 123)
def testUseReturnsConcatenatedMessages(self): shader1 = Mock() shader2 = Mock() shader1.getInfoLog = lambda: 's1' shader2.getInfoLog = lambda: 's2' program = ShaderProgram(shader1, shader2) program.getInfoLog = lambda: 'p0' program.getLinkStatus = lambda: True message = program.use() self.assertEquals(message, 's1\ns2\np0')
def testGetLinkStatus(self): data = [ (gl.GL_TRUE, True), (gl.GL_FALSE, False), ] for getReturn, expected in data: program = ShaderProgram() program._get = Mock(return_value=getReturn) actual = program.getLinkStatus() self.assertEquals(program._get.call_args, ((gl.GL_LINK_STATUS,), {})) self.assertEquals(actual, expected) self.assertEquals(type(actual), type(expected))
def testUseCompilesAndAttachesShaders(self, mockGl): shader1 = Mock() shader2 = Mock() program = ShaderProgram(shader1, shader2) program.id = 123 program._getMessage = DoNothing program.getLinkStatus = lambda: True program.use() self.assertEquals(shader1.compile.call_args, (tuple(), {})) self.assertEquals(shader2.compile.call_args, (tuple(), {})) self.assertEquals(mockGl.glAttachShader.call_args_list, [ ((program.id, shader1.id), {}), ((program.id, shader2.id), {}), ])