diff --git a/.vscode/settings.json b/.vscode/settings.json index cdfb17e..f79defb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,5 @@ { - "go.goroot": "/opt/go/sdk/go1", + "go.goroot": "/opt/go/sdk/go1.25", "go.toolsEnvVars": { "GOEXPERIMENT": "jsonv2" } diff --git a/paginator/paginator.go b/paginator/paginator.go index 58d390c..ad50599 100644 --- a/paginator/paginator.go +++ b/paginator/paginator.go @@ -36,6 +36,10 @@ func New[T any](items []T, page int, limit int, pageCount int) *Paginator[T] { } func (p *Paginator[T]) Items() []T { + if len(p.rawTtems) == 0 { + return nil + } + // 计算起始索引和结束索引 startIdx := (p.curPage - 1) * p.limit diff --git a/paginator/paginator_test.go b/paginator/paginator_test.go index bc0a855..11e8df5 100644 --- a/paginator/paginator_test.go +++ b/paginator/paginator_test.go @@ -2,6 +2,8 @@ package paginator import ( "testing" + + "github.com/stretchr/testify/assert" ) func TestCut(t *testing.T) { @@ -12,3 +14,55 @@ func TestCut(t *testing.T) { pag := New(items, page, limit, pageCount) t.Logf("pag: %s", pag) } + +func TestNilItems(t *testing.T) { + pag := New[int](nil, 1, 10, 0) + + assert.Equal(t, 0, pag.TotalCount()) + assert.Equal(t, 0, pag.TotalPage()) + assert.Empty(t, pag.Items()) + assert.Equal(t, 0, pag.CurPage()) + assert.Equal(t, 0, pag.PreviewPage()) + assert.Equal(t, 0, pag.NextPage()) + assert.Equal(t, 0, pag.FirstPage()) + assert.Equal(t, 0, pag.LastPage()) + assert.Empty(t, pag.PageRange()) +} + +func TestEmptyItems(t *testing.T) { + pag := New([]int{}, 1, 10, 0) + + assert.Equal(t, 0, pag.TotalCount()) + assert.Equal(t, 0, pag.TotalPage()) + assert.Empty(t, pag.Items()) + assert.Equal(t, 0, pag.CurPage()) + assert.Equal(t, 0, pag.PreviewPage()) + assert.Equal(t, 0, pag.NextPage()) + assert.Equal(t, 0, pag.FirstPage()) + assert.Equal(t, 0, pag.LastPage()) + assert.Empty(t, pag.PageRange()) +} + +func TestNilItemsWithDifferentPages(t *testing.T) { + tests := []struct { + name string + page int + limit int + pageCount int + }{ + {name: "page=0,limit=1", page: 0, limit: 1, pageCount: 0}, + {name: "page=1,limit=1", page: 1, limit: 1, pageCount: 0}, + {name: "page=5,limit=10", page: 5, limit: 10, pageCount: 0}, + {name: "page=1,limit=1,pageCount=3", page: 1, limit: 1, pageCount: 3}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pag := New[string](nil, tt.page, tt.limit, tt.pageCount) + + assert.Equal(t, 0, pag.TotalCount()) + assert.Equal(t, 0, pag.TotalPage()) + assert.Empty(t, pag.Items()) + }) + } +}