summaryrefslogtreecommitdiff
path: root/test/csv.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/csv.cc')
-rw-r--r--test/csv.cc90
1 files changed, 90 insertions, 0 deletions
diff --git a/test/csv.cc b/test/csv.cc
new file mode 100644
index 0000000..49fe540
--- /dev/null
+++ b/test/csv.cc
@@ -0,0 +1,90 @@
+#include <gtest/gtest.h>
+
+#include "csv.hh"
+
+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());
+}