source_buffer_test.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. #include "toolchain/source/source_buffer.h"
  5. #include <gtest/gtest.h>
  6. #include "common/check.h"
  7. #include "llvm/Support/VirtualFileSystem.h"
  8. #include "toolchain/diagnostics/emitter.h"
  9. namespace Carbon {
  10. namespace {
  11. static constexpr llvm::StringLiteral TestFileName = "test.carbon";
  12. TEST(SourceBufferTest, MissingFile) {
  13. llvm::vfs::InMemoryFileSystem fs;
  14. auto buffer = SourceBuffer::MakeFromFile(fs, TestFileName,
  15. Diagnostics::ConsoleConsumer());
  16. EXPECT_FALSE(buffer);
  17. }
  18. TEST(SourceBufferTest, SimpleFile) {
  19. llvm::vfs::InMemoryFileSystem fs;
  20. CARBON_CHECK(fs.addFile(TestFileName, /*ModificationTime=*/0,
  21. llvm::MemoryBuffer::getMemBuffer("Hello World")));
  22. auto buffer = SourceBuffer::MakeFromFile(fs, TestFileName,
  23. Diagnostics::ConsoleConsumer());
  24. ASSERT_TRUE(buffer);
  25. EXPECT_EQ(TestFileName, buffer->filename());
  26. EXPECT_EQ("Hello World", buffer->text());
  27. }
  28. TEST(SourceBufferTest, NoNull) {
  29. llvm::vfs::InMemoryFileSystem fs;
  30. static constexpr char NoNull[3] = {'a', 'b', 'c'};
  31. CARBON_CHECK(fs.addFile(
  32. TestFileName, /*ModificationTime=*/0,
  33. llvm::MemoryBuffer::getMemBuffer(llvm::StringRef(NoNull, sizeof(NoNull)),
  34. /*BufferName=*/"",
  35. /*RequiresNullTerminator=*/false)));
  36. auto buffer = SourceBuffer::MakeFromFile(fs, TestFileName,
  37. Diagnostics::ConsoleConsumer());
  38. ASSERT_TRUE(buffer);
  39. EXPECT_EQ(TestFileName, buffer->filename());
  40. EXPECT_EQ("abc", buffer->text());
  41. }
  42. TEST(SourceBufferTest, EmptyFile) {
  43. llvm::vfs::InMemoryFileSystem fs;
  44. CARBON_CHECK(fs.addFile(TestFileName, /*ModificationTime=*/0,
  45. llvm::MemoryBuffer::getMemBuffer("")));
  46. auto buffer = SourceBuffer::MakeFromFile(fs, TestFileName,
  47. Diagnostics::ConsoleConsumer());
  48. ASSERT_TRUE(buffer);
  49. EXPECT_EQ(TestFileName, buffer->filename());
  50. EXPECT_EQ("", buffer->text());
  51. }
  52. } // namespace
  53. } // namespace Carbon