[pypy-svn] r58457 - pypy/dist/pypy/lang/gameboy/test

cami at codespeak.net cami at codespeak.net
Sun Sep 28 01:47:14 CEST 2008


Author: cami
Date: Sun Sep 28 01:47:11 2008
New Revision: 58457

Modified:
   pypy/dist/pypy/lang/gameboy/test/test_video_mode.py
Log:
more test for the modes


Modified: pypy/dist/pypy/lang/gameboy/test/test_video_mode.py
==============================================================================
--- pypy/dist/pypy/lang/gameboy/test/test_video_mode.py	(original)
+++ pypy/dist/pypy/lang/gameboy/test/test_video_mode.py	Sun Sep 28 01:47:11 2008
@@ -2,10 +2,20 @@
 from pypy.lang.gameboy.video_sprite import Sprite
 from pypy.lang.gameboy.video import Video
 from pypy.lang.gameboy.test.test_video import get_video
+from pypy.lang.gameboy.video_mode import Mode0, Mode1, Mode2, Mode3
+
 import py
 
 # ------------------------------------------------------------------------------
 
+
+class CallChecker(object):
+    def __init__(self):
+        self.called = False
+        
+    def __call__(self):
+        self.called = True
+        
 def get_mode0():
     return Mode0(get_video())
 
@@ -19,4 +29,113 @@
     return Mode3(get_video())
 
 
-# ------------------------------------------------------------------------------
\ No newline at end of file
+# ------------------------------------------------------------------------------
+
+def test_mode_emulate_hblank_line_y_compare():
+    mode = get_mode0()
+    
+    mode.video.status.line_y_compare_flag == True
+    mode.video.line_y = 0
+    mode.video.line_y_compare = 1
+    mode.emulate_hblank_line_y_compare()
+    assert mode.video.status.line_y_compare_flag == False
+    
+    mode.video.line_y = 0
+    mode.video.line_y_compare = 0
+    mode.video.status.line_y_compare_flag = True
+    mode.emulate_hblank_line_y_compare(stat_check=True)
+    assert mode.video.status.line_y_compare_flag == True
+    
+    mode.video.status.line_y_compare_flag = True
+    mode.emulate_hblank_line_y_compare(stat_check=False)
+    assert mode.video.status.line_y_compare_flag
+    
+    mode.video.status.line_y_compare_flag = False
+    mode.emulate_hblank_line_y_compare(stat_check=False)
+    assert mode.video.status.line_y_compare_flag
+    
+    
+def test_mode_line_y_line_y_compare_interrupt_check():
+    mode = get_mode0()
+    
+    mode.video.status.line_y_compare_flag = False
+    mode.video.status.line_y_compare_interrupt = False
+    mode.line_y_line_y_compare_interrupt_check()
+    assert mode.video.status.line_y_compare_flag
+    assert mode.video.lcd_interrupt_flag.is_pending() == False
+    
+    mode.video.status.line_y_compare_flag = False
+    mode.video.status.line_y_compare_interrupt = True
+    mode.line_y_line_y_compare_interrupt_check()
+    assert mode.video.status.line_y_compare_flag
+    assert mode.video.lcd_interrupt_flag.is_pending()
+    
+def test_mode_ids():
+    assert get_mode0().id() == 0
+    assert get_mode1().id() == 1
+    assert get_mode2().id() == 2
+    assert get_mode3().id() == 3
+    
+# ------------------------------------------------------------------------------
+
+def test_mode0_activate():
+    mode = get_mode0()
+    mode.video.cycles = 0
+    mode.activate()
+    assert mode.video.cycles == constants.MODE_0_TICKS
+    
+def test_mode0_h_blank_interrupt_check():
+    mode = get_mode0()
+    assert not mode.video.lcd_interrupt_flag.is_pending()
+    mode.h_blank_interrupt_check();
+    assert not mode.video.lcd_interrupt_flag.is_pending()
+    
+    mode.h_blank_interrupt = True
+    mode.video.status.line_y_compare_check = lambda: True;
+    mode.h_blank_interrupt_check();
+    assert mode.video.lcd_interrupt_flag.is_pending()
+    
+    mode.h_blank_interrupt = False
+    mode.video.lcd_interrupt_flag.set_pending(False)
+    mode.video.status.line_y_compare_check = lambda: True;
+    mode.h_blank_interrupt_check();
+    assert not mode.video.lcd_interrupt_flag.is_pending()
+    
+    mode.h_blank_interrupt = False
+    mode.video.status.line_y_compare_check = lambda: False;
+    mode.h_blank_interrupt_check();
+    assert not mode.video.lcd_interrupt_flag.is_pending()
+    
+def test_mode0_emulate_hblank():
+    mode = get_mode0()
+    mode.video.line_y = 0
+    mode.video.status.current_mode = mode
+    mode.emulate_hblank()
+    assert mode.video.line_y == 1
+    assert mode.video.status.get_mode() == 2
+    
+    mode.video.line_y = constants.GAMEBOY_SCREEN_HEIGHT-1
+    mode.video.frames = 0
+    mode.video.status.current_mode = mode
+    mode.video.frame_skip = 10  
+    mode.emulate_hblank()
+    assert mode.video.line_y == constants.GAMEBOY_SCREEN_HEIGHT
+    assert mode.video.frames == 1
+    assert mode.video.v_blank == True
+    assert mode.video.display == False
+    assert mode.video.status.get_mode() == 1
+    
+    mode.video.line_y = constants.GAMEBOY_SCREEN_HEIGHT-1
+    mode.video.frames = 0
+    mode.video.display = True
+    mode.video.draw_frame = CallChecker()
+    mode.video.status.current_mode = mode
+    mode.video.frame_skip = 10
+    mode.emulate_hblank()
+    assert mode.video.draw_frame.called == True
+    assert mode.video.line_y == constants.GAMEBOY_SCREEN_HEIGHT
+    assert mode.video.frames == 1
+    assert mode.video.v_blank == True
+    assert mode.video.display == False
+    assert mode.video.status.get_mode() == 1
+    
\ No newline at end of file



More information about the Pypy-commit mailing list