source_buffer_test.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 "llvm/ADT/SmallString.h"
  7. #include "llvm/Support/VirtualFileSystem.h"
  8. #include "llvm/Support/raw_ostream.h"
  9. namespace Carbon::Testing {
  10. namespace {
  11. static constexpr llvm::StringLiteral TestFileName = "test.carbon";
  12. TEST(SourceBufferTest, MissingFile) {
  13. llvm::vfs::InMemoryFileSystem fs;
  14. auto buffer = SourceBuffer::CreateFromFile(fs, TestFileName);
  15. EXPECT_FALSE(buffer.ok());
  16. }
  17. TEST(SourceBufferTest, SimpleFile) {
  18. llvm::vfs::InMemoryFileSystem fs;
  19. CARBON_CHECK(fs.addFile(TestFileName, /*ModificationTime=*/0,
  20. llvm::MemoryBuffer::getMemBuffer("Hello World")));
  21. auto buffer = SourceBuffer::CreateFromFile(fs, TestFileName);
  22. ASSERT_TRUE(buffer.ok()) << "Error message: " << buffer.error();
  23. EXPECT_EQ(TestFileName, buffer->filename());
  24. EXPECT_EQ("Hello World", buffer->text());
  25. }
  26. TEST(SourceBufferTest, NoNull) {
  27. llvm::vfs::InMemoryFileSystem fs;
  28. static constexpr char NoNull[3] = {'a', 'b', 'c'};
  29. CARBON_CHECK(fs.addFile(
  30. TestFileName, /*ModificationTime=*/0,
  31. llvm::MemoryBuffer::getMemBuffer(llvm::StringRef(NoNull, sizeof(NoNull)),
  32. /*BufferName=*/"",
  33. /*RequiresNullTerminator=*/false)));
  34. auto buffer = SourceBuffer::CreateFromFile(fs, TestFileName);
  35. ASSERT_TRUE(buffer.ok()) << "Error message: " << buffer.error();
  36. EXPECT_EQ(TestFileName, buffer->filename());
  37. EXPECT_EQ("abc", buffer->text());
  38. }
  39. TEST(SourceBufferTest, EmptyFile) {
  40. llvm::vfs::InMemoryFileSystem fs;
  41. CARBON_CHECK(fs.addFile(TestFileName, /*ModificationTime=*/0,
  42. llvm::MemoryBuffer::getMemBuffer("")));
  43. auto buffer = SourceBuffer::CreateFromFile(fs, TestFileName);
  44. ASSERT_TRUE(buffer.ok()) << "Error message: " << buffer.error();
  45. EXPECT_EQ(TestFileName, buffer->filename());
  46. EXPECT_EQ("", buffer->text());
  47. }
  48. } // namespace
  49. } // namespace Carbon::Testing