# 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.

import("//flutter/common/config.gni")
import("//flutter/testing/testing.gni")
if (is_fuchsia) {
  import("//build/fuchsia/sdk.gni")
  import("//flutter/tools/fuchsia/fuchsia_archive.gni")
}

source_set_maybe_fuchsia_legacy("flow") {
  sources = [
    "compositor_context.cc",
    "compositor_context.h",
    "embedded_views.cc",
    "embedded_views.h",
    "gl_context_switch.cc",
    "gl_context_switch.h",
    "instrumentation.cc",
    "instrumentation.h",
    "layers/backdrop_filter_layer.cc",
    "layers/backdrop_filter_layer.h",
    "layers/clip_path_layer.cc",
    "layers/clip_path_layer.h",
    "layers/clip_rect_layer.cc",
    "layers/clip_rect_layer.h",
    "layers/clip_rrect_layer.cc",
    "layers/clip_rrect_layer.h",
    "layers/color_filter_layer.cc",
    "layers/color_filter_layer.h",
    "layers/container_layer.cc",
    "layers/container_layer.h",
    "layers/image_filter_layer.cc",
    "layers/image_filter_layer.h",
    "layers/layer.cc",
    "layers/layer.h",
    "layers/layer_tree.cc",
    "layers/layer_tree.h",
    "layers/opacity_layer.cc",
    "layers/opacity_layer.h",
    "layers/performance_overlay_layer.cc",
    "layers/performance_overlay_layer.h",
    "layers/physical_shape_layer.cc",
    "layers/physical_shape_layer.h",
    "layers/picture_layer.cc",
    "layers/picture_layer.h",
    "layers/platform_view_layer.cc",
    "layers/platform_view_layer.h",
    "layers/shader_mask_layer.cc",
    "layers/shader_mask_layer.h",
    "layers/texture_layer.cc",
    "layers/texture_layer.h",
    "layers/transform_layer.cc",
    "layers/transform_layer.h",
    "matrix_decomposition.cc",
    "matrix_decomposition.h",
    "paint_utils.cc",
    "paint_utils.h",
    "raster_cache.cc",
    "raster_cache.h",
    "raster_cache_key.cc",
    "raster_cache_key.h",
    "rtree.cc",
    "rtree.h",
    "skia_gpu_object.cc",
    "skia_gpu_object.h",
    "surface.cc",
    "surface.h",
    "surface_frame.cc",
    "surface_frame.h",
    "texture.cc",
    "texture.h",
  ]

  public_configs = [ "//flutter:config" ]

  deps = [
    "//flutter/common",
    "//flutter/fml",
    "//third_party/skia",
  ]

  sources_legacy = [
    "layers/child_scene_layer.cc",
    "layers/child_scene_layer.h",
    "scene_update_context.cc",
    "scene_update_context.h",
    "view_holder.cc",
    "view_holder.h",
  ]

  public_deps_legacy = [
    "$fuchsia_sdk_root/fidl:fuchsia.ui.app",
    "$fuchsia_sdk_root/fidl:fuchsia.ui.gfx",
    "$fuchsia_sdk_root/pkg:scenic_cpp",
  ]
}

test_fixtures("flow_fixtures") {
  fixtures = []
}

source_set_maybe_fuchsia_legacy("flow_testing") {
  testonly = true

  sources = [
    "testing/gl_context_switch_test.cc",
    "testing/gl_context_switch_test.h",
    "testing/layer_test.h",
    "testing/mock_layer.cc",
    "testing/mock_layer.h",
    "testing/mock_raster_cache.cc",
    "testing/mock_raster_cache.h",
    "testing/mock_texture.cc",
    "testing/mock_texture.h",
    "testing/skia_gpu_object_layer_test.cc",
    "testing/skia_gpu_object_layer_test.h",
  ]

  public_deps = [
    "//flutter/testing:skia",
    "//third_party/googletest:gtest",
  ]

  deps_legacy_and_next = [ ":flow" ]
}

