110 lines
2.3 KiB
Go
110 lines
2.3 KiB
Go
package client
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/test"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"galaxy/client/world"
|
|
)
|
|
|
|
type fakeClient struct {
|
|
scale float32
|
|
p world.RenderParams
|
|
|
|
forced bool
|
|
updates int
|
|
refresh int
|
|
}
|
|
|
|
func (e *fakeClient) CanvasScale() float32 { return e.scale }
|
|
|
|
func (e *fakeClient) UpdateParams(fn func(p *world.RenderParams)) {
|
|
fn(&e.p)
|
|
e.updates++
|
|
}
|
|
|
|
func (e *fakeClient) RequestRefresh() { e.refresh++ }
|
|
|
|
func (e *fakeClient) ForceFullRedraw() { e.forced = true }
|
|
|
|
func TestPanController_DraggedUpdatesCameraByDeltaPx(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
fe := &fakeClient{
|
|
scale: 1.0, // 1 fyne unit == 1 px for the test
|
|
p: world.RenderParams{
|
|
CameraZoom: 1.0,
|
|
CameraXWorldFp: 5 * world.SCALE,
|
|
CameraYWorldFp: 5 * world.SCALE,
|
|
},
|
|
}
|
|
|
|
pc := NewPanController(fe)
|
|
|
|
// Drag right by +3 px and down by +2 px.
|
|
pc.Dragged(&fyne.DragEvent{
|
|
Dragged: fyne.Delta{DX: 3, DY: 2},
|
|
})
|
|
|
|
require.Equal(t, 1, fe.updates)
|
|
|
|
// Map follows pointer => camera moves opposite to pointer delta.
|
|
require.Equal(t, 5*world.SCALE-3*world.SCALE, fe.p.CameraXWorldFp)
|
|
require.Equal(t, 5*world.SCALE-2*world.SCALE, fe.p.CameraYWorldFp)
|
|
}
|
|
|
|
func TestPanController_DraggedUsesCanvasScaleByMultiplying(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
fe := &fakeClient{
|
|
scale: 2.0, // 2 px per fyne unit
|
|
p: world.RenderParams{
|
|
CameraZoom: 1.0,
|
|
CameraXWorldFp: 0,
|
|
CameraYWorldFp: 0,
|
|
},
|
|
}
|
|
|
|
pc := NewPanController(fe)
|
|
|
|
// Dragged.DX=1 fyne unit => 2 px after scaling.
|
|
pc.Dragged(&fyne.DragEvent{
|
|
Dragged: fyne.Delta{DX: 1, DY: 0},
|
|
})
|
|
|
|
require.Equal(t, -2*world.SCALE, fe.p.CameraXWorldFp)
|
|
}
|
|
|
|
func TestPanController_DragEndForcesFullRedrawAndRefresh(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
fe := &fakeClient{
|
|
scale: 1.0,
|
|
p: world.RenderParams{
|
|
CameraZoom: 1.0,
|
|
CameraXWorldFp: 0,
|
|
CameraYWorldFp: 0,
|
|
},
|
|
}
|
|
|
|
pc := NewPanController(fe)
|
|
|
|
// Simulate a drag start.
|
|
pc.Dragged(&fyne.DragEvent{PointEvent: fyne.PointEvent{Position: fyne.Position{X: 1, Y: 1}}})
|
|
|
|
pc.DragEnd()
|
|
require.True(t, fe.forced)
|
|
require.Equal(t, 1, fe.refresh)
|
|
}
|
|
|
|
// Optional: demonstrate use of fyne/test package to ensure types are available.
|
|
// (Not strictly needed, but keeps fyne dependency "active" in tests.)
|
|
func TestFyneTestDriverIsUsable(t *testing.T) {
|
|
t.Parallel()
|
|
_ = test.NewApp()
|
|
}
|