| 1 | #include "test.h" |
| 2 | |
| 3 | #include <base/system.h> |
| 4 | |
| 5 | #include <engine/shared/csv.h> |
| 6 | |
| 7 | #include <gtest/gtest.h> |
| 8 | |
| 9 | static void Expect(int NumColumns, const char *const *ppColumns, const char *pExpected) |
| 10 | { |
| 11 | CTestInfo Info; |
| 12 | |
| 13 | IOHANDLE File = io_open(filename: Info.m_aFilename, flags: IOFLAG_WRITE); |
| 14 | ASSERT_TRUE(File); |
| 15 | CsvWrite(File, NumColumns, ppColumns); |
| 16 | io_close(io: File); |
| 17 | |
| 18 | char aBuf[1024]; |
| 19 | File = io_open(filename: Info.m_aFilename, flags: IOFLAG_READ); |
| 20 | ASSERT_TRUE(File); |
| 21 | int Read = io_read(io: File, buffer: aBuf, size: sizeof(aBuf)); |
| 22 | io_close(io: File); |
| 23 | fs_remove(filename: Info.m_aFilename); |
| 24 | |
| 25 | ASSERT_TRUE(Read >= 1); |
| 26 | Read -= 1; |
| 27 | ASSERT_EQ(aBuf[Read], '\n'); |
| 28 | aBuf[Read] = 0; |
| 29 | |
| 30 | #if defined(CONF_FAMILY_WINDOWS) |
| 31 | ASSERT_TRUE(Read >= 1); |
| 32 | Read -= 1; |
| 33 | ASSERT_EQ(aBuf[Read], '\r'); |
| 34 | aBuf[Read] = 0; |
| 35 | #endif |
| 36 | |
| 37 | for(int i = 0; i < Read; i++) |
| 38 | { |
| 39 | EXPECT_NE(aBuf[i], 0); |
| 40 | } |
| 41 | EXPECT_STREQ(aBuf, pExpected); |
| 42 | } |
| 43 | |
| 44 | TEST(Csv, Simple) |
| 45 | { |
| 46 | const char *apCols1[] = {"a" , "b" }; |
| 47 | Expect(NumColumns: 2, ppColumns: apCols1, pExpected: "a,b" ); |
| 48 | const char *apCols2[] = {"こんにちは" }; |
| 49 | Expect(NumColumns: 1, ppColumns: apCols2, pExpected: "こんにちは" ); |
| 50 | const char *apCols3[] = {"я" , "" , "й" }; |
| 51 | Expect(NumColumns: 3, ppColumns: apCols3, pExpected: "я,,й" ); |
| 52 | const char *apCols4[] = {"" }; |
| 53 | Expect(NumColumns: 1, ppColumns: apCols4, pExpected: "" ); |
| 54 | const char *apCols5[] = {nullptr}; |
| 55 | Expect(NumColumns: 0, ppColumns: apCols5, pExpected: "" ); |
| 56 | } |
| 57 | |
| 58 | TEST(Csv, LetTheQuotingBegin) |
| 59 | { |
| 60 | const char *apCols1[] = {"\"" }; |
| 61 | Expect(NumColumns: 1, ppColumns: apCols1, pExpected: "\"\"\"\"" ); |
| 62 | const char *apCols2[] = {"," }; |
| 63 | Expect(NumColumns: 1, ppColumns: apCols2, pExpected: "\",\"" ); |
| 64 | const char *apCols3[] = {",," , ",\"\"\"" }; |
| 65 | Expect(NumColumns: 2, ppColumns: apCols3, pExpected: "\",,\",\",\"\"\"\"\"\"\"" ); |
| 66 | const char *apCols4[] = {"\"," , " " }; |
| 67 | Expect(NumColumns: 2, ppColumns: apCols4, pExpected: "\"\"\",\", " ); |
| 68 | } |
| 69 | |