910e62b5创建于 1月15日历史提交
#!/usr/bin/env python3
# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for test_health_exporter."""

import datetime as dt
import json
import pathlib
import tempfile
import unittest

from java_test_utils import JavaTestHealth
import test_health_exporter
from test_health_extractor import GitRepoInfo, TestHealthInfo

_TEST_TYPE = 'JAVA'
_JAVA_PACKAGE = 'org.chromium.foo_pkg'
_GIT_HEAD_HASH = 'fcd260583cb6d2c739b91f53363fcf0ad3eb3216'
_GIT_HEAD_TIME = '2022-01-18T22:45:48.000000+00:00'
_GIT_REPO_INFO = GitRepoInfo(
    git_head=_GIT_HEAD_HASH,
    git_head_time=dt.datetime.fromisoformat(_GIT_HEAD_TIME))

_JAVA_TEST_NAME = 'FooTest'
_JAVA_TEST_FILENAME = _JAVA_TEST_NAME + '.java'
_JAVA_TEST_DIR = 'javatests/org/chromium/foo_pkg'

_JAVA_TEST_HEALTH = JavaTestHealth(java_package=_JAVA_PACKAGE,
                                   disabled_tests_count=1,
                                   disable_if_tests_count=2,
                                   tests_count=10)
_TEST_HEALTH_INFO = TestHealthInfo(_JAVA_TEST_NAME,
                                   test_dir=pathlib.Path(_JAVA_TEST_DIR),
                                   test_filename=_JAVA_TEST_FILENAME,
                                   java_test_health=_JAVA_TEST_HEALTH,
                                   git_repo_info=_GIT_REPO_INFO)

_TEST_HEALTH_JSON_DICT = dict(test_name=_JAVA_TEST_NAME,
                              test_path=_JAVA_TEST_DIR,
                              test_filename=_JAVA_TEST_FILENAME,
                              test_type=_TEST_TYPE,
                              java_package=_JAVA_PACKAGE,
                              disabled_tests_count=1,
                              disable_if_tests_count=2,
                              tests_count=10,
                              git_head_hash=_GIT_HEAD_HASH,
                              git_head_timestamp=_GIT_HEAD_TIME)


class ToJsonFile(unittest.TestCase):
    """Tests for the to_json_file function."""

    def test_to_json_file_single_java_test(self):
        with tempfile.TemporaryDirectory() as tmpdir:
            json_file = pathlib.Path(tmpdir) / 'test_output'

            test_health_exporter.to_json_file([_TEST_HEALTH_INFO], json_file)

            with open(json_file) as output_file:
                json_lines = output_file.readlines()

        self.assertEqual(1, len(json_lines))

        result = json.loads(json_lines[0])

        self.assertDictEqual(_TEST_HEALTH_JSON_DICT, result)

    def test_to_json_file_multiple_java_tests(self):
        with tempfile.TemporaryDirectory() as tmpdir:
            json_file = pathlib.Path(tmpdir) / 'test_output'

            test_health_exporter.to_json_file(
                [_TEST_HEALTH_INFO, _TEST_HEALTH_INFO, _TEST_HEALTH_INFO],
                json_file)

            with open(json_file) as output_file:
                json_lines = output_file.readlines()

        self.assertEqual(3, len(json_lines))

        result1 = json.loads(json_lines[0])
        result2 = json.loads(json_lines[1])
        result3 = json.loads(json_lines[2])

        self.assertDictEqual(_TEST_HEALTH_JSON_DICT, result1)
        self.assertDictEqual(_TEST_HEALTH_JSON_DICT, result2)
        self.assertDictEqual(_TEST_HEALTH_JSON_DICT, result3)

    def test_to_json_file_java_package_omitted(self):
        java_test_health = JavaTestHealth(java_package=None,
                                          disabled_tests_count=1,
                                          disable_if_tests_count=2,
                                          tests_count=10)
        test_health_info = TestHealthInfo(
            _JAVA_TEST_NAME,
            test_dir=pathlib.Path(_JAVA_TEST_DIR),
            test_filename=_JAVA_TEST_FILENAME,
            java_test_health=java_test_health,
            git_repo_info=_GIT_REPO_INFO)
        test_health_json_dict = _TEST_HEALTH_JSON_DICT.copy()
        del test_health_json_dict['java_package']

        with tempfile.TemporaryDirectory() as tmpdir:
            json_file = pathlib.Path(tmpdir) / 'test_output'

            test_health_exporter.to_json_file([test_health_info], json_file)

            with open(json_file) as output_file:
                json_lines = output_file.readlines()

        self.assertEqual(1, len(json_lines))

        result = json.loads(json_lines[0])

        self.assertDictEqual(test_health_json_dict, result)


if __name__ == '__main__':
    unittest.main()