blob: 5f8453ee500520c5e5cdf2d38c4a716b8ae4f7b0 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2021 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 csv
import os
from typing import List, Set
import unittest
from file_reading import read_actions_file
from file_reading import read_platform_supported_actions
from file_reading import read_unprocessed_coverage_tests_file
from models import Action
from models import ActionsByName
from models import ActionType
from models import CoverageTest
from models import CoverageTestsByPlatform
from models import TestPlatform
from test_analysis import expand_parameterized_tests
from test_analysis import partition_framework_tests_per_platform_combination
TEST_DATA_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)),
"test_data")
def CreateDummyAction(id: str):
return Action(id, id, id, id, ActionType.STATE_CHANGE, TestPlatform,
TestPlatform)
def CreateCoverageTest(id: str, platforms: Set[TestPlatform]):
return CoverageTest([CreateDummyAction(id)], platforms)
class TestAnalysisTest(unittest.TestCase):
def test_partition_framework_tests_per_platform_combination(self):
tests_by_platform: CoverageTestsByPlatform = {}
windows_tests = []
windows_tests.append(CreateCoverageTest("a", {TestPlatform.WINDOWS}))
windows_tests.append(CreateCoverageTest("b", {TestPlatform.WINDOWS}))
windows_tests.append(CreateCoverageTest("c", {TestPlatform.WINDOWS}))
tests_by_platform[TestPlatform.WINDOWS] = windows_tests
mac_tests = []
mac_tests.append(CreateCoverageTest("a", {TestPlatform.MAC}))
mac_tests.append(CreateCoverageTest("c", {TestPlatform.MAC}))
tests_by_platform[TestPlatform.MAC] = mac_tests
linux_tests = []
linux_tests.append(CreateCoverageTest("a", {TestPlatform.LINUX}))
tests_by_platform[TestPlatform.LINUX] = linux_tests
partitions = partition_framework_tests_per_platform_combination(
tests_by_platform)
self.assertEqual(len(partitions), 3)
self.assertTrue(frozenset({TestPlatform.WINDOWS}) in partitions)
windows_tests = partitions[frozenset({TestPlatform.WINDOWS})]
self.assertEqual(len(windows_tests), 1)
self.assertEqual(windows_tests[0].id, "b")
self.assertTrue(
frozenset({TestPlatform.MAC, TestPlatform.WINDOWS}) in partitions)
mac_win_tests = partitions[frozenset(
{TestPlatform.MAC, TestPlatform.WINDOWS})]
self.assertEqual(len(mac_win_tests), 1)
self.assertEqual(mac_win_tests[0].id, "c")
mac_win_linux_key = frozenset(
{TestPlatform.MAC, TestPlatform.WINDOWS, TestPlatform.LINUX})
self.assertTrue(mac_win_linux_key in partitions)
mac_win_linux_tests = partitions[mac_win_linux_key]
self.assertEqual(len(mac_win_linux_tests), 1)
self.assertEqual(mac_win_linux_tests[0].id, "a")
def test_processed_coverage(self):
actions_filename = os.path.join(TEST_DATA_DIR, "test_actions.csv")
supported_actions_filename = os.path.join(
TEST_DATA_DIR, "framework_supported_actions.csv")
actions: ActionsByName = {}
action_base_name_to_default_param = {}
with open(actions_filename, "r", encoding="utf-8") as f, \
open(supported_actions_filename, "r", encoding="utf-8") \
as supported_actions_file:
supported_actions = read_platform_supported_actions(
csv.reader(supported_actions_file))
actions_csv = csv.reader(f, delimiter=',')
(actions, action_base_name_to_default_param) = read_actions_file(
actions_csv, supported_actions)
coverage_filename = os.path.join(TEST_DATA_DIR,
"test_unprocessed_coverage.csv")
coverage_tests: List[CoverageTest] = []
with open(coverage_filename, "r", encoding="utf-8") as f:
coverage_csv = csv.reader(f, delimiter=',')
coverage_tests = read_unprocessed_coverage_tests_file(
coverage_csv, actions, action_base_name_to_default_param)
coverage_tests = expand_parameterized_tests(coverage_tests)
# Compare with expected
expected_processed_tests = []
processed_filename = os.path.join(TEST_DATA_DIR,
"expected_processed_coverage.csv")
with open(processed_filename, "r", encoding="utf-8") as f:
coverage_csv = csv.reader(f, delimiter=',')
expected_processed_tests = read_unprocessed_coverage_tests_file(
coverage_csv, actions, action_base_name_to_default_param)
# Hack for easy comparison and printing: transform coverage tests into
# a Tuple[List[str], Set[TestPlatform]].
self.assertCountEqual([([action.name
for action in test.actions], test.platforms)
for test in coverage_tests],
[([action.name
for action in test.actions], test.platforms)
for test in expected_processed_tests])
if __name__ == '__main__':
unittest.main()