#include "Test.h" #include #include #include #include "Buffer.h" static std::string read_all(const std::string &path) { std::ifstream in(path, std::ios::binary); return std::string((std::istreambuf_iterator(in)), std::istreambuf_iterator()); } TEST(Buffer_SaveAs_and_Save_new_file) { const std::string path = "./.kte_ut_buffer_io_1.tmp"; std::remove(path.c_str()); Buffer b; // insert two lines b.insert_text(0, 0, std::string("Hello, world!\n")); b.insert_text(1, 0, std::string("Second line\n")); std::string err; ASSERT_TRUE(b.SaveAs(path, err)); ASSERT_EQ(err.empty(), true); // append another line then Save() b.insert_text(2, 0, std::string("Third\n")); b.SetDirty(true); ASSERT_TRUE(b.Save(err)); ASSERT_EQ(err.empty(), true); std::string got = read_all(path); ASSERT_EQ(got, std::string("Hello, world!\nSecond line\nThird\n")); std::remove(path.c_str()); } TEST(Buffer_Save_after_Open_existing) { const std::string path = "./.kte_ut_buffer_io_2.tmp"; std::remove(path.c_str()); { std::ofstream out(path, std::ios::binary); out << "abc\n123\n"; } Buffer b; std::string err; ASSERT_TRUE(b.OpenFromFile(path, err)); ASSERT_EQ(err.empty(), true); b.insert_text(2, 0, std::string("tail\n")); b.SetDirty(true); ASSERT_TRUE(b.Save(err)); ASSERT_EQ(err.empty(), true); std::string got = read_all(path); ASSERT_EQ(got, std::string("abc\n123\ntail\n")); std::remove(path.c_str()); } TEST(Buffer_Open_nonexistent_then_SaveAs) { const std::string path = "./.kte_ut_buffer_io_3.tmp"; std::remove(path.c_str()); Buffer b; std::string err; ASSERT_TRUE(b.OpenFromFile(path, err)); ASSERT_EQ(err.empty(), true); ASSERT_EQ(b.IsFileBacked(), false); b.insert_text(0, 0, std::string("hello, world")); b.insert_text(0, 12, std::string("\n")); b.SetDirty(true); ASSERT_TRUE(b.SaveAs(path, err)); ASSERT_EQ(err.empty(), true); std::string got = read_all(path); ASSERT_EQ(got, std::string("hello, world\n")); std::remove(path.c_str()); }