// Copyright 2022 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 LIB_INSPECT_COMPONENT_CPP_TESTING_H_
#define LIB_INSPECT_COMPONENT_CPP_TESTING_H_

#include <fidl/fuchsia.inspect/cpp/wire.h>
#include <lib/fpromise/promise.h>
#include <lib/inspect/cpp/hierarchy.h>

#include <vector>

namespace inspect {
namespace testing {

using TreeNameIteratorClient = fidl::WireClient<fuchsia_inspect::TreeNameIterator>;
using TreeClient = fidl::WireClient<fuchsia_inspect::Tree>;

/// Collect all of the names of the children of the `Inspector` managed by the tree server
/// which started the TreeNameIterator server. Essentially, it drains the iterator.
fpromise::promise<std::vector<std::string>> ReadAllChildNames(TreeNameIteratorClient& iter);

/// Turn a Tree handle into a complete hierarchy, including lazy children/values.
///
/// This function uses `ZX_ASSERT` if it encounters FIDL errors.
fpromise::promise<Hierarchy> ReadFromTree(TreeClient& tree, async_dispatcher_t* dispatcher);
}  // namespace testing
}  // namespace inspect

#endif  // LIB_INSPECT_COMPONENT_CPP_TESTING_H_
