test_buffer_manager.cpp 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. // Since EditorCore now implements IEditorNotifier and IWindowManager, we pass it for both interfaces.
  21. buffer_manager = std::make_unique<lumacs::BufferManager>(core, core);
  22. }
  23. void TearDown() override {
  24. // Clean up if necessary
  25. }
  26. };
  27. TEST_F(BufferManagerTest, InitialState) {
  28. // No buffers created by BufferManager itself in its constructor in this setup.
  29. // The *scratch* buffer is created by EditorCore::new_buffer which is not invoked here.
  30. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 0);
  31. }
  32. TEST_F(BufferManagerTest, CreateBufferNoWindow) {
  33. auto new_buffer_ptr = buffer_manager->create_buffer_no_window("new-buffer");
  34. ASSERT_NE(new_buffer_ptr, nullptr);
  35. ASSERT_EQ(new_buffer_ptr->name(), "new-buffer");
  36. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 1);
  37. ASSERT_NE(buffer_manager->get_buffer_by_name("new-buffer"), nullptr);
  38. }
  39. TEST_F(BufferManagerTest, GetBufferNames) {
  40. buffer_manager->create_buffer_no_window("alpha");
  41. buffer_manager->create_buffer_no_window("beta");
  42. auto names = buffer_manager->get_buffer_names();
  43. ASSERT_EQ(names.size(), 2); // alpha, beta
  44. ASSERT_TRUE(std::find(names.begin(), names.end(), "alpha") != names.end());
  45. ASSERT_TRUE(std::find(names.begin(), names.end(), "beta") != names.end());
  46. }
  47. TEST_F(BufferManagerTest, CloseBuffer) {
  48. buffer_manager->create_buffer_no_window("temp-buffer");
  49. buffer_manager->create_buffer_no_window("another-buffer"); // Ensure there's always another buffer
  50. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 2);
  51. buffer_manager->close_buffer("temp-buffer");
  52. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 1);
  53. ASSERT_EQ(buffer_manager->get_buffer_by_name("temp-buffer"), nullptr);
  54. }
  55. TEST_F(BufferManagerTest, CloseNonExistentBuffer) {
  56. auto initial_size = buffer_manager->get_all_buffer_info().size();
  57. bool closed = buffer_manager->close_buffer("non-existent-buffer");
  58. ASSERT_FALSE(closed);
  59. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), initial_size);
  60. }
  61. TEST_F(BufferManagerTest, CreateBufferNoWindowWithDuplicateName) {
  62. auto buf1 = buffer_manager->create_buffer_no_window("duplicate");
  63. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 1); // First creation adds it
  64. auto buf2 = buffer_manager->create_buffer_no_window("duplicate"); // Should return existing
  65. ASSERT_EQ(buffer_manager->get_all_buffer_info().size(), 1); // Size should not increase
  66. ASSERT_EQ(buf1, buf2); // Should return the same shared_ptr
  67. ASSERT_EQ(buf2->name(), "duplicate");
  68. }