70 lines
2.2 KiB
C++
70 lines
2.2 KiB
C++
#include <catch2/catch_test_macros.hpp>
|
|
|
|
import cargoxx.util;
|
|
import std;
|
|
|
|
using cargoxx::util::Error;
|
|
using cargoxx::util::ErrorCode;
|
|
using cargoxx::util::format;
|
|
|
|
TEST_CASE("format renders code, message, and trailing newline", "[util][format]") {
|
|
Error e{ErrorCode::ManifestNotFound, "manifest not found", "", std::nullopt, std::nullopt};
|
|
REQUIRE(format(e) == "error[E0001]: manifest not found\n");
|
|
}
|
|
|
|
TEST_CASE("format pads error codes to four digits", "[util][format]") {
|
|
Error e{ErrorCode::Internal, "boom", "", std::nullopt, std::nullopt};
|
|
REQUIRE(format(e) == "error[E0100]: boom\n");
|
|
}
|
|
|
|
TEST_CASE("format includes location with line:col when present", "[util][format]") {
|
|
Error e{
|
|
ErrorCode::ManifestParseError,
|
|
"syntax error",
|
|
"",
|
|
std::filesystem::path{"Cargoxx.toml"},
|
|
std::pair{7, 1},
|
|
};
|
|
REQUIRE(format(e) == "error[E0002]: syntax error\n"
|
|
" --> Cargoxx.toml:7:1\n");
|
|
}
|
|
|
|
TEST_CASE("format includes location without line:col when only path is set", "[util][format]") {
|
|
Error e{
|
|
ErrorCode::LayoutNoTarget,
|
|
"no target found",
|
|
"",
|
|
std::filesystem::path{"./"},
|
|
std::nullopt,
|
|
};
|
|
REQUIRE(format(e) == "error[E0020]: no target found\n"
|
|
" --> ./\n");
|
|
}
|
|
|
|
TEST_CASE("format appends a hint line when hint is non-empty", "[util][format]") {
|
|
Error e{
|
|
ErrorCode::LayoutNoTarget,
|
|
"no target found",
|
|
"run `cargoxx new --lib <name>` to create a library project",
|
|
std::nullopt,
|
|
std::nullopt,
|
|
};
|
|
REQUIRE(format(e) ==
|
|
"error[E0020]: no target found\n"
|
|
" hint: run `cargoxx new --lib <name>` to create a library project\n");
|
|
}
|
|
|
|
TEST_CASE("format combines location and hint", "[util][format]") {
|
|
Error e{
|
|
ErrorCode::LinkdbUnknownPackage,
|
|
"package not in link database",
|
|
"file an issue or supply a manual recipe",
|
|
std::filesystem::path{"Cargoxx.toml"},
|
|
std::pair{7, 1},
|
|
};
|
|
REQUIRE(format(e) ==
|
|
"error[E0060]: package not in link database\n"
|
|
" --> Cargoxx.toml:7:1\n"
|
|
" hint: file an issue or supply a manual recipe\n");
|
|
}
|