// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FUCHSIA_WEB_COMMON_TEST_TEST_REALM_SUPPORT_H_
#define FUCHSIA_WEB_COMMON_TEST_TEST_REALM_SUPPORT_H_

#include "base/strings/string_piece.h"

namespace base {
class CommandLine;
}

namespace component_testing {
class RealmBuilder;
}

namespace test {

// Appends the arguments of `command_line` (ignoring the program name at
// position zero) to the command line for the component named `child_name`.
void AppendCommandLineArguments(
    ::component_testing::RealmBuilder& realm_builder,
    base::StringPiece child_name,
    const base::CommandLine& command_line);

// Appends the arguments of `command_line` (ignoring the program name at
// position zero) to the command line for the realm.
void AppendCommandLineArgumentsForRealm(
    ::component_testing::RealmBuilder& realm_builder,
    const base::CommandLine& command_line);

// In the functions below, the term "parent" is the `#realm_builder` collection
// for the test component that is using these helpers to build a test realm.
// Each test component must use a .cml fragment that routes the required
// capabilities to `#realm_builder`.

void AddRouteFromParent(component_testing::RealmBuilder& realm_builder,
                        base::StringPiece child_name,
                        base::StringPiece protocol_name);

// Adds routes to the child component named `child_name` to satisfy that
// child's use of syslog/client.shard.cml.
void AddSyslogRoutesFromParent(::component_testing::RealmBuilder& realm_builder,
                               base::StringPiece child_name);

// Adds routes to the child component named `child_name` to satisfy that
// child's use of vulkan/client.shard.cml.
void AddVulkanRoutesFromParent(::component_testing::RealmBuilder& realm_builder,
                               base::StringPiece child_name);

// Adds fuchsia-pkg://fuchsia.com/fonts#meta/fonts.cm as a child in the realm,
// routes all of its required capabilities from parent, and routes its
// fuchsia.fonts.Provider protocol to the child component named `child_name`
// in the realm.
void AddFontService(::component_testing::RealmBuilder& realm_builder,
                    base::StringPiece child_name);

// Adds fuchsia-pkg://fuchsia.com/test-ui-stack#meta/test-ui-stack.cm as a
// child in the realm, routes all of its required capabilities from parent,
// and routes various of its protocols to the child component named
// `child_name` in the realm.
void AddTestUiStack(::component_testing::RealmBuilder& realm_builder,
                    base::StringPiece child_name);

}  // namespace test

#endif  // FUCHSIA_WEB_COMMON_TEST_TEST_REALM_SUPPORT_H_
