// 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.
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;
};

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

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