#!/usr/bin/env vpython3
# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# pylint: disable=protected-access
import tempfile
import typing
import unittest
from pyfakefs import fake_filesystem_unittest # pylint: disable=import-error
from flake_suppressor_common import result_output
class GenerateHtmlOutputFileUnittest(fake_filesystem_unittest.TestCase):
def setUp(self) -> None:
self.setUpPyfakefs()
self.output_file = tempfile.NamedTemporaryFile(mode='w', delete=False)
self.output_file_name = self.output_file.name
def testBasic(self) -> None:
"""Basic functionality test."""
result_map = {
'some_suite': {
'some_test': {
('some', 'tags'): ['url1', 'url2'],
},
},
}
result_output.GenerateHtmlOutputFile(result_map, self.output_file)
expected_output = """\
Grouped By Test
Grouped By Config
"""
with open(self.output_file_name) as infile:
self.assertEqual(infile.read(), expected_output)
class RecursiveHtmlToFileUnittest(fake_filesystem_unittest.TestCase):
def setUp(self) -> None:
self.setUpPyfakefs()
self.output_file = tempfile.NamedTemporaryFile(mode='w', delete=False)
self.output_file_name = self.output_file.name
def testBasic(self) -> None:
"""Basic functionality test."""
string_map = {
'some_suite': {
'some_test': {
'some tags': ['url1', 'url2'],
},
},
}
result_output._RecursiveHtmlToFile(string_map, self.output_file)
self.output_file.close()
expected_output = """\
some_suite
"""
with open(self.output_file_name) as infile:
self.assertEqual(infile.read(), expected_output)
def testUnsupportedType(self) -> None:
"""Tests that providing an unsupported data type fails."""
fake_node = typing.cast(result_output.NodeType, 'a')
with self.assertRaises(RuntimeError):
result_output._RecursiveHtmlToFile(fake_node, self.output_file)
class ConvertAggregatedResultsToStringMapUnittest(unittest.TestCase):
def testBasic(self) -> None:
"""Basic functionality test."""
result_map = {
'some_suite': {
'some_test': {
('some', 'tags'): ['url1', 'url2'],
},
},
}
expected_map = {
'some_suite': {
'some_test': {
'some tags': ['url1', 'url2'],
},
},
}
self.assertEqual(
result_output._ConvertAggregatedResultsToStringMap(result_map),
expected_map)
class ConvertFromTestGroupingToConfigGroupingUnittest(unittest.TestCase):
def testBasic(self) -> None:
"""Basic functionality test."""
string_map = {
'some_suite': {
'some_test': {
'some tags': ['url1', 'url2'],
},
},
}
config_map = result_output._ConvertFromTestGroupingToConfigGrouping(
string_map)
expected_config_map = {
'some tags': {
'some_suite': {
'some_test': ['url1', 'url2'],
},
},
}
self.assertEqual(config_map, expected_config_map)
if __name__ == '__main__':
unittest.main(verbosity=2)