15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 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/test_with_scope.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Tests that actions can't have output substitutions. 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(ActionTargetGenerator, ActionOutputSubstitutions) { 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Scheduler scheduler; 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestWithScope setup; 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Scope::ItemVector items_; 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) setup.scope()->set_item_collector(&items_); 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // First test one with no substitutions, this should be valid. 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestParseInput input_good( 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "action(\"foo\") {\n" 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " script = \"//foo.py\"\n" 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " sources = [ \"//bar.txt\" ]\n" 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " outputs = [ \"//out/Debug/one.txt\" ]\n" 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "}"); 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(input_good.has_error()); 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // This should run fine. 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Err err; 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) input_good.parsed()->Execute(setup.scope(), &err); 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(err.has_error()) << err.message(); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Same thing with a pattern in the output should fail. 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestParseInput input_bad( 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "action(\"foo\") {\n" 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " script = \"//foo.py\"\n" 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " sources = [ \"//bar.txt\" ]\n" 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) " outputs = [ \"//out/Debug/{{source_name_part}}.txt\" ]\n" 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "}"); 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_FALSE(input_bad.has_error()); 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // This should run fine. 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) input_bad.parsed()->Execute(setup.scope(), &err); 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(err.has_error()); 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 43