130 lines
3.6 KiB
Elixir
130 lines
3.6 KiB
Elixir
#!/usr/bin/env elixir
|
|
|
|
# Test script to verify bounds parsing fix in LiveView components
|
|
# This script tests the to_float helper function to ensure it handles both string and float inputs
|
|
|
|
IO.puts("🧪 Testing bounds parsing fix...")
|
|
|
|
# Simulate the helper function from the LiveView modules
|
|
defmodule BoundsParsingTest do
|
|
# Helper function to convert string or float to float
|
|
defp to_float(value) when is_float(value), do: value
|
|
defp to_float(value) when is_binary(value), do: String.to_float(value)
|
|
defp to_float(value) when is_integer(value), do: value * 1.0
|
|
|
|
def test_bounds_parsing do
|
|
# Test case 1: Float values (the problematic case from the error)
|
|
float_bounds = %{
|
|
"north" => 61.897577621605016,
|
|
"south" => 5.441022303717974,
|
|
"east" => -34.45312500000001,
|
|
"west" => -161.54296875000003
|
|
}
|
|
|
|
# Test case 2: String values (the expected case)
|
|
string_bounds = %{
|
|
"north" => "61.897577621605016",
|
|
"south" => "5.441022303717974",
|
|
"east" => "-34.45312500000001",
|
|
"west" => "-161.54296875000003"
|
|
}
|
|
|
|
# Test case 3: Integer values
|
|
integer_bounds = %{
|
|
"north" => 62,
|
|
"south" => 5,
|
|
"east" => -34,
|
|
"west" => -162
|
|
}
|
|
|
|
# Test case 4: Mixed types
|
|
mixed_bounds = %{
|
|
"north" => 61.897577621605016,
|
|
"south" => "5.441022303717974",
|
|
"east" => -34,
|
|
"west" => "-161.54296875000003"
|
|
}
|
|
|
|
test_cases = [
|
|
{"Float bounds", float_bounds},
|
|
{"String bounds", string_bounds},
|
|
{"Integer bounds", integer_bounds},
|
|
{"Mixed bounds", mixed_bounds}
|
|
]
|
|
|
|
Enum.each(test_cases, fn {name, bounds} ->
|
|
IO.puts("\n🔍 Testing #{name}:")
|
|
|
|
try do
|
|
normalized_bounds = %{
|
|
north: to_float(bounds["north"]),
|
|
south: to_float(bounds["south"]),
|
|
east: to_float(bounds["east"]),
|
|
west: to_float(bounds["west"])
|
|
}
|
|
|
|
IO.puts("✅ Success: #{inspect(normalized_bounds)}")
|
|
rescue
|
|
error ->
|
|
IO.puts("❌ Error: #{inspect(error)}")
|
|
end
|
|
end)
|
|
end
|
|
|
|
def test_replay_speed_parsing do
|
|
IO.puts("\n🔍 Testing replay speed parsing:")
|
|
|
|
test_speeds = [
|
|
{"Float speed", 1.5},
|
|
{"String speed", "2.0"},
|
|
{"Integer speed", 3},
|
|
{"String integer", "1"}
|
|
]
|
|
|
|
Enum.each(test_speeds, fn {name, speed} ->
|
|
try do
|
|
parsed_speed = to_float(speed)
|
|
IO.puts("✅ #{name}: #{inspect(speed)} -> #{parsed_speed}")
|
|
rescue
|
|
error ->
|
|
IO.puts("❌ #{name} error: #{inspect(error)}")
|
|
end
|
|
end)
|
|
end
|
|
|
|
# Test edge cases
|
|
def test_edge_cases do
|
|
IO.puts("\n🔍 Testing edge cases:")
|
|
|
|
edge_cases = [
|
|
{"Zero float", 0.0},
|
|
{"Zero string", "0.0"},
|
|
{"Zero integer", 0},
|
|
{"Negative float", -123.456},
|
|
{"Negative string", "-123.456"},
|
|
{"Large number", 999999.999999}
|
|
]
|
|
|
|
Enum.each(edge_cases, fn {name, value} ->
|
|
try do
|
|
result = to_float(value)
|
|
IO.puts("✅ #{name}: #{inspect(value)} -> #{result}")
|
|
rescue
|
|
error ->
|
|
IO.puts("❌ #{name} error: #{inspect(error)}")
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
# Run the tests
|
|
BoundsParsingTest.test_bounds_parsing()
|
|
BoundsParsingTest.test_replay_speed_parsing()
|
|
BoundsParsingTest.test_edge_cases()
|
|
|
|
IO.puts("\n🎉 Bounds parsing test completed!")
|
|
IO.puts("\n📊 Summary:")
|
|
IO.puts(" - The to_float helper function handles float, string, and integer inputs")
|
|
IO.puts(" - This prevents the ArgumentError: not a binary when JavaScript sends float values")
|
|
IO.puts(" - The LiveView bounds_changed event should now work correctly")
|
|
IO.puts("\n🚀 The bounds parsing fix is working correctly!")
|