2021-03-29 16:44:28 -04: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-19 18:25:08 -04:00
|
|
|
"bytes"
|
|
|
|
"strings"
|
2021-03-29 16:44:28 -04:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestCreateReader(t *testing.T) {
|
2021-04-19 18:25:08 -04:00
|
|
|
rd := CreateReader(bytes.NewReader([]byte{}), ',')
|
2021-03-29 16:44:28 -04:00
|
|
|
assert.Equal(t, ',', rd.Comma)
|
|
|
|
}
|
|
|
|
|
2021-10-26 17:46:56 -04:00
|
|
|
//nolint
|
2021-03-29 16:44:28 -04:00
|
|
|
func TestCreateReaderAndGuessDelimiter(t *testing.T) {
|
2021-10-26 17:46:56 -04: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 16:44:28 -04:00
|
|
|
|
2021-10-26 17:46:56 -04: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 16:44:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestGuessDelimiter(t *testing.T) {
|
2021-10-26 17:46:56 -04:00
|
|
|
var csvToDelimiterMap = map[string]rune{
|
2021-03-29 16:44:28 -04: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 17:46:56 -04:00
|
|
|
for csv, expectedDelimiter := range csvToDelimiterMap {
|
|
|
|
assert.EqualValues(t, guessDelimiter([]byte(csv)), expectedDelimiter)
|
2021-03-29 16:44:28 -04:00
|
|
|
}
|
|
|
|
}
|