コード例 #1
0
ファイル: test_primitives.py プロジェクト: psieg/RSqueak
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
コード例 #2
0
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()
コード例 #3
0
ファイル: test_model.py プロジェクト: timfel/lang-smalltalk
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
コード例 #4
0
ファイル: test_model.py プロジェクト: timfel/lang-smalltalk
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)
コード例 #5
0
ファイル: test_model.py プロジェクト: timfel/lang-smalltalk
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
コード例 #6
0
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
コード例 #7
0
ファイル: test_model.py プロジェクト: timfel/lang-smalltalk
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
コード例 #8
0
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
コード例 #9
0
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()
コード例 #10
0
 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
コード例 #11
0
 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