blob: 67d88d9f9cb51ccf7cd748d916413a3f23144daa [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2019 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Helper functions for unit testing."""
from contextlib import contextmanager
import json
import os
from tempfile import mkstemp
class ArgsOutputTest(object):
"""Testing class to simulate a argument parser object."""
def __init__(self, svn_option="google3"):
self.chroot_path = "/abs/path/to/chroot"
self.last_tested = "/abs/path/to/last_tested_file.json"
self.llvm_version = svn_option
self.verbose = False
self.extra_change_lists = None
self.options = ["latest-toolchain"]
self.builders = ["some-builder"]
# FIXME: Migrate modules with similar helper to use this module.
def CallCountsToMockFunctions(mock_function):
"""A decorator that passes a call count to the function it decorates.
Examples:
@CallCountsToMockFunctions
def foo(call_count):
return call_count
...
...
[foo(), foo(), foo()]
[0, 1, 2]
"""
counter = [0]
def Result(*args, **kwargs):
# For some values of `counter`, the mock function would simulate raising
# an exception, so let the test case catch the exception via
# `unittest.TestCase.assertRaises()` and to also handle recursive functions.
prev_counter = counter[0]
counter[0] += 1
ret_value = mock_function(prev_counter, *args, **kwargs)
return ret_value
return Result
def WritePrettyJsonFile(file_name, json_object):
"""Writes the contents of the file to the json object.
Args:
file_name: The file that has contents to be used for the json object.
json_object: The json object to write to.
"""
json.dump(file_name, json_object, indent=4, separators=(",", ": "))
def CreateTemporaryJsonFile():
"""Makes a temporary .json file."""
return CreateTemporaryFile(suffix=".json")
@contextmanager
def CreateTemporaryFile(suffix=""):
"""Makes a temporary file."""
fd, temp_file_path = mkstemp(suffix=suffix)
os.close(fd)
try:
yield temp_file_path
finally:
if os.path.isfile(temp_file_path):
os.remove(temp_file_path)