#!/usr/bin/env python # Copyright 2015 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. import argparse import os import subprocess import sys script_dir = os.path.dirname(os.path.realpath(__file__)) tool_dir = os.path.abspath(os.path.join(script_dir, '../../pylib')) sys.path.insert(0, tool_dir) from clang import plugin_testing class BlinkGcPluginTest(plugin_testing.ClangPluginTest): """Test harness for the Blink GC plugin.""" def AdjustClangArguments(self, clang_cmd): clang_cmd.append('-Wno-inaccessible-base') def ProcessOneResult(self, test_name, actual): # Some Blink GC plugins dump a JSON representation of the object graph, and # use the processed results as the actual results of the test. if os.path.exists('%s.graph.json' % test_name): try: actual = subprocess.check_output( ['python', '../process-graph.py', '-c', '%s.graph.json' % test_name], stderr=subprocess.STDOUT) except subprocess.CalledProcessError, e: # The graph processing script returns a failure exit code if the graph # is bad (e.g. it has a cycle). The output still needs to be captured in # that case, since the expected results capture the errors. actual = e.output finally: # Clean up the .graph.json file to prevent false passes from stale # results from a previous run. os.remove('%s.graph.json' % test_name) return super(BlinkGcPluginTest, self).ProcessOneResult(test_name, actual) def main(): parser = argparse.ArgumentParser() parser.add_argument( '--reset-results', action='store_true', help='If specified, overwrites the expected results in place.') parser.add_argument('clang_path', help='The path to the clang binary.') parser.add_argument('plugin_path', nargs='?', help='The path to the plugin library, if any.') args = parser.parse_args() return BlinkGcPluginTest( os.path.dirname(os.path.realpath(__file__)), args.clang_path, args.plugin_path, 'blink-gc-plugin', args.reset_results).Run() if __name__ == '__main__': sys.exit(main())