Source code for CIME.tests.test_custom_assertions_test_status

#!/usr/bin/env python

"""
This module contains unit tests of CustomAssertionsTestStatus
"""

import unittest
from CIME import test_status
from CIME.tests.custom_assertions_test_status import CustomAssertionsTestStatus

[docs]class TestCustomAssertions(CustomAssertionsTestStatus): _UNEXPECTED_COMMENT = test_status.TEST_UNEXPECTED_FAILURE_COMMENT_START + ' blah)'
[docs] @staticmethod def output_line(status, test_name, phase, extra=''): output = status + ' ' + test_name + ' ' + phase if extra: output += ' ' + extra output += '\n' return output
[docs] def test_assertPhaseAbsent_passes(self): """assert_phase_absent should pass when the phase is absent for the given test_name""" test_name1 = 'my.test.name1' test_name2 = 'my.test.name2' output = self.output_line('PASS', test_name1, 'PHASE1') output += self.output_line('PASS', test_name2, 'PHASE2') self.assert_phase_absent(output, 'PHASE2', test_name1) self.assert_phase_absent(output, 'PHASE1', test_name2)
[docs] def test_assertPhaseAbsent_fails(self): """assert_phase_absent should fail when the phase is present for the given test_name""" test_name = 'my.test.name' output = self.output_line('PASS', test_name, 'PHASE1') with self.assertRaises(AssertionError): self.assert_phase_absent(output, 'PHASE1', test_name)
[docs] def test_assertCorePhases_passes(self): """assert_core_phases passes when it should""" output = '' fails = [test_status.CORE_PHASES[1]] test_name = 'my.test.name' for phase in test_status.CORE_PHASES: if phase in fails: status = test_status.TEST_FAIL_STATUS else: status = test_status.TEST_PASS_STATUS output = output + self.output_line(status, test_name, phase) self.assert_core_phases(output, test_name, fails)
[docs] def test_assertCorePhases_missingPhase_fails(self): """assert_core_phases fails if there is a missing phase""" output = '' test_name = 'my.test.name' for phase in test_status.CORE_PHASES: if phase != test_status.CORE_PHASES[1]: output = output + self.output_line(test_status.TEST_PASS_STATUS, test_name, phase) with self.assertRaises(AssertionError): self.assert_core_phases(output, test_name, fails=[])
[docs] def test_assertCorePhases_wrongStatus_fails(self): """assert_core_phases fails if a phase has the wrong status""" output ='' test_name = 'my.test.name' for phase in test_status.CORE_PHASES: output = output + self.output_line(test_status.TEST_PASS_STATUS, test_name, phase) with self.assertRaises(AssertionError): self.assert_core_phases(output, test_name, fails=[test_status.CORE_PHASES[1]])
[docs] def test_assertCorePhases_wrongName_fails(self): """assert_core_phases fails if the test name is wrong""" output ='' test_name = 'my.test.name' for phase in test_status.CORE_PHASES: output = output + self.output_line(test_status.TEST_PASS_STATUS, test_name, phase) with self.assertRaises(AssertionError): self.assert_core_phases(output, 'my.test', fails=[])
# Note: Basic functionality of assert_status_of_phase is covered sufficiently via # tests of assert_core_phases. Below we just cover some other aspects that aren't # already covered.
[docs] def test_assertStatusOfPhase_withExtra_passes(self): """Make sure assert_status_of_phase passes when there is some extra text at the end of the line""" test_name = 'my.test.name' output = self.output_line(test_status.TEST_FAIL_STATUS, test_name, test_status.CORE_PHASES[0], extra=test_status.TEST_EXPECTED_FAILURE_COMMENT) self.assert_status_of_phase(output, test_status.TEST_FAIL_STATUS, test_status.CORE_PHASES[0], test_name)
[docs] def test_assertStatusOfPhase_xfailNo_passes(self): """assert_status_of_phase should pass when xfail='no' and there is no EXPECTED/UNEXPECTED on the line""" test_name = 'my.test.name' output = self.output_line(test_status.TEST_FAIL_STATUS, test_name, test_status.CORE_PHASES[0]) self.assert_status_of_phase(output, test_status.TEST_FAIL_STATUS, test_status.CORE_PHASES[0], test_name, xfail='no') # While we're at it, also test assert_num_expected_unexpected_fails self.assert_num_expected_unexpected_fails(output, num_expected=0, num_unexpected=0)
[docs] def test_assertStatusOfPhase_xfailNo_fails(self): """assert_status_of_phase should fail when xfail='no' but the line contains the EXPECTED comment""" test_name = 'my.test.name' output = self.output_line(test_status.TEST_FAIL_STATUS, test_name, test_status.CORE_PHASES[0], extra=test_status.TEST_EXPECTED_FAILURE_COMMENT) with self.assertRaises(AssertionError): self.assert_status_of_phase(output, test_status.TEST_FAIL_STATUS, test_status.CORE_PHASES[0], test_name, xfail='no') # While we're at it, also test assert_num_expected_unexpected_fails self.assert_num_expected_unexpected_fails(output, num_expected=1, num_unexpected=0)
[docs] def test_assertStatusOfPhase_xfailExpected_passes(self): """assert_status_of_phase should pass when xfail='expected' and the line contains the EXPECTED comment""" test_name = 'my.test.name' output = self.output_line(test_status.TEST_FAIL_STATUS, test_name, test_status.CORE_PHASES[0], extra=test_status.TEST_EXPECTED_FAILURE_COMMENT) self.assert_status_of_phase(output, test_status.TEST_FAIL_STATUS, test_status.CORE_PHASES[0], test_name, xfail='expected') # While we're at it, also test assert_num_expected_unexpected_fails self.assert_num_expected_unexpected_fails(output, num_expected=1, num_unexpected=0)
[docs] def test_assertStatusOfPhase_xfailExpected_fails(self): """assert_status_of_phase should fail when xfail='expected' but the line does NOT contain the EXPECTED comment""" test_name = 'my.test.name' # Note that the line contains the UNEXPECTED comment, but not the EXPECTED comment # (we assume that if the assertion correctly fails in this case, then it will also # correctly handle the case where neither the EXPECTED nor UNEXPECTED comment is # present). output = self.output_line(test_status.TEST_FAIL_STATUS, test_name, test_status.CORE_PHASES[0], extra=self._UNEXPECTED_COMMENT) with self.assertRaises(AssertionError): self.assert_status_of_phase(output, test_status.TEST_FAIL_STATUS, test_status.CORE_PHASES[0], test_name, xfail='expected') # While we're at it, also test assert_num_expected_unexpected_fails self.assert_num_expected_unexpected_fails(output, num_expected=0, num_unexpected=1)
[docs] def test_assertStatusOfPhase_xfailUnexpected_passes(self): """assert_status_of_phase should pass when xfail='unexpected' and the line contains the UNEXPECTED comment""" test_name = 'my.test.name' output = self.output_line(test_status.TEST_FAIL_STATUS, test_name, test_status.CORE_PHASES[0], extra=self._UNEXPECTED_COMMENT) self.assert_status_of_phase(output, test_status.TEST_FAIL_STATUS, test_status.CORE_PHASES[0], test_name, xfail='unexpected') # While we're at it, also test assert_num_expected_unexpected_fails self.assert_num_expected_unexpected_fails(output, num_expected=0, num_unexpected=1)
[docs] def test_assertStatusOfPhase_xfailUnexpected_fails(self): """assert_status_of_phase should fail when xfail='unexpected' but the line does NOT contain the UNEXPECTED comment""" test_name = 'my.test.name' # Note that the line contains the EXPECTED comment, but not the UNEXPECTED comment # (we assume that if the assertion correctly fails in this case, then it will also # correctly handle the case where neither the EXPECTED nor UNEXPECTED comment is # present). output = self.output_line(test_status.TEST_FAIL_STATUS, test_name, test_status.CORE_PHASES[0], extra=test_status.TEST_EXPECTED_FAILURE_COMMENT) with self.assertRaises(AssertionError): self.assert_status_of_phase(output, test_status.TEST_FAIL_STATUS, test_status.CORE_PHASES[0], test_name, xfail='unexpected') # While we're at it, also test assert_num_expected_unexpected_fails self.assert_num_expected_unexpected_fails(output, num_expected=1, num_unexpected=0)
if __name__ == '__main__': unittest.main()