source_set_maybe_fuchsia_legacy("flow_unittests_common") {
  testonly = true

  sources = [
    "embedded_view_params_unittests.cc",
    "flow_run_all_unittests.cc",
    "flow_test_utils.cc",
    "flow_test_utils.h",
    "gl_context_switch_unittests.cc",
    "layers/backdrop_filter_layer_unittests.cc",
    "layers/clip_path_layer_unittests.cc",
    "layers/clip_rect_layer_unittests.cc",
    "layers/clip_rrect_layer_unittests.cc",
    "layers/color_filter_layer_unittests.cc",
    "layers/container_layer_unittests.cc",
    "layers/image_filter_layer_unittests.cc",
    "layers/layer_tree_unittests.cc",
    "layers/opacity_layer_unittests.cc",
    "layers/performance_overlay_layer_unittests.cc",
    "layers/physical_shape_layer_unittests.cc",
    "layers/picture_layer_unittests.cc",
    "layers/platform_view_layer_unittests.cc",
    "layers/shader_mask_layer_unittests.cc",
    "layers/texture_layer_unittests.cc",
    "layers/transform_layer_unittests.cc",
    "matrix_decomposition_unittests.cc",
    "mutators_stack_unittests.cc",
    "raster_cache_unittests.cc",
    "rtree_unittests.cc",
    "skia_gpu_object_unittests.cc",
    "testing/mock_layer_unittests.cc",
    "testing/mock_texture_unittests.cc",
    "texture_unittests.cc",
  ]

  deps = [
    ":flow_fixtures",
    "//flutter/fml",
    "//flutter/testing:skia",
    "//flutter/testing:testing_lib",
    "//third_party/dart/runtime:libdart_jit",  # for tracing
    "//third_party/googletest:gtest",
    "//third_party/skia",
  ]

  sources_legacy = [ "layers/fuchsia_layer_unittests.cc" ]

  deps_legacy = [ "//build/fuchsia/pkg:sys_cpp_testing" ]

  deps_legacy_and_next = [
    ":flow",
    ":flow_testing",
  ]
}

if (is_fuchsia) {
  executable("flow_unittests") {
    testonly = true

    deps = [
      ":flow_unittests_common_fuchsia_legacy",
    ]
  }
  executable("flow_unittests_next") {
    testonly = true

    deps = [
      ":flow_unittests_common",
    ]
  }
} else {
  executable("flow_unittests") {
    testonly = true

    deps = [
      ":flow_unittests_common",
    ]
  }
}

if (is_fuchsia) {
  fuchsia_archive("flow_tests") {
    testonly = true

    deps = [
      ":flow_unittests",
    ]

    binary = "flow_unittests"

    libraries = common_libs

    meta_dir = "//flutter/testing/fuchsia/meta"
    cmx_file = "$meta_dir/fuchsia_test.cmx"

    resources = [
      {
        path = rebase_path(
                "//flutter/testing/resources/performance_overlay_gold_60fps.png")
        dest = "flutter/testing/resources/performance_overlay_gold_60fps.png"
      },
      {
        path = rebase_path(
                "//flutter/testing/resources/performance_overlay_gold_90fps.png")
        dest = "flutter/testing/resources/performance_overlay_gold_90fps.png"
      },
      {
        path = rebase_path(
                "//flutter/testing/resources/performance_overlay_gold_120fps.png")
        dest = "flutter/testing/resources/performance_overlay_gold_120fps.png"
      },
    ]
  }

  fuchsia_archive("flow_tests_next") {
    testonly = true

    deps = [
      ":flow_unittests_next",
    ]

    binary = "flow_unittests_next"

    libraries = common_libs

    meta_dir = "//flutter/testing/fuchsia/meta"
    cmx_file = "$meta_dir/fuchsia_test.cmx"

    resources = [
      {
        path = rebase_path(
                "//flutter/testing/resources/performance_overlay_gold_60fps.png")
        dest = "flutter/testing/resources/performance_overlay_gold_60fps.png"
      },
      {
        path = rebase_path(
                "//flutter/testing/resources/performance_overlay_gold_90fps.png")
        dest = "flutter/testing/resources/performance_overlay_gold_90fps.png"
      },
      {
        path = rebase_path(
                "//flutter/testing/resources/performance_overlay_gold_120fps.png")
        dest = "flutter/testing/resources/performance_overlay_gold_120fps.png"
      },
    ]
  }
}
