blob: 23657eeca91c232b04d5d685b0a53524855b262d [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "gn/rust_project_writer_helpers.h"
#include "base/strings/string_util.h"
#include "gn/filesystem_utils.h"
#include "gn/string_output_buffer.h"
#include "gn/test_with_scheduler.h"
#include "gn/test_with_scope.h"
#include "util/build_config.h"
#include "util/test/test.h"
using RustProjectWriterHelper = TestWithScheduler;
TEST_F(RustProjectWriterHelper, WriteCrates) {
TestWithScope setup;
CrateList crates;
Crate dep = Crate(SourceFile("/root/tortoise/lib.rs"), 0, "//tortoise:bar", "2015");
Crate target = Crate(SourceFile("/root/hare/lib.rs"), 1, "//hare:bar", "2015");
target.AddDependency(0, "tortoise");
target.AddConfigItem("unix");
target.AddConfigItem("feature=\\\"test\\\"");
crates.push_back(dep);
crates.push_back(target);
std::ostringstream stream;
WriteCrates(setup.build_settings(), crates, stream);
std::string out = stream.str();
#if defined(OS_WIN)
base::ReplaceSubstringsAfterOffset(&out, 0, "\r\n", "\n");
#endif
const char expected_json[] =
"{\n"
" \"roots\": [\n"
" \"/root/tortoise/\",\n"
" \"/root/hare/\"\n"
" ],\n"
" \"crates\": [\n"
" {\n"
" \"crate_id\": 0,\n"
" \"root_module\": \"/root/tortoise/lib.rs\",\n"
" \"label\": \"//tortoise:bar\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2015\",\n"
" \"cfg\": [\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 1,\n"
" \"root_module\": \"/root/hare/lib.rs\",\n"
" \"label\": \"//hare:bar\",\n"
" \"deps\": [\n"
" {\n"
" \"crate\": 0,\n"
" \"name\": \"tortoise\"\n"
" }\n"
" ],\n"
" \"edition\": \"2015\",\n"
" \"cfg\": [\n"
" \"unix\",\n"
" \"feature=\\\"test\\\"\"\n"
" ]\n"
" }\n"
" ]\n"
"}\n";
EXPECT_EQ(expected_json, out);
}
TEST_F(RustProjectWriterHelper, SysrootDepsAreCorrect) {
TestWithScope setup;
setup.build_settings()->SetRootPath(UTF8ToFilePath("/root"));
SysrootIndexMap sysroot_lookup;
CrateList crates;
AddSysroot(setup.build_settings(), "sysroot", sysroot_lookup, crates);
std::ostringstream stream;
WriteCrates(setup.build_settings(), crates, stream);
std::string out = stream.str();
#if defined(OS_WIN)
base::ReplaceSubstringsAfterOffset(&out, 0, "\r\n", "\n");
#endif
const char expected_json[] =
"{\n"
" \"roots\": [\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libcore/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/liballoc/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libpanic_abort/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libunwind/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libstd/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libcollections/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/liblibc/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libpanic_unwind/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libproc_macro/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_unicode/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libstd_unicode/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libtest/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/liballoc_jemalloc/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/liballoc_system/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libcompiler_builtins/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libgetopts/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libbuild_helper/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_asan/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_lsan/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_msan/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_tsan/\",\n"
" \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libsyntax/\"\n"
" ],\n"
" \"crates\": [\n"
" {\n"
" \"crate_id\": 0,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libcore/lib.rs\",\n"
" \"label\": \"core\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 1,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/liballoc/lib.rs\",\n"
" \"label\": \"alloc\",\n"
" \"deps\": [\n"
" {\n"
" \"crate\": 0,\n"
" \"name\": \"core\"\n"
" }\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 2,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libpanic_abort/lib.rs\",\n"
" \"label\": \"panic_abort\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 3,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libunwind/lib.rs\",\n"
" \"label\": \"unwind\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 4,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libstd/lib.rs\",\n"
" \"label\": \"std\",\n"
" \"deps\": [\n"
" {\n"
" \"crate\": 1,\n"
" \"name\": \"alloc\"\n"
" },\n"
" {\n"
" \"crate\": 0,\n"
" \"name\": \"core\"\n"
" },\n"
" {\n"
" \"crate\": 2,\n"
" \"name\": \"panic_abort\"\n"
" },\n"
" {\n"
" \"crate\": 3,\n"
" \"name\": \"unwind\"\n"
" }\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 5,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libcollections/lib.rs\",\n"
" \"label\": \"collections\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 6,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/liblibc/lib.rs\",\n"
" \"label\": \"libc\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 7,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libpanic_unwind/lib.rs\",\n"
" \"label\": \"panic_unwind\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 8,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libproc_macro/lib.rs\",\n"
" \"label\": \"proc_macro\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 9,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_unicode/lib.rs\",\n"
" \"label\": \"rustc_unicode\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 10,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libstd_unicode/lib.rs\",\n"
" \"label\": \"std_unicode\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 11,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libtest/lib.rs\",\n"
" \"label\": \"test\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 12,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/liballoc_jemalloc/lib.rs\",\n"
" \"label\": \"alloc_jemalloc\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 13,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/liballoc_system/lib.rs\",\n"
" \"label\": \"alloc_system\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 14,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libcompiler_builtins/lib.rs\",\n"
" \"label\": \"compiler_builtins\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 15,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libgetopts/lib.rs\",\n"
" \"label\": \"getopts\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 16,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libbuild_helper/lib.rs\",\n"
" \"label\": \"build_helper\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 17,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_asan/lib.rs\",\n"
" \"label\": \"rustc_asan\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 18,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_lsan/lib.rs\",\n"
" \"label\": \"rustc_lsan\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 19,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_msan/lib.rs\",\n"
" \"label\": \"rustc_msan\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 20,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/librustc_tsan/lib.rs\",\n"
" \"label\": \"rustc_tsan\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" },\n"
" {\n"
" \"crate_id\": 21,\n"
" \"root_module\": \"/root/out/Debug/sysroot/lib/rustlib/src/rust/src/libsyntax/lib.rs\",\n"
" \"label\": \"syntax\",\n"
" \"deps\": [\n"
" ],\n"
" \"edition\": \"2018\",\n"
" \"cfg\": [\n"
" \"debug_assertions\"\n"
" ]\n"
" }\n"
" ]\n"
"}\n";
;
EXPECT_EQ(expected_json, out);
}