blob: 1137d3b46c6de402b62ada2fe75c7038949a0405 [file]
// Copyright (c) 2013 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 "testing/gtest/include/gtest/gtest.h"
#include "tools/gn/build_settings.h"
#include "tools/gn/scope_per_file_provider.h"
#include "tools/gn/settings.h"
#include "tools/gn/toolchain.h"
#include "tools/gn/variables.h"
TEST(ScopePerFileProvider, Expected) {
Err err;
BuildSettings build_settings;
build_settings.toolchain_manager().SetDefaultToolchainUnlocked(
Label(SourceDir("//toolchain/"), "default", SourceDir(), ""),
LocationRange(), &err);
EXPECT_FALSE(err.has_error());
build_settings.SetBuildDir(SourceDir("//out/Debug/"));
// Prevent horrible wrapping of calls below.
#define GPV(val) provider.GetProgrammaticValue(val)->string_value()
// Test the default toolchain.
{
Toolchain toolchain(Label(SourceDir("//toolchain/"), "tc"));
Settings settings(&build_settings, &toolchain, std::string());
Scope scope(&settings);
scope.set_source_dir(SourceDir("//source/"));
ScopePerFileProvider provider(&scope);
EXPECT_EQ("//toolchain:tc", GPV(variables::kCurrentToolchain));
EXPECT_EQ("//toolchain:default", GPV(variables::kDefaultToolchain));
EXPECT_EQ("//out/Debug", GPV(variables::kRootBuildDir));
EXPECT_EQ("//out/Debug/gen", GPV(variables::kRootGenDir));
EXPECT_EQ("//out/Debug", GPV(variables::kRootOutDir));
EXPECT_EQ("//out/Debug/gen/source", GPV(variables::kTargetGenDir));
EXPECT_EQ("//out/Debug/obj/source", GPV(variables::kTargetOutDir));
}
// Test some with an alternate toolchain.
{
Toolchain toolchain(Label(SourceDir("//toolchain/"), "tc"));
Settings settings(&build_settings, &toolchain, "tc");
Scope scope(&settings);
scope.set_source_dir(SourceDir("//source/"));
ScopePerFileProvider provider(&scope);
EXPECT_EQ("//out/Debug", GPV(variables::kRootBuildDir));
EXPECT_EQ("//out/Debug/tc/gen", GPV(variables::kRootGenDir));
EXPECT_EQ("//out/Debug/tc", GPV(variables::kRootOutDir));
EXPECT_EQ("//out/Debug/tc/gen/source", GPV(variables::kTargetGenDir));
EXPECT_EQ("//out/Debug/tc/obj/source", GPV(variables::kTargetOutDir));
}
}