#!/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 = """\
<html>
<body>
<h1>Grouped By Test</h1>
<ul>
<li>some_suite</li>
<ul>
<li>some_test</li>
<ul>
<li>some tags</li>
<ul>
<li><a href="url1">url1</a></li>
<li><a href="url2">url2</a></li>
</ul>
</ul>
</ul>
</ul>
<h1>Grouped By Config</h1>
<ul>
<li>some tags</li>
<ul>
<li>some_suite</li>
<ul>
<li>some_test</li>
<ul>
<li><a href="url1">url1</a></li>
<li><a href="url2">url2</a></li>
</ul>
</ul>
</ul>
</ul>
</body>
</html>
"""
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 = """\
<li>some_suite</li>
<ul>
<li>some_test</li>
<ul>
<li>some tags</li>
<ul>
<li><a href="url1">url1</a></li>
<li><a href="url2">url2</a></li>
</ul>
</ul>
</ul>
"""
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)