81 lines
2.2 KiB
Go
81 lines
2.2 KiB
Go
package game
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"gitea.boner.be/bdnugget/goonscape/game/testutils"
|
|
rl "github.com/gen2brain/raylib-go/raylib"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestLoginScreen_Update(t *testing.T) {
|
|
login := NewLoginScreen()
|
|
|
|
// Test field focus switching
|
|
simulateMouseClick(400, 215) // Click username field
|
|
assert.Equal(t, 0, login.focusedField)
|
|
|
|
simulateMouseClick(400, 265) // Click password field
|
|
assert.Equal(t, 1, login.focusedField)
|
|
|
|
// Test input length limits
|
|
login.focusedField = 0
|
|
for i := 0; i < 20; i++ {
|
|
simulateCharInput('x')
|
|
}
|
|
assert.LessOrEqual(t, len(login.username), 12)
|
|
|
|
login.focusedField = 1
|
|
for i := 0; i < 30; i++ {
|
|
simulateCharInput('x')
|
|
}
|
|
assert.LessOrEqual(t, len(login.password), 20)
|
|
|
|
// Test mode switching
|
|
simulateMouseClick(600, 365) // Click switch mode button
|
|
assert.True(t, login.isRegistering)
|
|
simulateMouseClick(600, 365) // Click again
|
|
assert.False(t, login.isRegistering)
|
|
|
|
// Test submission
|
|
login.username = "test"
|
|
login.password = "password"
|
|
testutils.SimulateMousePosition(400, 365)
|
|
testutils.SimulateMouseButton(testutils.ToInt32(rl.MouseLeftButton), true)
|
|
username, password, isRegistering, submitted := login.Update()
|
|
assert.True(t, submitted)
|
|
assert.Equal(t, "test", username)
|
|
assert.Equal(t, "password", password)
|
|
assert.False(t, isRegistering)
|
|
}
|
|
|
|
func TestLoginScreen_ErrorHandling(t *testing.T) {
|
|
login := NewLoginScreen()
|
|
|
|
// Test empty fields
|
|
login.username = ""
|
|
login.password = "test"
|
|
testutils.SimulateMousePosition(400, 365)
|
|
testutils.SimulateMouseButton(testutils.ToInt32(rl.MouseLeftButton), true)
|
|
_, _, _, submitted := login.Update()
|
|
assert.False(t, submitted)
|
|
assert.Contains(t, login.errorMessage, "username")
|
|
|
|
// Test special characters
|
|
login.username = "test!@#"
|
|
login.password = "password"
|
|
testutils.SimulateMousePosition(400, 365)
|
|
testutils.SimulateMouseButton(testutils.ToInt32(rl.MouseLeftButton), true)
|
|
_, _, _, submitted = login.Update()
|
|
assert.False(t, submitted)
|
|
assert.Contains(t, login.errorMessage, "invalid characters")
|
|
|
|
// Test error message display
|
|
login.SetError("Test error")
|
|
assert.Equal(t, "Test error", login.errorMessage)
|
|
}
|
|
|
|
func simulateMouseClick(x, y float32) {
|
|
// Implementation would depend on how raylib is mocked
|
|
}
|