100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
#!/usr/bin/env python3
 | 
						|
"""Test Grid.at() method with various argument formats"""
 | 
						|
 | 
						|
import mcrfpy
 | 
						|
import sys
 | 
						|
 | 
						|
def test_grid_at_arguments():
 | 
						|
    """Test that Grid.at() accepts all required argument formats"""
 | 
						|
    print("Testing Grid.at() argument formats...")
 | 
						|
    
 | 
						|
    # Create a test scene
 | 
						|
    mcrfpy.createScene("test")
 | 
						|
    
 | 
						|
    # Create a grid
 | 
						|
    grid = mcrfpy.Grid(10, 10)
 | 
						|
    ui = mcrfpy.sceneUI("test")
 | 
						|
    ui.append(grid)
 | 
						|
    
 | 
						|
    success_count = 0
 | 
						|
    total_tests = 4
 | 
						|
    
 | 
						|
    # Test 1: Two positional arguments (x, y)
 | 
						|
    try:
 | 
						|
        point1 = grid.at(5, 5)
 | 
						|
        print("✓ Test 1 PASSED: grid.at(5, 5)")
 | 
						|
        success_count += 1
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ Test 1 FAILED: grid.at(5, 5) - {e}")
 | 
						|
    
 | 
						|
    # Test 2: Single tuple argument (x, y)
 | 
						|
    try:
 | 
						|
        point2 = grid.at((3, 3))
 | 
						|
        print("✓ Test 2 PASSED: grid.at((3, 3))")
 | 
						|
        success_count += 1
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ Test 2 FAILED: grid.at((3, 3)) - {e}")
 | 
						|
    
 | 
						|
    # Test 3: Keyword arguments x=x, y=y
 | 
						|
    try:
 | 
						|
        point3 = grid.at(x=7, y=2)
 | 
						|
        print("✓ Test 3 PASSED: grid.at(x=7, y=2)")
 | 
						|
        success_count += 1
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ Test 3 FAILED: grid.at(x=7, y=2) - {e}")
 | 
						|
    
 | 
						|
    # Test 4: pos keyword argument pos=(x, y)
 | 
						|
    try:
 | 
						|
        point4 = grid.at(pos=(1, 8))
 | 
						|
        print("✓ Test 4 PASSED: grid.at(pos=(1, 8))")
 | 
						|
        success_count += 1
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ Test 4 FAILED: grid.at(pos=(1, 8)) - {e}")
 | 
						|
    
 | 
						|
    # Test error cases
 | 
						|
    print("\nTesting error cases...")
 | 
						|
    
 | 
						|
    # Test 5: Invalid - mixing pos with x/y
 | 
						|
    try:
 | 
						|
        grid.at(x=1, pos=(2, 2))
 | 
						|
        print("✗ Test 5 FAILED: Should have raised error for mixing pos and x/y")
 | 
						|
    except TypeError as e:
 | 
						|
        print(f"✓ Test 5 PASSED: Correctly rejected mixing pos and x/y - {e}")
 | 
						|
    
 | 
						|
    # Test 6: Invalid - out of range
 | 
						|
    try:
 | 
						|
        grid.at(15, 15)
 | 
						|
        print("✗ Test 6 FAILED: Should have raised error for out of range")
 | 
						|
    except ValueError as e:
 | 
						|
        print(f"✓ Test 6 PASSED: Correctly rejected out of range - {e}")
 | 
						|
    
 | 
						|
    # Test 7: Verify all points are valid GridPoint objects
 | 
						|
    try:
 | 
						|
        # Check that we can set walkable on all returned points
 | 
						|
        if 'point1' in locals():
 | 
						|
            point1.walkable = True
 | 
						|
        if 'point2' in locals():
 | 
						|
            point2.walkable = False
 | 
						|
        if 'point3' in locals():
 | 
						|
            point3.color = mcrfpy.Color(255, 0, 0)
 | 
						|
        if 'point4' in locals():
 | 
						|
            point4.tilesprite = 5
 | 
						|
        print("✓ All returned GridPoint objects are valid")
 | 
						|
    except Exception as e:
 | 
						|
        print(f"✗ GridPoint objects validation failed: {e}")
 | 
						|
    
 | 
						|
    print(f"\nSummary: {success_count}/{total_tests} tests passed")
 | 
						|
    
 | 
						|
    if success_count == total_tests:
 | 
						|
        print("ALL TESTS PASSED!")
 | 
						|
        sys.exit(0)
 | 
						|
    else:
 | 
						|
        print("SOME TESTS FAILED!")
 | 
						|
        sys.exit(1)
 | 
						|
 | 
						|
# Run timer callback to execute tests after render loop starts
 | 
						|
def run_test(elapsed):
 | 
						|
    test_grid_at_arguments()
 | 
						|
 | 
						|
# Set a timer to run the test
 | 
						|
mcrfpy.setTimer("test", run_test, 100) |