testing.gni 2.7 KB
Newer Older
M
Michael Goderbauer 已提交
1
# Copyright 2013 The Flutter Authors. All rights reserved.
2 3 4
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

5 6 7 8 9
import("//third_party/dart/build/dart/dart_action.gni")

# Builds test fixtures for a unit test.
#
# Generates a directory structure containing an assets directory and the Dart
10 11 12 13 14 15 16 17 18 19
# code to execute compiled to kernel. Generates:
#   * an asserts directory at `$target_name/assets`.
#   * a C++ implementation for `flutter/testing/testing.h`, defining
#     `testing::GetFixturesPath()`, which returns the assets path.
#   * a kernel snapshot at `$target_name/assets/$kernel_out`.
#
# Rule attributes:
#   * fixtures: list of Dart files, including a main entrypoint.
#   * kernel_out: the output path, relative to the assets directory, of the
#     generated kernel snapshot. By default, `kernel_blob.bin`.
20 21 22 23
template("test_fixtures") {
  testonly = true

  assert(defined(invoker.fixtures), "Test fixtures must be specified.")
24 25 26 27
  kernel_out = "kernel_blob.bin"
  if (defined(invoker.kernel_out)) {
    kernel_out = invoker.kernel_out
  }
28

29 30
  fixtures_location = "$target_gen_dir/$target_name/assets"
  fixtures_location_file = "$target_gen_dir/$target_name/test_fixtures_location.cc"
31

32
  fixtures_name_target_name = target_name + "_gen_fixtures_name"
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
  action(fixtures_name_target_name) {
    script = "$flutter_root/testing/build/gen_fixtures_location_symbol.py"

    outputs = [
      fixtures_location_file,
    ]

    args = [
      "--fixtures_location_file",
      rebase_path(fixtures_location_file),
      "--fixtures_location",
      rebase_path(fixtures_location),
    ]
  }

48
  fixtures_source_set_target_name = target_name + "_gen_fixtures_source_set"
49
  source_set(fixtures_source_set_target_name) {
50
    testonly = true
51 52 53 54 55 56 57 58 59
    sources = [
      fixtures_location_file,
    ]

    deps = [
      ":$fixtures_name_target_name",
    ]
  }

60 61 62 63 64 65 66 67 68 69
  fixtures_kernel_target_name = target_name + "_kernel"
  dart_action(fixtures_kernel_target_name) {
    testonly = true
    script = "$root_out_dir/frontend_server.dart.snapshot"

    fixture_paths = []
    foreach(fixture, invoker.fixtures) {
      fixture_paths += [ rebase_path(fixture) ]
    }
    inputs = fixture_paths
70
    outputs = ["$fixtures_location/$kernel_out"]
71 72 73 74

    args = [
      "--sdk-root", rebase_path("$root_out_dir/flutter_patched_sdk"),
      "--target", "flutter",
75
      "--output-dill", rebase_path("$fixtures_location/$kernel_out"),
76 77 78
    ] + fixture_paths
    deps = [
      "//third_party/dart/utils/kernel-service:frontend_server"
79 80 81 82
    ]
  }

  group(target_name) {
83
    testonly = true
84
    deps = [
85
      ":$fixtures_kernel_target_name",
86 87 88 89
      ":$fixtures_source_set_target_name",
    ]
  }
}