test_buffer_manager.cpp 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "lumacs/buffer_manager.hpp"
  2. #include "lumacs/editor_core.hpp"
  3. #include "gtest/gtest.h"
  4. #include <algorithm>
  5. // Fixture for BufferManager tests
  6. class BufferManagerTest : public ::testing::Test {
  7. protected:
  8. // EditorCore is needed to initialize BufferManager
  9. // For unit tests, we want to isolate BufferManager.
  10. // However, BufferManager's constructor requires an EditorCore&.
  11. // We will use a real EditorCore instance but only test BufferManager's direct responsibilities.
  12. lumacs::EditorCore core;
  13. std::unique_ptr<lumacs::BufferManager> buffer_manager;
  14. void SetUp() override {
  15. // BufferManager's constructor relies on EditorCore's core subsystems.
  16. // For these unit tests, we'll instantiate BufferManager with a minimal EditorCore.
  17. // A fully functional EditorCore creates the "*scratch*" buffer via new_buffer()
  18. // which involves WindowManager. For unit testing BufferManager's internals,
  19. // we'll explicitly create buffers using create_buffer_no_window().
  20. buffer_manager = std::make_unique<lumacs::BufferManager>(core);
  21. }
  22. void TearDown() override {
  23. // Clean up if necessary
  24. }
  25. };
  26. TEST_F(BufferManagerTest, InitialState) {
  27. // No buffers created by BufferManager itself in its constructor in this setup.
  28. // The *scratch* buffer is created by EditorCore::new_buffer which is not invoked here.
  29. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 0);
  30. }
  31. TEST_F(BufferManagerTest, CreateBufferNoWindow) {
  32. auto new_buffer_ptr = buffer_manager->create_buffer_no_window("new-buffer");
  33. ASSERT_NE(new_buffer_ptr, nullptr);
  34. ASSERT_EQ(new_buffer_ptr->name(), "new-buffer");
  35. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 1);
  36. ASSERT_NE(buffer_manager->get_buffer_by_name("new-buffer"), nullptr);
  37. }
  38. TEST_F(BufferManagerTest, GetBufferNames) {
  39. buffer_manager->create_buffer_no_window("alpha");
  40. buffer_manager->create_buffer_no_window("beta");
  41. auto names = buffer_manager->get_buffer_names();
  42. ASSERT_EQ(names.size(), 2); // alpha, beta
  43. ASSERT_TRUE(std::find(names.begin(), names.end(), "alpha") != names.end());
  44. ASSERT_TRUE(std::find(names.begin(), names.end(), "beta") != names.end());
  45. }
  46. TEST_F(BufferManagerTest, CloseBuffer) {
  47. buffer_manager->create_buffer_no_window("temp-buffer");
  48. buffer_manager->create_buffer_no_window("another-buffer"); // Ensure there's always another buffer
  49. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 2);
  50. buffer_manager->close_buffer("temp-buffer");
  51. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 1);
  52. ASSERT_EQ(buffer_manager->get_buffer_by_name("temp-buffer"), nullptr);
  53. }
  54. TEST_F(BufferManagerTest, CloseNonExistentBuffer) {
  55. auto initial_size = buffer_manager->get_all_buffer_info().size();
  56. bool closed = buffer_manager->close_buffer("non-existent-buffer");
  57. ASSERT_FALSE(closed);
  58. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), initial_size);
  59. }
  60. TEST_F(BufferManagerTest, CreateBufferNoWindowWithDuplicateName) {
  61. auto buf1 = buffer_manager->create_buffer_no_window("duplicate");
  62. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 1); // First creation adds it
  63. auto buf2 = buffer_manager->create_buffer_no_window("duplicate"); // Should return existing
  64. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 1); // Size should not increase
  65. ASSERT_EQ(buf1, buf2); // Should return the same shared_ptr
  66. ASSERT_EQ(buf2->name(), "duplicate");
  67. }