1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "testing/gtest/include/gtest/gtest.h"
6#include "tools/gn/build_settings.h"
7#include "tools/gn/scope_per_file_provider.h"
8#include "tools/gn/settings.h"
9#include "tools/gn/test_with_scope.h"
10#include "tools/gn/toolchain.h"
11#include "tools/gn/variables.h"
12
13TEST(ScopePerFileProvider, Expected) {
14  TestWithScope test;
15
16// Prevent horrible wrapping of calls below.
17#define GPV(val) provider.GetProgrammaticValue(val)->string_value()
18
19  // Test the default toolchain.
20  {
21    Scope scope(test.settings());
22    scope.set_source_dir(SourceDir("//source/"));
23    ScopePerFileProvider provider(&scope, true);
24
25    EXPECT_EQ("//toolchain:default",    GPV(variables::kCurrentToolchain));
26    // TODO(brettw) this test harness does not set up the Toolchain manager
27    // which is the source of this value, so we can't test this yet.
28    //EXPECT_EQ("//toolchain:default",    GPV(variables::kDefaultToolchain));
29    EXPECT_EQ("//out/Debug",            GPV(variables::kRootBuildDir));
30    EXPECT_EQ("//out/Debug/gen",        GPV(variables::kRootGenDir));
31    EXPECT_EQ("//out/Debug",            GPV(variables::kRootOutDir));
32    EXPECT_EQ("//out/Debug/gen/source", GPV(variables::kTargetGenDir));
33    EXPECT_EQ("//out/Debug/obj/source", GPV(variables::kTargetOutDir));
34  }
35
36  // Test some with an alternate toolchain.
37  {
38    Settings settings(test.build_settings(), "tc/");
39    Toolchain toolchain(&settings, Label(SourceDir("//toolchain/"), "tc"));
40    settings.set_toolchain_label(toolchain.label());
41
42    Scope scope(&settings);
43    scope.set_source_dir(SourceDir("//source/"));
44    ScopePerFileProvider provider(&scope, true);
45
46    EXPECT_EQ("//toolchain:tc",            GPV(variables::kCurrentToolchain));
47    // See above.
48    //EXPECT_EQ("//toolchain:default",       GPV(variables::kDefaultToolchain));
49    EXPECT_EQ("//out/Debug",               GPV(variables::kRootBuildDir));
50    EXPECT_EQ("//out/Debug/tc/gen",        GPV(variables::kRootGenDir));
51    EXPECT_EQ("//out/Debug/tc",            GPV(variables::kRootOutDir));
52    EXPECT_EQ("//out/Debug/tc/gen/source", GPV(variables::kTargetGenDir));
53    EXPECT_EQ("//out/Debug/tc/obj/source", GPV(variables::kTargetOutDir));
54  }
55}
56