def test_primitive_be_display(): assert space.objtable["w_display"] is None mock_display = model.W_PointersObject(space, space.w_Point, 4) w_wordbmp = model.W_WordsObject(space, space.w_Array, 10) mock_display.store(space, 0, w_wordbmp) # bitmap mock_display.store(space, 1, space.wrap_int(32)) # width mock_display.store(space, 2, space.wrap_int(10)) # height mock_display.store(space, 3, space.wrap_int(1)) # depth prim(primitives.BE_DISPLAY, [mock_display]) assert space.objtable["w_display"] is mock_display w_bitmap = mock_display.fetch(space, 0) assert w_bitmap is not w_wordbmp assert isinstance(w_bitmap, model_display.W_DisplayBitmap) sdldisplay = w_bitmap.display assert isinstance(sdldisplay, display.SDLDisplay) mock_display2 = model.W_PointersObject(space, space.w_Point, 4) mock_display2.store(space, 0, model.W_WordsObject(space, space.w_Array, 10)) # bitmap mock_display2.store(space, 1, space.wrap_int(32)) # width mock_display2.store(space, 2, space.wrap_int(10)) # height mock_display2.store(space, 3, space.wrap_int(1)) # depth prim(primitives.BE_DISPLAY, [mock_display2]) assert space.objtable["w_display"] is mock_display2 w_bitmap2 = mock_display.fetch(space, 0) assert isinstance(w_bitmap2, model_display.W_DisplayBitmap) assert w_bitmap.display is w_bitmap2.display assert sdldisplay.width == 32 assert sdldisplay.height == 10 prim(primitives.BE_DISPLAY, [mock_display]) assert space.objtable["w_display"] is mock_display assert mock_display.fetch(space, 0) is w_bitmap
def test_primitive_force_display_update(monkeypatch): # XXX: Patch SDLDisplay -> get_pixelbuffer() to circumvent # double-free bug def get_pixelbuffer(self): from rpython.rtyper.lltypesystem import lltype, rffi return lltype.malloc(rffi.ULONGP.TO, self.width * self.height * 32, flavor='raw') display.SDLDisplay.get_pixelbuffer = get_pixelbuffer mock_display = model.W_PointersObject(space, space.w_Point, 4) w_wordbmp = model.W_WordsObject(space, space.w_Array, 10) mock_display.store(space, 0, w_wordbmp) # bitmap mock_display.store(space, 1, space.wrap_int(32)) # width mock_display.store(space, 2, space.wrap_int(10)) # height mock_display.store(space, 3, space.wrap_int(1)) # depth prim(primitives.BE_DISPLAY, [mock_display]) class DisplayFlush(Exception): pass def flush_to_screen_mock(self, force=False): raise DisplayFlush try: monkeypatch.setattr(space.get_display().__class__, "flip", flush_to_screen_mock) with py.test.raises(DisplayFlush): prim(primitives.FORCE_DISPLAY_UPDATE, [mock_display]) finally: monkeypatch.undo()
def test_WordsObject_short_atput(): target = model.W_WordsObject(space, None, 2) target.short_atput0(space, 0, space.wrap_int(0x0100)) target.short_atput0(space, 1, space.wrap_int(-1)) target.short_atput0(space, 2, space.wrap_int(intmask(0xffff8000))) target.short_atput0(space, 3, space.wrap_int(0x7fff)) assert target.getword(0) == 0xffff0100 assert target.getword(1) == 0x7fff8000
def test_WordsObject_short_at(): target = model.W_WordsObject(space, None, 2) target.setword(0, r_uint(0x00018000)) target.setword(1, r_uint(0x80010111)) assert target.short_at0(space, 0).value == intmask(0xffff8000) assert target.short_at0(space, 1).value == intmask(0x0001) assert target.short_at0(space, 2).value == intmask(0x0111) assert target.short_at0(space, 3).value == intmask(0xffff8001)
def test_word_atput(): i = model.W_SmallInteger(100) b = model.W_WordsObject(space, None, 1) b.atput0(space, 0, i) assert 100 == b.getword(0) i = space.classtable['w_LargePositiveInteger'].as_class_get_shadow( space).new(4) i.atput0(space, 3, space.wrap_int(192)) b.atput0(space, 0, i) assert b.getword(0) == 3221225472
def make_form(bits, width, height, depth, o_x=0, o_y=0): w_f = model.W_PointersObject(space, space.w_Array, 5) w_f.store(space, 0, model.W_WordsObject(space, space.w_Array, len(bits))) w_f.fetch(space, 0).words = bits w_f.store(space, 1, w(width)) w_f.store(space, 2, w(height)) w_f.store(space, 3, w(depth)) w_f.store(space, 4, model.W_PointersObject(space, space.w_Point, 2)) w_f.fetch(space, 4).store(space, 0, w(o_x)) w_f.fetch(space, 4).store(space, 1, w(o_y)) return w_f
def test_word_at(): b = model.W_WordsObject(space, None, 1) b.setword(0, 100) r = b.at0(space, 0) assert isinstance(r, model.W_SmallInteger) assert space.unwrap_int(r) == 100 b.setword(0, 3221225472) r = b.at0(space, 0) assert isinstance(r, (model.W_BytesObject, model.W_LargePositiveInteger1Word)) assert r.size() == 4
def test_primitive_be_display(): # XXX: Patch SDLDisplay -> get_pixelbuffer() to circumvent # double-free bug def get_pixelbuffer(self): from rpython.rtyper.lltypesystem import lltype, rffi return lltype.malloc(rffi.ULONGP.TO, self.width * self.height * 32, flavor='raw') display.SDLDisplay.get_pixelbuffer = get_pixelbuffer assert space.objtable["w_display"] is None mock_display = model.W_PointersObject(space, space.w_Point, 4) w_wordbmp = model.W_WordsObject(space, space.w_Array, 10) mock_display.store(space, 0, w_wordbmp) # bitmap mock_display.store(space, 1, space.wrap_int(32)) # width mock_display.store(space, 2, space.wrap_int(10)) # height mock_display.store(space, 3, space.wrap_int(1)) # depth prim(primitives.BE_DISPLAY, [mock_display]) assert space.objtable["w_display"] is mock_display w_bitmap = mock_display.fetch(space, 0) assert w_bitmap is not w_wordbmp assert isinstance(w_bitmap, model.W_DisplayBitmap) sdldisplay = w_bitmap.display assert isinstance(sdldisplay, display.SDLDisplay) mock_display2 = model.W_PointersObject(space, space.w_Point, 4) mock_display2.store(space, 0, model.W_WordsObject(space, space.w_Array, 10)) # bitmap mock_display2.store(space, 1, space.wrap_int(32)) # width mock_display2.store(space, 2, space.wrap_int(10)) # height mock_display2.store(space, 3, space.wrap_int(1)) # depth prim(primitives.BE_DISPLAY, [mock_display2]) assert space.objtable["w_display"] is mock_display2 w_bitmap2 = mock_display.fetch(space, 0) assert isinstance(w_bitmap2, model.W_DisplayBitmap) assert w_bitmap.display is w_bitmap2.display assert sdldisplay.width == 32 assert sdldisplay.height == 10 prim(primitives.BE_DISPLAY, [mock_display]) assert space.objtable["w_display"] is mock_display assert mock_display.fetch(space, 0) is w_bitmap
def test_primitive_force_display_update(monkeypatch): mock_display = model.W_PointersObject(space, space.w_Point, 4) w_wordbmp = model.W_WordsObject(space, space.w_Array, 10) mock_display.store(space, 0, w_wordbmp) # bitmap mock_display.store(space, 1, space.wrap_int(32)) # width mock_display.store(space, 2, space.wrap_int(10)) # height mock_display.store(space, 3, space.wrap_int(1)) # depth prim(primitives.BE_DISPLAY, [mock_display]) class DisplayFlush(Exception): pass def flush_to_screen_mock(self, force=False): raise DisplayFlush try: monkeypatch.setattr(space.display().__class__, "flip", flush_to_screen_mock) with py.test.raises(DisplayFlush): prim(primitives.FORCE_DISPLAY_UPDATE, [mock_display]) finally: monkeypatch.undo()
def new(self, extrasize=0): w_cls = self.w_self() if self.instance_kind == POINTERS: size = self.instsize() + extrasize w_new = model.W_PointersObject(self.space, w_cls, size) elif self.instance_kind == WORDS: w_new = model.W_WordsObject(self.space, w_cls, extrasize) elif self.instance_kind == BYTES: w_new = model.W_BytesObject(self.space, w_cls, extrasize) elif self.instance_kind == COMPILED_METHOD: w_new = model.W_CompiledMethod(self.space, extrasize) elif self.instance_kind == FLOAT: w_new = model.W_Float(0) # Squeak gives a random piece of memory elif self.instance_kind == LARGE_POSITIVE_INTEGER: if extrasize <= 4: w_new = model.W_LargePositiveInteger1Word(0, extrasize) else: w_new = model.W_BytesObject(self.space, w_cls, extrasize) elif self.instance_kind == WEAK_POINTERS: size = self.instsize() + extrasize w_new = model.W_PointersObject(self.space, w_cls, size, weak=True) else: raise NotImplementedError(self.instance_kind) return w_new
def clone(self, space): w_result = model.W_WordsObject(space, self.getclass(space), self.size()) for n in range(self.size()): w_result.setword(n, self.getword(n)) return w_result