#include "csv.hh" #include TEST(csv, empty) { auto csv = csv::open(io::memory("")); auto line = csv->read(); ASSERT_TRUE(line.has_value()); EXPECT_EQ(0, line.value().size()); } TEST(csv, one_value) { auto csv = csv::open(io::memory("foo")); auto line = csv->read(); ASSERT_TRUE(line.has_value()); ASSERT_EQ(1, line.value().size()); EXPECT_EQ("foo", line.value()[0]); line = csv->read(); ASSERT_TRUE(line.has_value()); EXPECT_EQ(0, line.value().size()); } TEST(csv, two_value) { auto csv = csv::open(io::memory("foo,bar")); auto line = csv->read(); ASSERT_TRUE(line.has_value()); ASSERT_EQ(2, line.value().size()); EXPECT_EQ("foo", line.value()[0]); EXPECT_EQ("bar", line.value()[1]); line = csv->read(); ASSERT_TRUE(line.has_value()); EXPECT_EQ(0, line.value().size()); } TEST(csv, empty_value) { auto csv = csv::open(io::memory("foo,,bar,")); auto line = csv->read(); ASSERT_TRUE(line.has_value()); ASSERT_EQ(4, line.value().size()); EXPECT_EQ("foo", line.value()[0]); EXPECT_EQ("", line.value()[1]); EXPECT_EQ("bar", line.value()[2]); EXPECT_EQ("", line.value()[3]); line = csv->read(); ASSERT_TRUE(line.has_value()); EXPECT_EQ(0, line.value().size()); } TEST(csv, many_lines) { auto csv = csv::open(io::memory("foo,bar\nfoobar\nf,o,o,")); auto line = csv->read(); ASSERT_TRUE(line.has_value()); ASSERT_EQ(2, line.value().size()); EXPECT_EQ("foo", line.value()[0]); EXPECT_EQ("bar", line.value()[1]); line = csv->read(); ASSERT_TRUE(line.has_value()); ASSERT_EQ(1, line.value().size()); EXPECT_EQ("foobar", line.value()[0]); line = csv->read(); ASSERT_TRUE(line.has_value()); ASSERT_EQ(4, line.value().size()); EXPECT_EQ("f", line.value()[0]); EXPECT_EQ("o", line.value()[1]); EXPECT_EQ("o", line.value()[2]); EXPECT_EQ("", line.value()[3]); line = csv->read(); ASSERT_TRUE(line.has_value()); EXPECT_EQ(0, line.value().size()); } TEST(csv, blank_lines) { auto csv = csv::open(io::memory("foo,bar\n\nbar,foo\n\n")); auto line = csv->read(); ASSERT_TRUE(line.has_value()); ASSERT_EQ(2, line.value().size()); EXPECT_EQ("foo", line.value()[0]); EXPECT_EQ("bar", line.value()[1]); EXPECT_EQ(1, csv->number()); line = csv->read(); ASSERT_TRUE(line.has_value()); ASSERT_EQ(2, line.value().size()); EXPECT_EQ("bar", line.value()[0]); EXPECT_EQ("foo", line.value()[1]); EXPECT_EQ(3, csv->number()); line = csv->read(); ASSERT_TRUE(line.has_value()); EXPECT_EQ(0, line.value().size()); EXPECT_EQ(4, csv->number()); }