Change family behavior:
* "legacy" is no longer a copy of "xunit1" * Attempts to use "legacy" will redirect to "xunit1" * record_xml_attribute is not compatible outside of legacy family * Replace call to method/override raw() with to_xml()
This commit is contained in:
		
							parent
							
								
									8937e39afd
								
							
						
					
					
						commit
						aaa7d36bc9
					
				|  | @ -84,9 +84,6 @@ families["_base_legacy"] = {"testcase": ["file", "line", "url"]} | ||||||
| families["xunit1"] = families["_base"].copy() | families["xunit1"] = families["_base"].copy() | ||||||
| merge_family(families["xunit1"], families["_base_legacy"]) | merge_family(families["xunit1"], families["_base_legacy"]) | ||||||
| 
 | 
 | ||||||
| # Alias "legacy" to xUnit 1.x |  | ||||||
| families["legacy"] = families["xunit1"] |  | ||||||
| 
 |  | ||||||
| # xUnit 2.x uses strict base attributes | # xUnit 2.x uses strict base attributes | ||||||
| families["xunit2"] = families["_base"] | families["xunit2"] = families["_base"] | ||||||
| 
 | 
 | ||||||
|  | @ -145,7 +142,7 @@ class _NodeReporter(object): | ||||||
|         self.attrs.update(existing_attrs)  # restore any user-defined attributes |         self.attrs.update(existing_attrs)  # restore any user-defined attributes | ||||||
| 
 | 
 | ||||||
|         # Preserve legacy testcase behavior |         # Preserve legacy testcase behavior | ||||||
|         if self.family == "legacy": |         if self.family == "xunit1": | ||||||
|             return |             return | ||||||
| 
 | 
 | ||||||
|         # Purge attributes not permitted by this test family |         # Purge attributes not permitted by this test family | ||||||
|  | @ -275,7 +272,7 @@ class _NodeReporter(object): | ||||||
|     def finalize(self): |     def finalize(self): | ||||||
|         data = self.to_xml().unicode(indent=0) |         data = self.to_xml().unicode(indent=0) | ||||||
|         self.__dict__.clear() |         self.__dict__.clear() | ||||||
|         self.raw = lambda: py.xml.raw(data) |         self.to_xml = lambda: py.xml.raw(data) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @pytest.fixture | @pytest.fixture | ||||||
|  | @ -307,16 +304,26 @@ def record_xml_attribute(request): | ||||||
|     from _pytest.warning_types import PytestWarning |     from _pytest.warning_types import PytestWarning | ||||||
| 
 | 
 | ||||||
|     request.node.warn(PytestWarning("record_xml_attribute is an experimental feature")) |     request.node.warn(PytestWarning("record_xml_attribute is an experimental feature")) | ||||||
|  | 
 | ||||||
|  |     # Declare noop | ||||||
|  |     def add_attr_noop(name, value): | ||||||
|  |         pass | ||||||
|  | 
 | ||||||
|  |     attr_func = add_attr_noop | ||||||
|     xml = getattr(request.config, "_xml", None) |     xml = getattr(request.config, "_xml", None) | ||||||
|     if xml is not None: | 
 | ||||||
|  |     if xml.family != "xunit1": | ||||||
|  |         request.node.warn( | ||||||
|  |             PytestWarning( | ||||||
|  |                 "record_xml_attribute is incompatible with junit_family: " | ||||||
|  |                 "%s (use: legacy|xunit1)" % xml.family | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |     elif xml is not None: | ||||||
|         node_reporter = xml.node_reporter(request.node.nodeid) |         node_reporter = xml.node_reporter(request.node.nodeid) | ||||||
|         return node_reporter.add_attribute |         attr_func = node_reporter.add_attribute | ||||||
|     else: |  | ||||||
| 
 | 
 | ||||||
|         def add_attr_noop(name, value): |     return attr_func | ||||||
|             pass |  | ||||||
| 
 |  | ||||||
|         return add_attr_noop |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def pytest_addoption(parser): | def pytest_addoption(parser): | ||||||
|  | @ -356,7 +363,7 @@ def pytest_addoption(parser): | ||||||
|     parser.addini( |     parser.addini( | ||||||
|         "junit_family", |         "junit_family", | ||||||
|         "Emit XML for schema: one of legacy|xunit1|xunit2", |         "Emit XML for schema: one of legacy|xunit1|xunit2", | ||||||
|         default="legacy", |         default="xunit1", | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -405,7 +412,7 @@ class LogXML(object): | ||||||
|         suite_name="pytest", |         suite_name="pytest", | ||||||
|         logging="no", |         logging="no", | ||||||
|         report_duration="total", |         report_duration="total", | ||||||
|         family="legacy", |         family="xunit1", | ||||||
|     ): |     ): | ||||||
|         logfile = os.path.expanduser(os.path.expandvars(logfile)) |         logfile = os.path.expanduser(os.path.expandvars(logfile)) | ||||||
|         self.logfile = os.path.normpath(os.path.abspath(logfile)) |         self.logfile = os.path.normpath(os.path.abspath(logfile)) | ||||||
|  | @ -422,6 +429,10 @@ class LogXML(object): | ||||||
|         self.open_reports = [] |         self.open_reports = [] | ||||||
|         self.cnt_double_fail_tests = 0 |         self.cnt_double_fail_tests = 0 | ||||||
| 
 | 
 | ||||||
|  |         # Replaces convenience family with real family | ||||||
|  |         if self.family == "legacy": | ||||||
|  |             self.family = "xunit1" | ||||||
|  | 
 | ||||||
|     def finalize(self, report): |     def finalize(self, report): | ||||||
|         nodeid = getattr(report, "nodeid", report) |         nodeid = getattr(report, "nodeid", report) | ||||||
|         # local hack to handle xdist report order |         # local hack to handle xdist report order | ||||||
|  | @ -587,7 +598,7 @@ class LogXML(object): | ||||||
|         logfile.write( |         logfile.write( | ||||||
|             Junit.testsuite( |             Junit.testsuite( | ||||||
|                 self._get_global_properties_node(), |                 self._get_global_properties_node(), | ||||||
|                 [x.raw() for x in self.node_reporters_ordered], |                 [x.to_xml() for x in self.node_reporters_ordered], | ||||||
|                 name=self.suite_name, |                 name=self.suite_name, | ||||||
|                 errors=self.stats["error"], |                 errors=self.stats["error"], | ||||||
|                 failures=self.stats["failure"], |                 failures=self.stats["failure"], | ||||||
|  | @ -598,10 +609,6 @@ class LogXML(object): | ||||||
|         ) |         ) | ||||||
|         logfile.close() |         logfile.close() | ||||||
| 
 | 
 | ||||||
|         # TODO: GET RID OF |  | ||||||
|         with open(self.logfile) as logfile: |  | ||||||
|             print(logfile.read()) |  | ||||||
| 
 |  | ||||||
|     def pytest_terminal_summary(self, terminalreporter): |     def pytest_terminal_summary(self, terminalreporter): | ||||||
|         terminalreporter.write_sep("-", "generated xml file: %s" % (self.logfile)) |         terminalreporter.write_sep("-", "generated xml file: %s" % (self.logfile)) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue