jes/test/src/test_Buffer.cc

70 lines
2.1 KiB
C++

#include "gtest/gtest.h"
#include "Buffer.h"
#include "TestSupport.h"
#include "Path.h"
TEST(BufferTest, writes_an_identical_file_to_what_is_loaded_if_no_changes_were_performed)
{
const char * files_to_test[] = {
"test/files/empty.txt",
"test/files/one_eol.txt",
"test/files/two_eol.txt",
"test/files/line_endings/cr_format.txt",
"test/files/line_endings/crlf_format.txt",
"test/files/line_endings/lf_format.txt",
"test/files/no_eol_at_eof.txt",
"test/files/no_eol_at_eof_crlf.txt",
};
for (auto e : files_to_test)
{
Buffer b(e);
ASSERT_TRUE(b.write_to_file("test/tmp/f"));
ASSERT_TRUE(Path::is_file("test/tmp/f"));
TestSupport::compare_files(e, "test/tmp/f");
}
}
TEST(BufferTest, writes_an_empty_file_for_an_empty_buffer)
{
Buffer b;
ASSERT_TRUE(b.write_to_file("test/tmp/f"));
TestSupport::compare_files("test/files/empty.txt", "test/tmp/f");
}
TEST(BufferTest, allows_navigating_using_iterators)
{
Buffer b("test/files/line_endings/lf_format.txt");
auto iterator = b.add_iterator();
EXPECT_EQ(0u, iterator->line());
ASSERT_EQ((uint32_t)'H', **iterator);
EXPECT_FALSE(iterator->go_previous_line());
EXPECT_EQ(0u, iterator->line());
ASSERT_EQ((uint32_t)'H', **iterator);
EXPECT_TRUE(iterator->go_right_in_line(false));
EXPECT_EQ(0u, iterator->line());
ASSERT_EQ((uint32_t)'e', **iterator);
EXPECT_TRUE(iterator->go_next_line());
EXPECT_EQ(1u, iterator->line());
ASSERT_EQ((uint32_t)'T', **iterator);
EXPECT_FALSE(iterator->go_left_in_line());
EXPECT_EQ(1u, iterator->line());
ASSERT_EQ((uint32_t)'T', **iterator);
EXPECT_TRUE(iterator->go_right_in_line(true));
EXPECT_EQ(1u, iterator->line());
ASSERT_EQ((uint32_t)'h', **iterator);
EXPECT_FALSE(iterator->go_next_line());
EXPECT_EQ(1u, iterator->line());
ASSERT_EQ((uint32_t)'h', **iterator);
EXPECT_TRUE(iterator->go_previous_line());
EXPECT_EQ(0u, iterator->line());
ASSERT_EQ((uint32_t)'H', **iterator);
}