blob: e667a54f38dac36ef2737bfea06c00a5ecab876f [file] [log] [blame]
// Copyright 2019 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;
using zx;
/// Human-readable name for a test case.
alias Name = string:512;
/// Optional unique tag to identitfy Invocation.
alias Tag = string:512;
/// Describes a single test case.
table Case {
/// Uniquely identifies a test case within a test suite.
/// This member is required.
1: Name name;
/// Whether the test is enabled or disabled (marked ignored/skipped) by the developer.
/// If the member is omitted, the test is assumed to be enabled.
2: bool enabled;
};
/// Represents success, failure, or other possible conditions following a test invocation.
enum Status {
/// The test passed.
PASSED = 1;
/// The test failed.
FAILED = 2;
/// The test was skipped.
/// A skipped status typically indicates that no attempt was made to run
/// the test.
///
/// Examples:
/// The test was disabled by the developer.
/// A precondition for running the test was not satisfied.
SKIPPED = 3;
};
/// Specification of a test to run.
table Invocation {
/// Uniquely identifies a test case within a test suite.
/// This member is required.
1: Name name;
/// Optional tag, arbitrarily specified by clients of `Suite`.
/// This field is not used by Suite protocol, but passed
/// back as is by `OnTestCaseStarted`.
2: Tag tag;
};
/// Optional additional instructions for running test cases.
table RunOptions {
/// If set to true, test cases that have been disabled by the test author will nonetheless be
/// executed.
1: bool include_disabled_tests;
/// Defines maximum number of test cases to run simultaneously.
/// If unspecified, the default behavior is chosen by the `Suite`
/// implementation.
2: uint16 parallel;
/// Optional arguments to pass to the test.
3: vector<string:MAX>:MAX arguments;
};
/// Result of invoking a single test case.
table Result {
/// This member is required.
1: Status status;
};
/// Listens to updates from an individual test case run.
protocol CaseListener {
/// Indicates that an invididual test case has completed and result is
/// available.
Finished(Result result);
};
/// Listens to updates from test runs.
protocol RunListener {
/// Indicates that an individual test invocation has started execution.
OnTestCaseStarted(Invocation invocation, zx.handle:SOCKET primary_log, request<CaseListener> listener);
/// Indicates that the last test case that started has finished, and no more test cases will start.
OnFinished();
};
/// Iterator for listing available test cases.
protocol CaseIterator {
/// Returns the next batch of test cases.
GetNext() -> (vector<Case>:MAX cases);
};
[Discoverable]
protocol Suite {
/// Enumerate the test cases available in this test suite.
GetTests(request<CaseIterator> iterator);
/// Run the specified test cases. Results are returned over the results
/// channel.
///
/// `tests` may contain duplicate elements, in which case the same test is
/// run multiple times as indicated.
/// Closing `test_listener` marks the end of this call.
Run(vector<Invocation>:MAX tests, RunOptions options, RunListener listener);
};