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/scheduler.h"
7#include "tools/gn/scope.h"
8#include "tools/gn/test_with_scope.h"
9
10
11// Checks that we find unused identifiers in targets.
12TEST(FunctionsTarget, CheckUnused) {
13  Scheduler scheduler;
14  TestWithScope setup;
15
16  // The target generator needs a place to put the targets or it will fail.
17  Scope::ItemVector item_collector;
18  setup.scope()->set_item_collector(&item_collector);
19
20  // Test a good one first.
21  TestParseInput good_input(
22      "source_set(\"foo\") {\n"
23      "}\n");
24  ASSERT_FALSE(good_input.has_error());
25  Err err;
26  good_input.parsed()->Execute(setup.scope(), &err);
27  ASSERT_FALSE(err.has_error()) << err.message();
28
29  // Test a source set (this covers everything but component) with an unused
30  // variable.
31  TestParseInput source_set_input(
32      "source_set(\"foo\") {\n"
33      "  unused = 5\n"
34      "}\n");
35  ASSERT_FALSE(source_set_input.has_error());
36  err = Err();
37  source_set_input.parsed()->Execute(setup.scope(), &err);
38  ASSERT_TRUE(err.has_error());
39
40  // Test a component, which is a different code path.
41  TestParseInput component_input(
42      "component_mode = \"static_library\"\n"
43      "component(\"bar\") {\n"
44      "  unused = 5\n"
45      "}\n");
46  ASSERT_FALSE(component_input.has_error());
47  err = Err();
48  component_input.parsed()->Execute(setup.scope(), &err);
49  ASSERT_TRUE(err.has_error()) << err.message();
50}
51