15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "tools/gn/scheduler.h" 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "tools/gn/scope.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "tools/gn/test_with_scope.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Checks that we find unused identifiers in targets. 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(FunctionsTarget, CheckUnused) { 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Scheduler scheduler; 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestWithScope setup; 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // The target generator needs a place to put the targets or it will fail. 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Scope::ItemVector item_collector; 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) setup.scope()->set_item_collector(&item_collector); 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Test a good one first. 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestParseInput good_input( 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "source_set(\"foo\") {\n" 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "}\n"); 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(good_input.has_error()); 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Err err; 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) good_input.parsed()->Execute(setup.scope(), &err); 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(err.has_error()) << err.message(); 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Test a source set (this covers everything but component) with an unused 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // variable. 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestParseInput source_set_input( 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "source_set(\"foo\") {\n" 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " unused = 5\n" 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "}\n"); 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(source_set_input.has_error()); 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) err = Err(); 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) source_set_input.parsed()->Execute(setup.scope(), &err); 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(err.has_error()); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Test a component, which is a different code path. 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestParseInput component_input( 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "component_mode = \"static_library\"\n" 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "component(\"bar\") {\n" 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " unused = 5\n" 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "}\n"); 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(component_input.has_error()); 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) err = Err(); 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) component_input.parsed()->Execute(setup.scope(), &err); 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(err.has_error()) << err.message(); 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 51