1# Copyright 2024 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14"""Utilities common to format tests.""" 15 16import subprocess 17from typing import List 18 19from pw_cli.tool_runner import ToolRunner 20 21 22class CapturingToolRunner(ToolRunner): 23 """A ToolRunner that captures executed commands and their arguments.""" 24 25 def __init__(self): 26 self.command_history: List[str] = [] 27 28 def _run_tool( 29 self, tool: str, args, **kwargs 30 ) -> subprocess.CompletedProcess: 31 """Runs the requested tool with the provided arguments. 32 33 The full command is appended to ``command_history``. 34 """ 35 cmd = [tool] + args 36 self.command_history.append(' '.join([str(arg) for arg in cmd])) 37 return subprocess.run(cmd, **kwargs) 38