Add tests for World class object management and querying functionality
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build Simulation and Test / Run All Tests (push) Successful in 28s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build Simulation and Test / Run All Tests (push) Successful in 28s
				
			This commit is contained in:
		
							parent
							
								
									dad79942c2
								
							
						
					
					
						commit
						55633706a2
					
				| @ -22,7 +22,7 @@ jobs: | |||||||
|       run: uv sync --locked --all-extras --dev |       run: uv sync --locked --all-extras --dev | ||||||
| 
 | 
 | ||||||
|     - name: Run tests |     - name: Run tests | ||||||
|       run: uv run pytest tests --junit-xml=pytest-results.xml |       run: PYTHONPATH=$(pwd) uv run pytest tests --junit-xml=pytest-results.xml | ||||||
| 
 | 
 | ||||||
|     - name: Upload test results |     - name: Upload test results | ||||||
|       if: always() |       if: always() | ||||||
| @ -34,4 +34,4 @@ jobs: | |||||||
| 
 | 
 | ||||||
|     - name: Print test summary |     - name: Print test summary | ||||||
|       if: always() |       if: always() | ||||||
|       run: uv run pytest tests --tb=short || true |       run: PYTHONPATH=$(pwd) uv run pytest tests --tb=short || true | ||||||
							
								
								
									
										87
									
								
								tests/test_world.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								tests/test_world.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,87 @@ | |||||||
|  | import pytest | ||||||
|  | from world.world import World, Position, BaseEntity | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class DummyEntity(BaseEntity): | ||||||
|  |     def __init__(self, position): | ||||||
|  |         super().__init__(position) | ||||||
|  |         self.ticked = False | ||||||
|  |         self.rendered = False | ||||||
|  | 
 | ||||||
|  |     def tick(self, interactable=None): | ||||||
|  |         self.ticked = True | ||||||
|  |         return self | ||||||
|  | 
 | ||||||
|  |     def render(self, camera, screen): | ||||||
|  |         self.rendered = True | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @pytest.fixture | ||||||
|  | def world(): | ||||||
|  |     return World(partition_size=10, world_size=(100, 100)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_add_object_and_get_objects(world): | ||||||
|  |     entity = DummyEntity(Position(x=0, y=0)) | ||||||
|  |     world.add_object(entity) | ||||||
|  |     assert entity in world.get_objects() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_query_objects_within_radius(world): | ||||||
|  |     e1 = DummyEntity(Position(x=0, y=0)) | ||||||
|  |     e2 = DummyEntity(Position(x=5, y=0)) | ||||||
|  |     e3 = DummyEntity(Position(x=20, y=0)) | ||||||
|  |     world.add_object(e1) | ||||||
|  |     world.add_object(e2) | ||||||
|  |     world.add_object(e3) | ||||||
|  |     found = world.query_objects_within_radius(0, 0, 10) | ||||||
|  |     assert e1 in found | ||||||
|  |     assert e2 in found | ||||||
|  |     assert e3 not in found | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_query_objects_in_range(world): | ||||||
|  |     e1 = DummyEntity(Position(x=1, y=1)) | ||||||
|  |     e2 = DummyEntity(Position(x=5, y=5)) | ||||||
|  |     e3 = DummyEntity(Position(x=20, y=20)) | ||||||
|  |     world.add_object(e1) | ||||||
|  |     world.add_object(e2) | ||||||
|  |     world.add_object(e3) | ||||||
|  |     found = world.query_objects_in_range(0, 0, 10, 10) | ||||||
|  |     assert e1 in found | ||||||
|  |     assert e2 in found | ||||||
|  |     assert e3 not in found | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_query_closest_object(world): | ||||||
|  |     e1 = DummyEntity(Position(x=0, y=0)) | ||||||
|  |     e2 = DummyEntity(Position(x=10, y=0)) | ||||||
|  |     world.add_object(e1) | ||||||
|  |     world.add_object(e2) | ||||||
|  |     closest = world.query_closest_object(1, 0) | ||||||
|  |     assert closest == e1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_tick_all_removes_dead(world): | ||||||
|  |     e1 = DummyEntity(Position(x=0, y=0)) | ||||||
|  |     e2 = DummyEntity(Position(x=10, y=0)) | ||||||
|  |     e2.flags["death"] = True | ||||||
|  |     world.add_object(e1) | ||||||
|  |     world.add_object(e2) | ||||||
|  |     world.tick_all() | ||||||
|  |     objs = world.get_objects() | ||||||
|  |     assert e1 in objs | ||||||
|  |     assert e2 not in objs | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_tick_all_calls_tick(world): | ||||||
|  |     e1 = DummyEntity(Position(x=0, y=0)) | ||||||
|  |     world.add_object(e1) | ||||||
|  |     world.tick_all() | ||||||
|  |     assert e1.ticked | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_add_object_out_of_bounds(world): | ||||||
|  |     entity = DummyEntity(Position(x=1000, y=1000)) | ||||||
|  |     with pytest.raises(ValueError): | ||||||
|  |         world.add_object(entity) | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Sam
						Sam