// 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_
