mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-25 16:30:13 +01:00
Rearranges driver logic into CompilationUnits in order to associate artifacts from the various stages of compilation. Note, I'm not totally sure what the right thing to do is for lower/codegen, so I'm just doing a rote change there for now that mirrors prior phases (this is all the code supports anyways, so is probably right for now regardless). SourceBuffer error output is moved local for consistency with other steps, and so that it's less ambiguous whether the error should be expected to already include a filename.
65 lines
2.0 KiB
C++
65 lines
2.0 KiB
C++
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
#include "toolchain/source/source_buffer.h"
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
#include "common/check.h"
|
|
#include "llvm/Support/VirtualFileSystem.h"
|
|
|
|
namespace Carbon::Testing {
|
|
namespace {
|
|
|
|
static constexpr llvm::StringLiteral TestFileName = "test.carbon";
|
|
|
|
TEST(SourceBufferTest, MissingFile) {
|
|
llvm::vfs::InMemoryFileSystem fs;
|
|
auto buffer = SourceBuffer::CreateFromFile(fs, llvm::errs(), TestFileName);
|
|
EXPECT_FALSE(buffer);
|
|
}
|
|
|
|
TEST(SourceBufferTest, SimpleFile) {
|
|
llvm::vfs::InMemoryFileSystem fs;
|
|
CARBON_CHECK(fs.addFile(TestFileName, /*ModificationTime=*/0,
|
|
llvm::MemoryBuffer::getMemBuffer("Hello World")));
|
|
|
|
auto buffer = SourceBuffer::CreateFromFile(fs, llvm::errs(), TestFileName);
|
|
ASSERT_TRUE(buffer);
|
|
|
|
EXPECT_EQ(TestFileName, buffer->filename());
|
|
EXPECT_EQ("Hello World", buffer->text());
|
|
}
|
|
|
|
TEST(SourceBufferTest, NoNull) {
|
|
llvm::vfs::InMemoryFileSystem fs;
|
|
static constexpr char NoNull[3] = {'a', 'b', 'c'};
|
|
CARBON_CHECK(fs.addFile(
|
|
TestFileName, /*ModificationTime=*/0,
|
|
llvm::MemoryBuffer::getMemBuffer(llvm::StringRef(NoNull, sizeof(NoNull)),
|
|
/*BufferName=*/"",
|
|
/*RequiresNullTerminator=*/false)));
|
|
|
|
auto buffer = SourceBuffer::CreateFromFile(fs, llvm::errs(), TestFileName);
|
|
ASSERT_TRUE(buffer);
|
|
|
|
EXPECT_EQ(TestFileName, buffer->filename());
|
|
EXPECT_EQ("abc", buffer->text());
|
|
}
|
|
|
|
TEST(SourceBufferTest, EmptyFile) {
|
|
llvm::vfs::InMemoryFileSystem fs;
|
|
CARBON_CHECK(fs.addFile(TestFileName, /*ModificationTime=*/0,
|
|
llvm::MemoryBuffer::getMemBuffer("")));
|
|
|
|
auto buffer = SourceBuffer::CreateFromFile(fs, llvm::errs(), TestFileName);
|
|
ASSERT_TRUE(buffer);
|
|
|
|
EXPECT_EQ(TestFileName, buffer->filename());
|
|
EXPECT_EQ("", buffer->text());
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace Carbon::Testing
|