88 "bytes"
99 "encoding/csv"
1010 "io"
11+ "strconv"
1112 "strings"
1213 "testing"
1314
@@ -21,14 +22,23 @@ func TestCreateReader(t *testing.T) {
2122 assert .Equal (t , ',' , rd .Comma )
2223}
2324
24- //nolint
25+ func decodeSlashes (s string ) string {
26+ s = strings .ReplaceAll (s , "\n " , "\\ n" )
27+ s = strings .ReplaceAll (s , "\" " , "\\ \" " )
28+ decoded , err := strconv .Unquote (`"` + s + `"` )
29+ if err != nil {
30+ panic ("unable to decode string:" + err .Error () + "\n " + s )
31+ }
32+ return decoded
33+ }
34+
2535func TestCreateReaderAndDetermineDelimiter (t * testing.T ) {
2636 var cases = []struct {
2737 csv string
2838 expectedRows [][]string
2939 expectedDelimiter rune
3040 }{
31- // case 0 - semicolon delmited
41+ // case 0 - semicolon delimited
3242 {
3343 csv : `a;b;c
34441;2;3
@@ -47,11 +57,11 @@ a, b c
4757 e f
4858g h i
4959j l
50- m n,
60+ m n,\t
5161p q r
5262 u
5363v w x
54- y
64+ y\t\t
5565 ` ,
5666 expectedRows : [][]string {
5767 {"col1" , "col2" , "col3" },
7484 a, b, c
7585d,e,f
7686 ,h, i
77- j, ,
87+ j, ,\x20
7888 , , ` ,
7989 expectedRows : [][]string {
8090 {"col1" , "col2" , "col3" },
8999 }
90100
91101 for n , c := range cases {
92- rd , err := CreateReaderAndDetermineDelimiter (nil , strings .NewReader (c .csv ))
102+ rd , err := CreateReaderAndDetermineDelimiter (nil , strings .NewReader (decodeSlashes ( c .csv ) ))
93103 assert .NoError (t , err , "case %d: should not throw error: %v\n " , n , err )
94104 assert .EqualValues (t , c .expectedDelimiter , rd .Comma , "case %d: delimiter should be '%c', got '%c'" , n , c .expectedDelimiter , rd .Comma )
95105 rows , err := rd .ReadAll ()
@@ -222,7 +232,7 @@ John Doe
[email protected] This,note,had,a,lot,of,commas,to,test,delimters`,
222232 }
223233
224234 for n , c := range cases {
225- delimiter := determineDelimiter (& markup.RenderContext {Filename : c .filename }, []byte (c .csv ))
235+ delimiter := determineDelimiter (& markup.RenderContext {Filename : c .filename }, []byte (decodeSlashes ( c .csv ) ))
226236 assert .EqualValues (t , c .expectedDelimiter , delimiter , "case %d: delimiter should be equal, expected '%c' got '%c'" , n , c .expectedDelimiter , delimiter )
227237 }
228238}
@@ -287,7 +297,7 @@ abc | |123
287297 }
288298
289299 for n , c := range cases {
290- modifiedText := removeQuotedString (c .text )
300+ modifiedText := removeQuotedString (decodeSlashes ( c .text ) )
291301 assert .EqualValues (t , c .expectedText , modifiedText , "case %d: modified text should be equal" , n )
292302 }
293303}
@@ -353,7 +363,7 @@ John Doe
[email protected] This,note,had,a,lot,of,commas,to,test,delimters`,
353363 quoted,
354364text," a
3553652 "some,
356- quoted,
366+ quoted,\t
357367 text," b
3583683 "some,
359369quoted,
@@ -442,7 +452,7 @@ jkl`,
442452 }
443453
444454 for n , c := range cases {
445- delimiter := guessDelimiter ([]byte (c .csv ))
455+ delimiter := guessDelimiter ([]byte (decodeSlashes ( c .csv ) ))
446456 assert .EqualValues (t , c .expectedDelimiter , delimiter , "case %d: delimiter should be equal, expected '%c' got '%c'" , n , c .expectedDelimiter , delimiter )
447457 }
448458}
@@ -459,7 +469,7 @@ func TestGuessFromBeforeAfterQuotes(t *testing.T) {
459469 quoted,
460470text," a
4614712 "some,
462- quoted,
472+ quoted,\t
463473 text," b
4644743 "some,
465475quoted,
@@ -534,7 +544,7 @@ a|"he said, ""here I am"""`,
534544 }
535545
536546 for n , c := range cases {
537- delimiter := guessFromBeforeAfterQuotes ([]byte (c .csv ))
547+ delimiter := guessFromBeforeAfterQuotes ([]byte (decodeSlashes ( c .csv ) ))
538548 assert .EqualValues (t , c .expectedDelimiter , delimiter , "case %d: delimiter should be equal, expected '%c' got '%c'" , n , c .expectedDelimiter , delimiter )
539549 }
540550}
0 commit comments