Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Unified Diff: chromecast/tools/build/generate_test_lists.py

Issue 2629573008: [Chromecast] Dump the runtime deps for all test targets. (Closed)
Patch Set: combine runtime deps into single .json file. Move outputs into _shared_dir Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromecast/build/tests/cast_test.gni ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromecast/tools/build/generate_test_lists.py
diff --git a/chromecast/tools/build/generate_test_lists.py b/chromecast/tools/build/generate_test_lists.py
index 120afd65eeac2ac45e49d8af00aca2729f4c0b7b..e916623104f67e36fc710489be042cdc9e048f53 100755
--- a/chromecast/tools/build/generate_test_lists.py
+++ b/chromecast/tools/build/generate_test_lists.py
@@ -2,12 +2,13 @@
# Copyright 2014 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.
-
"""Helper script to generate unit test lists for the Chromecast build scripts.
"""
import glob
+import json
import optparse
+import os
import sys
@@ -26,6 +27,9 @@ def CombineList(test_files_dir, list_output_file, include_filters,
the test list.
additional_runtime_options: Arguments to be applied to all tests. These are
applied before filters (so test-specific filters take precedence).
+
+ Raises:
+ Exception: if filter is found for an unknown target.
"""
# GYP targets may provide a numbered priority for the filename. Sort to
@@ -51,21 +55,58 @@ def CombineList(test_files_dir, list_output_file, include_filters,
if test_binary_name not in test_bin_set:
raise Exception("Filter found for unknown target: " +
- test_binary_name)
+ test_binary_name)
# Note: This may overwrite a previous rule. This is okay, since higher
# priority files are evaluated after lower priority files.
test_filters[test_binary_name] = filter
test_binaries = [
- binary + " " + (additional_runtime_options or "")
- + (" " + test_filters[binary] if binary in test_filters else "")
- for binary in test_bin_set]
+ binary + " " + (additional_runtime_options or "") +
+ (" " + test_filters[binary] if binary in test_filters else "")
+ for binary in test_bin_set
+ ]
with open(list_output_file, "w") as f:
f.write("\n".join(sorted(test_binaries)))
+def CombineRuntimeDeps(test_files_dir, deps_output_file):
+ """Writes a JSON file that lists the runtime dependecies for each test.
+
+ The output will consist of a JSON dictionary where the keys are names of the
+ unittests and the values are arrays of files and directories needed at runtime
+ by the unittest. Of note, the unittest itself is always listed as a runtime
+ dependency of itself.
+
+ The paths are all relative to the root output directory (where the unittest
+ binaries live).
+
+ {
+ "base_unittests": ["./base_unittests", "../../base/test/data/"],
+ "cast_media_unittests": [...],
+ ...
+ }
+
+ Args:
+ test_files_dir: path to the intermediate directory containing the invidual
+ runtime deps files.
+ deps_output_file: Path to write the JSON file out to.
+ """
+ runtime_deps = {}
+ runtime_deps_dir = os.path.join(test_files_dir, "runtime_deps")
+ for runtime_deps_file in glob.glob(runtime_deps_dir + "/*_runtime_deps.txt"):
+ test_name = os.path.basename(runtime_deps_file).replace("_runtime_deps.txt",
+ "")
+ with open(runtime_deps_file, "r") as f:
+ runtime_deps[test_name] = [dep.strip() for dep in f]
+ assert runtime_deps[test_name][0] == os.path.join(".", test_name)
+
+ with open(deps_output_file, "w") as outfile:
+ json.dump(
+ runtime_deps, outfile, sort_keys=True, indent=2, separators=(",", ": "))
+
+
def CreateList(inputs, list_output_file):
with open(list_output_file, "w") as f:
f.write("\n".join(inputs))
@@ -84,15 +125,30 @@ def DoMain(argv):
pack_run packs all test and filter files from the given
output directory into a single test list file
""")
- parser.add_option("-o", action="store", dest="list_output_file",
- help="Output path in which to write the test list.")
- parser.add_option("-t", action="store", dest="test_files_dir",
- help="Intermediate test list directory.")
- parser.add_option("-a", action="store", dest="additional_runtime_options",
- help="Additional options applied to all tests.")
+ parser.add_option(
+ "-o",
+ action="store",
+ dest="list_output_file",
+ help="Output path in which to write the test list.")
+ parser.add_option(
+ "-d",
+ action="store",
+ dest="deps_output_file",
+ help="Output path in which to write the runtime deps.")
+ parser.add_option(
+ "-t",
+ action="store",
+ dest="test_files_dir",
+ help="Intermediate test list directory.")
+ parser.add_option(
+ "-a",
+ action="store",
+ dest="additional_runtime_options",
+ help="Additional options applied to all tests.")
options, inputs = parser.parse_args(argv)
list_output_file = options.list_output_file
+ deps_output_file = options.deps_output_file
test_files_dir = options.test_files_dir
additional_runtime_options = options.additional_runtime_options
@@ -115,6 +171,8 @@ def DoMain(argv):
if command == "pack_run":
if not test_files_dir:
parser.error("pack_run require a test files directory (-t).\n")
+ if deps_output_file:
+ CombineRuntimeDeps(test_files_dir, deps_output_file)
return CombineList(test_files_dir, list_output_file, True,
additional_runtime_options)
« no previous file with comments | « chromecast/build/tests/cast_test.gni ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698