107 lines
2.4 KiB
Go
107 lines
2.4 KiB
Go
|
package game
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"gitea.boner.be/bdnugget/goonscape/game/testutils"
|
||
|
"gitea.boner.be/bdnugget/goonscape/types"
|
||
|
pb "gitea.boner.be/bdnugget/goonserver/actions"
|
||
|
rl "github.com/gen2brain/raylib-go/raylib"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
func TestChat_AddMessage(t *testing.T) {
|
||
|
chat := NewChat()
|
||
|
|
||
|
// Test adding single message
|
||
|
chat.AddMessage(1, "Hello")
|
||
|
assert.Equal(t, 1, len(chat.messages))
|
||
|
assert.Equal(t, int32(1), chat.messages[0].PlayerID)
|
||
|
assert.Equal(t, "Hello", chat.messages[0].Content)
|
||
|
|
||
|
// Test message limit
|
||
|
for i := 0; i < maxMessages+10; i++ {
|
||
|
chat.AddMessage(1, "spam")
|
||
|
}
|
||
|
assert.Equal(t, maxMessages, len(chat.messages))
|
||
|
assert.Equal(t, "spam", chat.messages[len(chat.messages)-1].Content)
|
||
|
}
|
||
|
|
||
|
func TestChat_HandleServerMessages(t *testing.T) {
|
||
|
chat := NewChat()
|
||
|
mockGame := &Game{
|
||
|
Player: &types.Player{ID: 1},
|
||
|
OtherPlayers: map[int32]*types.Player{
|
||
|
2: {ID: 2},
|
||
|
},
|
||
|
}
|
||
|
chat.userData = mockGame
|
||
|
|
||
|
messages := []*pb.ChatMessage{
|
||
|
{
|
||
|
PlayerId: 1,
|
||
|
Username: "player1",
|
||
|
Content: "test1",
|
||
|
Timestamp: time.Now().UnixNano(),
|
||
|
},
|
||
|
{
|
||
|
PlayerId: 2,
|
||
|
Username: "player2",
|
||
|
Content: "test2",
|
||
|
Timestamp: time.Now().UnixNano(),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
chat.HandleServerMessages(messages)
|
||
|
assert.Equal(t, 2, len(chat.messages))
|
||
|
assert.Equal(t, "test1", chat.messages[0].Content)
|
||
|
assert.Equal(t, "test2", chat.messages[1].Content)
|
||
|
|
||
|
// Test duplicate message prevention
|
||
|
chat.HandleServerMessages(messages)
|
||
|
assert.Equal(t, 2, len(chat.messages))
|
||
|
}
|
||
|
|
||
|
func TestChat_Update(t *testing.T) {
|
||
|
t.Parallel()
|
||
|
done := make(chan bool)
|
||
|
go func() {
|
||
|
game, cleanup := setupTestEnvironment(t)
|
||
|
defer cleanup()
|
||
|
|
||
|
chat := game.Chat
|
||
|
|
||
|
// Test starting chat
|
||
|
testutils.SimulateKeyPress(rl.KeyT)
|
||
|
msg, sent := chat.Update()
|
||
|
assert.True(t, chat.isTyping)
|
||
|
assert.False(t, sent)
|
||
|
assert.Empty(t, msg)
|
||
|
|
||
|
// Test typing message
|
||
|
testutils.SimulateCharInput('h')
|
||
|
msg, sent = chat.Update()
|
||
|
testutils.SimulateCharInput('i')
|
||
|
msg, sent = chat.Update()
|
||
|
assert.Equal(t, 2, len(chat.inputBuffer))
|
||
|
assert.False(t, sent)
|
||
|
assert.Empty(t, msg)
|
||
|
|
||
|
// Test sending message
|
||
|
testutils.SimulateKeyPress(rl.KeyEnter)
|
||
|
msg, sent = chat.Update()
|
||
|
assert.True(t, sent)
|
||
|
assert.Equal(t, "hi", msg)
|
||
|
assert.False(t, chat.isTyping)
|
||
|
done <- true
|
||
|
}()
|
||
|
|
||
|
select {
|
||
|
case <-done:
|
||
|
// Test completed successfully
|
||
|
case <-time.After(5 * time.Second):
|
||
|
t.Fatal("Test timed out")
|
||
|
}
|
||
|
}
|