// Copyright 2014 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 <stddef.h>

#include "base/macros.h"
#include "test/test.h"
#include "tools/gn/err.h"
#include "tools/gn/label_pattern.h"
#include "tools/gn/value.h"

namespace {

struct PatternCase {
  const char* input;
  bool success;

  LabelPattern::Type type;
  const char* dir;
  const char* name;
  const char* toolchain;
};

}  // namespace

TEST(LabelPattern, PatternParse) {
  SourceDir current_dir("//foo/");
  PatternCase cases[] = {
    // Missing stuff.
    {"", false, LabelPattern::MATCH, "", "", ""},
    {":", false, LabelPattern::MATCH, "", "", ""},
    // Normal things.
    {":bar", true, LabelPattern::MATCH, "//foo/", "bar", ""},
    {"//la:bar", true, LabelPattern::MATCH, "//la/", "bar", ""},
    {"*", true, LabelPattern::RECURSIVE_DIRECTORY, "", "", ""},
    {":*", true, LabelPattern::DIRECTORY, "//foo/", "", ""},
    {"la:*", true, LabelPattern::DIRECTORY, "//foo/la/", "", ""},
    {"la/*:*", true, LabelPattern::RECURSIVE_DIRECTORY, "//foo/la/", "", ""},
    {"//la:*", true, LabelPattern::DIRECTORY, "//la/", "", ""},
    {"./*", true, LabelPattern::RECURSIVE_DIRECTORY, "//foo/", "", ""},
    {"foo/*", true, LabelPattern::RECURSIVE_DIRECTORY, "//foo/foo/", "", ""},
    {"//l/*", true, LabelPattern::RECURSIVE_DIRECTORY, "//l/", "", ""},
    // Toolchains.
    {"//foo()", true, LabelPattern::MATCH, "//foo/", "foo", ""},
    {"//foo(//bar)", true, LabelPattern::MATCH, "//foo/", "foo", "//bar:bar"},
    {"//foo:*(//bar)", true, LabelPattern::DIRECTORY, "//foo/", "",
     "//bar:bar"},
    {"//foo/*(//bar)", true, LabelPattern::RECURSIVE_DIRECTORY, "//foo/", "",
     "//bar:bar"},
    // Wildcards in invalid places.
    {"*foo*:bar", false, LabelPattern::MATCH, "", "", ""},
    {"foo*:*bar", false, LabelPattern::MATCH, "", "", ""},
    {"*foo:bar", false, LabelPattern::MATCH, "", "", ""},
    {"foo:bar*", false, LabelPattern::MATCH, "", "", ""},
    {"*:*", true, LabelPattern::RECURSIVE_DIRECTORY, "", "", ""},
    // Invalid toolchain stuff.
    {"//foo(//foo/bar:*)", false, LabelPattern::MATCH, "", "", ""},
    {"//foo/*(*)", false, LabelPattern::MATCH, "", "", ""},
    {"//foo(//bar", false, LabelPattern::MATCH, "", "", ""},
    // Absolute paths.
    {"/la/*", true, LabelPattern::RECURSIVE_DIRECTORY, "/la/", "", ""},
    {"/la:bar", true, LabelPattern::MATCH, "/la/", "bar", ""},
#if defined(OS_WIN)
    {"/C:/la/*", true, LabelPattern::RECURSIVE_DIRECTORY, "/C:/la/", "", ""},
    {"C:/la/*", true, LabelPattern::RECURSIVE_DIRECTORY, "/C:/la/", "", ""},
    {"/C:/la:bar", true, LabelPattern::MATCH, "/C:/la/", "bar", ""},
    {"C:/la:bar", true, LabelPattern::MATCH, "/C:/la/", "bar", ""},
    {"C:foo", true, LabelPattern::MATCH, "//foo/C/", "foo", ""},
#endif
  };

  for (size_t i = 0; i < arraysize(cases); i++) {
    const PatternCase& cur = cases[i];
    Err err;
    LabelPattern result =
        LabelPattern::GetPattern(current_dir, Value(nullptr, cur.input), &err);

    EXPECT_EQ(cur.success, !err.has_error()) << i << " " << cur.input;
    EXPECT_EQ(cur.type, result.type()) << i << " " << cur.input;
    EXPECT_EQ(cur.dir, result.dir().value()) << i << " " << cur.input;
    EXPECT_EQ(cur.name, result.name()) << i << " " << cur.input;
    EXPECT_EQ(cur.toolchain, result.toolchain().GetUserVisibleName(false))
        << i << " " << cur.input;
  }
}
