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