package fileutil

import (
	"bufio"
	"fmt"
	"os"
	"sync"
	"testing"
)

func TestSkipLinesFromFile1(t *testing.T) {
	var (
		skipoffset int64
		reader     *bufio.Reader
		skip       int64

		//readlines  string
	)
	file, err := os.OpenFile("log.txt", os.O_RDONLY, 0666)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer func() {
		err = file.Close() //close after checking err
	}()
	// 封装为 bufio
	file.Seek(0, 0)
	reader = bufio.NewReader(file)
	skip = 0
	skipoffset, err = SkipLinesFromFile(reader, skip)
	if skipoffset != 0 {
		t.Errorf("TestSkipLinesFromFile1, skipoffset=%d is error,it must be  0!\n", skipoffset)
	}
	if err != nil {
		t.Errorf("TestSkipLinesFromFile1, err=%s!\n", err)
	}

	file.Seek(0, 0)
	reader = bufio.NewReader(file)
	skip = 1
	skipoffset, err = SkipLinesFromFile(reader, skip)
	if skipoffset != 21 {
		t.Errorf("TestSkipLinesFromFile1, skipoffset=%d is error,it must be 21!\n", skipoffset)
	}
	if err != nil {
		t.Errorf("TestSkipLinesFromFile1, err=%s!\n", err)
	}
	file.Seek(0, 0)
	reader = bufio.NewReader(file)
	skip = 2
	skipoffset, err = SkipLinesFromFile(reader, skip)
	if skipoffset != 32 {
		t.Errorf("TestSkipLinesFromFile1, skipoffset=%d is error,it must be 32!\n", skipoffset)
	}
	if err != nil {
		t.Errorf("TestSkipLinesFromFile1, err=%s!\n", err)
	}
	file.Seek(0, 0)
	reader = bufio.NewReader(file)
	skip = 3
	skipoffset, err = SkipLinesFromFile(reader, skip)
	if skipoffset != 63 {
		t.Errorf("TestSkipLinesFromFile1, skipoffset=%d is error,it must be 63!\n", skipoffset)
	}
	if err != nil {
		t.Errorf("TestSkipLinesFromFile1, err=%s!\n", err)
	}
	file.Seek(0, 0)
	reader = bufio.NewReader(file)
	skip = 12000
	skipoffset, err = SkipLinesFromFile(reader, skip)
	if err == nil {
		t.Errorf("TestSkipLinesFromFile1, Skip exceeds the file size !\n")
	}
	//t.Logf("TestSkipLinesFromFile1 is success")
}

func TestReadToChan(t *testing.T) {
	var skipoffset int64
	skipoffset = 237
	readChan := make(chan string, 1000)
	var wg sync.WaitGroup
	wg.Add(1)
	go ReadToChan(readChan, "log.txt", skipoffset, &wg)
	iRows := 0
	for {
		var ok bool

		_, ok = <-readChan
		if ok != true {
			break
		}
		iRows++
	}
	if iRows != 10000 {
		t.Errorf("TestSkipLinesFromFile1, total row nums=%d is error,it must be 10000!\n", iRows)
	}
}
func TestReadRows1(t *testing.T) {
	var filename string
	var skip int64
	var readChan chan string
	var err error
	var wg sync.WaitGroup

	wg.Add(1)

	skip = 0
	filename = "a.txt"
	dataParser := new(DataFileParser)
	err = dataParser.ReadRows(filename, skip, readChan, &wg)
	if err == nil {
		t.Errorf("TestReadRows1,%s is not exists!", filename)
	}
	skip = 7
	filename = "log.txt"
	err = dataParser.ReadRows(filename, skip, readChan, &wg)
	if err != nil {
		t.Errorf("TestReadRows1,err: %s!", err)
	}
}
