github.com/blend/go-sdk@v1.20240719.1/stringutil/split_csv_test.go (about)

     1  /*
     2  
     3  Copyright (c) 2024 - Present. Blend Labs, Inc. All rights reserved
     4  Use of this source code is governed by a MIT license that can be found in the LICENSE file.
     5  
     6  */
     7  
     8  package stringutil
     9  
    10  import (
    11  	"testing"
    12  
    13  	"github.com/blend/go-sdk/assert"
    14  )
    15  
    16  func TestSplitCSV(t *testing.T) {
    17  	assert := assert.New(t)
    18  
    19  	assert.Empty(SplitCSV(""))
    20  	assert.Equal([]string{"foo"}, SplitCSV("foo"))
    21  	assert.Equal([]string{"foo", "bar"}, SplitCSV("foo,bar"))
    22  	assert.Equal([]string{"foo", " bar"}, SplitCSV("foo, bar"))
    23  	assert.Equal([]string{" foo ", " bar "}, SplitCSV(" foo , bar "))
    24  	assert.Equal([]string{"foo", "bar", "baz"}, SplitCSV("foo,bar,baz"))
    25  	assert.Equal([]string{"foo", " bar"}, SplitCSV(`foo," bar"`))
    26  	assert.Equal([]string{" foo ", " bar "}, SplitCSV(`" foo "," bar "`))
    27  	assert.Equal([]string{"foo", "bar", "baz,buzz"}, SplitCSV(`foo,bar,"baz,buzz"`))
    28  	assert.Equal([]string{"foo", "bar", "baz,'buzz'"}, SplitCSV(`foo,bar,"baz,'buzz'"`))
    29  	assert.Equal([]string{"foo", "bar", "baz,'buzz"}, SplitCSV(`foo,bar,"baz,'buzz"`))
    30  	// A double quote can be escaped in CSV by doubling it, e.g. `a"b` -> `"a""b"`
    31  	assert.Equal([]string{"foo", "bar", `baz,"buzz"`}, SplitCSV(`foo,bar,"baz,""buzz"""`))
    32  	assert.Equal([]string{"foo", "bar", `baz"buzz"`}, SplitCSV(`foo,bar,"baz""buzz"""`))
    33  }