#include #include #include #include TEST(AP_CSVReader, basic) { static const char *basic_csv = "A 1\n" "B 2\n" "C 3\n" "Fred 31\n" ; static const char *basic_csv_crlf = "A 1\r\n" "B 2\r\n" "C 3\r\n" "Fred 31\r\n" ; static const char *basic_csv_results[][2] = { {"A", "1"}, {"B", "2"}, {"C", "3"}, {"Fred", "31"} }; uint8_t term[16]; AP_CSVReader csvreader{term, ARRAY_SIZE(term), ' '}; const char *csvs[] { basic_csv, basic_csv_crlf }; for (const char *csv : csvs) { uint8_t termcount = 0; uint8_t linecount = 0; for (uint8_t i=0; i room for 3 characters plus a null terminator uint8_t term[4]; AP_CSVReader csvreader{term, ARRAY_SIZE(term), ','}; // first three characters are accepted EXPECT_EQ(csvreader.feed('A'), AP_CSVReader::RetCode::OK); EXPECT_EQ(csvreader.feed('B'), AP_CSVReader::RetCode::OK); EXPECT_EQ(csvreader.feed('C'), AP_CSVReader::RetCode::OK); // the fourth would overrun the buffer EXPECT_EQ(csvreader.feed('D'), AP_CSVReader::RetCode::ERROR); } // A quoted term that is followed by non-separator, non-newline data is // malformed and must return ERROR. TEST(AP_CSVReader, malformed_quoted_term_returns_error) { uint8_t term[16]; AP_CSVReader csvreader{term, ARRAY_SIZE(term), ','}; EXPECT_EQ(csvreader.feed('"'), AP_CSVReader::RetCode::OK); // open quote EXPECT_EQ(csvreader.feed('A'), AP_CSVReader::RetCode::OK); // contents EXPECT_EQ(csvreader.feed('"'), AP_CSVReader::RetCode::OK); // close quote // stray character after the closing quote is not allowed EXPECT_EQ(csvreader.feed('X'), AP_CSVReader::RetCode::ERROR); } AP_GTEST_MAIN() int hal = 0; // bizarrely, this fixes an undefined-symbol error but doesn't raise a type exception. Yay.