// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/**
 *******************************************************************************
 * Copyright (C) 2000-2004, International Business Machines Corporation and    *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 */
package com.ibm.icu.dev.test;

public interface TestLog {

//    /**
//     * Adds given string to the log if we are in verbose mode.
//     */
//    void log(String message);
//
//    void logln(String message);
//
//    /**
//     * Report an error
//     */
//    void err(String message);
//
//    void errln(String message);
//
//    /**
//     * Warn about missing tests or data.
//     */
//    void warn(String message);
//    
//    void warnln(String message);


    public static final int LOG = 0;
    public static final int WARN = 1;
    public static final int ERR = 2;

    //public static void msg(String message, int level, boolean incCount, boolean newln);
}
