| #!/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. |
| |
| import datetime |
| import typing |
| import unittest |
| |
| from flake_suppressor_common import data_types |
| |
| |
| class ExpectationUnittest(unittest.TestCase): |
| def testAppliesToResultNonResult(self) -> None: |
| """Tests that AppliesToResult properly fails when given a non-Result.""" |
| e = data_types.Expectation('test', ['win', 'nvidia'], ['Failure']) |
| fake_result = typing.cast(data_types.Result, None) |
| with self.assertRaises(AssertionError): |
| e.AppliesToResult(fake_result) |
| |
| def testAppliesToResultApplies(self) -> None: |
| """Tests that AppliesToResult properly returns True on expected Results.""" |
| # Exact match. |
| e = data_types.Expectation('test', ['win', 'nvidia'], ['Failure']) |
| r = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id') |
| self.assertTrue(e.AppliesToResult(r)) |
| # With status |
| r = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id', 'FAIL') |
| self.assertTrue(e.AppliesToResult(r)) |
| # With date |
| r = data_types.Result('suite', |
| 'test', ('win', 'nvidia'), |
| 'id', |
| date=datetime.date(2023, 3, 8)) |
| self.assertTrue(e.AppliesToResult(r)) |
| # With is_slow |
| r = data_types.Result('suite', |
| 'test', ('win', 'nvidia'), |
| 'id', |
| is_slow=True) |
| self.assertTrue(e.AppliesToResult(r)) |
| # With typ_expectations |
| r = data_types.Result('suite', |
| 'test', ('win', 'nvidia'), |
| 'id', |
| typ_expectations=['Pass']) |
| self.assertTrue(e.AppliesToResult(r)) |
| # Tag subset |
| r = data_types.Result('suite', 'test', ('win', 'nvidia', 'release'), 'id') |
| self.assertTrue(e.AppliesToResult(r)) |
| # Glob match |
| e = data_types.Expectation('t*', ['win', 'nvidia'], ['Failure']) |
| self.assertTrue(e.AppliesToResult(r)) |
| |
| def testAppliesToResultDoesNotApply(self) -> None: |
| """Tests that AppliesToResult properly returns False on expected Results.""" |
| # Name mismatch |
| e = data_types.Expectation('test', ['win', 'nvidia'], ['Failure']) |
| r = data_types.Result('suite', 'notatest', ('win', 'nvidia'), 'id') |
| self.assertFalse(e.AppliesToResult(r)) |
| # With status |
| r = data_types.Result('suite', 'notatest', ('win', 'nvidia'), 'id', 'FAIL') |
| self.assertFalse(e.AppliesToResult(r)) |
| # With date |
| r = data_types.Result('suite', |
| 'notatest', ('win', 'nvidia'), |
| 'id', |
| date=datetime.date(2023, 3, 8)) |
| self.assertFalse(e.AppliesToResult(r)) |
| # With is_slow |
| r = data_types.Result('suite', |
| 'notatest', ('win', 'nvidia'), |
| 'id', |
| is_slow=True) |
| self.assertFalse(e.AppliesToResult(r)) |
| # With typ_expectations |
| r = data_types.Result('suite', |
| 'notatest', ('win', 'nvidia'), |
| 'id', |
| typ_expectations=['Pass']) |
| self.assertFalse(e.AppliesToResult(r)) |
| # Tag superset |
| r = data_types.Result('suite', 'test', tuple(['win']), 'id') |
| self.assertFalse(e.AppliesToResult(r)) |
| |
| |
| class ResultUnittest(unittest.TestCase): |
| def testTupleEnforced(self) -> None: |
| """Tests that tags must be in a tuple.""" |
| fake_tuple = typing.cast(tuple, ['win', 'nvidia']) |
| with self.assertRaises(AssertionError): |
| _ = data_types.Result('suite', 'test', fake_tuple, 'id') |
| |
| def testWildcardsDisallowed(self) -> None: |
| with self.assertRaises(AssertionError): |
| _ = data_types.Result('suite', 't*', ('win', 'nvidia'), 'id') |
| |
| def testHashability(self) -> None: # pylint: disable=no-self-use |
| """Tests that Result objects are hashable.""" |
| r = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id') |
| _ = set([r]) |
| |
| def testEquality(self) -> None: |
| """Tests that equality is properly calculated.""" |
| r = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id') |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id') |
| self.assertEqual(r, other) |
| |
| other = data_types.Result('notsuite', 'test', ('win', 'nvidia'), 'id') |
| self.assertNotEqual(r, other) |
| |
| other = data_types.Result('suite', 'nottest', ('win', 'nvidia'), 'id') |
| self.assertNotEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', tuple(['win']), 'id') |
| self.assertNotEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'notid') |
| self.assertNotEqual(r, other) |
| |
| other = None |
| self.assertNotEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id', '') |
| self.assertEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id', 'FAIL') |
| self.assertNotEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id', '', |
| datetime.date.min) |
| self.assertEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id', 'FAIL', |
| datetime.date(2023, 3, 8)) |
| self.assertNotEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id', '', |
| datetime.date.min, False) |
| self.assertEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id', '', |
| datetime.date.min, True) |
| self.assertNotEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id', '', |
| datetime.date.min, False, []) |
| self.assertEqual(r, other) |
| |
| other = data_types.Result('suite', 'test', ('win', 'nvidia'), 'id', '', |
| datetime.date.min, False, ['Pass']) |
| self.assertNotEqual(r, other) |
| |
| |
| if __name__ == '__main__': |
| unittest.main(verbosity=2) |