// 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(struct {
        moniker string:fuchsia.component.MAX_MONIKER_LENGTH;
    }) -> (struct {
        url fuchsia.url.Url;
    }) error zx.status;
};
