package utils

import (
	"encoding/csv"
	"github.com/pingcap/log"
	"testing"
)

type StrIt struct {
	header []string
	items  [][]string
	index  int
}

func (i *StrIt) Header() []string {
	return i.header
}

func (i *StrIt) Open() error {
	log.Info("open")
	return nil
}

func (i *StrIt) Close() error {
	log.Info("close")
	return nil
}

func (i *StrIt) Next() []string {
	if i.index >= len(i.items) {
		return nil
	}
	item := i.items[i.index]
	i.index++
	return item
}

func TestNoCache(t *testing.T) {
	it := StrIt{
		header: []string{"ID", "Name"},
		items: [][]string{
			{"1", "student1"},
			{"2", "student2"},
		},
	}

	stream, err := NewCSVStream(&it, 0)
	if err != nil {
		t.Fatal(err)
	}
	reader := csv.NewReader(stream)
	rds, err := reader.ReadAll()
	if err != nil {
		t.Fatal(err)
	}
	if len(rds) != 3 {
		t.Fatal("record length should be 3")
	}
}

func TestBigCache(t *testing.T) {
	it := StrIt{
		header: []string{"ID", "Name"},
		items: [][]string{
			{"1", "student1"},
			{"2", "student2"},
		},
	}

	stream, err := NewCSVStream(&it, 10000)
	if err != nil {
		t.Fatal(err)
	}
	reader := csv.NewReader(stream)
	rds, err := reader.ReadAll()
	if err != nil {
		t.Fatal(err)
	}
	if len(rds) != 3 {
		t.Fatal("record length should be 3")
	}

}
