|
2 | 2 | import math |
3 | 3 |
|
4 | 4 | from math import sqrt |
5 | | -from pygame import Vector2, Vector3 |
| 5 | +from pygame import Vector2, Vector3, Rect, FRect |
6 | 6 |
|
7 | 7 | from pygame.geometry import Circle |
8 | 8 |
|
@@ -549,6 +549,73 @@ def test_collidecircle(self): |
549 | 549 | c5.collidecircle(c), "Expected False, circles should collide here" |
550 | 550 | ) |
551 | 551 |
|
| 552 | + def test_colliderect_argtype(self): |
| 553 | + """tests if the function correctly handles incorrect types as parameters""" |
| 554 | + invalid_types = (None, [], "1", (1,), Vector3(1, 1, 1), 1, True, False) |
| 555 | + |
| 556 | + c = Circle(10, 10, 4) |
| 557 | + |
| 558 | + for value in invalid_types: |
| 559 | + with self.assertRaises(TypeError): |
| 560 | + c.colliderect(value) |
| 561 | + |
| 562 | + def test_colliderect_argnum(self): |
| 563 | + """tests if the function correctly handles incorrect number of parameters""" |
| 564 | + c = Circle(10, 10, 4) |
| 565 | + args = [(1), (1, 1), (1, 1, 1), (1, 1, 1, 1, 1)] |
| 566 | + # no params |
| 567 | + with self.assertRaises(TypeError): |
| 568 | + c.colliderect() |
| 569 | + |
| 570 | + # invalid num |
| 571 | + for arg in args: |
| 572 | + with self.assertRaises(TypeError): |
| 573 | + c.colliderect(*arg) |
| 574 | + |
| 575 | + def test_colliderect(self): |
| 576 | + """ensures the function correctly detects collisions with rects""" |
| 577 | + |
| 578 | + msgt = "Expected True, rect should collide here" |
| 579 | + msgf = "Expected False, rect should not collide here" |
| 580 | + # ==================================================== |
| 581 | + c = Circle(0, 0, 5) |
| 582 | + |
| 583 | + r1, r2, r3 = Rect(2, 2, 4, 4), Rect(10, 15, 43, 24), Rect(0, 5, 4, 4) |
| 584 | + fr1, fr2, fr3 = FRect(r1), FRect(r2), FRect(r3) |
| 585 | + |
| 586 | + # colliding single |
| 587 | + for r in (r1, fr1): |
| 588 | + self.assertTrue(c.colliderect(r), msgt) |
| 589 | + |
| 590 | + # not colliding single |
| 591 | + for r in (r2, fr2): |
| 592 | + self.assertFalse(c.colliderect(r), msgf) |
| 593 | + |
| 594 | + # barely colliding single |
| 595 | + for r in (r3, fr3): |
| 596 | + self.assertTrue(c.colliderect(r), msgt) |
| 597 | + |
| 598 | + # colliding 4 args |
| 599 | + self.assertTrue(c.colliderect(2, 2, 4, 4), msgt) |
| 600 | + |
| 601 | + # not colliding 4 args |
| 602 | + self.assertFalse(c.colliderect(10, 15, 43, 24), msgf) |
| 603 | + |
| 604 | + # barely colliding single |
| 605 | + self.assertTrue(c.colliderect(0, 4.9999999999999, 4, 4), msgt) |
| 606 | + |
| 607 | + # ensure FRects aren't truncated |
| 608 | + c2 = Circle(0, 0, 0.35) |
| 609 | + c3 = Circle(2, 0, 0.65) |
| 610 | + fr9 = FRect(0.4, 0.0, 1, 1) |
| 611 | + self.assertFalse(c2.colliderect(fr9), msgf) |
| 612 | + self.assertFalse(c2.colliderect(0.4, 0.0, 1, 1), msgf) |
| 613 | + self.assertFalse(c2.colliderect((0.4, 0.0), (1, 1)), msgf) |
| 614 | + |
| 615 | + self.assertTrue(c3.colliderect(fr9), msgt) |
| 616 | + self.assertTrue(c3.colliderect(0.4, 0.0, 1, 1), msgt) |
| 617 | + self.assertTrue(c3.colliderect((0.4, 0.0), (1, 1)), msgt) |
| 618 | + |
552 | 619 | def test_update(self): |
553 | 620 | """Ensures that updating the circle position |
554 | 621 | and dimension correctly updates position and dimension""" |
|
0 commit comments