Explanation variables only defined if failed or passed with plugins implementing the hook.
This commit is contained in:
		
							parent
							
								
									d91a5d3cd7
								
							
						
					
					
						commit
						9a34d88c8d
					
				|  | @ -803,10 +803,12 @@ class AssertionRewriter(ast.NodeVisitor): | ||||||
|                     top_condition, module_path=self.module_path, lineno=assert_.lineno |                     top_condition, module_path=self.module_path, lineno=assert_.lineno | ||||||
|                 ) |                 ) | ||||||
|             ) |             ) | ||||||
|         if self.enable_assertion_pass_hook: | 
 | ||||||
|             ### Experimental pytest_assertion_pass hook |         if self.enable_assertion_pass_hook:  # Experimental pytest_assertion_pass hook | ||||||
|             negation = ast.UnaryOp(ast.Not(), top_condition) |             negation = ast.UnaryOp(ast.Not(), top_condition) | ||||||
|             msg = self.pop_format_context(ast.Str(explanation)) |             msg = self.pop_format_context(ast.Str(explanation)) | ||||||
|  | 
 | ||||||
|  |             # Failed | ||||||
|             if assert_.msg: |             if assert_.msg: | ||||||
|                 assertmsg = self.helper("_format_assertmsg", assert_.msg) |                 assertmsg = self.helper("_format_assertmsg", assert_.msg) | ||||||
|                 gluestr = "\n>assert " |                 gluestr = "\n>assert " | ||||||
|  | @ -817,10 +819,14 @@ class AssertionRewriter(ast.NodeVisitor): | ||||||
|             err_msg = ast.BinOp(assertmsg, ast.Add(), err_explanation) |             err_msg = ast.BinOp(assertmsg, ast.Add(), err_explanation) | ||||||
|             err_name = ast.Name("AssertionError", ast.Load()) |             err_name = ast.Name("AssertionError", ast.Load()) | ||||||
|             fmt = self.helper("_format_explanation", err_msg) |             fmt = self.helper("_format_explanation", err_msg) | ||||||
|             fmt_pass = self.helper("_format_explanation", msg) |  | ||||||
|             exc = ast.Call(err_name, [fmt], []) |             exc = ast.Call(err_name, [fmt], []) | ||||||
|             raise_ = ast.Raise(exc, None) |             raise_ = ast.Raise(exc, None) | ||||||
|             # Call to hook when passes |             statements_fail = [] | ||||||
|  |             statements_fail.extend(self.expl_stmts) | ||||||
|  |             statements_fail.append(raise_) | ||||||
|  | 
 | ||||||
|  |             # Passed | ||||||
|  |             fmt_pass = self.helper("_format_explanation", msg) | ||||||
|             orig = astor.to_source(assert_.test).rstrip("\n").lstrip("(").rstrip(")") |             orig = astor.to_source(assert_.test).rstrip("\n").lstrip("(").rstrip(")") | ||||||
|             hook_call_pass = ast.Expr( |             hook_call_pass = ast.Expr( | ||||||
|                 self.helper( |                 self.helper( | ||||||
|  | @ -830,14 +836,16 @@ class AssertionRewriter(ast.NodeVisitor): | ||||||
|                     fmt_pass, |                     fmt_pass, | ||||||
|                 ) |                 ) | ||||||
|             ) |             ) | ||||||
| 
 |  | ||||||
|             # If any hooks implement assert_pass hook |             # If any hooks implement assert_pass hook | ||||||
|             hook_impl_test = ast.If( |             hook_impl_test = ast.If( | ||||||
|                 self.helper("_check_if_assertionpass_impl"), [hook_call_pass], [] |                 self.helper("_check_if_assertionpass_impl"), [hook_call_pass], [] | ||||||
|             ) |             ) | ||||||
|             main_test = ast.If(negation, [raise_], [hook_impl_test]) |             statements_pass = [] | ||||||
|  |             statements_pass.extend(self.expl_stmts) | ||||||
|  |             statements_pass.append(hook_impl_test) | ||||||
| 
 | 
 | ||||||
|             self.statements.extend(self.expl_stmts) |             # Test for assertion condition | ||||||
|  |             main_test = ast.If(negation, statements_fail, statements_pass) | ||||||
|             self.statements.append(main_test) |             self.statements.append(main_test) | ||||||
|             if self.format_variables: |             if self.format_variables: | ||||||
|                 variables = [ |                 variables = [ | ||||||
|  | @ -845,8 +853,8 @@ class AssertionRewriter(ast.NodeVisitor): | ||||||
|                 ] |                 ] | ||||||
|                 clear_format = ast.Assign(variables, _NameConstant(None)) |                 clear_format = ast.Assign(variables, _NameConstant(None)) | ||||||
|                 self.statements.append(clear_format) |                 self.statements.append(clear_format) | ||||||
|         else: | 
 | ||||||
|             ### Original assertion rewriting |         else:  # Original assertion rewriting | ||||||
|             # Create failure message. |             # Create failure message. | ||||||
|             body = self.expl_stmts |             body = self.expl_stmts | ||||||
|             negation = ast.UnaryOp(ast.Not(), top_condition) |             negation = ast.UnaryOp(ast.Not(), top_condition) | ||||||
|  | @ -865,6 +873,7 @@ class AssertionRewriter(ast.NodeVisitor): | ||||||
|             raise_ = ast.Raise(exc, None) |             raise_ = ast.Raise(exc, None) | ||||||
| 
 | 
 | ||||||
|             body.append(raise_) |             body.append(raise_) | ||||||
|  | 
 | ||||||
|         # Clear temporary variables by setting them to None. |         # Clear temporary variables by setting them to None. | ||||||
|         if self.variables: |         if self.variables: | ||||||
|             variables = [ast.Name(name, ast.Store()) for name in self.variables] |             variables = [ast.Name(name, ast.Store()) for name in self.variables] | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue