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/err.h" 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "tools/gn/substitution_pattern.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(SubstitutionPattern, ParseLiteral) { 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SubstitutionPattern pattern; 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Err err; 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(pattern.Parse("This is a literal", NULL, &err)); 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(err.has_error()); 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(1u, pattern.ranges().size()); 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(SUBSTITUTION_LITERAL, pattern.ranges()[0].type); 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("This is a literal", pattern.ranges()[0].literal); 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST(SubstitutionPattern, ParseComplex) { 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SubstitutionPattern pattern; 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Err err; 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(pattern.Parse( 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "AA{{source}}{{source_name_part}}BB{{source_file_part}}", NULL, &err)); 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(err.has_error()); 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(5u, pattern.ranges().size()); 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(SUBSTITUTION_LITERAL, pattern.ranges()[0].type); 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("AA", pattern.ranges()[0].literal); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(SUBSTITUTION_SOURCE, pattern.ranges()[1].type); 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(SUBSTITUTION_SOURCE_NAME_PART, pattern.ranges()[2].type); 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(SUBSTITUTION_LITERAL, pattern.ranges()[3].type); 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ("BB", pattern.ranges()[3].literal); 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(SUBSTITUTION_SOURCE_FILE_PART, pattern.ranges()[4].type); 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST(SubstitutionPattern, ParseErrors) { 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SubstitutionPattern pattern; 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Err err; 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(pattern.Parse("AA{{source", NULL, &err)); 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(err.has_error()); 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) err = Err(); 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(pattern.Parse("{{source_of_evil}}", NULL, &err)); 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(err.has_error()); 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) err = Err(); 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(pattern.Parse("{{source{{source}}", NULL, &err)); 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(err.has_error()); 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 50