You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.2 KiB
105 lines
3.2 KiB
// Copyright 2020 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 <getopt.h>
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
// The test main must toggle logging and trace logging features because
|
|
// tests will be run in environments that support them (in which case we
|
|
// want as much debugging information as possible), and environments that
|
|
// don't, so they must be disabled. If ENABLE_PLATFORM_IMPL and
|
|
// ENABLE_TRACE_LOGGING are both false, then we should no Open Screen
|
|
// dependencies.
|
|
#ifdef ENABLE_PLATFORM_IMPL
|
|
#include "platform/impl/logging.h"
|
|
#endif
|
|
#ifdef ENABLE_TRACE_LOGGING
|
|
#include "platform/impl/text_trace_logging_platform.h"
|
|
#endif
|
|
|
|
namespace {
|
|
void LogUsage(const char* argv0) {
|
|
std::cerr << R"(
|
|
usage: )" << argv0
|
|
<< R"( <options>
|
|
|
|
options:
|
|
-t, --tracing: Enable performance tracing logging.
|
|
|
|
-v, --verbose: Enable verbose logging.
|
|
|
|
-h, --help: Show this help message.
|
|
)";
|
|
}
|
|
|
|
struct GlobalTestState {
|
|
#ifdef ENABLE_TRACE_LOGGING
|
|
std::unique_ptr<openscreen::TextTraceLoggingPlatform> trace_logger;
|
|
#endif
|
|
bool args_are_valid = false;
|
|
};
|
|
|
|
GlobalTestState InitFromArgs(int argc, char** argv) {
|
|
// A note about modifying command line arguments: consider uniformity
|
|
// between all Open Screen executables. If it is a platform feature
|
|
// being exposed, consider if it applies to the standalone receiver,
|
|
// standalone sender, osp demo, and test_main argument options.
|
|
const struct option kArgumentOptions[] = {
|
|
{"tracing", no_argument, nullptr, 't'},
|
|
{"verbose", no_argument, nullptr, 'v'},
|
|
{"help", no_argument, nullptr, 'h'},
|
|
{nullptr, 0, nullptr, 0}};
|
|
|
|
GlobalTestState state;
|
|
int ch = -1;
|
|
while ((ch = getopt_long(argc, argv, "tvh", kArgumentOptions, nullptr)) !=
|
|
-1) {
|
|
switch (ch) {
|
|
#ifdef ENABLE_TRACE_LOGGING
|
|
case 't':
|
|
state.trace_logger =
|
|
std::make_unique<openscreen::TextTraceLoggingPlatform>();
|
|
break;
|
|
#endif
|
|
// When not built with Chrome, log level default is warning. When we are built
|
|
// with Chrome, we have no way of knowing or setting log level.
|
|
#ifdef ENABLE_PLATFORM_IMPL
|
|
case 'v':
|
|
openscreen::SetLogLevel(openscreen::LogLevel::kVerbose);
|
|
break;
|
|
#endif
|
|
case 'h':
|
|
LogUsage(argv[0]);
|
|
return state;
|
|
}
|
|
}
|
|
|
|
state.args_are_valid = true;
|
|
return state;
|
|
}
|
|
} // namespace
|
|
|
|
// Googletest strongly recommends that we roll our own main
|
|
// function if we want to do global test environment setup.
|
|
// See the below link for more info;
|
|
// https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#sharing-resources-between-tests-in-the-same-test-case
|
|
//
|
|
// This main method is a drop-in replacement for anywhere that currently
|
|
// depends on gtest_main, meaning it can be linked into any test-only binary
|
|
// to provide a main implementation that supports setting flags and other
|
|
// state that we want shared between all tests.
|
|
int main(int argc, char** argv) {
|
|
auto state = InitFromArgs(argc, argv);
|
|
if (!state.args_are_valid) {
|
|
return 1;
|
|
}
|
|
|
|
testing::InitGoogleTest(&argc, argv);
|
|
return RUN_ALL_TESTS();
|
|
}
|