2021-03-29 22:44:28 +02:00
// Copyright 2021 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package csv
import (
2021-04-20 06:25:08 +08:00
"bytes"
"strings"
2021-03-29 22:44:28 +02:00
"testing"
"github.com/stretchr/testify/assert"
)
func TestCreateReader ( t * testing . T ) {
2021-04-20 06:25:08 +08:00
rd := CreateReader ( bytes . NewReader ( [ ] byte { } ) , ',' )
2021-03-29 22:44:28 +02:00
assert . Equal ( t , ',' , rd . Comma )
}
2021-10-26 15:46:56 -06:00
//nolint
2021-03-29 22:44:28 +02:00
func TestCreateReaderAndGuessDelimiter ( t * testing . T ) {
2021-10-26 15:46:56 -06:00
var csvToRowsMap = map [ string ] [ ] [ ] string {
` a ; b ; c
1 ; 2 ; 3
4 ; 5 ; 6 ` : { { "a" , "b" , "c" } , { "1" , "2" , "3" } , { "4" , "5" , "6" } } ,
` col1 col2 col3
a b c
e f
g h i
j l
m n
p q r
u
v w x
y
` : { { "col1" , "col2" , "col3" } ,
{ "a" , "b" , "c" } ,
{ "" , "e" , "f" } ,
{ "g" , "h" , "i" } ,
{ "j" , "" , "l" } ,
{ "m" , "n" , "" } ,
{ "p" , "q" , "r" } ,
{ "" , "" , "u" } ,
{ "v" , "w" , "x" } ,
{ "y" , "" , "" } ,
{ "" , "" , "" } } ,
` col1 , col2 , col3
a , b , c
d , e , f
, h , i
j , ,
, , ` : { { "col1" , "col2" , "col3" } ,
{ "a" , "b" , "c" } ,
{ "d" , "e" , "f" } ,
{ "" , "h" , "i" } ,
{ "j" , "" , "" } ,
{ "" , "" , "" } } ,
}
2021-03-29 22:44:28 +02:00
2021-10-26 15:46:56 -06:00
for csv , expectedRows := range csvToRowsMap {
rd , err := CreateReaderAndGuessDelimiter ( strings . NewReader ( csv ) )
assert . NoError ( t , err )
rows , err := rd . ReadAll ( )
assert . NoError ( t , err )
assert . EqualValues ( t , rows , expectedRows )
}
2021-03-29 22:44:28 +02:00
}
func TestGuessDelimiter ( t * testing . T ) {
2021-10-26 15:46:56 -06:00
var csvToDelimiterMap = map [ string ] rune {
2021-03-29 22:44:28 +02:00
"a" : ',' ,
"1,2" : ',' ,
"1;2" : ';' ,
"1\t2" : '\t' ,
"1|2" : '|' ,
"1,2,3;4,5,6;7,8,9\na;b;c" : ';' ,
"\"1,2,3,4\";\"a\nb\"\nc;d" : ';' ,
"<br/>" : ',' ,
}
2021-10-26 15:46:56 -06:00
for csv , expectedDelimiter := range csvToDelimiterMap {
assert . EqualValues ( t , guessDelimiter ( [ ] byte ( csv ) ) , expectedDelimiter )
2021-03-29 22:44:28 +02:00
}
}