// Copyright 2021 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.

library fuchsia.test.internal;

using fuchsia.url;
using fuchsia.component;
using zx;

/// Introspection API to get information about a test.
[Discoverable]
protocol Info {
    /// Returns the URL of the test running in the realm designated by the 
    /// `moniker`. The moniker should be relative to test manager.
    /// The implementor may cache the URL of the test for some minutes
    /// following the end of execution, but there are no guarantees.
    /// On error returns:
    /// `ZX_ERR_NOT_FOUND`: moniker matches no test realm.
    /// `ZX_ERR_NOT_SUPPORTED`: Moniker is not relative to test_manager and
    /// doesn't pertain to a test realm.
    GetTestUrl(string:fuchsia.component.MAX_MONIKER_LENGTH moniker) -> (fuchsia.url.Url url) error zx.status;
};
