//===-- OptionsWithRawTest.cpp --------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "gtest/gtest.h"

#include "lldb/Utility/Args.h"
#include "lldb/Utility/StringList.h"

using namespace lldb_private;

TEST(OptionsWithRawTest, EmptyInput) {
  // An empty string is just an empty suffix without any arguments.
  OptionsWithRaw args("");
  ASSERT_FALSE(args.HasArgs());
  ASSERT_STREQ(args.GetRawPart().c_str(), "");
}

TEST(OptionsWithRawTest, SingleWhitespaceInput) {
  // Only whitespace is just a suffix.
  OptionsWithRaw args(" ");
  ASSERT_FALSE(args.HasArgs());
  ASSERT_STREQ(args.GetRawPart().c_str(), " ");
}

TEST(OptionsWithRawTest, WhitespaceInput) {
  // Only whitespace is just a suffix.
  OptionsWithRaw args("  ");
  ASSERT_FALSE(args.HasArgs());
  ASSERT_STREQ(args.GetRawPart().c_str(), "  ");
}

TEST(OptionsWithRawTest, ArgsButNoDelimiter) {
  // This counts as a suffix because there is no -- at the end.
  OptionsWithRaw args("-foo bar");
  ASSERT_FALSE(args.HasArgs());
  ASSERT_STREQ(args.GetRawPart().c_str(), "-foo bar");
}

TEST(OptionsWithRawTest, ArgsButNoLeadingDash) {
  // No leading dash means we have no arguments.
  OptionsWithRaw args("foo bar --");
  ASSERT_FALSE(args.HasArgs());
  ASSERT_STREQ(args.GetRawPart().c_str(), "foo bar --");
}

TEST(OptionsWithRawTest, QuotedSuffix) {
  // We need to have a way to escape the -- to make it usable as an argument.
  OptionsWithRaw args("-foo \"--\" bar");
  ASSERT_FALSE(args.HasArgs());
  ASSERT_STREQ(args.GetRawPart().c_str(), "-foo \"--\" bar");
}

TEST(OptionsWithRawTest, EmptySuffix) {
  // An empty suffix with arguments.
  OptionsWithRaw args("-foo --");
  ASSERT_TRUE(args.HasArgs());
  ASSERT_EQ(args.GetArgString(), "-foo ");
  ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo --");

  auto ref = args.GetArgs().GetArgumentArrayRef();
  ASSERT_EQ(1u, ref.size());
  EXPECT_STREQ("-foo", ref[0]);

  ASSERT_STREQ(args.GetRawPart().c_str(), "");
}

TEST(OptionsWithRawTest, EmptySuffixSingleWhitespace) {
  // A single whitespace also countas as an empty suffix (because that usually
  // separates the suffix from the double dash.
  OptionsWithRaw args("-foo -- ");
  ASSERT_TRUE(args.HasArgs());
  ASSERT_EQ(args.GetArgString(), "-foo ");
  ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");

  auto ref = args.GetArgs().GetArgumentArrayRef();
  ASSERT_EQ(1u, ref.size());
  EXPECT_STREQ("-foo", ref[0]);

  ASSERT_STREQ(args.GetRawPart().c_str(), "");
}

TEST(OptionsWithRawTest, WhitespaceSuffix) {
  // A single whtiespace character as a suffix.
  OptionsWithRaw args("-foo --  ");
  ASSERT_TRUE(args.HasArgs());
  ASSERT_EQ(args.GetArgString(), "-foo ");
  ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");

  auto ref = args.GetArgs().GetArgumentArrayRef();
  ASSERT_EQ(1u, ref.size());
  EXPECT_STREQ("-foo", ref[0]);

  ASSERT_STREQ(args.GetRawPart().c_str(), " ");
}

TEST(OptionsWithRawTest, LeadingSpaceArgs) {
  // Whitespace before the first dash needs to be ignored.
  OptionsWithRaw args(" -foo -- bar");
  ASSERT_TRUE(args.HasArgs());
  ASSERT_EQ(args.GetArgString(), " -foo ");
  ASSERT_EQ(args.GetArgStringWithDelimiter(), " -foo -- ");

  auto ref = args.GetArgs().GetArgumentArrayRef();
  ASSERT_EQ(1u, ref.size());
  EXPECT_STREQ("-foo", ref[0]);

  ASSERT_STREQ(args.GetRawPart().c_str(), "bar");
}

TEST(OptionsWithRawTest, SingleWordSuffix) {
  // A single word as a suffix.
  OptionsWithRaw args("-foo -- bar");
  ASSERT_TRUE(args.HasArgs());
  ASSERT_EQ(args.GetArgString(), "-foo ");
  ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");

  auto ref = args.GetArgs().GetArgumentArrayRef();
  ASSERT_EQ(1u, ref.size());
  EXPECT_STREQ("-foo", ref[0]);

  ASSERT_STREQ(args.GetRawPart().c_str(), "bar");
}

TEST(OptionsWithRawTest, MultiWordSuffix) {
  // Multiple words as a suffix.
  OptionsWithRaw args("-foo -- bar baz");
  ASSERT_TRUE(args.HasArgs());
  ASSERT_EQ(args.GetArgString(), "-foo ");
  ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");

  auto ref = args.GetArgs().GetArgumentArrayRef();
  ASSERT_EQ(1u, ref.size());
  EXPECT_STREQ("-foo", ref[0]);

  ASSERT_STREQ(args.GetRawPart().c_str(), "bar baz");
}

TEST(OptionsWithRawTest, UnterminatedQuote) {
  // A quote character in the suffix shouldn't influence the parsing.
  OptionsWithRaw args("-foo -- bar \" ");
  ASSERT_TRUE(args.HasArgs());
  ASSERT_EQ(args.GetArgString(), "-foo ");
  ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");

  auto ref = args.GetArgs().GetArgumentArrayRef();
  ASSERT_EQ(1u, ref.size());
  EXPECT_STREQ("-foo", ref[0]);

  ASSERT_STREQ(args.GetRawPart().c_str(), "bar \" ");
}

TEST(OptionsWithRawTest, TerminatedQuote) {
  // A part of the suffix is quoted, which shouldn't influence the parsing.
  OptionsWithRaw args("-foo -- bar \"a\" ");
  ASSERT_TRUE(args.HasArgs());
  ASSERT_EQ(args.GetArgString(), "-foo ");
  ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");

  auto ref = args.GetArgs().GetArgumentArrayRef();
  ASSERT_EQ(1u, ref.size());
  EXPECT_STREQ("-foo", ref[0]);

  ASSERT_STREQ(args.GetRawPart().c_str(), "bar \"a\" ");
}

TEST(OptionsWithRawTest, EmptyArgsOnlySuffix) {
  // Empty argument list, but we have a suffix.
  OptionsWithRaw args("-- bar");
  ASSERT_TRUE(args.HasArgs());
  ASSERT_EQ(args.GetArgString(), "");
  ASSERT_EQ(args.GetArgStringWithDelimiter(), "-- ");

  auto ref = args.GetArgs().GetArgumentArrayRef();
  ASSERT_EQ(0u, ref.size());

  ASSERT_STREQ(args.GetRawPart().c_str(), "bar");
}
