185 lines
5.1 KiB
C++
185 lines
5.1 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
#include "mozilla/ArrayUtils.h"
|
|
#include "mozilla/GeckoArgs.h"
|
|
|
|
using namespace mozilla;
|
|
using namespace mozilla::geckoargs;
|
|
|
|
static CommandLineArg<const char*> kCharParam{"-charParam", "charparam"};
|
|
static CommandLineArg<uint64_t> kUint64Param{"-Uint64Param", "uint64param"};
|
|
static CommandLineArg<bool> kFlag{"-Flag", "flag"};
|
|
|
|
template <size_t N>
|
|
bool CheckArgv(char** aArgv, const char* const (&aExpected)[N]) {
|
|
for (size_t i = 0; i < N; ++i) {
|
|
if (aArgv[i] == nullptr && aExpected[i] == nullptr) {
|
|
return true;
|
|
}
|
|
if (aArgv[i] == nullptr || aExpected[i] == nullptr) {
|
|
return false;
|
|
}
|
|
if (strcmp(aArgv[i], aExpected[i]) != 0) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
char kFirefox[] = "$HOME/bin/firefox/firefox-bin";
|
|
|
|
TEST(GeckoArgs, const_char_ptr)
|
|
{
|
|
char kCharParamStr[] = "-charParam";
|
|
char kCharParamValue[] = "paramValue";
|
|
|
|
{
|
|
char* argv[] = {kFirefox, kCharParamStr, kCharParamValue, nullptr};
|
|
int argc = std::size(argv);
|
|
EXPECT_EQ(argc, 4);
|
|
|
|
Maybe<const char*> charParam = kCharParam.Get(argc, argv);
|
|
EXPECT_TRUE(charParam.isSome());
|
|
EXPECT_EQ(*charParam, kCharParamValue);
|
|
|
|
const char* const expArgv[] = {kFirefox, nullptr};
|
|
EXPECT_TRUE(CheckArgv(argv, expArgv));
|
|
}
|
|
{
|
|
char kBlahBlah[] = "-blahblah";
|
|
char* argv[] = {kFirefox, kCharParamStr, kBlahBlah, nullptr};
|
|
int argc = std::size(argv);
|
|
EXPECT_EQ(argc, 4);
|
|
|
|
Maybe<const char*> charParam = kCharParam.Get(argc, argv);
|
|
EXPECT_TRUE(charParam.isNothing());
|
|
|
|
const char* const expArgv[] = {kFirefox, kBlahBlah, nullptr};
|
|
EXPECT_TRUE(CheckArgv(argv, expArgv));
|
|
}
|
|
{
|
|
geckoargs::ChildProcessArgs extraArgs;
|
|
EXPECT_EQ(extraArgs.mArgs.size(), 0U);
|
|
kCharParam.Put("ParamValue", extraArgs);
|
|
EXPECT_EQ(extraArgs.mArgs.size(), 2U);
|
|
EXPECT_EQ(extraArgs.mArgs[0], "-charParam");
|
|
EXPECT_EQ(extraArgs.mArgs[1], "ParamValue");
|
|
}
|
|
{
|
|
EXPECT_EQ(kCharParam.Name(), "-charParam");
|
|
}
|
|
}
|
|
|
|
TEST(GeckoArgs, uint64)
|
|
{
|
|
char kUint64ParamStr[] = "-Uint64Param";
|
|
|
|
{
|
|
char* argv[] = {kFirefox, kUint64ParamStr, nullptr};
|
|
int argc = std::size(argv);
|
|
EXPECT_EQ(argc, 3);
|
|
|
|
Maybe<uint64_t> uint64Param = kUint64Param.Get(argc, argv);
|
|
EXPECT_TRUE(uint64Param.isNothing());
|
|
|
|
const char* const expArgv[] = {kFirefox, nullptr};
|
|
EXPECT_TRUE(CheckArgv(argv, expArgv));
|
|
}
|
|
{
|
|
char* argv[] = {kFirefox, nullptr};
|
|
int argc = std::size(argv);
|
|
EXPECT_EQ(argc, 2);
|
|
|
|
Maybe<uint64_t> uint64Param = kUint64Param.Get(argc, argv);
|
|
EXPECT_TRUE(uint64Param.isNothing());
|
|
|
|
const char* const expArgv[] = {kFirefox, nullptr};
|
|
EXPECT_TRUE(CheckArgv(argv, expArgv));
|
|
}
|
|
{
|
|
char kUint64ParamValue[] = "42";
|
|
char* argv[] = {kFirefox, kUint64ParamStr, kUint64ParamValue, nullptr};
|
|
int argc = std::size(argv);
|
|
EXPECT_EQ(argc, 4);
|
|
|
|
Maybe<uint64_t> uint64Param = kUint64Param.Get(argc, argv);
|
|
EXPECT_TRUE(uint64Param.isSome());
|
|
EXPECT_EQ(*uint64Param, 42U);
|
|
|
|
const char* const expArgv[] = {kFirefox, nullptr};
|
|
EXPECT_TRUE(CheckArgv(argv, expArgv));
|
|
}
|
|
{
|
|
char kUint64ParamValue[] = "aa";
|
|
char* argv[] = {kFirefox, kUint64ParamStr, kUint64ParamValue, nullptr};
|
|
int argc = std::size(argv);
|
|
EXPECT_EQ(argc, 4);
|
|
|
|
Maybe<uint64_t> uint64Param = kUint64Param.Get(argc, argv);
|
|
EXPECT_TRUE(uint64Param.isNothing());
|
|
|
|
const char* const expArgv[] = {kFirefox, nullptr};
|
|
EXPECT_TRUE(CheckArgv(argv, expArgv));
|
|
}
|
|
{
|
|
geckoargs::ChildProcessArgs extraArgs;
|
|
EXPECT_EQ(extraArgs.mArgs.size(), 0U);
|
|
kUint64Param.Put(1234, extraArgs);
|
|
EXPECT_EQ(extraArgs.mArgs.size(), 2U);
|
|
EXPECT_EQ(extraArgs.mArgs[0], "-Uint64Param");
|
|
EXPECT_EQ(extraArgs.mArgs[1], "1234");
|
|
}
|
|
{
|
|
EXPECT_EQ(kUint64Param.Name(), "-Uint64Param");
|
|
}
|
|
}
|
|
|
|
TEST(GeckoArgs, bool)
|
|
{
|
|
char kFlagStr[] = "-Flag";
|
|
|
|
{
|
|
char* argv[] = {kFirefox, kFlagStr, nullptr};
|
|
int argc = std::size(argv);
|
|
EXPECT_EQ(argc, 3);
|
|
|
|
Maybe<bool> Flag = kFlag.Get(argc, argv);
|
|
EXPECT_TRUE(Flag.isSome());
|
|
EXPECT_TRUE(*Flag);
|
|
|
|
const char* const expArgv[] = {kFirefox, nullptr};
|
|
EXPECT_TRUE(CheckArgv(argv, expArgv));
|
|
}
|
|
{
|
|
char* argv[] = {kFirefox, nullptr};
|
|
int argc = std::size(argv);
|
|
EXPECT_EQ(argc, 2);
|
|
|
|
Maybe<bool> Flag = kFlag.Get(argc, argv);
|
|
EXPECT_TRUE(Flag.isNothing());
|
|
|
|
const char* const expArgv[] = {kFirefox, nullptr};
|
|
EXPECT_TRUE(CheckArgv(argv, expArgv));
|
|
}
|
|
{
|
|
geckoargs::ChildProcessArgs extraArgs;
|
|
EXPECT_EQ(extraArgs.mArgs.size(), 0U);
|
|
kFlag.Put(true, extraArgs);
|
|
EXPECT_EQ(extraArgs.mArgs.size(), 1U);
|
|
EXPECT_EQ(extraArgs.mArgs[0], "-Flag");
|
|
}
|
|
{
|
|
geckoargs::ChildProcessArgs extraArgs;
|
|
EXPECT_EQ(extraArgs.mArgs.size(), 0U);
|
|
kFlag.Put(false, extraArgs);
|
|
EXPECT_EQ(extraArgs.mArgs.size(), 0U);
|
|
}
|
|
{
|
|
EXPECT_EQ(kFlag.Name(), "-Flag");
|
|
}
|
|
}
|