package csv4cj
import std.unittest.*
import std.unittest.testmacro.*
@Test
public class CSVPrinterTest {
@TestCase
public func testPrintWithComment(): Unit {
let csvRecord = CSVRecord(["1", "taobao", "小米", "200斤"], "注释\r\n第二行")
let format = CSVOutFormat.DEFAULT
let csvPrint = CSVPrinter(format)
let sb = StringBuilder()
csvPrint.printWithComment(csvRecord, sb)
@Expect(sb.toString(),"# 注释\r\n# 第二行\r\n1,taobao,小米,200斤")
}
@TestCase
public func testPrintWithQuote(): Unit {
let format = CSVOutFormat.DEFAULT
let csvPrint = CSVPrinter(format)
let sb = StringBuilder()
csvPrint.printWithQuote("abc".toRuneArray(), sb)
@Expect(sb.toString(),#""abc""#)
sb.reset()
csvPrint.printWithQuote(#"a"\bc"#.toRuneArray(), sb)
@Expect(sb.toString(),#""a\"\\bc""#)
sb.reset()
}
@TestCase
public func testPrintSpecialCols(): Unit {
let format = CSVOutFormat.DEFAULT.setQuoteMode(QuoteMode.CfgCols).setQuotedColsIndex([1, 2])
let csvPrint = CSVPrinter(format)
let sb = StringBuilder()
csvPrint.print(["abc", "1", "a\tc", ","], sb)
@Expect(sb.toString(),"abc,\"1\",\"a\tc\",\",\"")
}
@TestCase
public func testPrintWithEscapes(): Unit {
let format = CSVOutFormat.DEFAULT
let csvPrint = CSVPrinter(format)
let sb = StringBuilder()
csvPrint.printWithEscapes("abc".toRuneArray(), sb)
@Expect(sb.toString(),#"abc"#)
sb.reset()
csvPrint.printWithEscapes(#"a,b\c"#.toRuneArray(), sb)
var result = sb.toString() == #"a\,b\\c"#
@Expect(result,true)
sb.reset()
csvPrint.printWithEscapes("a\r\nb\nc".toRuneArray(), sb)
result = sb.toString() == #"a\r\nb\nc"#
@Expect(result,true)
sb.reset()
}
@TestCase
public func testPrintWithSpecialDelimiter(): Unit {
var format = CSVOutFormat.DEFAULT.setDelimiter("**")
let csvPrint = CSVPrinter(format)
let sb = StringBuilder()
csvPrint.printWithEscapes("abc".toRuneArray(), sb)
@Expect(sb.toString(),#"abc"#)
sb.reset()
csvPrint.printWithEscapes(#"a**b**c*d"#.toRuneArray(), sb)
var result = sb.toString() == #"a\*\*b\*\*c*d"#
@Expect(result,true)
sb.reset()
csvPrint.printWithQuote(#"a**b**c*d"#.toRuneArray(), sb)
result = sb.toString() == #""a**b**c*d""#
@Expect(result,true)
sb.reset()
}
@TestCase
public func testPrintCommon(): Unit {
var format = CSVOutFormat.DEFAULT
let csvPrint = CSVPrinter(format)
let sb = StringBuilder()
csvPrint.print(["abc", "123", "-=@$%"], sb)
@Expect(sb.toString(),#"abc,123,-=@$%"#)
sb.reset()
let list = [" trim ", #"""#, ",", "\\"]
csvPrint.print(list, sb)
@Expect(sb.toString(),#"trim,"\"",",","\\""#)
sb.reset()
}
}