blob: 2710da6a870af82d6fd8ade74b1bc260f2d6309e [file] [log] [blame]
Kuang-che Wu2ea804f2017-11-28 17:11:41 +08001# Copyright 2017 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4"""Common functions for testing"""
5
6from __future__ import print_function
7import os
8
Kuang-che Wue2563ea2018-01-05 20:30:28 +08009import contextlib
10import mock
11
Kuang-che Wu2ea804f2017-11-28 17:11:41 +080012
13def get_testdata_path(filename=None):
Kuang-che Wue2563ea2018-01-05 20:30:28 +080014 """Gets path to test data
Kuang-che Wu2ea804f2017-11-28 17:11:41 +080015
16 Args:
17 filename: path relative to the test data folder.
18
19 Returns:
20 path to the file inside test data folder. If filename is None, the path of
21 test data folder is returned.
22 """
23 path = os.path.join(os.path.dirname(__file__), '..', 'testdata')
Kuang-che Wue2563ea2018-01-05 20:30:28 +080024 assert os.path.exists(path)
Kuang-che Wu2ea804f2017-11-28 17:11:41 +080025 if filename:
26 path = os.path.join(path, filename)
27 return path
Kuang-che Wue2563ea2018-01-05 20:30:28 +080028
29
30@contextlib.contextmanager
31def mock_function_by_file(module, name, filename):
32 """Context manager to mock function by test data
33
34 Args:
35 module: module of function to mock
36 name: function name to mock
37 filename: path relative to the test data folder
38
39 Returns:
40 context manager, which mocks the said function within its scope.
41 """
42 data = open(get_testdata_path(filename)).read()
43 with mock.patch.object(module, name, return_value=data):
44 yield