# 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/impeller/tools/impeller.gni")
import("//flutter/testing/testing.gni")

import("//flutter/impeller/tools/impeller.gni")

impeller_shaders("shader_fixtures") {
  name = "fixtures"
  shaders = [
    "box_fade.vert",
    "box_fade.frag",
    "impeller.vert",
    "impeller.frag",
    "instanced_draw.vert",
    "instanced_draw.frag",
    "test_texture.vert",
    "test_texture.frag",
  ]
}

test_fixtures("file_fixtures") {
  fixtures = [
    "airplane.jpg",
    "bay_bridge.jpg",
    "boston.jpg",
    "blue_noise.png",
    "embarcadero.jpg",
    "kalimba.jpg",
    "sample.vert",
    "sample.tesc",
    "sample.tese",
    "sample.comp",
    "struct_def_bug.vert",
    "table_mountain_nx.png",
    "table_mountain_ny.png",
    "table_mountain_nz.png",
    "table_mountain_px.png",
    "table_mountain_py.png",
    "table_mountain_pz.png",
    "types.h",
    "test_texture.frag",
    "//flutter/third_party/txt/third_party/fonts/Roboto-Regular.ttf",
    "//flutter/third_party/txt/third_party/fonts/NotoColorEmoji.ttf",
    "//flutter/third_party/txt/third_party/fonts/HomemadeApple.ttf",
  ]
}

group("fixtures") {
  testonly = true

  public_deps = [
    ":file_fixtures",
    ":shader_fixtures",
  ]
}
