// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package com.android.tools.r8;

import java.util.List;
import org.hamcrest.Matcher;

public interface TestDiagnosticMessages {

  public List<Diagnostic> getInfos();

  public List<Diagnostic> getWarnings();

  public List<Diagnostic> getErrors();

  public TestDiagnosticMessages assertNoMessages();

  public TestDiagnosticMessages assertOnlyInfos();

  public TestDiagnosticMessages assertOnlyWarnings();

  public TestDiagnosticMessages assertOnlyErrors();

  public TestDiagnosticMessages assertInfosCount(int count);

  public TestDiagnosticMessages assertWarningsCount(int count);

  public TestDiagnosticMessages assertErrorsCount(int count);

  public TestDiagnosticMessages assertInfoMessageThatMatches(Matcher<String> matcher);

  public TestDiagnosticMessages assertNoInfoMessageThatMatches(Matcher<String> matcher);

  public TestDiagnosticMessages assertWarningMessageThatMatches(Matcher<String> matcher);

  public TestDiagnosticMessages assertNoWarningMessageThatMatches(Matcher<String> matcher);

  public TestDiagnosticMessages assertErrorMessageThatMatches(Matcher<String> matcher);

  public TestDiagnosticMessages assertNoErrorMessageThatMatches(Matcher<String> matcher);
}
