// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package androidx.test.espresso.flutter.assertion;

import static androidx.test.espresso.flutter.matcher.FlutterMatchers.isFlutterView;
import static com.google.common.base.Preconditions.checkNotNull;

import android.view.View;
import androidx.test.espresso.NoMatchingViewException;
import androidx.test.espresso.ViewAssertion;
import androidx.test.espresso.flutter.api.WidgetAssertion;
import androidx.test.espresso.flutter.exception.InvalidFlutterViewException;
import androidx.test.espresso.flutter.model.WidgetInfo;
import androidx.test.espresso.util.HumanReadables;

/**
 * A {@code ViewAssertion} which performs an action on the given Flutter view.
 *
 * <p>This class acts as a bridge to perform {@code WidgetAssertion} on a Flutter widget on the
 * given Flutter view.
 */
public final class FlutterViewAssertion implements ViewAssertion {

  private final WidgetAssertion assertion;
  private final WidgetInfo widgetInfo;

  public FlutterViewAssertion(WidgetAssertion assertion, WidgetInfo widgetInfo) {
    this.assertion = checkNotNull(assertion, "Widget assertion cannot be null.");
    this.widgetInfo = checkNotNull(widgetInfo, "The widget info to be asserted on cannot be null.");
  }

  @Override
  public void check(View view, NoMatchingViewException noViewFoundException) {
    if (view == null) {
      throw noViewFoundException;
    } else if (!isFlutterView().matches(view)) {
      throw new InvalidFlutterViewException(
          String.format("Not a valid Flutter view:%s", HumanReadables.describe(view)));
    } else {
      assertion.check(view, widgetInfo);
    }
  }
}
