• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env vpython3
2# Copyright 2021 The Chromium Authors
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6# pylint: disable=protected-access
7
8import tempfile
9import typing
10import unittest
11
12from pyfakefs import fake_filesystem_unittest  # pylint: disable=import-error
13
14from flake_suppressor_common import result_output
15
16
17class GenerateHtmlOutputFileUnittest(fake_filesystem_unittest.TestCase):
18  def setUp(self) -> None:
19    self.setUpPyfakefs()
20    self.output_file = tempfile.NamedTemporaryFile(mode='w', delete=False)
21    self.output_file_name = self.output_file.name
22
23  def testBasic(self) -> None:
24    """Basic functionality test."""
25    result_map = {
26        'some_suite': {
27            'some_test': {
28                ('some', 'tags'): ['url1', 'url2'],
29            },
30        },
31    }
32    result_output.GenerateHtmlOutputFile(result_map, self.output_file)
33    expected_output = """\
34<html>
35<body>
36<h1>Grouped By Test</h1>
37<ul>
38<li>some_suite</li>
39<ul>
40<li>some_test</li>
41<ul>
42<li>some tags</li>
43<ul>
44<li><a href="url1">url1</a></li>
45<li><a href="url2">url2</a></li>
46</ul>
47</ul>
48</ul>
49</ul>
50<h1>Grouped By Config</h1>
51<ul>
52<li>some tags</li>
53<ul>
54<li>some_suite</li>
55<ul>
56<li>some_test</li>
57<ul>
58<li><a href="url1">url1</a></li>
59<li><a href="url2">url2</a></li>
60</ul>
61</ul>
62</ul>
63</ul>
64</body>
65</html>
66"""
67    with open(self.output_file_name) as infile:
68      self.assertEqual(infile.read(), expected_output)
69
70
71class RecursiveHtmlToFileUnittest(fake_filesystem_unittest.TestCase):
72  def setUp(self) -> None:
73    self.setUpPyfakefs()
74    self.output_file = tempfile.NamedTemporaryFile(mode='w', delete=False)
75    self.output_file_name = self.output_file.name
76
77  def testBasic(self) -> None:
78    """Basic functionality test."""
79    string_map = {
80        'some_suite': {
81            'some_test': {
82                'some tags': ['url1', 'url2'],
83            },
84        },
85    }
86    result_output._RecursiveHtmlToFile(string_map, self.output_file)
87    self.output_file.close()
88    expected_output = """\
89<li>some_suite</li>
90<ul>
91<li>some_test</li>
92<ul>
93<li>some tags</li>
94<ul>
95<li><a href="url1">url1</a></li>
96<li><a href="url2">url2</a></li>
97</ul>
98</ul>
99</ul>
100"""
101    with open(self.output_file_name) as infile:
102      self.assertEqual(infile.read(), expected_output)
103
104  def testUnsupportedType(self) -> None:
105    """Tests that providing an unsupported data type fails."""
106    fake_node = typing.cast(result_output.NodeType, 'a')
107    with self.assertRaises(RuntimeError):
108      result_output._RecursiveHtmlToFile(fake_node, self.output_file)
109
110
111class ConvertAggregatedResultsToStringMapUnittest(unittest.TestCase):
112  def testBasic(self) -> None:
113    """Basic functionality test."""
114    result_map = {
115        'some_suite': {
116            'some_test': {
117                ('some', 'tags'): ['url1', 'url2'],
118            },
119        },
120    }
121    expected_map = {
122        'some_suite': {
123            'some_test': {
124                'some tags': ['url1', 'url2'],
125            },
126        },
127    }
128    self.assertEqual(
129        result_output._ConvertAggregatedResultsToStringMap(result_map),
130        expected_map)
131
132
133class ConvertFromTestGroupingToConfigGroupingUnittest(unittest.TestCase):
134  def testBasic(self) -> None:
135    """Basic functionality test."""
136    string_map = {
137        'some_suite': {
138            'some_test': {
139                'some tags': ['url1', 'url2'],
140            },
141        },
142    }
143    config_map = result_output._ConvertFromTestGroupingToConfigGrouping(
144        string_map)
145    expected_config_map = {
146        'some tags': {
147            'some_suite': {
148                'some_test': ['url1', 'url2'],
149            },
150        },
151    }
152    self.assertEqual(config_map, expected_config_map)
153
154
155if __name__ == '__main__':
156  unittest.main(verbosity=2)
157