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

#define FML_USED_ON_EMBEDDER

#include "flutter/flow/surface_frame.h"
#include "flutter/testing/testing.h"

namespace flutter {

TEST(FlowTest, SurfaceFrameDoesNotSubmitInDtor) {
  SurfaceFrame::FramebufferInfo framebuffer_info;
  auto surface_frame = std::make_unique<SurfaceFrame>(
      /*surface=*/nullptr, framebuffer_info,
      /*submit_callback=*/
      [](const SurfaceFrame&, SkCanvas*) {
        EXPECT_FALSE(true);
        return true;
      },
      SkISize::Make(800, 600));
  surface_frame.reset();
}

TEST(FlowTest, SurfaceFrameDoesNotHaveEmptyCanvas) {
  SurfaceFrame::FramebufferInfo framebuffer_info;
  SurfaceFrame frame(
      /*surface=*/nullptr, framebuffer_info,
      /*submit_callback=*/[](const SurfaceFrame&, SkCanvas*) { return true; },
      /*frame_size=*/SkISize::Make(800, 600),
      /*context_result=*/nullptr, /*display_list_fallback=*/true);

  EXPECT_FALSE(frame.SkiaCanvas()->getLocalClipBounds().isEmpty());
  EXPECT_FALSE(
      frame.SkiaCanvas()->quickReject(SkRect::MakeLTRB(10, 10, 50, 50)));
}

}  // namespace flutter
