// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ZIRCON_SYSTEM_ULIB_RUNTESTS_UTILS_INCLUDE_RUNTESTS_UTILS_FUCHSIA_RUN_TEST_H_
#define ZIRCON_SYSTEM_ULIB_RUNTESTS_UTILS_INCLUDE_RUNTESTS_UTILS_FUCHSIA_RUN_TEST_H_

#include <stdio.h>
#include <memory>

#include <fbl/string.h>
#include <runtests-utils/runtests-utils.h>

namespace runtests {

// If tests are in this path, they can run as a component if corresponding cmx
// file is present.
//
// https://fuchsia.googlesource.com/fuchsia/+/master/docs/the-book/package_metadata.md#component-manifest
constexpr char kPkgPrefix[] = "/pkgfs/packages/";

// If |path| starts with |kPkgPrefix|, this function will generate corresponding
// cmx file path and component url.
//
// if test binary path is: /pkgfs/packages/my_tests/0/test/test_binary, the cmx path
// would be: /pkgfs/packages/my_tests/0/meta/test_binary.cmx
//
// component_url for above path would be:
// fuchsia-pkg://fuchsia.com/my_tests#meta/test_binary.cmx
//
// Code which uses this url:
// https://fuchsia.googlesource.com/fuchsia/+/master/garnet/bin/appmgr/root_loader.cc
//
void TestFileComponentInfo(const fbl::String& path,
                           fbl::String* component_url_out,
                           fbl::String* cmx_file_path_out);

// Invokes a Fuchsia test binary and writes its output to a file.
//
// |argv| is a null-terminated array of argument strings passed to the test
//   program.
// |output_filename| is the name of the file to which the test binary's output
//   will be written. May be nullptr, in which case the output will not be
//   redirected.
std::unique_ptr<Result> FuchsiaRunTest(const char* argv[],
                                       const char* output_dir,
                                       const char* output_filename);

} // namespace runtests

#endif // ZIRCON_SYSTEM_ULIB_RUNTESTS_UTILS_INCLUDE_RUNTESTS_UTILS_FUCHSIA_RUN_TEST_H_
