|  | // Copyright 2016 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 "tools/gn/test_with_scope.h" | 
|  | #include "util/test/test.h" | 
|  |  | 
|  | // Checks that variables used inside template definitions aren't reported | 
|  | // unused if they were declared above the template. | 
|  | TEST(FunctionTemplate, MarkUsed) { | 
|  | TestWithScope setup; | 
|  | TestParseInput input( | 
|  | "a = 1\n"  // Unused outside of template. | 
|  | "template(\"templ\") {\n" | 
|  | "  print(a)\n" | 
|  | "}\n"); | 
|  | ASSERT_FALSE(input.has_error()) << input.parse_err().message(); | 
|  |  | 
|  | Err err; | 
|  | input.parsed()->Execute(setup.scope(), &err); | 
|  | ASSERT_FALSE(err.has_error()) << err.message(); | 
|  |  | 
|  | // Normally the loader calls CheckForUnusedVars() when it loads a file | 
|  | // since normal blocks don't do this check. To avoid having to make this | 
|  | // test much more complicated, just explicitly do the check to make sure | 
|  | // things are marked properly. | 
|  | setup.scope()->CheckForUnusedVars(&err); | 
|  | EXPECT_FALSE(err.has_error()); | 
|  | } |