// 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.driver.test.logger;

const LOG_MESSAGE_MAX uint32 = 1024;
const TEST_CASE_NAME_MAX uint32 = 256;

/// Contains the counts of test results within the test case.
@for_deprecated_c_bindings
type TestCaseResult = struct {
    /// Number of tests that passed.
    passed uint64;
    /// Number of tests that failed.
    failed uint64;
    /// Number of tests that were skipped.
    skipped uint64;
};

@for_deprecated_c_bindings
protocol Logger {
    /// Logs a message from the driver unit test.
    LogMessage(struct {
        msg string:LOG_MESSAGE_MAX;
    });

    /// Logs the results of a test case.
    LogTestCase(struct {
        name string:TEST_CASE_NAME_MAX;
        result TestCaseResult;
    });
};
