def test_fail_subtest__nested_subtest_also_skipped(self): subtest = phase_collections.Subtest( 'outer', fail_subtest_phase, skip_phase0, phase_collections.Subtest('inner', skip_phase), skip_phase1) test_rec = yield htf.Test(subtest, phase) self.assertPhasesOutcomeByName(test_record.PhaseOutcome.FAIL, test_rec, 'fail_subtest_phase') self.assertPhasesOutcomeByName(test_record.PhaseOutcome.SKIP, test_rec, 'skip_phase0', 'skip_phase', 'skip_phase1') self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, 'phase') self.assertEqual([ test_record.SubtestRecord( name='inner', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.FAIL), test_record.SubtestRecord( name='outer', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.FAIL), ], test_rec.subtests)
def test_nested__pass(self): subtest = phase_collections.Subtest( 'outer', phase, phase_collections.Subtest('inner', phase)) test_rec = yield htf.Test(subtest) self.assertTestPass(test_rec) outer_phase_rec = test_rec.phases[1] self.assertEqual('outer', outer_phase_rec.subtest_name) inner_phase_rec = test_rec.phases[2] self.assertEqual('inner', inner_phase_rec.subtest_name) self.assertEqual([ test_record.SubtestRecord( name='inner', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.PASS), test_record.SubtestRecord( name='outer', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.PASS), ], test_rec.subtests)
def test_fail_subtest__skip_branch_that_would_run(self): class _Diag(htf.DiagResultEnum): SET = 'set' @htf.PhaseDiagnoser(_Diag) def diagnoser(phase_rec): del phase_rec # Unused. return htf.Diagnosis(_Diag.SET) @htf.diagnose(diagnoser) def diag_phase(): pass subtest = phase_collections.Subtest( 'skip_branch', fail_subtest_phase, htf.BranchSequence( htf.DiagnosisCondition.on_all(_Diag.SET), error_phase), skip_phase) test_rec = yield htf.Test(diag_phase, subtest, phase) self.assertTestFail(test_rec) self.assertPhasesOutcomeByName(test_record.PhaseOutcome.FAIL, test_rec, 'fail_subtest_phase') self.assertPhasesOutcomeByName(test_record.PhaseOutcome.SKIP, test_rec, 'skip_phase') self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, 'diag_phase', 'phase') self.assertPhasesNotRun(test_rec, 'error_phase')
def test_fail_but_still_continues(self): subtest = phase_collections.Subtest('failure', fail_subtest_phase, skip_phase) test_rec = yield htf.Test(subtest, phase) self.assertTestFail(test_rec) fail_phase_rec = test_rec.phases[1] self.assertPhaseOutcomeFail(fail_phase_rec) self.assertPhaseFailSubtest(fail_phase_rec) self.assertEqual('failure', fail_phase_rec.subtest_name) skip_phase_rec = test_rec.phases[2] self.assertPhaseOutcomeSkip(skip_phase_rec) self.assertPhaseSkip(skip_phase_rec) self.assertEqual('failure', skip_phase_rec.subtest_name) continue_phase_rec = test_rec.phases[3] self.assertPhaseOutcomePass(continue_phase_rec) self.assertPhaseContinue(continue_phase_rec) self.assertIsNone(continue_phase_rec.subtest_name) self.assertEqual([ test_record.SubtestRecord( name='failure', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.FAIL), ], test_rec.subtests)
def test_error__with_group(self): subtest = phase_collections.Subtest('it_errors', teardown_group.wrap(error_phase)) test_rec = yield htf.Test(subtest, phase) self.assertTestError(test_rec) error_phase_rec = test_rec.phases[1] self.assertEqual('error_phase', error_phase_rec.name) self.assertPhaseOutcomeError(error_phase_rec) self.assertPhaseError(error_phase_rec, exc_type=BrokenError) self.assertEqual('it_errors', error_phase_rec.subtest_name) teardown_phase_rec = test_rec.phases[2] self.assertEqual('teardown_phase', teardown_phase_rec.name) self.assertPhaseContinue(teardown_phase_rec) self.assertPhaseOutcomePass(teardown_phase_rec) self.assertEqual('it_errors', teardown_phase_rec.subtest_name) self.assertEqual([ test_record.SubtestRecord( name='it_errors', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.STOP), ], test_rec.subtests)
def test_nested__fail(self): subtest = phase_collections.Subtest( 'outer', phase, phase_collections.Subtest('inner', fail_subtest_phase, skip_phase), empty_phase) test_rec = yield htf.Test(subtest) self.assertTestFail(test_rec) outer_phase_rec = test_rec.phases[1] self.assertEqual('phase', outer_phase_rec.name) self.assertEqual('outer', outer_phase_rec.subtest_name) self.assertPhaseOutcomePass(outer_phase_rec) inner_phase_rec = test_rec.phases[2] self.assertEqual('fail_subtest_phase', inner_phase_rec.name) self.assertEqual('inner', inner_phase_rec.subtest_name) self.assertPhaseOutcomeFail(inner_phase_rec) skip_phase_rec = test_rec.phases[3] self.assertEqual('skip_phase', skip_phase_rec.name) self.assertEqual('inner', skip_phase_rec.subtest_name) self.assertPhaseOutcomeSkip(skip_phase_rec) outer_phase2_rec = test_rec.phases[4] self.assertEqual('empty_phase', outer_phase2_rec.name) self.assertEqual('outer', outer_phase2_rec.subtest_name) self.assertPhaseOutcomePass(outer_phase2_rec) self.assertEqual([ test_record.SubtestRecord( name='inner', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.FAIL), test_record.SubtestRecord( name='outer', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.PASS), ], test_rec.subtests)
def test_fail__with_nested_group_fail_in_setup(self): subtest = phase_collections.Subtest( 'it_fails', htf.PhaseGroup( setup=[fail_subtest_phase], main=[skip_phase0], teardown=[skip_phase1]), skip_phase) test_rec = yield htf.Test(subtest, phase) self.assertTestFail(test_rec) fail_phase_rec = test_rec.phases[1] self.assertEqual('fail_subtest_phase', fail_phase_rec.name) self.assertPhaseOutcomeFail(fail_phase_rec) self.assertPhaseFailSubtest(fail_phase_rec) self.assertEqual('it_fails', fail_phase_rec.subtest_name) skip_phase0_rec = test_rec.phases[2] self.assertEqual('skip_phase0', skip_phase0_rec.name) self.assertPhaseSkip(skip_phase0_rec) self.assertPhaseOutcomeSkip(skip_phase0_rec) self.assertEqual('it_fails', skip_phase0_rec.subtest_name) skip_phase1_rec = test_rec.phases[3] self.assertEqual('skip_phase1', skip_phase1_rec.name) self.assertPhaseSkip(skip_phase1_rec) self.assertPhaseOutcomeSkip(skip_phase1_rec) self.assertEqual('it_fails', skip_phase1_rec.subtest_name) skip_phase_rec = test_rec.phases[4] self.assertEqual('skip_phase', skip_phase_rec.name) self.assertPhaseSkip(skip_phase_rec) self.assertPhaseOutcomeSkip(skip_phase_rec) self.assertEqual('it_fails', skip_phase_rec.subtest_name) continue_phase_rec = test_rec.phases[5] self.assertEqual('phase', continue_phase_rec.name) self.assertPhaseOutcomePass(continue_phase_rec) self.assertPhaseContinue(continue_phase_rec) self.assertIsNone((continue_phase_rec.subtest_name)) self.assertEqual([ test_record.SubtestRecord( name='it_fails', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.FAIL), ], test_rec.subtests)
def test_pass(self): subtest = phase_collections.Subtest('subtest', phase) test_rec = yield htf.Test(subtest) self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, 'phase') self.assertTestPass(test_rec) self.assertEqual([ test_record.SubtestRecord( name='subtest', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.PASS), ], test_rec.subtests) self.assertEqual('subtest', test_rec.phases[-1].subtest_name)
def test_pass__with_group(self): subtest = phase_collections.Subtest('subtest', teardown_group.wrap(phase)) test_rec = yield htf.Test(subtest) self.assertTestPass(test_rec) self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, 'phase', 'teardown_phase') self.assertEqual([ test_record.SubtestRecord( name='subtest', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.PASS), ], test_rec.subtests)
def test_fail_subtest__skip_branch_that_would_not_run(self): class _Diag(htf.DiagResultEnum): NOT_SET = 'not_set' subtest = phase_collections.Subtest( 'skip_branch', fail_subtest_phase, htf.BranchSequence(_Diag.NOT_SET, error_phase), skip_phase) test_rec = yield htf.Test(subtest, phase) self.assertTestFail(test_rec) self.assertPhasesOutcomeByName(test_record.PhaseOutcome.FAIL, test_rec, 'fail_subtest_phase') self.assertPhasesOutcomeByName(test_record.PhaseOutcome.SKIP, test_rec, 'skip_phase') self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, 'phase') self.assertPhasesNotRun(test_rec, 'error_phase')
def test_fail_subtest__skip_checkpoint(self): subtest = phase_collections.Subtest( 'skip_checkpoint', fail_subtest_phase, htf.PhaseFailureCheckpoint('must_be_skipped'), skip_phase) test_rec = yield htf.Test(subtest, phase) self.assertTestFail(test_rec) fail_phase_rec = test_rec.phases[1] self.assertPhaseFailSubtest(fail_phase_rec) self.assertPhaseOutcomeFail(fail_phase_rec) skip_phase_rec = test_rec.phases[2] self.assertPhaseOutcomeSkip(skip_phase_rec) continue_phase_rec = test_rec.phases[3] self.assertPhaseOutcomePass(continue_phase_rec) self.assertTrue(test_rec.checkpoints[0].result.is_skip)
def test_error(self): subtest = phase_collections.Subtest('subtest', error_phase) test_rec = yield htf.Test(subtest, phase) self.assertTestError(test_rec) self.assertPhasesOutcomeByName(test_record.PhaseOutcome.PASS, test_rec, 'phase') self.assertPhasesOutcomeByName(test_record.PhaseOutcome.ERROR, test_rec, 'error_phase') self.assertPhasesNotRun(test_rec, 'phase') error_phase_rec = test_rec.phases[1] self.assertPhaseError(error_phase_rec, exc_type=BrokenError) self.assertEqual([ test_record.SubtestRecord( name='subtest', start_time_millis=htf_test.VALID_TIMESTAMP, end_time_millis=htf_test.VALID_TIMESTAMP, outcome=test_record.SubtestOutcome.STOP), ], test_rec.subtests)
def test_check_duplicates__nested_dupes(self): seq = phase_collections.PhaseSequence( nodes=(phase_collections.Subtest( 'dupe', nodes=(phase_collections.Subtest('dupe'),)),)) with self.assertRaises(phase_collections.DuplicateSubtestNamesError): phase_collections.check_for_duplicate_subtest_names(seq)
def test_init__name(self): subtest = phase_collections.Subtest('subtest', phase) self.assertEqual('subtest', subtest.name)