diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2014-01-20 11:56:26 -0800 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2014-01-20 14:03:53 -0800 |
commit | 9a4c3a44476f3306a8deed8a836e8fbc25ceb55f (patch) | |
tree | 55271e96f4be079cb62f62f204450b4fab85cd5f /src/io/line_test.cpp | |
parent | 9c1799033d0c17fbefb52a9b2695922f5a715133 (diff) | |
download | tmwa-9a4c3a44476f3306a8deed8a836e8fbc25ceb55f.tar.gz tmwa-9a4c3a44476f3306a8deed8a836e8fbc25ceb55f.tar.bz2 tmwa-9a4c3a44476f3306a8deed8a836e8fbc25ceb55f.tar.xz tmwa-9a4c3a44476f3306a8deed8a836e8fbc25ceb55f.zip |
Add line and char readers
Diffstat (limited to 'src/io/line_test.cpp')
-rw-r--r-- | src/io/line_test.cpp | 350 |
1 files changed, 350 insertions, 0 deletions
diff --git a/src/io/line_test.cpp b/src/io/line_test.cpp new file mode 100644 index 0000000..8df6bbc --- /dev/null +++ b/src/io/line_test.cpp @@ -0,0 +1,350 @@ +#include "line.hpp" + +#include <gtest/gtest.h> + +#include "../strings/zstring.hpp" + +static +int string_pipe(ZString sz) +{ + int pfd[2]; + if (-1 == pipe(pfd)) + return -1; + if (sz.size() != write(pfd[1], sz.c_str(), sz.size())) + { + close(pfd[0]); + close(pfd[1]); + return -1; + } + close(pfd[1]); + return pfd[0]; +} + +TEST(io, line1) +{ + io::LineReader lr("<string1>", string_pipe("Hello World\n")); + io::Line hi; + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, "Hello World"); + EXPECT_EQ(hi.filename, "<string1>"); + EXPECT_EQ(hi.line, 1); + EXPECT_EQ(hi.column, 0); + EXPECT_FALSE(lr.read_line(hi)); +} +TEST(io, line2) +{ + io::LineReader lr("<string2>", string_pipe("Hello\nWorld")); + io::Line hi; + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, "Hello"); + EXPECT_EQ(hi.filename, "<string2>"); + EXPECT_EQ(hi.line, 1); + EXPECT_EQ(hi.column, 0); + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, "World"); + EXPECT_EQ(hi.filename, "<string2>"); + EXPECT_EQ(hi.line, 2); + EXPECT_EQ(hi.column, 0); + EXPECT_FALSE(lr.read_line(hi)); +} +TEST(io, line3) +{ + io::LineReader lr("<string3>", string_pipe("Hello\rWorld")); + io::Line hi; + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, "Hello"); + EXPECT_EQ(hi.filename, "<string3>"); + EXPECT_EQ(hi.line, 1); + EXPECT_EQ(hi.column, 0); + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, "World"); + EXPECT_EQ(hi.filename, "<string3>"); + EXPECT_EQ(hi.line, 2); + EXPECT_EQ(hi.column, 0); + EXPECT_FALSE(lr.read_line(hi)); +} +TEST(io, line4) +{ + io::LineReader lr("<string4>", string_pipe("Hello\r\nWorld")); + io::Line hi; + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, "Hello"); + EXPECT_EQ(hi.filename, "<string4>"); + EXPECT_EQ(hi.line, 1); + EXPECT_EQ(hi.column, 0); + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, "World"); + EXPECT_EQ(hi.filename, "<string4>"); + EXPECT_EQ(hi.line, 2); + EXPECT_EQ(hi.column, 0); + EXPECT_FALSE(lr.read_line(hi)); +} +TEST(io, line5) +{ + io::LineReader lr("<string5>", string_pipe("Hello\n\rWorld")); + io::Line hi; + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, "Hello"); + EXPECT_EQ(hi.filename, "<string5>"); + EXPECT_EQ(hi.line, 1); + EXPECT_EQ(hi.column, 0); + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, ""); + EXPECT_EQ(hi.filename, "<string5>"); + EXPECT_EQ(hi.line, 2); + EXPECT_EQ(hi.column, 0); + EXPECT_TRUE(lr.read_line(hi)); + EXPECT_EQ(hi.text, "World"); + EXPECT_EQ(hi.filename, "<string5>"); + EXPECT_EQ(hi.line, 3); + EXPECT_EQ(hi.column, 0); + EXPECT_FALSE(lr.read_line(hi)); +} + +TEST(io, linechar1) +{ + io::LineCharReader lr("<stringchar1>", string_pipe("Hi Wu\n")); + io::LineChar c; + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'H'); + EXPECT_EQ(c.text, "Hi Wu"); + EXPECT_EQ(c.filename, "<stringchar1>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'i'); + EXPECT_EQ(c.text, "Hi Wu"); + EXPECT_EQ(c.filename, "<stringchar1>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 2); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), ' '); + EXPECT_EQ(c.text, "Hi Wu"); + EXPECT_EQ(c.filename, "<stringchar1>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 3); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'W'); + EXPECT_EQ(c.text, "Hi Wu"); + EXPECT_EQ(c.filename, "<stringchar1>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 4); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'u'); + EXPECT_EQ(c.text, "Hi Wu"); + EXPECT_EQ(c.filename, "<stringchar1>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 5); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, "Hi Wu"); + EXPECT_EQ(c.filename, "<stringchar1>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 6); + lr.adv(); + EXPECT_FALSE(lr.get(c)); +} +TEST(io, linechar2) +{ + io::LineCharReader lr("<stringchar2>", string_pipe("Hi\nWu")); + io::LineChar c; + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'H'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar2>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'i'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar2>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 2); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar2>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 3); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'W'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar2>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'u'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar2>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 2); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar2>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 3); + lr.adv(); + EXPECT_FALSE(lr.get(c)); +} +TEST(io, linechar3) +{ + io::LineCharReader lr("<stringchar3>", string_pipe("Hi\rWu")); + io::LineChar c; + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'H'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar3>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'i'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar3>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 2); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar3>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 3); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'W'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar3>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'u'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar3>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 2); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar3>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 3); + lr.adv(); + EXPECT_FALSE(lr.get(c)); +} +TEST(io, linechar4) +{ + io::LineCharReader lr("<stringchar4>", string_pipe("Hi\r\nWu")); + io::LineChar c; + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'H'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar4>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'i'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar4>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 2); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar4>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 3); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'W'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar4>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'u'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar4>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 2); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar4>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 3); + lr.adv(); + EXPECT_FALSE(lr.get(c)); +} +TEST(io, linechar5) +{ + io::LineCharReader lr("<stringchar5>", string_pipe("Hi\n\rWu")); + io::LineChar c; + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'H'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar5>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'i'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar5>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 2); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, "Hi"); + EXPECT_EQ(c.filename, "<stringchar5>"); + EXPECT_EQ(c.line, 1); + EXPECT_EQ(c.column, 3); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, ""); + EXPECT_EQ(c.filename, "<stringchar5>"); + EXPECT_EQ(c.line, 2); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'W'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar5>"); + EXPECT_EQ(c.line, 3); + EXPECT_EQ(c.column, 1); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), 'u'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar5>"); + EXPECT_EQ(c.line, 3); + EXPECT_EQ(c.column, 2); + lr.adv(); + EXPECT_TRUE(lr.get(c)); + EXPECT_EQ(c.ch(), '\n'); + EXPECT_EQ(c.text, "Wu"); + EXPECT_EQ(c.filename, "<stringchar5>"); + EXPECT_EQ(c.line, 3); + EXPECT_EQ(c.column, 3); + lr.adv(); + EXPECT_FALSE(lr.get(c)); +} |