--- sprite_test.py.old	Mon Mar  3 20:51:00 2008
+++ sprite_test.py.new	Tue Apr 22 11:40:54 2008
@@ -36,42 +36,84 @@
         ag2 = sprite.AbstractGroup()
         s1 = sprite.Sprite(ag)
         s2 = sprite.Sprite(ag2)
-        s1.image = pygame.Surface((10,10), pygame.SRCALPHA, 32)
+        s3 = sprite.Sprite(ag2)
+        # Rectangular sprite sizes and position shift necessary to catch
+        # offset bug in collide_mask.
+        s1.image = pygame.Surface((50,10), pygame.SRCALPHA, 32)
         s2.image = pygame.Surface((10,10), pygame.SRCALPHA, 32)
+        s3.image = pygame.Surface((10,10), pygame.SRCALPHA, 32)
         
         s1.rect = s1.image.get_rect()
         s2.rect = s2.image.get_rect()
+        s3.rect = s3.image.get_rect()
+        s2.rect.move_ip(40, 0)
+        s3.rect.move_ip(100, 100)
+
+        # Test that sprites collide without collided function.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = None), [s2])
+
+        # Should also work when collided function isn't passed at all.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False),[s2])
         
-        r = sprite.spritecollide(s1, ag2, dokill = False, collided = None)
-        self.assertTrue(r)
-        
-        
-        # need to pass a function.
+        # Need to pass a callable.
         self.assertRaises(TypeError, sprite.spritecollide, s1, ag2, dokill = False, collided = 1)
 
-        self.assertTrue( sprite.spritecollide( s1, ag2, dokill = False, collided = sprite.collide_rect) )
+        # collide_rect should behave the same as default.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_rect),[s2])
 
-        # if there are no mask attributes.
-        self.assertRaises( AttributeError, sprite.spritecollide, s1, ag2, dokill = False, collided = sprite.collide_mask)
-        
-        # make some sprites that are fully transparent, so they won't collide.
-        s1.image.fill((255,255,255,0))
-        s2.image.fill((255,255,255,0))
-        
-        s1.mask = pygame.mask.from_surface(s1.image, 255)
-        s2.mask = pygame.mask.from_surface(s2.image, 255)
+        # collide_rect_ratio should behave the same as default at a 1.0 ratio.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_rect_ratio(1.0)),[s2])
         
-        self.assertFalse( sprite.spritecollide( s1, ag2, dokill = False, collided = sprite.collide_mask) )
+        # collide_rect_ratio should collide all at a 20.0 ratio.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_rect_ratio(20.0)),[s2,s3])
         
+        # collide_circle with no radius set.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_circle),[s2])
+
+        # collide_circle_ratio with no radius set, at a 1.0 ratio.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_circle_ratio(1.0)),[s2])
+
+        # collide_circle_ratio with no radius set, at a 20.0 ratio.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_circle_ratio(20.0)),[s2,s3])
+
+        # collide_circle with a radius set.
+        s1.radius = 50
+        s2.radius = 10
+        s3.radius = 400
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_circle),[s2,s3])
+
+        # collide_circle_ratio with a radius set.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_circle_ratio(0.5)),[s2,s3])
+        del s1.radius
+        del s2.radius
+        del s3.radius
+
         # make some fully opaque sprites that will collide with masks.
         s1.image.fill((255,255,255,255))
         s2.image.fill((255,255,255,255))
+        s3.image.fill((255,255,255,255))
+
+        # masks should be autogenerated from image if they don't exist.
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_mask),[s2])
         
         s1.mask = pygame.mask.from_surface(s1.image)
         s2.mask = pygame.mask.from_surface(s2.image)
+        s3.mask = pygame.mask.from_surface(s3.image)
+
+        # with set masks.        
+        self.assertEqual(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_mask),[s2])
         
-        self.assertTrue( sprite.spritecollide( s1, ag2, dokill = False, collided = sprite.collide_mask) )
+        # make some sprites that are fully transparent, so they won't collide.
+        s1.image.fill((255,255,255,0))
+        s2.image.fill((255,255,255,0))
+        s3.image.fill((255,255,255,0))
+        
+        s1.mask = pygame.mask.from_surface(s1.image, 255)
+        s2.mask = pygame.mask.from_surface(s2.image, 255)
+        s3.mask = pygame.mask.from_surface(s3.image, 255)
         
+        self.assertFalse(sprite.spritecollide(s1, ag2, dokill = False, collided = sprite.collide_mask))
+                
         
 
 
