pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/csv/csv_test.go (about)

     1  package csv
     2  
     3  // ////////////////////////////////////////////////////////////////////////////////// //
     4  //                                                                                    //
     5  //                         Copyright (c) 2022 ESSENTIAL KAOS                          //
     6  //      Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>     //
     7  //                                                                                    //
     8  // ////////////////////////////////////////////////////////////////////////////////// //
     9  
    10  import (
    11  	"io"
    12  	"io/ioutil"
    13  	"os"
    14  	"testing"
    15  
    16  	. "pkg.re/essentialkaos/check.v1"
    17  )
    18  
    19  // ////////////////////////////////////////////////////////////////////////////////// //
    20  
    21  const _DATA = `123,ABC,A_C,A C,
    22  123,ABC,
    23  123,ABC,A_C,A C,123,ABC,A_C,A C
    24  `
    25  
    26  // ////////////////////////////////////////////////////////////////////////////////// //
    27  
    28  func Test(t *testing.T) { TestingT(t) }
    29  
    30  type CSVSuite struct {
    31  	dataFile string
    32  }
    33  
    34  // ////////////////////////////////////////////////////////////////////////////////// //
    35  
    36  var _ = Suite(&CSVSuite{})
    37  
    38  // ////////////////////////////////////////////////////////////////////////////////// //
    39  
    40  func (s *CSVSuite) SetUpSuite(c *C) {
    41  	tmpDir := c.MkDir()
    42  
    43  	s.dataFile = tmpDir + "/data.csv"
    44  
    45  	err := ioutil.WriteFile(s.dataFile, []byte(_DATA), 0644)
    46  
    47  	if err != nil {
    48  		c.Fatal(err.Error())
    49  	}
    50  }
    51  
    52  func (s *CSVSuite) TestRead(c *C) {
    53  	fd, err := os.Open(s.dataFile)
    54  
    55  	c.Assert(err, IsNil)
    56  	c.Assert(fd, NotNil)
    57  
    58  	defer fd.Close()
    59  
    60  	reader := NewReader(fd)
    61  	reader.Comma = ','
    62  
    63  	count := 0
    64  
    65  	for {
    66  		rec, err := reader.Read()
    67  
    68  		if err == io.EOF {
    69  			break
    70  		}
    71  
    72  		switch count {
    73  		case 0:
    74  			c.Assert(rec, HasLen, 5)
    75  			c.Assert(rec, DeepEquals, []string{"123", "ABC", "A_C", "A C", ""})
    76  		case 1:
    77  			c.Assert(rec, HasLen, 3)
    78  			c.Assert(rec, DeepEquals, []string{"123", "ABC", ""})
    79  		case 2:
    80  			c.Assert(rec, HasLen, 8)
    81  			c.Assert(rec, DeepEquals, []string{"123", "ABC", "A_C", "A C", "123", "ABC", "A_C", "A C"})
    82  		}
    83  
    84  		count++
    85  	}
    86  }
    87  
    88  func (s *CSVSuite) TestReadTo(c *C) {
    89  	fd, err := os.Open(s.dataFile)
    90  
    91  	c.Assert(err, IsNil)
    92  	c.Assert(fd, NotNil)
    93  
    94  	defer fd.Close()
    95  
    96  	reader := NewReader(fd)
    97  	reader.Comma = ','
    98  
    99  	count := 0
   100  
   101  	var rec []string
   102  
   103  	for {
   104  		err := reader.ReadTo(rec)
   105  
   106  		if rec == nil {
   107  			c.Assert(err, NotNil)
   108  			rec = make([]string, 8)
   109  			continue
   110  		}
   111  
   112  		if err == io.EOF {
   113  			break
   114  		}
   115  
   116  		switch count {
   117  		case 0:
   118  			c.Assert(rec, DeepEquals, []string{"123", "ABC", "A_C", "A C", "", "", "", ""})
   119  		case 1:
   120  			c.Assert(rec, DeepEquals, []string{"123", "ABC", "", "", "", "", "", ""})
   121  		case 2:
   122  			c.Assert(rec, DeepEquals, []string{"123", "ABC", "A_C", "A C", "123", "ABC", "A_C", "A C"})
   123  		}
   124  
   125  		count++
   126  	}
   127  }
   128  
   129  func (s *CSVSuite) TestLineParser(c *C) {
   130  	data := make([]string, 2)
   131  
   132  	parseAndFill("ABCD", data, ";")
   133  	c.Assert(data, DeepEquals, []string{"ABCD", ""})
   134  
   135  	parseAndFill("", data, ";")
   136  	c.Assert(data, DeepEquals, []string{"", ""})
   137  
   138  	parseAndFill("A;B;C;D;E", data, ";")
   139  	c.Assert(data, DeepEquals, []string{"A", "B"})
   140  }
   141  
   142  func (s *CSVSuite) BenchmarkRead(c *C) {
   143  	fd, _ := os.Open(s.dataFile)
   144  
   145  	for i := 0; i < c.N; i++ {
   146  		reader := NewReader(fd)
   147  		reader.Comma = ','
   148  
   149  		for {
   150  			_, err := reader.Read()
   151  
   152  			if err == io.EOF {
   153  				break
   154  			}
   155  		}
   156  	}
   157  
   158  	fd.Close()
   159  }
   160  
   161  func (s *CSVSuite) BenchmarkReadTo(c *C) {
   162  	fd, _ := os.Open(s.dataFile)
   163  
   164  	for i := 0; i < c.N; i++ {
   165  		reader := NewReader(fd)
   166  		reader.Comma = ','
   167  
   168  		k := make([]string, 10)
   169  
   170  		for {
   171  			err := reader.ReadTo(k)
   172  
   173  			if err == io.EOF {
   174  				break
   175  			}
   176  		}
   177  	}
   178  
   179  	fd.Close()
   180  }