diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml
index 67706f90..3fc2ab3b 100644
--- a/.github/workflows/ci-cd.yml
+++ b/.github/workflows/ci-cd.yml
@@ -202,7 +202,7 @@ jobs:
id: test-results
if: always()
run: |
- docker run --workdir $GITHUB_WORKSPACE --rm -e INPUT_CHECK_NAME -e INPUT_JUNIT_FILES -e INPUT_TIME_UNIT -e INPUT_GITHUB_TOKEN -e INPUT_GITHUB_RETRIES -e INPUT_COMMIT -e INPUT_COMMENT_TITLE -e INPUT_FAIL_ON -e INPUT_REPORT_INDIVIDUAL_RUNS -e INPUT_DEDUPLICATE_CLASSES_BY_FILE_NAME -e INPUT_IGNORE_RUNS -e INPUT_HIDE_COMMENTS -e INPUT_COMMENT_ON_PR -e INPUT_COMMENT_MODE -e INPUT_COMPARE_TO_EARLIER_COMMIT -e INPUT_PULL_REQUEST_BUILD -e INPUT_EVENT_FILE -e INPUT_EVENT_NAME -e INPUT_TEST_CHANGES_LIMIT -e INPUT_CHECK_RUN_ANNOTATIONS -e INPUT_CHECK_RUN_ANNOTATIONS_BRANCH -e INPUT_SECONDS_BETWEEN_GITHUB_READS -e INPUT_SECONDS_BETWEEN_GITHUB_WRITES -e INPUT_JSON_FILE -e INPUT_JSON_THOUSANDS_SEPARATOR -e INPUT_JOB_SUMMARY -e HOME -e GITHUB_JOB -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_REPOSITORY_OWNER -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RETENTION_DAYS -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_SERVER_URL -e GITHUB_API_URL -e GITHUB_GRAPHQL_URL -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e GITHUB_ACTION_REPOSITORY -e GITHUB_ACTION_REF -e GITHUB_PATH -e GITHUB_ENV -e GITHUB_STEP_SUMMARY -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "$RUNNER_TEMP":"$RUNNER_TEMP" -v "$GITHUB_WORKSPACE":"$GITHUB_WORKSPACE" enricomi/publish-unit-test-result-action:latest
+ docker run --workdir $GITHUB_WORKSPACE --rm -e INPUT_CHECK_NAME -e INPUT_JUNIT_FILES -e INPUT_TRX_FILES -e INPUT_TIME_UNIT -e INPUT_GITHUB_TOKEN -e INPUT_GITHUB_RETRIES -e INPUT_COMMIT -e INPUT_COMMENT_TITLE -e INPUT_FAIL_ON -e INPUT_REPORT_INDIVIDUAL_RUNS -e INPUT_DEDUPLICATE_CLASSES_BY_FILE_NAME -e INPUT_IGNORE_RUNS -e INPUT_HIDE_COMMENTS -e INPUT_COMMENT_ON_PR -e INPUT_COMMENT_MODE -e INPUT_COMPARE_TO_EARLIER_COMMIT -e INPUT_PULL_REQUEST_BUILD -e INPUT_EVENT_FILE -e INPUT_EVENT_NAME -e INPUT_TEST_CHANGES_LIMIT -e INPUT_CHECK_RUN_ANNOTATIONS -e INPUT_CHECK_RUN_ANNOTATIONS_BRANCH -e INPUT_SECONDS_BETWEEN_GITHUB_READS -e INPUT_SECONDS_BETWEEN_GITHUB_WRITES -e INPUT_JSON_FILE -e INPUT_JSON_THOUSANDS_SEPARATOR -e INPUT_JOB_SUMMARY -e HOME -e GITHUB_JOB -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_REPOSITORY_OWNER -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RETENTION_DAYS -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_SERVER_URL -e GITHUB_API_URL -e GITHUB_GRAPHQL_URL -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e GITHUB_ACTION_REPOSITORY -e GITHUB_ACTION_REF -e GITHUB_PATH -e GITHUB_ENV -e GITHUB_STEP_SUMMARY -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "$RUNNER_TEMP":"$RUNNER_TEMP" -v "$GITHUB_WORKSPACE":"$GITHUB_WORKSPACE" enricomi/publish-unit-test-result-action:latest
env:
INPUT_GITHUB_TOKEN: ${{ github.token }}
INPUT_CHECK_NAME: Test Results (Docker Image)
@@ -409,10 +409,8 @@ jobs:
- name: Checkout
uses: actions/checkout@v3
- - name: Copy test junit xml files
- run: |
- mkdir -p test-files
- cp -v python/test/files/*.xml test-files/
+ - name: Copy test files
+ run: cp -rv python/test/files test-files
- name: Prepare publish action from this branch
run: |
@@ -424,7 +422,8 @@ jobs:
with:
check_name: Test Results (Test Files)
fail_on: nothing
- junit_files: "test-files/**.xml"
+ junit_files: "test-files/junit-xml/**/*.xml"
+ trx_files: "test-files/trx/**/*.trx"
json_file: "tests.json"
log_level: DEBUG
@@ -453,9 +452,7 @@ jobs:
uses: actions/checkout@v3
- name: Copy test junit xml files
- run: |
- mkdir -p test-files
- cp -v python/test/files/*.xml test-files/
+ run: cp -rv python/test/files/junit-xml test-files
- name: Prepare publish action from this branch
run: |
@@ -467,7 +464,7 @@ jobs:
with:
check_name: Test Results (Test File)
fail_on: nothing
- files: "test-files/junit.gloo.standalone.xml"
+ files: "test-files/pytest/junit.gloo.standalone.xml"
json_file: "tests.json"
log_level: DEBUG
diff --git a/README.md b/README.md
index e913bc74..b899a5ee 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
[![Test Results](https://gist.githubusercontent.com/EnricoMi/612cb538c14731f1a8fefe504f519395/raw/badge.svg)](https://gist.githubusercontent.com/EnricoMi/612cb538c14731f1a8fefe504f519395/raw/badge.svg)
This [GitHub Action](https://github.com/actions) analyses test result files and
-publishes the results on GitHub. It supports the JUnit XML file format and runs on Linux, macOS and Windows.
+publishes the results on GitHub. It supports the JUnit XML and TRX file formats, and runs on Linux, macOS and Windows.
You can add this action to your GitHub workflow for ![Ubuntu Linux](https://badgen.net/badge/icon/Ubuntu?icon=terminal&label) (e.g. `runs-on: ubuntu-latest`) runners:
@@ -23,6 +23,7 @@ You can add this action to your GitHub workflow for ![Ubuntu Linux](https://badg
if: always()
with:
junit_files: "test-results/**/*.xml"
+ trx_files: "test-results/**/*.trx"
```
Use this for ![macOS](https://badgen.net/badge/icon/macOS?icon=apple&label) (e.g. `runs-on: macos-latest`)
@@ -34,6 +35,7 @@ and ![Windows](https://badgen.net/badge/icon/Windows?icon=windows&label) (e.g. `
if: always()
with:
junit_files: "test-results/**/*.xml"
+ trx_files: "test-results/**/*.trx"
```
See the [notes on running this action as a composite action](#running-as-a-composite-action) if you run it on Windows or macOS.
@@ -180,10 +182,12 @@ With `comment_mode: off`, the `pull-requests: write` permission is not needed.
## Configuration
-Files can be selected via the `files` option, which is optional and defaults to `*.xml` in the current working directory.
-[It supports wildcards](https://docs.python.org/3/library/glob.html#glob.glob) like `*`, `**`, `?` and `[]`.
+Files can be selected via the `junit_files` and `trx_files` options.
+They support [glob wildcards](https://docs.python.org/3/library/glob.html#glob.glob) like `*`, `**`, `?` and `[]`.
The `**` wildcard matches all files and directories recursively: `./`, `./*/`, `./*/*/`, etc.
+At least one of `junit_files` and `trx_files` options have to be set.
+
You can provide multiple file patterns, one pattern per line. Patterns starting with `!` exclude the matching files.
There have to be at least one pattern starting without a `!`:
@@ -198,11 +202,11 @@ The list of most notable options:
|Option|Default Value|Description|
|:-----|:-----:|:----------|
-|`junit_files`|`*.xml`|File patterns of JUnit XML test result files. Supports `*`, `**`, `?`, and `[]`. Use multiline string for multiple patterns. Patterns starting with `!` exclude the matching files. There have to be at least one pattern starting without a `!`.|
+|`junit_files`
`trx_files`|At least one of these `*_files` must be set.|File patterns of JUnit XML and TRX test result files, respectively. Supports `*`, `**`, `?`, and `[]`. Use multiline string for multiple patterns. Patterns starting with `!` exclude the matching files. There have to be at least one pattern starting without a `!`.|
|`check_name`|`"Test Results"`|An alternative name for the check result.|
|`comment_title`|same as `check_name`|An alternative name for the pull request comment.|
|`comment_mode`|`always`|The action posts comments to pull requests that are associated with the commit. Set to:
`always` - always comment
`changes` - comment when changes w.r.t. the target branch exist
`changes in failures` - when changes in the number of failures and errors exist
`changes in errors` - when changes in the number of (only) errors exist
`failures` - when failures or errors exist
`errors` - when (only) errors exist
`off` - to not create pull request comments.|
-|`ignore_runs`|`false`|Does not process test run information by ignoring `` elements in the XML files, which is useful for very large XML files. This disables any check run annotations.|
+|`ignore_runs`|`false`|Does not collect test run information from the test result files, which is useful for very large files. This disables any check run annotations.|
Options related to Git and GitHub
@@ -651,7 +655,7 @@ If this conflicts with actions that later run Python in the same workflow (which
it is recommended to run this action as the last step in your workflow, or to run it in an isolated workflow.
Running it in an isolated workflow is similar to the workflows shown in [Use with matrix strategy](#use-with-matrix-strategy).
-To run the composite action in an isolated workflow, your CI workflow should upload all test result XML files:
+To run the composite action in an isolated workflow, your CI workflow should upload all test result files:
```yaml
build-and-test:
diff --git a/action.yml b/action.yml
index 2451f357..9a286de9 100644
--- a/action.yml
+++ b/action.yml
@@ -32,8 +32,11 @@ inputs:
junit_files:
description: 'File patterns of JUnit XML test result files. Supports *, **, ?, and []. Use multiline string for multiple patterns. Patterns starting with ! exclude the matching files. There have to be at least one pattern starting without a `!`.'
required: false
+ trx_files:
+ description: 'File patterns of TRX test result files. Supports *, **, ?, and []. Use multiline string for multiple patterns. Patterns starting with ! exclude the matching files. There have to be at least one pattern starting without a `!`.'
+ required: false
time_unit:
- description: 'Time values in the XML files have this unit. Supports "seconds" and "milliseconds".'
+ description: 'Time values in the test result files have this unit. Supports "seconds" and "milliseconds".'
default: 'seconds'
required: false
report_individual_runs:
@@ -43,7 +46,7 @@ inputs:
description: 'De-duplicates classes with same name by their file name when set "true", combines test results for those classes otherwise'
required: false
ignore_runs:
- description: 'Does not process test run information by ignoring elements in the XML files, which is useful for very large XML files. This disables any check run annotations'
+ description: 'Does not collect test run information from the test result files, which is useful for very large files. This disables any check run annotations'
default: 'false'
required: false
hide_comments:
diff --git a/composite/action.yml b/composite/action.yml
index 131f4147..38481a3e 100644
--- a/composite/action.yml
+++ b/composite/action.yml
@@ -32,8 +32,11 @@ inputs:
junit_files:
description: 'File patterns of JUnit XML test result files. Supports *, **, ?, and []. Use multiline string for multiple patterns. Patterns starting with ! exclude the matching files. There have to be at least one pattern starting without a `!`.'
required: false
+ trx_files:
+ description: 'File patterns of TRX test result files. Supports *, **, ?, and []. Use multiline string for multiple patterns. Patterns starting with ! exclude the matching files. There have to be at least one pattern starting without a `!`.'
+ required: false
time_unit:
- description: 'Time values in the XML files have this unit. Supports "seconds" and "milliseconds".'
+ description: 'Time values in the test result files have this unit. Supports "seconds" and "milliseconds".'
default: 'seconds'
required: false
report_individual_runs:
@@ -43,7 +46,7 @@ inputs:
description: 'De-duplicates classes with same name by their file name when set "true", combines test results for those classes otherwise'
required: false
ignore_runs:
- description: 'Does not process test run information by ignoring elements in the XML files, which is useful for very large XML files. This disables any check run annotations'
+ description: 'Does not collect test run information from the test result files, which is useful for very large files. This disables any check run annotations'
default: 'false'
required: false
hide_comments:
@@ -154,6 +157,7 @@ runs:
# deprecated
FILES: ${{ inputs.files }}
JUNIT_FILES: ${{ inputs.junit_files }}
+ TRX_FILES: ${{ inputs.trx_files }}
TIME_UNIT: ${{ inputs.time_unit }}
REPORT_INDIVIDUAL_RUNS: ${{ inputs.report_individual_runs }}
DEDUPLICATE_CLASSES_BY_FILE_NAME: ${{ inputs.deduplicate_classes_by_file_name }}
diff --git a/python/publish/junit.py b/python/publish/junit.py
index 2866d2dd..4ae3972e 100644
--- a/python/publish/junit.py
+++ b/python/publish/junit.py
@@ -1,9 +1,10 @@
+import math
import os
from collections import defaultdict
-from typing import Optional, Iterable, Union, Any, List, Dict, Callable, Tuple
+from typing import Optional, Iterable, Union, List, Dict, Callable, Tuple
import junitparser
-from junitparser import Element, JUnitXml, TestCase, TestSuite, Skipped
+from junitparser import Element, JUnitXml, JUnitXmlError, TestCase, TestSuite, Skipped
from junitparser.junitparser import etree
from publish.unittestresults import ParsedUnitTestResults, UnitTestCase, ParseError
@@ -118,12 +119,16 @@ def close(self) -> Element:
return super().close()
+JUnitTree = etree.ElementTree
+JUnitTreeOrException = Union[JUnitTree, BaseException]
+ParsedJUnitFile = Tuple[str, JUnitTreeOrException]
+
+
def parse_junit_xml_files(files: Iterable[str],
- time_factor: float = 1.0,
drop_testcases: bool = False,
- progress: Callable[[Tuple[str, Union[JUnitXml, BaseException]]], Tuple[str, Union[JUnitXml, BaseException]]] = lambda x: x) -> ParsedUnitTestResults:
- """Parses junit xml files and returns aggregated statistics as a ParsedUnitTestResults."""
- def parse(path: str) -> Union[JUnitXml, BaseException]:
+ progress: Callable[[ParsedJUnitFile], ParsedJUnitFile] = lambda x: x) -> Iterable[ParsedJUnitFile]:
+ def parse(path: str) -> JUnitTreeOrException:
+ """Parses a junit xml file and returns either a JUnitTree or an Exception."""
if not os.path.exists(path):
return FileNotFoundError(f'File does not exist.')
if os.stat(path).st_size == 0:
@@ -132,27 +137,46 @@ def parse(path: str) -> Union[JUnitXml, BaseException]:
try:
if drop_testcases:
builder = DropTestCaseBuilder()
- return JUnitXml.fromfile(path, parse_func=builder.parse)
- return JUnitXml.fromfile(path)
+ return etree.parse(path, parser=etree.XMLParser(target=builder, encoding='utf-8'))
+ return etree.parse(path)
except BaseException as e:
return e
- parsed_files = [progress((result_file, parse(result_file))) for result_file in files]
+ return [progress((result_file, parse(result_file))) for result_file in files]
+
+
+def process_junit_xml_elems(trees: Iterable[ParsedJUnitFile], time_factor: float = 1.0) -> ParsedUnitTestResults:
+ # TODO: move upstream into JUnitTree
+ def create_junitxml(filepath: str, tree: JUnitTree) -> Union[JUnitXml, JUnitXmlError]:
+ root_elem = tree.getroot()
+ if root_elem.tag == "testsuites":
+ instance = JUnitXml()
+ elif root_elem.tag == "testsuite":
+ instance = TestSuite()
+ else:
+ return JUnitXmlError("Invalid format.")
+ instance._elem = root_elem
+ instance.filepath = filepath
+ return instance
+
+ processed = [(result_file, create_junitxml(result_file, tree) if not isinstance(tree, BaseException) else tree)
+ for result_file, tree in trees]
junits = [(result_file, junit)
- for result_file, junit in parsed_files
+ for result_file, junit in processed
if not isinstance(junit, BaseException)]
errors = [ParseError.from_exception(result_file, exception)
- for result_file, exception in parsed_files
+ for result_file, exception in processed
if isinstance(exception, BaseException)]
suites = [(result_file, suite)
for result_file, junit in junits
for suite in (junit if junit._tag == "testsuites" else [junit])]
+
suite_tests = sum([suite.tests for result_file, suite in suites])
suite_skipped = sum([suite.skipped + suite.disabled for result_file, suite in suites])
suite_failures = sum([suite.failures for result_file, suite in suites])
suite_errors = sum([suite.errors for result_file, suite in suites])
- suite_time = int(sum([suite.time for result_file, suite in suites]) * time_factor)
+ suite_time = int(sum([suite.time for result_file, suite in suites if not math.isnan(suite.time)]) * time_factor)
def int_opt(string: Optional[str]) -> Optional[int]:
try:
@@ -192,7 +216,7 @@ def get_cases(suite: TestSuite) -> List[TestCase]:
]
return ParsedUnitTestResults(
- files=len(parsed_files),
+ files=len(list(trees)),
errors=errors,
# test state counts from suites
suites=len(suites),
diff --git a/python/publish/publisher.py b/python/publish/publisher.py
index 40162f47..18cb16f9 100644
--- a/python/publish/publisher.py
+++ b/python/publish/publisher.py
@@ -43,7 +43,9 @@ class Settings:
json_thousands_separator: str
fail_on_errors: bool
fail_on_failures: bool
- junit_files_glob: str
+ # one of these *_files_glob must be set
+ junit_files_glob: Optional[str]
+ trx_files_glob: Optional[str]
time_factor: float
check_name: str
comment_title: str
diff --git a/python/publish/trx.py b/python/publish/trx.py
new file mode 100644
index 00000000..77e3d31e
--- /dev/null
+++ b/python/publish/trx.py
@@ -0,0 +1,28 @@
+import os
+import pathlib
+from typing import Iterable, Callable
+
+from lxml import etree
+
+from publish.junit import JUnitTreeOrException, ParsedJUnitFile
+
+with (pathlib.Path(__file__).parent / 'xslt' / 'trx-to-junit.xslt').open('r', encoding='utf-8') as r:
+ transform_trx_to_junit = etree.XSLT(etree.parse(r))
+
+
+def parse_trx_files(files: Iterable[str],
+ progress: Callable[[ParsedJUnitFile], ParsedJUnitFile] = lambda x: x) -> Iterable[ParsedJUnitFile]:
+ def parse(path: str) -> JUnitTreeOrException:
+ """Parses a trx file and returns either a JUnitTree or an Exception."""
+ if not os.path.exists(path):
+ return FileNotFoundError(f'File does not exist.')
+ if os.stat(path).st_size == 0:
+ return Exception(f'File is empty.')
+
+ try:
+ trx = etree.parse(path)
+ return transform_trx_to_junit(trx)
+ except BaseException as e:
+ return e
+
+ return [progress((result_file, parse(result_file))) for result_file in files]
diff --git a/python/publish/xslt/trx-to-junit.xslt b/python/publish/xslt/trx-to-junit.xslt
new file mode 100644
index 00000000..483536c4
--- /dev/null
+++ b/python/publish/xslt/trx-to-junit.xslt
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/publish_unit_test_results.py b/python/publish_unit_test_results.py
index f8da8edd..3174a16d 100644
--- a/python/publish_unit_test_results.py
+++ b/python/publish_unit_test_results.py
@@ -18,11 +18,11 @@
pull_request_build_modes, fail_on_modes, fail_on_mode_errors, fail_on_mode_failures, \
comment_mode_off, comment_mode_always, comment_modes, comment_modes_deprecated, punctuation_space
from publish.github_action import GithubAction
-from publish.junit import parse_junit_xml_files
+from publish.junit import parse_junit_xml_files, process_junit_xml_elems
from publish.progress import progress_logger
from publish.publisher import Publisher, Settings
from publish.retry import GitHubRetry
-from publish.unittestresults import get_test_results, get_stats, ParsedUnitTestResults
+from publish.unittestresults import get_test_results, get_stats, ParsedUnitTestResults, ParsedUnitTestResultsWithCommit
logger = logging.getLogger('publish')
@@ -59,6 +59,21 @@ def get_files(multiline_files_globs: str) -> List[str]:
return list(included - excluded)
+def expand_glob(pattern: Optional[str], gha: GithubAction) -> List[str]:
+ if not pattern:
+ return []
+
+ files = get_files(pattern)
+
+ if len(files) == 0:
+ gha.warning(f'Could not find any files for {pattern}')
+ else:
+ logger.info(f'Reading {pattern} ({get_number_of_files(files)}, {get_files_size(files)})')
+ logger.debug(f'reading {list(files)}')
+
+ return files
+
+
def get_files_size(files: List[str]) -> str:
try:
size = sum([os.path.getsize(file) for file in files])
@@ -75,6 +90,31 @@ def get_number_of_files(files: List[str]) -> str:
return number_of_files
+def parse_files(settings: Settings, gha: GithubAction) -> ParsedUnitTestResultsWithCommit:
+ # expand file globs
+ junit_files = expand_glob(settings.junit_files_glob, gha)
+ trx_files = expand_glob(settings.trx_files_glob, gha)
+
+ elems = []
+
+ # parse files, log the progress
+ # https://github.com/EnricoMi/publish-unit-test-result-action/issues/304
+ with progress_logger(items=len(junit_files + trx_files),
+ interval_seconds=10,
+ progress_template='Read {progress} files in {time}',
+ finish_template='Finished reading {observations} files in {duration}',
+ progress_item_type=Tuple[str, Any],
+ logger=logger) as progress:
+ if junit_files:
+ elems.extend(parse_junit_xml_files(junit_files, settings.ignore_runs, progress))
+ if trx_files:
+ from publish.trx import parse_trx_files
+ elems.extend(parse_trx_files(trx_files, progress))
+
+ # get the test results
+ return process_junit_xml_elems(elems, settings.time_factor).with_commit(settings.commit)
+
+
def main(settings: Settings, gha: GithubAction) -> None:
# we cannot create a check run or pull request comment when running on pull_request event from a fork
# when event_file is given we assume proper setup as in README.md#support-fork-repositories-and-dependabot-branches
@@ -88,32 +128,16 @@ def main(settings: Settings, gha: GithubAction) -> None:
f'https://github.com/EnricoMi/publish-unit-test-result-action/blob/v1.20/README.md#support-fork-repositories-and-dependabot-branches')
return
- # resolve the files_glob to files
- files = get_files(settings.junit_files_glob)
- if len(files) == 0:
- gha.warning(f'Could not find any files for {settings.junit_files_glob}')
- else:
- logger.info(f'Reading {settings.junit_files_glob} ({get_number_of_files(files)}, {get_files_size(files)})')
- logger.debug(f'reading {list(files)}')
-
# log the available RAM to help spot OOM issues:
# https://github.com/EnricoMi/publish-unit-test-result-action/issues/231
# https://github.com/EnricoMi/publish-unit-test-result-action/issues/304
avail_mem = humanize.naturalsize(psutil.virtual_memory().available, binary=True)
logger.info(f'Available memory to read files: {avail_mem}')
- # log the progress
- # https://github.com/EnricoMi/publish-unit-test-result-action/issues/304
- with progress_logger(items=len(files),
- interval_seconds=10,
- progress_template='Read {progress} files in {time}',
- finish_template='Finished reading {observations} files in {duration}',
- progress_item_type=Tuple[str, Any],
- logger=logger) as progress:
- # get the test results
- parsed = parse_junit_xml_files(files, settings.time_factor, settings.ignore_runs, progress).with_commit(settings.commit)
- [gha.error(message=f'Error processing result file: {error.message}', file=error.file, line=error.line, column=error.column)
- for error in parsed.errors]
+ # get the unit test results
+ parsed = parse_files(settings, gha)
+ [gha.error(message=f'Error processing result file: {error.message}', file=error.file, line=error.line, column=error.column)
+ for error in parsed.errors]
# process the parsed results
results = get_test_results(parsed, settings.dedup_classes_by_file_name)
@@ -295,8 +319,16 @@ def get_settings(options: dict, gha: Optional[GithubAction] = None) -> Settings:
test_changes_limit = get_var('TEST_CHANGES_LIMIT', options) or '10'
check_var_condition(test_changes_limit.isnumeric(), f'TEST_CHANGES_LIMIT must be a positive integer or 0: {test_changes_limit}')
+ # remove when deprecated FILES is removed
if get_var('FILES', options):
gha.warning('Option FILES is deprecated, please use JUNIT_FILES instead!')
+ # replace with error when deprecated FILES is removed
+ default_junit_files_glob = None
+ if not any([get_var(f'{flavour}_FILES', options)
+ for flavour in ['JUNIT', 'TRX']]):
+ default_junit_files_glob = '*.xml'
+ gha.warning(f'At least one of the *_FILES options has to be set! '
+ f'Falling back to deprecated default "{default_junit_files_glob}"')
time_unit = get_var('TIME_UNIT', options) or 'seconds'
time_factors = {'seconds': 1.0, 'milliseconds': 0.001}
@@ -336,7 +368,8 @@ def get_settings(options: dict, gha: Optional[GithubAction] = None) -> Settings:
json_thousands_separator=get_var('JSON_THOUSANDS_SEPARATOR', options) or punctuation_space,
fail_on_errors=fail_on_errors,
fail_on_failures=fail_on_failures,
- junit_files_glob=get_var('JUNIT_FILES', options) or get_var('FILES', options) or '*.xml',
+ junit_files_glob=get_var('JUNIT_FILES', options) or get_var('FILES', options) or default_junit_files_glob,
+ trx_files_glob=get_var('TRX_FILES', options),
time_factor=time_factor,
check_name=check_name,
comment_title=get_var('COMMENT_TITLE', options) or check_name,
diff --git a/python/test/files/junit-xml/empty.exception b/python/test/files/junit-xml/empty.exception
new file mode 100644
index 00000000..8d536046
--- /dev/null
+++ b/python/test/files/junit-xml/empty.exception
@@ -0,0 +1 @@
+Exception: 'File is empty.'
\ No newline at end of file
diff --git a/python/test/files/empty.xml b/python/test/files/junit-xml/empty.xml
similarity index 100%
rename from python/test/files/empty.xml
rename to python/test/files/junit-xml/empty.xml
diff --git a/python/test/files/junit-xml/junit.multiresult.junit-xml b/python/test/files/junit-xml/junit.multiresult.junit-xml
new file mode 100644
index 00000000..7136fe34
--- /dev/null
+++ b/python/test/files/junit-xml/junit.multiresult.junit-xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ Assertion failed
+ stdout
+
+
+
+ Assertion failed
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/junit.multiresult.results b/python/test/files/junit-xml/junit.multiresult.results
new file mode 100644
index 00000000..d5a2468a
--- /dev/null
+++ b/python/test/files/junit-xml/junit.multiresult.results
@@ -0,0 +1,56 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=4,
+ suite_skipped=3,
+ suite_failures=2,
+ suite_errors=1,
+ suite_time=1,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='junit.multiresult.xml',
+ test_file=None,
+ line=None,
+ class_name='test class',
+ test_name='test that errors',
+ result='error',
+ message='test teardown failure',
+ content='stdout',
+ time=0.123
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='junit.multiresult.xml',
+ test_file=None,
+ line=None,
+ class_name='test class',
+ test_name='test that fails',
+ result='failure',
+ message='test failure',
+ content='Assertion failed',
+ time=0.234
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='junit.multiresult.xml',
+ test_file=None,
+ line=None,
+ class_name='test class',
+ test_name='test that is skipped',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.345
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='junit.multiresult.xml',
+ test_file=None,
+ line=None,
+ class_name='test class',
+ test_name='test that succeeds',
+ result='success',
+ message=None,
+ content=None,
+ time=0.456
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.multiresult.xml b/python/test/files/junit-xml/junit.multiresult.xml
similarity index 100%
rename from python/test/files/junit.multiresult.xml
rename to python/test/files/junit-xml/junit.multiresult.xml
diff --git a/python/test/files/junit-xml/minimal-attributes.junit-xml b/python/test/files/junit-xml/minimal-attributes.junit-xml
new file mode 100644
index 00000000..92ca2060
--- /dev/null
+++ b/python/test/files/junit-xml/minimal-attributes.junit-xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/minimal-attributes.results b/python/test/files/junit-xml/minimal-attributes.results
new file mode 100644
index 00000000..64237e1a
--- /dev/null
+++ b/python/test/files/junit-xml/minimal-attributes.results
@@ -0,0 +1,56 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=4,
+ suite_skipped=1,
+ suite_failures=1,
+ suite_errors=1,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='minimal-attributes.xml',
+ test_file=None,
+ line=None,
+ class_name='ClassName',
+ test_name='test_name',
+ result='success',
+ message=None,
+ content=None,
+ time=None
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='minimal-attributes.xml',
+ test_file=None,
+ line=None,
+ class_name='ClassName',
+ test_name='skipped_test',
+ result='skipped',
+ message=None,
+ content=None,
+ time=None
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='minimal-attributes.xml',
+ test_file=None,
+ line=None,
+ class_name='ClassName',
+ test_name='failed_test',
+ result='failure',
+ message=None,
+ content=None,
+ time=None
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='minimal-attributes.xml',
+ test_file=None,
+ line=None,
+ class_name='ClassName',
+ test_name='error_test',
+ result='error',
+ message=None,
+ content=None,
+ time=None
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/minimal-attributes.xml b/python/test/files/junit-xml/minimal-attributes.xml
similarity index 100%
rename from python/test/files/minimal-attributes.xml
rename to python/test/files/junit-xml/minimal-attributes.xml
diff --git a/python/test/files/junit-xml/no-attributes.junit-xml b/python/test/files/junit-xml/no-attributes.junit-xml
new file mode 100644
index 00000000..a14fca7f
--- /dev/null
+++ b/python/test/files/junit-xml/no-attributes.junit-xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/no-attributes.results b/python/test/files/junit-xml/no-attributes.results
new file mode 100644
index 00000000..d64187fd
--- /dev/null
+++ b/python/test/files/junit-xml/no-attributes.results
@@ -0,0 +1,11 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=4,
+ suite_skipped=1,
+ suite_failures=1,
+ suite_errors=1,
+ suite_time=0,
+ cases=[]
+)
\ No newline at end of file
diff --git a/python/test/files/no-attributes.xml b/python/test/files/junit-xml/no-attributes.xml
similarity index 100%
rename from python/test/files/no-attributes.xml
rename to python/test/files/junit-xml/no-attributes.xml
diff --git a/python/test/files/junit-xml/no-cases-but-tests.junit-xml b/python/test/files/junit-xml/no-cases-but-tests.junit-xml
new file mode 100644
index 00000000..c59bf562
--- /dev/null
+++ b/python/test/files/junit-xml/no-cases-but-tests.junit-xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/python/test/files/junit-xml/no-cases-but-tests.results b/python/test/files/junit-xml/no-cases-but-tests.results
new file mode 100644
index 00000000..c9ae68e8
--- /dev/null
+++ b/python/test/files/junit-xml/no-cases-but-tests.results
@@ -0,0 +1,11 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=6,
+ suite_skipped=2,
+ suite_failures=1,
+ suite_errors=0,
+ suite_time=0,
+ cases=[]
+)
\ No newline at end of file
diff --git a/python/test/files/no-cases-but-tests.xml b/python/test/files/junit-xml/no-cases-but-tests.xml
similarity index 100%
rename from python/test/files/no-cases-but-tests.xml
rename to python/test/files/junit-xml/no-cases-but-tests.xml
diff --git a/python/test/files/junit-xml/no-cases.junit-xml b/python/test/files/junit-xml/no-cases.junit-xml
new file mode 100644
index 00000000..4e2bc81b
--- /dev/null
+++ b/python/test/files/junit-xml/no-cases.junit-xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/python/test/files/junit-xml/no-cases.results b/python/test/files/junit-xml/no-cases.results
new file mode 100644
index 00000000..87ab69c4
--- /dev/null
+++ b/python/test/files/junit-xml/no-cases.results
@@ -0,0 +1,11 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=0,
+ suite_skipped=0,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=0,
+ cases=[]
+)
\ No newline at end of file
diff --git a/python/test/files/no-cases.xml b/python/test/files/junit-xml/no-cases.xml
similarity index 100%
rename from python/test/files/no-cases.xml
rename to python/test/files/junit-xml/no-cases.xml
diff --git a/python/test/files/junit-xml/non-junit.exception b/python/test/files/junit-xml/non-junit.exception
new file mode 100644
index 00000000..8ab21ffc
--- /dev/null
+++ b/python/test/files/junit-xml/non-junit.exception
@@ -0,0 +1 @@
+JUnitXmlError('Invalid format.')
\ No newline at end of file
diff --git a/python/test/files/junit-xml/non-junit.junit-xml b/python/test/files/junit-xml/non-junit.junit-xml
new file mode 100644
index 00000000..de6d15a9
--- /dev/null
+++ b/python/test/files/junit-xml/non-junit.junit-xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/non-junit.results b/python/test/files/junit-xml/non-junit.results
new file mode 100644
index 00000000..306fec7d
--- /dev/null
+++ b/python/test/files/junit-xml/non-junit.results
@@ -0,0 +1,16 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[
+ publish.unittestresults.ParseError(
+ file='non-junit.xml',
+ message='Invalid format.'
+ )
+ ],
+ suites=0,
+ suite_tests=0,
+ suite_skipped=0,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=0,
+ cases=[]
+)
\ No newline at end of file
diff --git a/python/test/files/non-junit.xml b/python/test/files/junit-xml/non-junit.xml
similarity index 100%
rename from python/test/files/non-junit.xml
rename to python/test/files/junit-xml/non-junit.xml
diff --git a/python/test/files/junit-xml/non-xml.exception b/python/test/files/junit-xml/non-xml.exception
new file mode 100644
index 00000000..91e92f96
--- /dev/null
+++ b/python/test/files/junit-xml/non-xml.exception
@@ -0,0 +1 @@
+XMLSyntaxError: "Start tag expected, '<' not found, line 1, column 1"
\ No newline at end of file
diff --git a/python/test/files/non-xml.xml b/python/test/files/junit-xml/non-xml.xml
similarity index 100%
rename from python/test/files/non-xml.xml
rename to python/test/files/junit-xml/non-xml.xml
diff --git a/python/test/files/junit-xml/pytest/corrupt-xml.exception b/python/test/files/junit-xml/pytest/corrupt-xml.exception
new file mode 100644
index 00000000..89646644
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/corrupt-xml.exception
@@ -0,0 +1 @@
+XMLSyntaxError: 'Premature end of data in tag skipped line 9, line 11, column 22'
\ No newline at end of file
diff --git a/python/test/files/corrupt-xml.xml b/python/test/files/junit-xml/pytest/corrupt-xml.xml
similarity index 100%
rename from python/test/files/corrupt-xml.xml
rename to python/test/files/junit-xml/pytest/corrupt-xml.xml
diff --git a/python/test/files/junit-xml/pytest/junit.fail.junit-xml b/python/test/files/junit-xml/pytest/junit.fail.junit-xml
new file mode 100644
index 00000000..8d246447
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.fail.junit-xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+ /horovod/test/test_spark.py:1642: get_available_devices only
+ supported in Spark 3.0 and above
+
+
+
+
+ self = <test_spark.SparkTests testMethod=test_rsh_events>
+
+ def test_rsh_events(self):
+ > self.do_test_rsh_events(3)
+
+ test_spark.py:821:
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ test_spark.py:836: in do_test_rsh_events
+ self.do_test_rsh(command, 143, events=events)
+ test_spark.py:852: in do_test_rsh
+ self.assertEqual(expected_result, res)
+ E AssertionError: 143 != 0
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.fail.results b/python/test/files/junit-xml/pytest/junit.fail.results
new file mode 100644
index 00000000..461a87e9
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.fail.results
@@ -0,0 +1,82 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=5,
+ suite_skipped=1,
+ suite_failures=1,
+ suite_errors=0,
+ suite_time=2,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.fail.xml',
+ test_file='test/test_spark.py',
+ line=1412,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_check_shape_compatibility',
+ result='success',
+ message=None,
+ content=None,
+ time=6.435
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.fail.xml',
+ test_file='test/test_spark.py',
+ line=1641,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_available_devices',
+ result='skipped',
+ message='get_available_devices only supported in Spark 3.0 and above',
+ content='/horovod/test/test_spark.py:1642: get_available_devices only\n '
+ ' supported in Spark 3.0 and above\n ',
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.fail.xml',
+ test_file='test/test_spark.py',
+ line=1102,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_col_info',
+ result='success',
+ message=None,
+ content=None,
+ time=6.417
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.fail.xml',
+ test_file='test/test_spark.py',
+ line=819,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_events',
+ result='failure',
+ message='self = def '
+ 'test_rsh_events(self): > self.do_test_rsh_events(3) '
+ 'test_spark.py:821: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ '
+ '_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test_spark.py:836: in '
+ 'do_test_rsh_events self.do_test_rsh(command, 143, events=events) '
+ 'test_spark.py:852: in do_test_rsh '
+ 'self.assertEqual(expected_result, res) E AssertionError: 143 != 0',
+ content='self = \n\n '
+ ' def test_rsh_events(self):\n > '
+ 'self.do_test_rsh_events(3)\n\n test_spark.py:821:\n '
+ ' _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ '
+ '_ _ _ _ _ _ _ _ _ _ _ _\n test_spark.py:836: in '
+ 'do_test_rsh_events\n self.do_test_rsh(command, 143, '
+ 'events=events)\n test_spark.py:852: in do_test_rsh\n '
+ ' self.assertEqual(expected_result, res)\n '
+ 'E AssertionError: 143 != 0\n ',
+ time=7.541
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.fail.xml',
+ test_file='test/test_spark.py',
+ line=813,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_with_non_zero_exit_code',
+ result='success',
+ message=None,
+ content=None,
+ time=1.514
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.fail.xml b/python/test/files/junit-xml/pytest/junit.fail.xml
similarity index 100%
rename from python/test/files/junit.fail.xml
rename to python/test/files/junit-xml/pytest/junit.fail.xml
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.elastic.junit-xml b/python/test/files/junit-xml/pytest/junit.gloo.elastic.junit-xml
new file mode 100644
index 00000000..d7fc4c6f
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.elastic.junit-xml
@@ -0,0 +1,27 @@
+
+
+
+
+ /horovod/test/integration/test_elastic_torch.py:30: This test fails due to https://github.com/horovod/horovod/issues/2030
+
+
+
+
+
+ /horovod/test/integration/test_elastic_torch.py:35: This test fails due to https://github.com/horovod/horovod/issues/2030
+
+
+
+
+ /horovod/test/integration/test_elastic_tensorflow.py:30: This test fails due to https://github.com/horovod/horovod/issues/2030
+
+
+
+
+
+ /horovod/test/integration/test_elastic_tensorflow.py:35: This test fails due to https://github.com/horovod/horovod/issues/2030
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.elastic.results b/python/test/files/junit-xml/pytest/junit.gloo.elastic.results
new file mode 100644
index 00000000..a118cda2
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.elastic.results
@@ -0,0 +1,170 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=14,
+ suite_skipped=4,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=72,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/test_elastic_torch.py',
+ line=29,
+ class_name='test.integration.test_elastic_torch.ElasticTorchTests',
+ test_name='test_all_hosts_blacklisted',
+ result='skipped',
+ message='This test fails due to https://github.com/horovod/horovod/issues/2030',
+ content='/horovod/test/integration/test_elastic_torch.py:30: This test fails '
+ 'due to https://github.com/horovod/horovod/issues/2030',
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=196,
+ class_name='test.integration.test_elastic_torch.ElasticTorchTests',
+ test_name='test_all_ranks_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=2.874
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=170,
+ class_name='test.integration.test_elastic_torch.ElasticTorchTests',
+ test_name='test_fault_tolerance_without_scaling',
+ result='success',
+ message=None,
+ content=None,
+ time=4.28
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=115,
+ class_name='test.integration.test_elastic_torch.ElasticTorchTests',
+ test_name='test_hosts_added_and_removed',
+ result='success',
+ message=None,
+ content=None,
+ time=6.847
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/test_elastic_torch.py',
+ line=34,
+ class_name='test.integration.test_elastic_torch.ElasticTorchTests',
+ test_name='test_min_hosts_timeout',
+ result='skipped',
+ message='This test fails due to https://github.com/horovod/horovod/issues/2030',
+ content='/horovod/test/integration/test_elastic_torch.py:35: This test fails '
+ 'due to https://github.com/horovod/horovod/issues/2030',
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=242,
+ class_name='test.integration.test_elastic_torch.ElasticTorchTests',
+ test_name='test_reset_limit',
+ result='success',
+ message=None,
+ content=None,
+ time=6.49
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=142,
+ class_name='test.integration.test_elastic_torch.ElasticTorchTests',
+ test_name='test_single_rank_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=5.264
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/test_elastic_tensorflow.py',
+ line=29,
+ class_name='test.integration.test_elastic_tensorflow.ElasticTensorFlowTests',
+ test_name='test_all_hosts_blacklisted',
+ result='skipped',
+ message='This test fails due to https://github.com/horovod/horovod/issues/2030',
+ content='/horovod/test/integration/test_elastic_tensorflow.py:30: This test '
+ 'fails due to https://github.com/horovod/horovod/issues/2030',
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=196,
+ class_name='test.integration.test_elastic_tensorflow.ElasticTensorFlowTests',
+ test_name='test_all_ranks_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=4.603
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=170,
+ class_name='test.integration.test_elastic_tensorflow.ElasticTensorFlowTests',
+ test_name='test_fault_tolerance_without_scaling',
+ result='success',
+ message=None,
+ content=None,
+ time=8.349
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=115,
+ class_name='test.integration.test_elastic_tensorflow.ElasticTensorFlowTests',
+ test_name='test_hosts_added_and_removed',
+ result='success',
+ message=None,
+ content=None,
+ time=12.64
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/test_elastic_tensorflow.py',
+ line=34,
+ class_name='test.integration.test_elastic_tensorflow.ElasticTensorFlowTests',
+ test_name='test_min_hosts_timeout',
+ result='skipped',
+ message='This test fails due to https://github.com/horovod/horovod/issues/2030',
+ content='/horovod/test/integration/test_elastic_tensorflow.py:35: This test '
+ 'fails due to https://github.com/horovod/horovod/issues/2030',
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=242,
+ class_name='test.integration.test_elastic_tensorflow.ElasticTensorFlowTests',
+ test_name='test_reset_limit',
+ result='success',
+ message=None,
+ content=None,
+ time=12.21
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.xml',
+ test_file='test/integration/elastic_common.py',
+ line=142,
+ class_name='test.integration.test_elastic_tensorflow.ElasticTensorFlowTests',
+ test_name='test_single_rank_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=8.455
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.junit-xml b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.junit-xml
new file mode 100644
index 00000000..ead436ea
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.junit-xml
@@ -0,0 +1,31 @@
+
+
+
+
+ /horovod/test/integration/test_elastic_spark_tensorflow.py:35: This test fails due to https://github.com/horovod/horovod/issues/1994
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /horovod/test/integration/test_elastic_spark_tensorflow.py:32: This test fails due to https://github.com/horovod/horovod/issues/1994
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.results b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.results
new file mode 100644
index 00000000..fba532dc
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.results
@@ -0,0 +1,278 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=22,
+ suite_skipped=2,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=627,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/test_elastic_spark_tensorflow.py',
+ line=34,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_auto_scale_down_by_discovery',
+ result='skipped',
+ message='This test fails due to https://github.com/horovod/horovod/issues/1994',
+ content='/horovod/test/integration/test_elastic_spark_tensorflow.py:35: This '
+ 'test fails due to https://github.com/horovod/horovod/issues/1994',
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=681,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_auto_scale_down_by_exception',
+ result='success',
+ message=None,
+ content=None,
+ time=22.073
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=710,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_auto_scale_no_spark_black_list',
+ result='success',
+ message=None,
+ content=None,
+ time=55.445
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_auto_scale_spark_blacklist_no_executor_reuse',
+ result='success',
+ message=None,
+ content=None,
+ time=49.354
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_auto_scale_spark_blacklist_no_executor_reuse_in_app',
+ result='success',
+ message=None,
+ content=None,
+ time=41.024
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_auto_scale_spark_blacklist_no_executor_reuse_same_task',
+ result='success',
+ message=None,
+ content=None,
+ time=40.743
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_auto_scale_spark_blacklist_no_node_reuse',
+ result='success',
+ message=None,
+ content=None,
+ time=40.671
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_auto_scale_spark_blacklist_no_node_reuse_in_app',
+ result='success',
+ message=None,
+ content=None,
+ time=40.612
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=626,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_auto_scale_up',
+ result='success',
+ message=None,
+ content=None,
+ time=30.312
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=613,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_all_hosts_lost',
+ result='success',
+ message=None,
+ content=None,
+ time=12.623
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=584,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_exception_all_ranks',
+ result='success',
+ message=None,
+ content=None,
+ time=15.757
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=558,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_exception_single_rank',
+ result='success',
+ message=None,
+ content=None,
+ time=26.113
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=598,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_exception_with_min_hosts_timeout',
+ result='success',
+ message=None,
+ content=None,
+ time=26.65
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/test_elastic_spark_tensorflow.py',
+ line=31,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_hosts_added_and_removed',
+ result='skipped',
+ message='This test fails due to https://github.com/horovod/horovod/issues/1994',
+ content='/horovod/test/integration/test_elastic_spark_tensorflow.py:32: This '
+ 'test fails due to https://github.com/horovod/horovod/issues/1994',
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=503,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_no_spark_blacklist',
+ result='success',
+ message=None,
+ content=None,
+ time=25.879
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_executor_reuse',
+ result='success',
+ message=None,
+ content=None,
+ time=26.382
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_executor_reuse_in_app',
+ result='success',
+ message=None,
+ content=None,
+ time=26.381
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_executor_reuse_same_task',
+ result='success',
+ message=None,
+ content=None,
+ time=26.389
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_node_reuse',
+ result='success',
+ message=None,
+ content=None,
+ time=26.403
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_node_reuse_in_app',
+ result='success',
+ message=None,
+ content=None,
+ time=26.404
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=472,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_fault_tolerance_unused_hosts_added_and_removed',
+ result='success',
+ message=None,
+ content=None,
+ time=46.667
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.tf.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=394,
+ class_name='test.integration.test_elastic_spark_tensorflow.'
+ 'ElasticSparkTensorflowTests',
+ test_name='test_happy_run',
+ result='success',
+ message=None,
+ content=None,
+ time=21.082
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.gloo.elastic.spark.tf.xml b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.xml
similarity index 100%
rename from python/test/files/junit.gloo.elastic.spark.tf.xml
rename to python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.xml
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.junit-xml b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.junit-xml
new file mode 100644
index 00000000..c48929b0
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.junit-xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.results b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.results
new file mode 100644
index 00000000..226fa5a0
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.results
@@ -0,0 +1,254 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=22,
+ suite_skipped=0,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=670,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=653,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_auto_scale_down_by_discovery',
+ result='success',
+ message=None,
+ content=None,
+ time=26.583
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=681,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_auto_scale_down_by_exception',
+ result='success',
+ message=None,
+ content=None,
+ time=20.709
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=710,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_auto_scale_no_spark_black_list',
+ result='success',
+ message=None,
+ content=None,
+ time=58.313
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_auto_scale_spark_blacklist_no_executor_reuse',
+ result='success',
+ message=None,
+ content=None,
+ time=39.759
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_auto_scale_spark_blacklist_no_executor_reuse_in_app',
+ result='success',
+ message=None,
+ content=None,
+ time=39.508
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_auto_scale_spark_blacklist_no_executor_reuse_same_task',
+ result='success',
+ message=None,
+ content=None,
+ time=39.404
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_auto_scale_spark_blacklist_no_node_reuse',
+ result='success',
+ message=None,
+ content=None,
+ time=40.36
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_auto_scale_spark_blacklist_no_node_reuse_in_app',
+ result='success',
+ message=None,
+ content=None,
+ time=39.424
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=626,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_auto_scale_up',
+ result='success',
+ message=None,
+ content=None,
+ time=27.592
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=613,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_all_hosts_lost',
+ result='success',
+ message=None,
+ content=None,
+ time=11.068
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=584,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_exception_all_ranks',
+ result='success',
+ message=None,
+ content=None,
+ time=14.72
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=558,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_exception_single_rank',
+ result='success',
+ message=None,
+ content=None,
+ time=23.053
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=598,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_exception_with_min_hosts_timeout',
+ result='success',
+ message=None,
+ content=None,
+ time=25.401
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=414,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_hosts_added_and_removed',
+ result='success',
+ message=None,
+ content=None,
+ time=48.786
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=503,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_no_spark_blacklist',
+ result='success',
+ message=None,
+ content=None,
+ time=22.948
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_executor_reuse',
+ result='success',
+ message=None,
+ content=None,
+ time=25.312
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_executor_reuse_in_app',
+ result='success',
+ message=None,
+ content=None,
+ time=25.432
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_executor_reuse_same_task',
+ result='success',
+ message=None,
+ content=None,
+ time=25.427
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_node_reuse',
+ result='success',
+ message=None,
+ content=None,
+ time=25.592
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/mock/mock.py',
+ line=1363,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_spark_blacklist_no_node_reuse_in_app',
+ result='success',
+ message=None,
+ content=None,
+ time=25.494
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=472,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_fault_tolerance_unused_hosts_added_and_removed',
+ result='success',
+ message=None,
+ content=None,
+ time=45.176
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.elastic.spark.torch.xml',
+ test_file='test/integration/elastic_spark_common.py',
+ line=394,
+ class_name='test.integration.test_elastic_spark_torch.ElasticSparkTorchTests',
+ test_name='test_happy_run',
+ result='success',
+ message=None,
+ content=None,
+ time=19.518
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.gloo.elastic.spark.torch.xml b/python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.xml
similarity index 100%
rename from python/test/files/junit.gloo.elastic.spark.torch.xml
rename to python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.xml
diff --git a/python/test/files/junit.gloo.elastic.xml b/python/test/files/junit-xml/pytest/junit.gloo.elastic.xml
similarity index 100%
rename from python/test/files/junit.gloo.elastic.xml
rename to python/test/files/junit-xml/pytest/junit.gloo.elastic.xml
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.standalone.junit-xml b/python/test/files/junit-xml/pytest/junit.gloo.standalone.junit-xml
new file mode 100644
index 00000000..f3127afe
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.standalone.junit-xml
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+ /horovod/test/test_spark.py:1638: get_available_devices only supported in Spark 3.0 and above
+
+
+
+
+
+
+
+
+
+
+ /horovod/test/test_spark.py:330: Open MPI is not available
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /horovod/test/test_spark.py:384: Open MPI is not available
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /horovod/test/test_run.py:822: MPI is not available
+
+
+
+
+ /horovod/test/test_run.py:626: MPI is not available
+
+
+ /horovod/test/test_run.py:548: MPI is not available
+
+
+ /horovod/test/test_run.py:585: MPI is not available
+
+
+ /horovod/test/test_run.py:730: MPI is not available
+
+
+ /horovod/test/test_run.py:706: MPI is not available
+
+
+ /horovod/test/test_run.py:724: MPI is not available
+
+
+ /horovod/test/test_run.py:700: MPI is not available
+
+
+ /horovod/test/test_run.py:755: MPI is not available
+
+
+ /horovod/test/test_run.py:773: MPI is not available
+
+
+ /horovod/test/test_run.py:718: MPI is not available
+
+
+ /horovod/test/test_run.py:694: MPI is not available
+
+
+ /horovod/test/test_run.py:712: MPI is not available
+
+
+ /horovod/test/test_run.py:688: MPI is not available
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.standalone.results b/python/test/files/junit-xml/pytest/junit.gloo.standalone.results
new file mode 100644
index 00000000..f5efb5e8
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.standalone.results
@@ -0,0 +1,1080 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=97,
+ suite_skipped=17,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=205,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1408,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_check_shape_compatibility',
+ result='success',
+ message=None,
+ content=None,
+ time=6.389
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1016,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_df_cache',
+ result='success',
+ message=None,
+ content=None,
+ time=7.311
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=119,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_driver_common_interfaces',
+ result='success',
+ message=None,
+ content=None,
+ time=0.508
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=140,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_driver_common_interfaces_fails',
+ result='success',
+ message=None,
+ content=None,
+ time=0.509
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=127,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_driver_common_interfaces_from_settings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.507
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=152,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_driver_set_local_rank_to_index',
+ result='success',
+ message=None,
+ content=None,
+ time=0.51
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1637,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_available_devices',
+ result='skipped',
+ message='get_available_devices only supported in Spark 3.0 and above',
+ content='/horovod/test/test_spark.py:1638: get_available_devices only '
+ 'supported in Spark 3.0 and above',
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1098,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_col_info',
+ result='success',
+ message=None,
+ content=None,
+ time=5.967
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1147,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_col_info_error_bad_shape',
+ result='success',
+ message=None,
+ content=None,
+ time=6.228
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1159,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_col_info_error_bad_size',
+ result='success',
+ message=None,
+ content=None,
+ time=6.974
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1216,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_metadata',
+ result='success',
+ message=None,
+ content=None,
+ time=6.566
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=921,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_gloo_exec_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=941,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_gloo_exec_fn_provides_driver_with_local_rank',
+ result='success',
+ message=None,
+ content=None,
+ time=1.052
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=363,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_happy_run_elastic',
+ result='success',
+ message=None,
+ content=None,
+ time=11.536
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=338,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_happy_run_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=10.494
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=329,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_happy_run_with_mpi',
+ result='skipped',
+ message='Open MPI is not available',
+ content='/horovod/test/test_spark.py:330: Open MPI is not available',
+ time=1.415
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1505,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_hdfs_store_parse_url',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=91,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_host_hash',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=936,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_mpi_exec_fn_provides_driver_with_local_rank',
+ result='success',
+ message=None,
+ content=None,
+ time=1.034
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=849,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_mpirun_exec_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.011
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=414,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_mpirun_not_found',
+ result='success',
+ message=None,
+ content=None,
+ time=4.391
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1336,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_prepare_data_compress_sparse',
+ result='success',
+ message=None,
+ content=None,
+ time=6.877
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1265,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_prepare_data_no_compression',
+ result='success',
+ message=None,
+ content=None,
+ time=6.206
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=812,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_event',
+ result='success',
+ message=None,
+ content=None,
+ time=2.517
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=815,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_events',
+ result='success',
+ message=None,
+ content=None,
+ time=7.539
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=809,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_with_non_zero_exit_code',
+ result='success',
+ message=None,
+ content=None,
+ time=1.513
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=806,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_with_zero_exit_code',
+ result='success',
+ message=None,
+ content=None,
+ time=1.513
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=993,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_driver_host_discovery',
+ result='success',
+ message=None,
+ content=None,
+ time=0.509
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=492,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_defaults_num_proc_to_spark_cores_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.829
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=485,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_defaults_num_proc_to_spark_cores_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.723
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=512,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_does_not_default_env_to_os_env_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.823
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=505,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_does_not_default_env_to_os_env_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.85
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=459,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_num_proc_precedes_spark_cores_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.875
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=452,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_num_proc_precedes_spark_cores_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.889
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=433,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.972
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=426,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.948
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=548,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_non_zero_exit_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.733
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=539,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_non_zero_exit_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.84
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=529,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_os_environ_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.87
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=472,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_path_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.828
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1614,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_task_service_abort_command',
+ result='success',
+ message=None,
+ content=None,
+ time=0.514
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1630,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_task_service_abort_no_command',
+ result='success',
+ message=None,
+ content=None,
+ time=0.713
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1568,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_task_service_env',
+ result='success',
+ message=None,
+ content=None,
+ time=1.011
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1608,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_task_service_execute_command',
+ result='success',
+ message=None,
+ content=None,
+ time=0.711
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1466,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_sync_hdfs_store',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=262,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_fn_run_commands',
+ result='success',
+ message=None,
+ content=None,
+ time=6.407
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=295,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_fn_run_gloo_exec',
+ result='success',
+ message=None,
+ content=None,
+ time=6.347
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=205,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_service_check_for_command_start',
+ result='success',
+ message=None,
+ content=None,
+ time=6.029
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=183,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_service_wait_for_command_start_with_timeout',
+ result='success',
+ message=None,
+ content=None,
+ time=3.017
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=175,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_service_wait_for_command_start_without_timeout',
+ result='success',
+ message=None,
+ content=None,
+ time=1.509
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=392,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_timeout_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=9.259
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=383,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_timeout_with_mpi',
+ result='skipped',
+ message='Open MPI is not available',
+ content='/horovod/test/test_spark.py:384: Open MPI is not available',
+ time=1.325
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1649,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_to_list',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1201,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_train_val_split_col_boolean',
+ result='success',
+ message=None,
+ content=None,
+ time=6.255
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1186,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_train_val_split_col_integer',
+ result='success',
+ message=None,
+ content=None,
+ time=6.333
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1171,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_train_val_split_ratio',
+ result='success',
+ message=None,
+ content=None,
+ time=3.86
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=74,
+ class_name='test.test_run.RunTests',
+ test_name='test_autotune_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=93,
+ class_name='test.test_run.RunTests',
+ test_name='test_autotuning_with_fixed_param',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=165,
+ class_name='test.test_run.RunTests',
+ test_name='test_config_file',
+ result='success',
+ message=None,
+ content=None,
+ time=0.009
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=207,
+ class_name='test.test_run.RunTests',
+ test_name='test_config_file_override_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.007
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=864,
+ class_name='test.test_run.RunTests',
+ test_name='test_generate_jsrun_rankfile',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=427,
+ class_name='test.test_run.RunTests',
+ test_name='test_get_mpi_implementation',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=790,
+ class_name='test.test_run.RunTests',
+ test_name='test_gloo_run_minimal',
+ result='success',
+ message=None,
+ content=None,
+ time=0.194
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=801,
+ class_name='test.test_run.RunTests',
+ test_name='test_gloo_run_with_os_environ',
+ result='success',
+ message=None,
+ content=None,
+ time=0.2
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=415,
+ class_name='test.test_run.RunTests',
+ test_name='test_hash',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=809,
+ class_name='test.test_run.RunTests',
+ test_name='test_horovodrun_hostfile',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=419,
+ class_name='test.test_run.RunTests',
+ test_name='test_host_hash',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=224,
+ class_name='test.test_run.RunTests',
+ test_name='test_in_thread_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=821,
+ class_name='test.test_run.RunTests',
+ test_name='test_js_run',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:822: MPI is not available',
+ time=0.537
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=139,
+ class_name='test.test_run.RunTests',
+ test_name='test_library_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=154,
+ class_name='test.test_run.RunTests',
+ test_name='test_logging_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=625,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_full',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:626: MPI is not available',
+ time=0.175
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=547,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_minimal',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:548: MPI is not available',
+ time=0.171
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=584,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_on_large_cluster',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:585: MPI is not available',
+ time=0.172
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=729,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_both_paths',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:730: MPI is not available',
+ time=0.171
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=705,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_both_pythonpaths',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:706: MPI is not available',
+ time=0.177
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=723,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_env_path',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:724: MPI is not available',
+ time=0.18
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=699,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_env_pythonpath',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:700: MPI is not available',
+ time=0.181
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=754,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_non_zero_exit',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:755: MPI is not available',
+ time=0.189
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=772,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_os_environ',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:773: MPI is not available',
+ time=0.184
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=717,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_sys_path',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:718: MPI is not available',
+ time=0.182
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=693,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_sys_pythonpath',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:694: MPI is not available',
+ time=0.188
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=711,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_without_path',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:712: MPI is not available',
+ time=0.194
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=687,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_without_pythonpath',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/test_run.py:688: MPI is not available',
+ time=0.192
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=249,
+ class_name='test.test_run.RunTests',
+ test_name='test_on_event',
+ result='success',
+ message=None,
+ content=None,
+ time=0.218
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=57,
+ class_name='test.test_run.RunTests',
+ test_name='test_params_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=453,
+ class_name='test.test_run.RunTests',
+ test_name='test_run_controller',
+ result='success',
+ message=None,
+ content=None,
+ time=0.706
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=896,
+ class_name='test.test_run.RunTests',
+ test_name='test_run_with_jsrun',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=350,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_captures_last_line_wo_eol',
+ result='success',
+ message=None,
+ content=None,
+ time=0.181
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=347,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_captures_stderr',
+ result='success',
+ message=None,
+ content=None,
+ time=0.177
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=344,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_captures_stdout',
+ result='success',
+ message=None,
+ content=None,
+ time=0.182
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=357,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_interrupts_on_event',
+ result='success',
+ message=None,
+ content=None,
+ time=1.029
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=371,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_interrupts_on_parent_shutdown',
+ result='success',
+ message=None,
+ content=None,
+ time=0.209
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=354,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_returns_exit_code',
+ result='success',
+ message=None,
+ content=None,
+ time=0.209
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=119,
+ class_name='test.test_run.RunTests',
+ test_name='test_stall_check_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=108,
+ class_name='test.test_run.RunTests',
+ test_name='test_timeline_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.standalone.xml',
+ test_file='test/test_run.py',
+ line=217,
+ class_name='test.test_run.RunTests',
+ test_name='test_validate_config_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.gloo.standalone.xml b/python/test/files/junit-xml/pytest/junit.gloo.standalone.xml
similarity index 100%
rename from python/test/files/junit.gloo.standalone.xml
rename to python/test/files/junit-xml/pytest/junit.gloo.standalone.xml
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.static.junit-xml b/python/test/files/junit-xml/pytest/junit.gloo.static.junit-xml
new file mode 100644
index 00000000..47f7f43c
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.static.junit-xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+ /horovod/test/integration/test_static_run.py:149: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:149: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:149: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:149: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:149: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:149: MPI is not available
+
+
+
+
+
+
+
+
+ /horovod/test/integration/test_static_run.py:136: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:136: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:136: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:136: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:136: MPI is not available
+
+
+ /horovod/test/integration/test_static_run.py:136: MPI is not available
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.gloo.static.results b/python/test/files/junit-xml/pytest/junit.gloo.static.results
new file mode 100644
index 00000000..04628346
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.gloo.static.results
@@ -0,0 +1,288 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=24,
+ suite_skipped=12,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=69,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_local_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=3.284
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_local_func',
+ result='success',
+ message=None,
+ content=None,
+ time=3.885
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_mixed_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=4.615
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_mixed_func',
+ result='success',
+ message=None,
+ content=None,
+ time=5.338
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_remote_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=4.68
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_remote_func',
+ result='success',
+ message=None,
+ content=None,
+ time=5.279
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_local_cmd',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:149: MPI is not '
+ 'available',
+ time=1.422
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_local_func',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:149: MPI is not '
+ 'available',
+ time=1.329
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_mixed_cmd',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:149: MPI is not '
+ 'available',
+ time=1.32
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_mixed_func',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:149: MPI is not '
+ 'available',
+ time=1.324
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_remote_cmd',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:149: MPI is not '
+ 'available',
+ time=1.318
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_remote_func',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:149: MPI is not '
+ 'available',
+ time=1.321
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_local_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=2.914
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_local_func',
+ result='success',
+ message=None,
+ content=None,
+ time=3.739
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_mixed_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=4.611
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_mixed_func',
+ result='success',
+ message=None,
+ content=None,
+ time=4.809
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_remote_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=4.597
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_remote_func',
+ result='success',
+ message=None,
+ content=None,
+ time=4.788
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_local_cmd',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:136: MPI is not '
+ 'available',
+ time=1.377
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_local_func',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:136: MPI is not '
+ 'available',
+ time=1.361
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_mixed_cmd',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:136: MPI is not '
+ 'available',
+ time=1.373
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_mixed_func',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:136: MPI is not '
+ 'available',
+ time=1.436
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_remote_cmd',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:136: MPI is not '
+ 'available',
+ time=1.351
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.gloo.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_remote_func',
+ result='skipped',
+ message='MPI is not available',
+ content='/horovod/test/integration/test_static_run.py:136: MPI is not '
+ 'available',
+ time=1.425
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.gloo.static.xml b/python/test/files/junit-xml/pytest/junit.gloo.static.xml
similarity index 100%
rename from python/test/files/junit.gloo.static.xml
rename to python/test/files/junit-xml/pytest/junit.gloo.static.xml
diff --git a/python/test/files/junit-xml/pytest/junit.mpi.integration.junit-xml b/python/test/files/junit-xml/pytest/junit.mpi.integration.junit-xml
new file mode 100644
index 00000000..44ac603e
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.mpi.integration.junit-xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.mpi.integration.results b/python/test/files/junit-xml/pytest/junit.mpi.integration.results
new file mode 100644
index 00000000..98cdb552
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.mpi.integration.results
@@ -0,0 +1,45 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=3,
+ suite_skipped=0,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=15,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.integration.xml',
+ test_file='test/test_interactiverun.py',
+ line=78,
+ class_name='test.test_interactiverun.InteractiveRunTests',
+ test_name='test_failed_run',
+ result='success',
+ message=None,
+ content=None,
+ time=9.386
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.integration.xml',
+ test_file='test/test_interactiverun.py',
+ line=35,
+ class_name='test.test_interactiverun.InteractiveRunTests',
+ test_name='test_happy_run',
+ result='success',
+ message=None,
+ content=None,
+ time=4.012
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.integration.xml',
+ test_file='test/test_interactiverun.py',
+ line=63,
+ class_name='test.test_interactiverun.InteractiveRunTests',
+ test_name='test_happy_run_elastic',
+ result='success',
+ message=None,
+ content=None,
+ time=1.898
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.mpi.integration.xml b/python/test/files/junit-xml/pytest/junit.mpi.integration.xml
similarity index 100%
rename from python/test/files/junit.mpi.integration.xml
rename to python/test/files/junit-xml/pytest/junit.mpi.integration.xml
diff --git a/python/test/files/junit-xml/pytest/junit.mpi.standalone.junit-xml b/python/test/files/junit-xml/pytest/junit.mpi.standalone.junit-xml
new file mode 100644
index 00000000..63bfd1d5
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.mpi.standalone.junit-xml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+ /horovod/test/test_spark.py:1638: get_available_devices only supported in Spark 3.0 and above
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.mpi.standalone.results b/python/test/files/junit-xml/pytest/junit.mpi.standalone.results
new file mode 100644
index 00000000..e04ecb22
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.mpi.standalone.results
@@ -0,0 +1,1080 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=97,
+ suite_skipped=1,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=219,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1408,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_check_shape_compatibility',
+ result='success',
+ message=None,
+ content=None,
+ time=7.035
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1016,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_df_cache',
+ result='success',
+ message=None,
+ content=None,
+ time=7.226
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=119,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_driver_common_interfaces',
+ result='success',
+ message=None,
+ content=None,
+ time=0.508
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=140,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_driver_common_interfaces_fails',
+ result='success',
+ message=None,
+ content=None,
+ time=0.508
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=127,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_driver_common_interfaces_from_settings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.507
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=152,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_driver_set_local_rank_to_index',
+ result='success',
+ message=None,
+ content=None,
+ time=0.51
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1637,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_available_devices',
+ result='skipped',
+ message='get_available_devices only supported in Spark 3.0 and above',
+ content='/horovod/test/test_spark.py:1638: get_available_devices only '
+ 'supported in Spark 3.0 and above',
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1098,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_col_info',
+ result='success',
+ message=None,
+ content=None,
+ time=6.198
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1147,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_col_info_error_bad_shape',
+ result='success',
+ message=None,
+ content=None,
+ time=6.138
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1159,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_col_info_error_bad_size',
+ result='success',
+ message=None,
+ content=None,
+ time=6.161
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1216,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_get_metadata',
+ result='success',
+ message=None,
+ content=None,
+ time=6.009
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=921,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_gloo_exec_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=941,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_gloo_exec_fn_provides_driver_with_local_rank',
+ result='success',
+ message=None,
+ content=None,
+ time=1.034
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=363,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_happy_run_elastic',
+ result='success',
+ message=None,
+ content=None,
+ time=11.495
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=338,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_happy_run_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=10.036
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=329,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_happy_run_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=9.208
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1505,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_hdfs_store_parse_url',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=91,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_host_hash',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=936,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_mpi_exec_fn_provides_driver_with_local_rank',
+ result='success',
+ message=None,
+ content=None,
+ time=1.033
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=849,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_mpirun_exec_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.011
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=414,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_mpirun_not_found',
+ result='success',
+ message=None,
+ content=None,
+ time=3.869
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1336,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_prepare_data_compress_sparse',
+ result='success',
+ message=None,
+ content=None,
+ time=6.896
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1265,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_prepare_data_no_compression',
+ result='success',
+ message=None,
+ content=None,
+ time=6.362
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=812,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_event',
+ result='success',
+ message=None,
+ content=None,
+ time=2.517
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=815,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_events',
+ result='success',
+ message=None,
+ content=None,
+ time=7.534
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=809,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_with_non_zero_exit_code',
+ result='success',
+ message=None,
+ content=None,
+ time=1.512
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=806,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_rsh_with_zero_exit_code',
+ result='success',
+ message=None,
+ content=None,
+ time=2.013
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=993,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_driver_host_discovery',
+ result='success',
+ message=None,
+ content=None,
+ time=0.508
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=492,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_defaults_num_proc_to_spark_cores_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.972
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=485,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_defaults_num_proc_to_spark_cores_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.868
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=512,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_does_not_default_env_to_os_env_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.865
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=505,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_does_not_default_env_to_os_env_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.955
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=459,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_num_proc_precedes_spark_cores_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.872
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=452,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_num_proc_precedes_spark_cores_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.868
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=433,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.975
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=426,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.946
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=548,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_non_zero_exit_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=3.868
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=539,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_non_zero_exit_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.962
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=529,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_os_environ_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.863
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=472,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_run_with_path_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=3.822
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1614,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_task_service_abort_command',
+ result='success',
+ message=None,
+ content=None,
+ time=0.511
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1630,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_task_service_abort_no_command',
+ result='success',
+ message=None,
+ content=None,
+ time=0.712
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1568,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_task_service_env',
+ result='success',
+ message=None,
+ content=None,
+ time=1.011
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1608,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_spark_task_service_execute_command',
+ result='success',
+ message=None,
+ content=None,
+ time=0.712
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1466,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_sync_hdfs_store',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=262,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_fn_run_commands',
+ result='success',
+ message=None,
+ content=None,
+ time=6.289
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=295,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_fn_run_gloo_exec',
+ result='success',
+ message=None,
+ content=None,
+ time=6.251
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=205,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_service_check_for_command_start',
+ result='success',
+ message=None,
+ content=None,
+ time=6.022
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=183,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_service_wait_for_command_start_with_timeout',
+ result='success',
+ message=None,
+ content=None,
+ time=3.013
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=175,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_task_service_wait_for_command_start_without_timeout',
+ result='success',
+ message=None,
+ content=None,
+ time=1.509
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=392,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_timeout_with_gloo',
+ result='success',
+ message=None,
+ content=None,
+ time=9.096
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=383,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_timeout_with_mpi',
+ result='success',
+ message=None,
+ content=None,
+ time=9.264
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1649,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_to_list',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1201,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_train_val_split_col_boolean',
+ result='success',
+ message=None,
+ content=None,
+ time=6.052
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1186,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_train_val_split_col_integer',
+ result='success',
+ message=None,
+ content=None,
+ time=6.158
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_spark.py',
+ line=1171,
+ class_name='test.test_spark.SparkTests',
+ test_name='test_train_val_split_ratio',
+ result='success',
+ message=None,
+ content=None,
+ time=3.948
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=74,
+ class_name='test.test_run.RunTests',
+ test_name='test_autotune_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=93,
+ class_name='test.test_run.RunTests',
+ test_name='test_autotuning_with_fixed_param',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=165,
+ class_name='test.test_run.RunTests',
+ test_name='test_config_file',
+ result='success',
+ message=None,
+ content=None,
+ time=0.008
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=207,
+ class_name='test.test_run.RunTests',
+ test_name='test_config_file_override_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.008
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=864,
+ class_name='test.test_run.RunTests',
+ test_name='test_generate_jsrun_rankfile',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=427,
+ class_name='test.test_run.RunTests',
+ test_name='test_get_mpi_implementation',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=790,
+ class_name='test.test_run.RunTests',
+ test_name='test_gloo_run_minimal',
+ result='success',
+ message=None,
+ content=None,
+ time=0.187
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=801,
+ class_name='test.test_run.RunTests',
+ test_name='test_gloo_run_with_os_environ',
+ result='success',
+ message=None,
+ content=None,
+ time=0.188
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=415,
+ class_name='test.test_run.RunTests',
+ test_name='test_hash',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=809,
+ class_name='test.test_run.RunTests',
+ test_name='test_horovodrun_hostfile',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=419,
+ class_name='test.test_run.RunTests',
+ test_name='test_host_hash',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=224,
+ class_name='test.test_run.RunTests',
+ test_name='test_in_thread_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=821,
+ class_name='test.test_run.RunTests',
+ test_name='test_js_run',
+ result='success',
+ message=None,
+ content=None,
+ time=0.181
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=139,
+ class_name='test.test_run.RunTests',
+ test_name='test_library_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=154,
+ class_name='test.test_run.RunTests',
+ test_name='test_logging_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=625,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_full',
+ result='success',
+ message=None,
+ content=None,
+ time=0.181
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=547,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_minimal',
+ result='success',
+ message=None,
+ content=None,
+ time=0.197
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=584,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_on_large_cluster',
+ result='success',
+ message=None,
+ content=None,
+ time=0.178
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=729,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_both_paths',
+ result='success',
+ message=None,
+ content=None,
+ time=0.177
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=705,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_both_pythonpaths',
+ result='success',
+ message=None,
+ content=None,
+ time=0.179
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=723,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_env_path',
+ result='success',
+ message=None,
+ content=None,
+ time=0.184
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=699,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_env_pythonpath',
+ result='success',
+ message=None,
+ content=None,
+ time=0.207
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=754,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_non_zero_exit',
+ result='success',
+ message=None,
+ content=None,
+ time=0.179
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=772,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_os_environ',
+ result='success',
+ message=None,
+ content=None,
+ time=0.18
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=717,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_sys_path',
+ result='success',
+ message=None,
+ content=None,
+ time=0.186
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=693,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_with_sys_pythonpath',
+ result='success',
+ message=None,
+ content=None,
+ time=0.179
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=711,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_without_path',
+ result='success',
+ message=None,
+ content=None,
+ time=0.179
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=687,
+ class_name='test.test_run.RunTests',
+ test_name='test_mpi_run_without_pythonpath',
+ result='success',
+ message=None,
+ content=None,
+ time=0.179
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=249,
+ class_name='test.test_run.RunTests',
+ test_name='test_on_event',
+ result='success',
+ message=None,
+ content=None,
+ time=0.218
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=57,
+ class_name='test.test_run.RunTests',
+ test_name='test_params_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=453,
+ class_name='test.test_run.RunTests',
+ test_name='test_run_controller',
+ result='success',
+ message=None,
+ content=None,
+ time=0.715
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=896,
+ class_name='test.test_run.RunTests',
+ test_name='test_run_with_jsrun',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=350,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_captures_last_line_wo_eol',
+ result='success',
+ message=None,
+ content=None,
+ time=0.174
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=347,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_captures_stderr',
+ result='success',
+ message=None,
+ content=None,
+ time=0.177
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=344,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_captures_stdout',
+ result='success',
+ message=None,
+ content=None,
+ time=0.174
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=357,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_interrupts_on_event',
+ result='success',
+ message=None,
+ content=None,
+ time=1.028
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=371,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_interrupts_on_parent_shutdown',
+ result='success',
+ message=None,
+ content=None,
+ time=0.208
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=354,
+ class_name='test.test_run.RunTests',
+ test_name='test_safe_shell_exec_returns_exit_code',
+ result='success',
+ message=None,
+ content=None,
+ time=0.178
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=119,
+ class_name='test.test_run.RunTests',
+ test_name='test_stall_check_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=108,
+ class_name='test.test_run.RunTests',
+ test_name='test_timeline_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.standalone.xml',
+ test_file='test/test_run.py',
+ line=217,
+ class_name='test.test_run.RunTests',
+ test_name='test_validate_config_args',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.mpi.standalone.xml b/python/test/files/junit-xml/pytest/junit.mpi.standalone.xml
similarity index 100%
rename from python/test/files/junit.mpi.standalone.xml
rename to python/test/files/junit-xml/pytest/junit.mpi.standalone.xml
diff --git a/python/test/files/junit-xml/pytest/junit.mpi.static.junit-xml b/python/test/files/junit-xml/pytest/junit.mpi.static.junit-xml
new file mode 100644
index 00000000..7458c664
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.mpi.static.junit-xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.mpi.static.results b/python/test/files/junit-xml/pytest/junit.mpi.static.results
new file mode 100644
index 00000000..dc7fcbba
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.mpi.static.results
@@ -0,0 +1,276 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=24,
+ suite_skipped=0,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=124,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_local_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=3.067
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_local_func',
+ result='success',
+ message=None,
+ content=None,
+ time=3.856
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_mixed_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=4.578
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_mixed_func',
+ result='success',
+ message=None,
+ content=None,
+ time=5.311
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_remote_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=4.867
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_gloo_remote_func',
+ result='success',
+ message=None,
+ content=None,
+ time=6.054
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_local_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=6.032
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_local_func',
+ result='success',
+ message=None,
+ content=None,
+ time=6.664
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_mixed_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=6.398
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_mixed_func',
+ result='success',
+ message=None,
+ content=None,
+ time=7.151
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_remote_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=7.365
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=148,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_failure_mpi_remote_func',
+ result='success',
+ message=None,
+ content=None,
+ time=6.825
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_local_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=3.439
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_local_func',
+ result='success',
+ message=None,
+ content=None,
+ time=3.429
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_mixed_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=4.804
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_mixed_func',
+ result='success',
+ message=None,
+ content=None,
+ time=5.134
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_remote_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=4.886
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_gloo_remote_func',
+ result='success',
+ message=None,
+ content=None,
+ time=5.585
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_local_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=3.761
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_local_func',
+ result='success',
+ message=None,
+ content=None,
+ time=4.591
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_mixed_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=5.203
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_mixed_func',
+ result='success',
+ message=None,
+ content=None,
+ time=5.504
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_remote_cmd',
+ result='success',
+ message=None,
+ content=None,
+ time=5.238
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.mpi.static.xml',
+ test_file='test/integration/test_static_run.py',
+ line=135,
+ class_name='test.integration.test_static_run.StaticRunTests',
+ test_name='test_run_success_mpi_remote_func',
+ result='success',
+ message=None,
+ content=None,
+ time=4.697
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.mpi.static.xml b/python/test/files/junit-xml/pytest/junit.mpi.static.xml
similarity index 100%
rename from python/test/files/junit.mpi.static.xml
rename to python/test/files/junit-xml/pytest/junit.mpi.static.xml
diff --git a/python/test/files/junit-xml/pytest/junit.spark.integration.1.junit-xml b/python/test/files/junit-xml/pytest/junit.spark.integration.1.junit-xml
new file mode 100644
index 00000000..3e67db17
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.spark.integration.1.junit-xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/framework/test_util.py:2076: Not a test.
+
+
+
+
+
+
+
+
+
+
+
+ /horovod/test/test_spark_torch.py:469: elastic horovod does not support shutdown from the spark driver while elastic driver is waiting for hosts to come up
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.spark.integration.1.results b/python/test/files/junit-xml/pytest/junit.spark.integration.1.results
new file mode 100644
index 00000000..4186d4cb
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.spark.integration.1.results
@@ -0,0 +1,402 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=35,
+ suite_skipped=2,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=165,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=454,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_batch_generator_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=385,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_calculate_shuffle_buffer_size',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=371,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_calculate_shuffle_buffer_size_small_row_size',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=410,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_convert_custom_sparse_to_dense_bare_keras_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=399,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_custom_sparse_to_dense_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.041
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=75,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_fit_model',
+ result='success',
+ message=None,
+ content=None,
+ time=14.352
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=103,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_fit_model_multiclass',
+ result='success',
+ message=None,
+ content=None,
+ time=34.284
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=186,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_keras_direct_parquet_train',
+ result='success',
+ message=None,
+ content=None,
+ time=11.54
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=225,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_keras_model_checkpoint_callback',
+ result='success',
+ message=None,
+ content=None,
+ time=14.137
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=322,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_model_serialization',
+ result='success',
+ message=None,
+ content=None,
+ time=6.851
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=575,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_prep_data_tf_keras_fn_with_sparse_col',
+ result='success',
+ message=None,
+ content=None,
+ time=0.051
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=612,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_prep_data_tf_keras_fn_without_sparse_col',
+ result='success',
+ message=None,
+ content=None,
+ time=0.032
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=416,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_prepare_data_bare_keras_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=528,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_reshape',
+ result='success',
+ message=None,
+ content=None,
+ time=0.039
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=139,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_restore_from_checkpoint',
+ result='success',
+ message=None,
+ content=None,
+ time=7.23
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_keras.py',
+ line=361,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_serialize_param_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/tensorflow_core/python/'
+ 'framework/test_util.py',
+ line=2075,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_session',
+ result='skipped',
+ message='Not a test.',
+ content='/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/framewo'
+ 'rk/test_util.py:2076: Not a test.',
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=372,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_calculate_loss_with_sample_weight',
+ result='success',
+ message=None,
+ content=None,
+ time=0.022
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=401,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_calculate_loss_without_sample_weight',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=198,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_calculate_shuffle_buffer_size',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=184,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_calculate_shuffle_buffer_size_small_row_size',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=227,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_construct_metric_value_holders_one_metric_for_all_labels',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=73,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_fit_model',
+ result='success',
+ message=None,
+ content=None,
+ time=12.786
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=269,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_get_metric_avgs',
+ result='success',
+ message=None,
+ content=None,
+ time=0.007
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=433,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_happy_run_elastic',
+ result='success',
+ message=None,
+ content=None,
+ time=9.165
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=447,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_happy_run_elastic_fault_tolerant',
+ result='success',
+ message=None,
+ content=None,
+ time=23.934
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=468,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_happy_run_elastic_fault_tolerant_fails',
+ result='skipped',
+ message='elastic horovod does not support shutdown from the spark driver '
+ 'while elastic driver is waiting for hosts to come up',
+ content='/horovod/test/test_spark_torch.py:469: elastic horovod does not '
+ 'support shutdown from the spark driver while elastic driver is '
+ 'waiting for hosts to come up',
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=213,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_metric_class',
+ result='success',
+ message=None,
+ content=None,
+ time=0.026
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=251,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_prepare_np_data',
+ result='success',
+ message=None,
+ content=None,
+ time=6.319
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=167,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_pytorch_get_optimizer_with_unscaled_lr',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=103,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_restore_from_checkpoint',
+ result='success',
+ message=None,
+ content=None,
+ time=7.198
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=335,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_torch_direct_parquet_train',
+ result='success',
+ message=None,
+ content=None,
+ time=8.305
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=325,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_torch_param_serialize',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=140,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_transform_multi_class',
+ result='success',
+ message=None,
+ content=None,
+ time=6.549
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.1.xml',
+ test_file='test/test_spark_torch.py',
+ line=291,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_update_metrics',
+ result='success',
+ message=None,
+ content=None,
+ time=0.008
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.spark.integration.1.xml b/python/test/files/junit-xml/pytest/junit.spark.integration.1.xml
similarity index 100%
rename from python/test/files/junit.spark.integration.1.xml
rename to python/test/files/junit-xml/pytest/junit.spark.integration.1.xml
diff --git a/python/test/files/junit-xml/pytest/junit.spark.integration.2.junit-xml b/python/test/files/junit-xml/pytest/junit.spark.integration.2.junit-xml
new file mode 100644
index 00000000..182df175
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.spark.integration.2.junit-xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/framework/test_util.py:2076: Not a test.
+
+
+
+
+
+
+
+
+
+
+
+ /horovod/test/test_spark_torch.py:469: elastic horovod does not support shutdown from the spark driver while elastic driver is waiting for hosts to come up
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/pytest/junit.spark.integration.2.results b/python/test/files/junit-xml/pytest/junit.spark.integration.2.results
new file mode 100644
index 00000000..074671dd
--- /dev/null
+++ b/python/test/files/junit-xml/pytest/junit.spark.integration.2.results
@@ -0,0 +1,402 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=35,
+ suite_skipped=2,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=172,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=454,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_batch_generator_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=385,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_calculate_shuffle_buffer_size',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=371,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_calculate_shuffle_buffer_size_small_row_size',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=410,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_convert_custom_sparse_to_dense_bare_keras_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=399,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_custom_sparse_to_dense_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.038
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=75,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_fit_model',
+ result='success',
+ message=None,
+ content=None,
+ time=12.424
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=103,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_fit_model_multiclass',
+ result='success',
+ message=None,
+ content=None,
+ time=31.925
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=186,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_keras_direct_parquet_train',
+ result='success',
+ message=None,
+ content=None,
+ time=11.57
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=225,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_keras_model_checkpoint_callback',
+ result='success',
+ message=None,
+ content=None,
+ time=14.517
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=322,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_model_serialization',
+ result='success',
+ message=None,
+ content=None,
+ time=7.223
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=575,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_prep_data_tf_keras_fn_with_sparse_col',
+ result='success',
+ message=None,
+ content=None,
+ time=0.051
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=612,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_prep_data_tf_keras_fn_without_sparse_col',
+ result='success',
+ message=None,
+ content=None,
+ time=0.034
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=416,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_prepare_data_bare_keras_fn',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=528,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_reshape',
+ result='success',
+ message=None,
+ content=None,
+ time=0.04
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=139,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_restore_from_checkpoint',
+ result='success',
+ message=None,
+ content=None,
+ time=8.92
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_keras.py',
+ line=361,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_serialize_param_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='../usr/local/lib/python3.6/dist-packages/tensorflow_core/python/'
+ 'framework/test_util.py',
+ line=2075,
+ class_name='test.test_spark_keras.SparkKerasTests',
+ test_name='test_session',
+ result='skipped',
+ message='Not a test.',
+ content='/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/framewo'
+ 'rk/test_util.py:2076: Not a test.',
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=372,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_calculate_loss_with_sample_weight',
+ result='success',
+ message=None,
+ content=None,
+ time=0.025
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=401,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_calculate_loss_without_sample_weight',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=198,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_calculate_shuffle_buffer_size',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=184,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_calculate_shuffle_buffer_size_small_row_size',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=227,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_construct_metric_value_holders_one_metric_for_all_labels',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=73,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_fit_model',
+ result='success',
+ message=None,
+ content=None,
+ time=13.773
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=269,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_get_metric_avgs',
+ result='success',
+ message=None,
+ content=None,
+ time=0.007
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=433,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_happy_run_elastic',
+ result='success',
+ message=None,
+ content=None,
+ time=9.573
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=447,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_happy_run_elastic_fault_tolerant',
+ result='success',
+ message=None,
+ content=None,
+ time=27.56
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=468,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_happy_run_elastic_fault_tolerant_fails',
+ result='skipped',
+ message='elastic horovod does not support shutdown from the spark driver '
+ 'while elastic driver is waiting for hosts to come up',
+ content='/horovod/test/test_spark_torch.py:469: elastic horovod does not '
+ 'support shutdown from the spark driver while elastic driver is '
+ 'waiting for hosts to come up',
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=213,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_metric_class',
+ result='success',
+ message=None,
+ content=None,
+ time=0.023
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=251,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_prepare_np_data',
+ result='success',
+ message=None,
+ content=None,
+ time=7.061
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=167,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_pytorch_get_optimizer_with_unscaled_lr',
+ result='success',
+ message=None,
+ content=None,
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=103,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_restore_from_checkpoint',
+ result='success',
+ message=None,
+ content=None,
+ time=8.464
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=335,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_torch_direct_parquet_train',
+ result='success',
+ message=None,
+ content=None,
+ time=9.825
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=325,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_torch_param_serialize',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=140,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_transform_multi_class',
+ result='success',
+ message=None,
+ content=None,
+ time=7.384
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='pytest/junit.spark.integration.2.xml',
+ test_file='test/test_spark_torch.py',
+ line=291,
+ class_name='test.test_spark_torch.SparkTorchTests',
+ test_name='test_update_metrics',
+ result='success',
+ message=None,
+ content=None,
+ time=0.008
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/junit.spark.integration.2.xml b/python/test/files/junit-xml/pytest/junit.spark.integration.2.xml
similarity index 100%
rename from python/test/files/junit.spark.integration.2.xml
rename to python/test/files/junit-xml/pytest/junit.spark.integration.2.xml
diff --git a/python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.junit-xml b/python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.junit-xml
new file mode 100644
index 00000000..0d757f88
--- /dev/null
+++ b/python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.junit-xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.results b/python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.results
new file mode 100644
index 00000000..e35750ce
--- /dev/null
+++ b/python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.results
@@ -0,0 +1,67 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=5,
+ suite_skipped=0,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=2,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml',
+ test_file=None,
+ line=None,
+ class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
+ test_name='diff options with empty diff column name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.259
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml',
+ test_file=None,
+ line=None,
+ class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
+ test_name='diff options left and right prefixes',
+ result='success',
+ message=None,
+ content=None,
+ time=1.959
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml',
+ test_file=None,
+ line=None,
+ class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
+ test_name='diff options diff value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml',
+ test_file=None,
+ line=None,
+ class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
+ test_name='diff options with change column name same as diff column',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml',
+ test_file=None,
+ line=None,
+ class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
+ test_name='fluent methods of diff options',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml b/python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml
similarity index 100%
rename from python/test/files/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml
rename to python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml
diff --git a/python/test/files/junit-xml/testcase-in-testcase.junit-xml b/python/test/files/junit-xml/testcase-in-testcase.junit-xml
new file mode 100644
index 00000000..a67a2928
--- /dev/null
+++ b/python/test/files/junit-xml/testcase-in-testcase.junit-xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/testcase-in-testcase.results b/python/test/files/junit-xml/testcase-in-testcase.results
new file mode 100644
index 00000000..a2a0f8dd
--- /dev/null
+++ b/python/test/files/junit-xml/testcase-in-testcase.results
@@ -0,0 +1,67 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=5,
+ suite_skipped=0,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=4,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='testcase-in-testcase.xml',
+ test_file='/somepath',
+ line=34,
+ class_name='someName',
+ test_name='TestCase1',
+ result='success',
+ message=None,
+ content=None,
+ time=1.32159
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='testcase-in-testcase.xml',
+ test_file='/somepath',
+ line=65,
+ class_name='someName',
+ test_name='TestCase2',
+ result='success',
+ message=None,
+ content=None,
+ time=1.321319
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='testcase-in-testcase.xml',
+ test_file='/somepath',
+ line=40,
+ class_name='someName',
+ test_name='TestCase3',
+ result='success',
+ message=None,
+ content=None,
+ time=1.08817
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='testcase-in-testcase.xml',
+ test_file='/somepath',
+ line=40,
+ class_name='someName',
+ test_name='TestCase4',
+ result='success',
+ message=None,
+ content=None,
+ time=0.98817
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='testcase-in-testcase.xml',
+ test_file='/somepath',
+ line=40,
+ class_name='someName',
+ test_name='TestCase5',
+ result='success',
+ message=None,
+ content=None,
+ time=0.08817
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/testcase-in-testcase.xml b/python/test/files/junit-xml/testcase-in-testcase.xml
similarity index 100%
rename from python/test/files/testcase-in-testcase.xml
rename to python/test/files/junit-xml/testcase-in-testcase.xml
diff --git a/python/test/files/junit-xml/tst/disabled.junit-xml b/python/test/files/junit-xml/tst/disabled.junit-xml
new file mode 100644
index 00000000..f9bd94d1
--- /dev/null
+++ b/python/test/files/junit-xml/tst/disabled.junit-xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/tst/disabled.results b/python/test/files/junit-xml/tst/disabled.results
new file mode 100644
index 00000000..c7c08bb1
--- /dev/null
+++ b/python/test/files/junit-xml/tst/disabled.results
@@ -0,0 +1,368 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=2,
+ suite_tests=31,
+ suite_skipped=5,
+ suite_failures=19,
+ suite_errors=1,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='positive_arguments_must_produce_expected_result[0]',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='factorial_of_value_from_fixture',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/main.cpp:72: error: '
+ 'check_eq(3628800, 3628801)',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='factorial_of_value_from_fixture[3]',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='factorial_of_value_from_fixture[2]',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='disabled_test',
+ result='disabled',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='positive_arguments_must_produce_expected_result',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/main.cpp:45: error: check_ne(6, '
+ '6)hello world!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='test_which_throws_unknown_exception',
+ result='error',
+ message='uncaught (anonymous namespace)::some_unknown_exception',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='positive_arguments_must_produce_expected_result[2]',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/main.cpp:85: error: check(false)',
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='positive_arguments_must_produce_expected_result[3]',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='factorial_of_value_from_fixture[0]',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/main.cpp:109: error: expected 2',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='disabled_param_test[0]',
+ result='disabled',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='disabled_param_test[1]',
+ result='disabled',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='disabled_param_test[2]',
+ result='disabled',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='test_which_fails_check_eq_with_custom_message',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/main.cpp:62: error: check_eq(6, '
+ '7)hello world!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='disabled_param_test[3]',
+ result='disabled',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='positive_arguments_must_produce_expected_result[1]',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='factorial_of_value_from_fixture[1]',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_ge_print',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:59: error: check_ge(2, '
+ '3)failed!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_ge',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:55: error: check_ge(2, '
+ '3)Hello world!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_gt_print',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:43: error: check_gt(2, '
+ '2)failed!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_lt_print',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:35: error: check_lt(2, '
+ '2)failed!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_print',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:11: error: failed!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_gt',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:39: error: check_gt(2, '
+ '2)Hello world!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:7: error: Hello world!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_le_print',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:51: error: check_le(2, '
+ '1)failed!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_eq',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:15: error: check_eq(1, '
+ '2)Hello world!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_eq_print',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:19: error: check_eq(1, '
+ '2)failed!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_le',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:47: error: check_le(2, '
+ '1)Hello world!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_ne',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:23: error: check_ne(2, '
+ '2)Hello world!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_lt',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:31: error: check_lt(2, '
+ '2)Hello world!',
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='tst/disabled.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='check_ne_print',
+ result='failure',
+ message='/home/ivan/prj/tst/tests/failed/checks.cpp:27: error: check_ne(2, '
+ '2)failed!',
+ content=None,
+ time=0.001
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/disabled.xml b/python/test/files/junit-xml/tst/disabled.xml
similarity index 100%
rename from python/test/files/disabled.xml
rename to python/test/files/junit-xml/tst/disabled.xml
diff --git a/python/test/files/junit-xml/unsupported-unicode.junit-xml b/python/test/files/junit-xml/unsupported-unicode.junit-xml
new file mode 100644
index 00000000..d05c2df5
--- /dev/null
+++ b/python/test/files/junit-xml/unsupported-unicode.junit-xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ skipped
+
+
+
+ Some unsupported unicode characters: 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓
+
+
+
+ failed
+
+
+
+ Some unsupported unicode characters: 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓
+
+
+
+ error
+
+
+
+ Some unsupported unicode characters: 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓
+
+
+
+
diff --git a/python/test/files/junit-xml/unsupported-unicode.results b/python/test/files/junit-xml/unsupported-unicode.results
new file mode 100644
index 00000000..93f34b9e
--- /dev/null
+++ b/python/test/files/junit-xml/unsupported-unicode.results
@@ -0,0 +1,89 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=7,
+ suite_skipped=2,
+ suite_failures=2,
+ suite_errors=2,
+ suite_time=8,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='unsupported-unicode.xml',
+ test_file='test/test-1.py',
+ line=1,
+ class_name=None,
+ test_name='test 1 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓',
+ result='success',
+ message=None,
+ content=None,
+ time=1.23
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='unsupported-unicode.xml',
+ test_file='test/test-2.py',
+ line=2,
+ class_name=None,
+ test_name='test 2',
+ result='skipped',
+ message='Some unsupported unicode characters: 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓',
+ content='skipped\n ',
+ time=1.23
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='unsupported-unicode.xml',
+ test_file='test/test-3.py',
+ line=3,
+ class_name=None,
+ test_name='test 3',
+ result='skipped',
+ message='message',
+ content='Some unsupported unicode characters: 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓\n ',
+ time=1.23
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='unsupported-unicode.xml',
+ test_file='test/test-4.py',
+ line=4,
+ class_name=None,
+ test_name='test 4',
+ result='failure',
+ message='Some unsupported unicode characters: 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓',
+ content='failed\n ',
+ time=1.23
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='unsupported-unicode.xml',
+ test_file='test/test-5.py',
+ line=5,
+ class_name=None,
+ test_name='test 5',
+ result='failure',
+ message='message',
+ content='Some unsupported unicode characters: 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓\n ',
+ time=1.23
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='unsupported-unicode.xml',
+ test_file='test/test-6.py',
+ line=6,
+ class_name=None,
+ test_name='test 6',
+ result='error',
+ message='Some unsupported unicode characters: 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓',
+ content='error\n ',
+ time=1.23
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='unsupported-unicode.xml',
+ test_file='test/test-7.py',
+ line=7,
+ class_name=None,
+ test_name='test 7',
+ result='error',
+ message='message',
+ content='Some unsupported unicode characters: 헴䜝헱홐㣇㿷䔭𒍺𡓿𠄉㦓\n ',
+ time=1.23
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/unsupported-unicode.xml b/python/test/files/junit-xml/unsupported-unicode.xml
similarity index 93%
rename from python/test/files/unsupported-unicode.xml
rename to python/test/files/junit-xml/unsupported-unicode.xml
index 357ec5ad..cec4e5a3 100644
--- a/python/test/files/unsupported-unicode.xml
+++ b/python/test/files/junit-xml/unsupported-unicode.xml
@@ -19,7 +19,7 @@
- error
+ error
diff --git a/python/test/files/junit-xml/with-xml-entities.junit-xml b/python/test/files/junit-xml/with-xml-entities.junit-xml
new file mode 100644
index 00000000..0a38ad93
--- /dev/null
+++ b/python/test/files/junit-xml/with-xml-entities.junit-xml
@@ -0,0 +1,17 @@
+
+
+
+
+ Content with "quotes"
+
+
+ Content with 'apostrophes'
+
+
+ Content with &
+
+
+ Content with < and >
+
+
+
diff --git a/python/test/files/junit-xml/with-xml-entities.results b/python/test/files/junit-xml/with-xml-entities.results
new file mode 100644
index 00000000..c2a0953a
--- /dev/null
+++ b/python/test/files/junit-xml/with-xml-entities.results
@@ -0,0 +1,56 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=4,
+ suite_skipped=2,
+ suite_failures=1,
+ suite_errors=1,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='with-xml-entities.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='Test with "quotes" in the test name',
+ result='skipped',
+ message='A message with "quotes"',
+ content='Content with "quotes"',
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='with-xml-entities.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name="Test with 'apostrophe' in the test name",
+ result='failure',
+ message="A message with 'apostrophes'",
+ content="Content with 'apostrophes'",
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='with-xml-entities.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='Test with & in the test name',
+ result='error',
+ message='A message with &',
+ content='Content with &',
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='with-xml-entities.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='Test with < and > in the test name',
+ result='skipped',
+ message='A message with < and >',
+ content='Content with < and >',
+ time=0.0
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/with-xml-entities.xml b/python/test/files/junit-xml/with-xml-entities.xml
similarity index 100%
rename from python/test/files/with-xml-entities.xml
rename to python/test/files/junit-xml/with-xml-entities.xml
diff --git a/python/test/files/junit-xml/xunit/xunit.junit-xml b/python/test/files/junit-xml/xunit/xunit.junit-xml
new file mode 100644
index 00000000..4cbcee23
--- /dev/null
+++ b/python/test/files/junit-xml/xunit/xunit.junit-xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/junit-xml/xunit/xunit.results b/python/test/files/junit-xml/xunit/xunit.results
new file mode 100644
index 00000000..07fafa68
--- /dev/null
+++ b/python/test/files/junit-xml/xunit/xunit.results
@@ -0,0 +1,34 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=2,
+ suite_skipped=0,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xunit.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='mytestapp.Tests.AttriubteTests.SetTestNoFeature',
+ result='success',
+ message=None,
+ content=None,
+ time=0.4540354
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xunit.xml',
+ test_file=None,
+ line=None,
+ class_name=None,
+ test_name='mytestapp.Tests.AttriubteTests.GetTestNoFeature',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0039778
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/xunit.xml b/python/test/files/junit-xml/xunit/xunit.xml
similarity index 100%
rename from python/test/files/xunit.xml
rename to python/test/files/junit-xml/xunit/xunit.xml
diff --git a/python/test/files/trx/mstest/pickles.junit-xml b/python/test/files/trx/mstest/pickles.junit-xml
new file mode 100644
index 00000000..7235abdf
--- /dev/null
+++ b/python/test/files/trx/mstest/pickles.junit-xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+ Test method Pickles.TestHarness.MSTest.AdditionFeature.FailToAddTwoNumbers threw exception:
+ Should.Core.Exceptions.NotEqualException: Assert.NotEqual() Failure
+
+ at Pickles.TestHarness.MSTest.Steps.ThenTheResultShouldBePass(Int32 result) in C:\dev\pickles-results-harness\Pickles.TestHarness\Pickles.TestHarness.MSTest\Steps.cs:line 28
+ at lambda_method(Closure , IContextManager , Int32 )<...>
+ at TechTalk.SpecFlow.Bindings.MethodBinding.InvokeAction(IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
+ at TechTalk.SpecFlow.Bindings.StepDefinitionBinding.Invoke(IContextManager contextManager, ITestTracer testTracer, Object[] arguments, TimeSpan& duration)
+ at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch match, Object[] arguments)
+ at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepArgs stepArgs)
+ at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep()
+ at TechTalk.SpecFlow.TestRunner.CollectScenarioErrors()
+ at Pickles.TestHarness.MSTest.AdditionFeature.ScenarioCleanup() in C:\dev\pickles-results-harness\Pickles.TestHarness\Pickles.TestHarness.MSTest\Addition.feature.cs:line 0
+ at Pickles.TestHarness.MSTest.AdditionFeature.FailToAddTwoNumbers() in c:\dev\pickles-results-harness\Pickles.TestHarness\Pickles.TestHarness.MSTest\Addition.feature:line 18
+
+
+
+
diff --git a/python/test/files/trx/mstest/pickles.results b/python/test/files/trx/mstest/pickles.results
new file mode 100644
index 00000000..5d43dc07
--- /dev/null
+++ b/python/test/files/trx/mstest/pickles.results
@@ -0,0 +1,86 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=4,
+ suite_skipped=0,
+ suite_failures=1,
+ suite_errors=0,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='mstest/pickles.trx',
+ test_file=None,
+ line=None,
+ class_name='Pickles.TestHarness.MSTest.AdditionFeature',
+ test_name='AddingSeveralNumbers_40',
+ result='success',
+ message=None,
+ content=None,
+ time=0.076891
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='mstest/pickles.trx',
+ test_file=None,
+ line=None,
+ class_name='Pickles.TestHarness.MSTest.AdditionFeature',
+ test_name='AddingSeveralNumbers_60',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0111534
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='mstest/pickles.trx',
+ test_file=None,
+ line=None,
+ class_name='Pickles.TestHarness.MSTest.AdditionFeature',
+ test_name='AddTwoNumbers',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0055623
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='mstest/pickles.trx',
+ test_file=None,
+ line=None,
+ class_name='Pickles.TestHarness.MSTest.AdditionFeature',
+ test_name='FailToAddTwoNumbers',
+ result='failure',
+ message='\n Test method '
+ 'Pickles.TestHarness.MSTest.AdditionFeature.FailToAddTwoNumbers threw '
+ 'exception:\n Should.Core.Exceptions.NotEqualException: '
+ 'Assert.NotEqual() Failure\n ',
+ content='\n Test method '
+ 'Pickles.TestHarness.MSTest.AdditionFeature.FailToAddTwoNumbers threw '
+ 'exception:\n Should.Core.Exceptions.NotEqualException: '
+ 'Assert.NotEqual() Failure\n \n at '
+ 'Pickles.TestHarness.MSTest.Steps.ThenTheResultShouldBePass(Int32 '
+ 'result) in '
+ 'C:\\dev\\pickles-results-harness\\Pickles.TestHarness\\Pickles.TestHarnes'
+ 's.MSTest\\Steps.cs:line 28\n at lambda_method(Closure , '
+ 'IContextManager , Int32 )<...>\n at '
+ 'TechTalk.SpecFlow.Bindings.MethodBinding.InvokeAction(IContextManager'
+ ' contextManager, Object[] arguments, ITestTracer testTracer, '
+ 'TimeSpan& duration)\n at '
+ 'TechTalk.SpecFlow.Bindings.StepDefinitionBinding.Invoke(IContextManag'
+ 'er contextManager, ITestTracer testTracer, Object[] arguments, '
+ 'TimeSpan& duration)\n at '
+ 'TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch'
+ '(BindingMatch match, Object[] arguments)\n at '
+ 'TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(Step'
+ 'Args stepArgs)\n at '
+ 'TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep('
+ ')\n at '
+ 'TechTalk.SpecFlow.TestRunner.CollectScenarioErrors()\n at '
+ 'Pickles.TestHarness.MSTest.AdditionFeature.ScenarioCleanup() in '
+ 'C:\\dev\\pickles-results-harness\\Pickles.TestHarness\\Pickles.TestHarnes'
+ 's.MSTest\\Addition.feature.cs:line 0\n at '
+ 'Pickles.TestHarness.MSTest.AdditionFeature.FailToAddTwoNumbers() in '
+ 'c:\\dev\\pickles-results-harness\\Pickles.TestHarness\\Pickles.TestHarnes'
+ 's.MSTest\\Addition.feature:line 18\n ',
+ time=0.0459057
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/trx/mstest/pickles.trx b/python/test/files/trx/mstest/pickles.trx
new file mode 100644
index 00000000..b0fa72c4
--- /dev/null
+++ b/python/test/files/trx/mstest/pickles.trx
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Fail to add two numbers
+
+
+
+ FeatureTitle
+ Addition
+
+
+
+
+
+ Add two numbers
+
+
+
+ FeatureTitle
+ Addition
+
+
+
+
+
+ Adding several numbers
+
+
+
+ FeatureTitle
+ Addition
+
+
+ VariantName
+ 40
+
+
+ Parameter:Second Number
+ 50
+
+
+ Parameter:Result
+ 90
+
+
+ Parameter:First Number
+ 40
+
+
+
+
+
+ Adding several numbers
+
+
+
+ FeatureTitle
+ Addition
+
+
+ VariantName
+ 60
+
+
+ Parameter:Second Number
+ 70
+
+
+ Parameter:Result
+ 130
+
+
+ Parameter:First Number
+ 60
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/trx/nunit/FluentValidation.Tests.junit-xml b/python/test/files/trx/nunit/FluentValidation.Tests.junit-xml
new file mode 100644
index 00000000..e3a69f7c
--- /dev/null
+++ b/python/test/files/trx/nunit/FluentValidation.Tests.junit-xml
@@ -0,0 +1,811 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/trx/nunit/FluentValidation.Tests.results b/python/test/files/trx/nunit/FluentValidation.Tests.results
new file mode 100644
index 00000000..6cacdfee
--- /dev/null
+++ b/python/test/files/trx/nunit/FluentValidation.Tests.results
@@ -0,0 +1,9032 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=804,
+ suite_skipped=1,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=3,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_async_model_throws',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011796
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChildRulesTests',
+ test_name='ChildRules_works_with_RuleSet',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0058553
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='Should_store_comparison_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004205
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Tests_nested_property_reverse',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004663
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Validation_should_fail_when_condition_matches',
+ result='success',
+ message=None,
+ content=None,
+ time=7.55e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Async_condition_is_applied_to_single_validator_in_the_chain_when_Appl'
+ 'yConditionTo_set_to_CurrentValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000818
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005804
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Regular_rules_can_drop_into_RuleForEach',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008814
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Chained_property_should_be_excluded',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001883
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_throw_when_there_are_no_validation_e'
+ 'rrors_with_preconstructed_object',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008107
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Validation_should_fail_when_condition_does_not_match',
+ result='success',
+ message=None,
+ content=None,
+ time=8.88e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Should_ignore_unknown_parameters',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008556
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='To_and_from_properties_should_be_set_for_dates',
+ result='success',
+ message=None,
+ content=None,
+ time=9.18e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Runs_otherwise_conditions_for_When',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000563
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='GreaterThanOrEqual_should_create_GreaterThanOrEqualValidator_with_exp'
+ 'licit_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002869
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExactLengthValidatorTester',
+ test_name='When_the_text_length_is_larger_the_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002571
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Executes_customasync_rule_when_async_condition_true',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011516
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='When_the_text_matches_the_lambda_regular_expression_then_the_validato'
+ 'r_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003275
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='When_validation_fails_the_default_error_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001265
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserStateTester',
+ test_name='Throws_when_provider_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002016
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_not_throw_when_there_are_no_error'
+ 's',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008221
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='When_the_property_is_initialized_with_invalid_string_then_the_validat'
+ 'or_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=9.87e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Extracts_property_from_constant_using_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=6.78e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Includes_combination_of_rulesets_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010528
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.TrackingCollectionTests',
+ test_name='Should_not_raise_event_once_handler_detached',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001609
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_validator_fails_the_error_message_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002535
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='NotEqual_should_create_NotEqualValidator_with_lambda',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005555
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Should_ignore_unknown_numbered_parameters',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001013
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='When_the_objects_are_equal_validation_should_succeed',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003395
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='Validates_nullable_property_with_overriden_name_when_selected',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0019595
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='Validates_with_nullable_when_property_not_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006361
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_v'
+ 'alidator_level_async_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008011
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.TransformTests',
+ test_name='Transforms_collection_element',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008965
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='When_the_text_matches_the_regular_expression_then_the_validator_shoul'
+ 'd_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001805
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Nested_dependent_rules_inside_ruleset_no_result_when_second_level_fai'
+ 'ls',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005888
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserSeverityTester',
+ test_name='Throws_when_provider_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001945
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_Should_throw_when_there_are_no_validation_e'
+ 'rrors',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008389
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Validation_should_succeed_when_async_condition_does_not_match',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000355
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Includes_combination_of_rulesets',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006445
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_ValidateAs'
+ 'ync(preValidationResult: )',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009155
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Validates_with_nullable_when_property_not_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002583
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserSeverityTester',
+ test_name='Can_Provide_conditional_severity',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002891
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Fails_email_validation_aspnetcore_compatible(email: " \\r \\t \\n")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.47e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Nested_async_conditions_with_CustomAsync_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009986
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='When_the_enum_is_not_initialized_with_valid_value_then_the_validator_'
+ 'should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=8.19e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rul'
+ 'e_level_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002166
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmptyTester',
+ test_name='When_validation_fails_error_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002342
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_Should_support_nested_properties',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009315
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='When_value_is_null_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002923
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='Uses_lazily_loaded_expression_with_options',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001451
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Should_not_main_state',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001976
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Can_use_cascade_with_RuleForEach',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006943
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure_when_set_to_Stop_globally_and_overrid'
+ 'en_at_rule_level_async_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0014877
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='New_Custom_When_property_name_omitted_infers_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002338
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Rules_invoke_when_inverse_shared_async_condition_matches',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000943
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Skips_null_items',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005809
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NullTester',
+ test_name='Not_null_validator_should_not_crash_with_non_nullable_value_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005603
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Should_override_propertyName',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007523
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: '
+ '"someName@some_domain.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.62e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='Flags_enum_validates_correctly_when_using_zero_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003854
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='When_the_validator_fails_the_error_message_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002574
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_minlength_validator_fails_the_error_message_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003529
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Gets_translation_for_culture',
+ result='success',
+ message=None,
+ content=None,
+ time=7.41e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorDescriptorTester',
+ test_name='GetValidatorsForMember_and_GetRulesForMember_can_both_retrieve_for_mo'
+ 'del_level_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003935
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Nested_dependent_rules',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005419
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Combines_rulesets_and_explicit_properties_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001092
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Rules_invoke_when_inverse_shared_condition_matches',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001103
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Should_fail_when_greater_than_input',
+ result='success',
+ message=None,
+ content=None,
+ time=8.53e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Async_condition_should_work_with_child_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007258
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserSeverityTester',
+ test_name='Stores_user_severity_against_validation_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002021
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PredicateValidatorTester',
+ test_name='Should_throw_when_predicate_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003168
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Should_validate_single_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002735
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Should_fail_when_equal_to_input',
+ result='success',
+ message=None,
+ content=None,
+ time=7.29e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_o'
+ 'verriden_at_rule_level_and_async_validator_is_invoked_synchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004818
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Executes_in_rule_in_default_and_none',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000354
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_when_inverse_predicate_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003373
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_inheritance_hierarchy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005062
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Async_condition_executed_synchronosuly_with_asynchronous_collection_r'
+ 'ule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003309
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_validator_fails_the_error_message_should_be_set_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002385
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: null)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002029
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Matches_any_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006901
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Validates_type_when_using_non_generic_validate_overload',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001769
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Validates_with_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000321
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Calling_ValidateAsync_should_delegate_to_underlying_async_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0134579
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Gets_translation_for_serbian_culture(cultureName: "sr")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004456
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_max_is_smaller_than_the_min_then_the_validator_should_throw',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004785
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmptyTester',
+ test_name='Passes_when_collection_empty',
+ result='success',
+ message=None,
+ content=None,
+ time=0.00027
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotNullTester',
+ test_name='NotNullValidator_should_fail_if_value_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002029
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Validates_with_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002879
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_with_an_unmatched_rule_and_a_single_error_s'
+ 'hould_throw_an_exception',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006954
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Format_property_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002165
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Falls_back_to_english_when_culture_not_registered',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002145
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Only_root_validator_throws',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007993
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='WhenAsyncWithOnFailure_should_invoke_condition_on_inner_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0014785
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AccessorCacheTests',
+ test_name='Identifies_if_memberexp_acts_on_model_instance',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002977
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure_when_set_to_Stop_globally_and_overrid'
+ 'en_at_rule_level_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005266
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Result_should_use_custom_property_name_when_no_property_name_can_be_d'
+ 'etermined',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005762
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExactLengthValidatorTester',
+ test_name='When_exact_length_rule_failes_error_should_have_exact_length_error_er'
+ 'rorcode',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006217
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='Flags_enum_with_overlapping_flags_valid_when_using_bitwise_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000299
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_o'
+ 'verriden_at_rule_level_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000813
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Throws_exception_with_a_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007043
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Ruleset_cascades_to_child_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005176
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='Should_handle_custom_value_types_correctly',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0022529
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LocalisedMessagesTester',
+ test_name='Does_not_throw_InvalidCastException_when_using_RuleForEach',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004547
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorDescriptorTester',
+ test_name='Returns_empty_collection_for_property_with_no_validators',
+ result='success',
+ message=None,
+ content=None,
+ time=8.85e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Should_succeed_when_greater_than_input',
+ result='success',
+ message=None,
+ content=None,
+ time=8.6e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='GreaterThan_should_create_GreaterThanValidator_with_lambda',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004794
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Executes_rule_for_each_item_in_collection_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007972
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Should_fail_when_less_than_input',
+ result='success',
+ message=None,
+ content=None,
+ time=7.64e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Conditional_child_validator_should_register_with_validator_type_not_p'
+ 'roperty',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003936
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Invalid_email_addressex_regex(email: "testperso")',
+ result='success',
+ message=None,
+ content=None,
+ time=3.95e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Collection_should_be_explicitly_included_with_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007823
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Should_throw_for_non_member_expression_when_validating_single_propert'
+ 'y',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002162
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Adding_a_validator_should_store_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=8.07e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Async_inside_dependent_rules',
+ result='success',
+ message=None,
+ content=None,
+ time=1.5056573
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='New_Custom_Returns_single_failure_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000586
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Should_validate_single_property_where_property_as_string',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003409
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Can_replace_message_without_overriding_all_languages',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001258
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WithName_should_override_field_name_with_value_from_other_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002316
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: '
+ '"customer/department=shipping@example.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.34e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='To_and_from_properties_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=6.68e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_not_throw_when_there_are_validation_'
+ 'errors__WhenAsyn_is_used(age: 42, cardNumber: null)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000746
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Multiple_rules_in_chain_with_childvalidator_shouldnt_reuse_accessor_a'
+ 'sync',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0057314
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_with_callback_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011748
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_failure_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007821
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Validates_complex_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009826
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='Should_use_ordinal_comparison_by_default',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001642
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='Executes_correct_rule_when_using_property_with_include_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0017452
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Validates_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010225
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Should_localize_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008092
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Comparison_property_uses_custom_resolver',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005497
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rul'
+ 'e_level_async_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008677
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001733
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomMessageFormatTester',
+ test_name='Uses_custom_delegate_for_building_message',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005953
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MemberAccessorTests',
+ test_name='SimplePropertyGet',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004082
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Falls_back_to_default_localization_key_when_error_code_key_not_found',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002815
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Should_set_default_error_when_validation_fails',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001125
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Should_be_valid_when_there_are_no_failures_for_single_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001968
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Must_should_create_PredicateValidator_with_context',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008328
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Fails_email_validation_aspnetcore_compatible(email: '
+ '"@someDomain@abc.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.34e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='Fails_when_collection_empty',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005821
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmptyTester',
+ test_name='When_value_is_Default_for_type_validator_should_pass_datetime',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003325
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MemberAccessorTests',
+ test_name='ComplexPropertySet',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004413
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Validates_with_nullable_when_property_not_null_cross_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002708
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='When_runs_outside_RuleForEach_loop_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012558
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ModelLevelValidatorTests',
+ test_name='Validates_at_model_level',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003216
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LocalisedMessagesTester',
+ test_name='Uses_string_format_with_property_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007191
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Nested_collection_for_null_property_should_not_throw_null_reference',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004414
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Should_fail_when_greater_than_input',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001925
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='GreaterThanOrEqual_should_create_GreaterThanOrEqualValidator_with_lam'
+ 'bda',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0078787
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Validates_child_validator_synchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000356
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='Nullable_enum_valid_when_value_specified',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0018848
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Doesnt_throw_NullReferenceException_when_instance_not_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001771
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='Min_and_max_properties_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001047
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WithMessage_and_WithErrorCode_should_override_error_message_and_error'
+ '_code',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001772
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0015238
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Nested_conditions_Rule_For',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009052
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Cascade_mode_can_be_set_after_validator_instantiated_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002101
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_throw_when_there_are_validation_e'
+ 'rrors__WhenAsyn_is_used(age: 42, cardNumber: "")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006807
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PropertyChainTests',
+ test_name='AddIndexer_throws_when_nothing_added',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000171
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Collection_should_be_explicitly_included_with_string',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005652
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Executes_rules_not_specified_in_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001365
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Ruleset_selection_should_cascade_downwards_with_when_setting_child_va'
+ 'lidator_using_include_statement',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001585
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_model_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0013614
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Condition_should_work_with_complex_property_when_invoked_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008233
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='RuleSet_can_be_used_inside_condition',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000827
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NameResolutionPluggabilityTester',
+ test_name='Uses_custom_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002739
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Does_not_execute_customasync_Rule_when_condition_false',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003491
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_o'
+ 'verriden_at_rule_level_async_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007979
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Matches_model_level_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006479
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Should_work_with_top_level_collection_validator_and_overriden_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003943
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='When_the_text_does_not_match_the_lambda_regex_regular_expression_then'
+ '_the_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003653
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveChildValidator_throws_when_property_does_not_have_child_val'
+ 'idator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003445
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Collection_should_be_explicitly_included_with_string',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005339
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_throw_when_there_are_not_validation_'
+ 'errors__WhenAsyn_Is_Used(age: 17, cardNumber: "")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0017937
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_smaller_than_the_range_then_the_validator_should_fa'
+ 'il',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002294
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Treats_root_level_RuleFor_call_as_dependent_rule_if_user_forgets_to_u'
+ 'se_DependentRulesBuilder',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003687
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='When_the_text_does_not_match_the_lambda_regular_expression_then_the_v'
+ 'alidator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001392
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Fails_email_validation_aspnetcore_compatible(email: '
+ '"@someDomain.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.48e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AccessorCacheTests',
+ test_name='Benchmark',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Should_set_default_validation_message_when_validation_fails',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000352
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LocalisedMessagesTester',
+ test_name='Uses_func_to_get_message',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002383
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_when_property_not_null_cross_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002763
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Validates_nullable_with_nullable_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006029
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Can_specify_condition_for_individual_collection_elements',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009154
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Can_validate_using_validator_for_base_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012612
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Length_should_create_MaximumLengthValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002942
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Trims_spaces',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004086
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorDescriptorTester',
+ test_name='Should_retrieve_name_given_to_it_pass_property_as_string',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005729
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='WhenAsync_condition_only_executed_once',
+ result='success',
+ message=None,
+ content=None,
+ time=0.00092
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExactLengthValidatorTester',
+ test_name='When_the_validator_fails_the_error_message_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002836
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_between_the_range_specified_then_the_validator_shou'
+ 'ld_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011727
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Must_should_create_PredicteValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004938
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Applies_multiple_rulesets_to_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004398
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='Flags_enum_invalid_when_using_outofrange_negative_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000756
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PredicateValidatorTester',
+ test_name='When_validation_fails_the_default_error_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004204
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Fails_email_validation_aspnetcore_compatible(email: "someName@")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.27e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_input_is_null_then_the_validator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000352
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Cascade_mode_can_be_set_after_validator_instantiated_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008338
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ModelLevelValidatorTests',
+ test_name='Can_use_child_validator_at_model_level',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004502
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Separate_validation_on_chained_property_conditional',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002104
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_smaller_than_the_range_then_the_validator_should_fa'
+ 'il',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002469
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='Flags_enum_invalid_when_using_outofrange_positive_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007806
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_not_throw_when_there_are_errors_with'
+ '_preconstructed_object',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006462
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ScalePrecisionValidatorTests',
+ test_name='Scale_precision_should_not_be_valid_when_they_are_equal',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004406
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Validates_single_property_by_path',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004851
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_when_async_inverse_predicate_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000354
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_when_inverse_context_predicate_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003354
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_not_throw_when_there_are_validation_'
+ 'errors_ruleforeach',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008097
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_to_second_validator_when_first_validator_succeed'
+ 's_and_cascade_set_to_stop_async_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011758
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006633
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_when_context_predicate_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001421
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='When_validation_fails_the_error_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.00023
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Should_throw_when_value_to_compare_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002891
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_between_the_lambda_range_specified_then_the_validato'
+ 'r_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.00092
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotNullTester',
+ test_name='Fails_when_nullable_value_type_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003908
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Does_not_throw_when_valid_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001014
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='When_the_property_is_initialized_with_null_then_the_validator_should_'
+ 'be_valid',
+ result='success',
+ message=None,
+ content=None,
+ time=8.7e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_not_throw_when_there_are_validation_'
+ 'errors__WhenAsyn_is_used(age: 42, cardNumber: "")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006089
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Gets_translation_for_serbian_culture(cultureName: "sr-Latn")',
+ result='success',
+ message=None,
+ content=None,
+ time=4.84e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_smaller_than_the_range_then_the_validator_should_fa'
+ 'il_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002367
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PropertyChainTests',
+ test_name='Should_be_subchain',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001203
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='When_the_objects_are_equal_then_the_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002655
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='When_the_objects_are_not_equal_validation_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002192
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmptyTester',
+ test_name='Passes_for_ienumerable_that_doesnt_implement_ICollection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0030376
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='When_enumType_is_not_an_enum_it_should_throw',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004576
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='When_validation_fails_the_default_error_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001061
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Async_condition_executed_synchronosuly_with_synchronous_role',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003076
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Tests_nested_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004914
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Validates_child_validator_asynchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007232
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Separate_validation_on_chained_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001368
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='TestAsyncWithDependentRules_SyncEntry',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0013846
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Async_condition_is_applied_to_all_validators_in_the_chain',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008144
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Unexpected_message_check(withoutErrMsg: "bar", errMessages: ["bar"])',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001548
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_model_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012782
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Expected_message_argument_check',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009659
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorDescriptorTester',
+ test_name='Does_not_throw_when_rule_declared_without_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001726
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Async_condition_executed_synchronosuly_with_asynchronous_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002385
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_val'
+ 'idator_level_and_overriden_at_rule_level_async_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010468
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Validates_collection_several_levels_deep',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011437
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='Validates_with_nullable_when_property_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002242
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmptyTester',
+ test_name='When_value_is_whitespace_validation_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001968
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Disables_localization',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001637
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomMessageFormatTester',
+ test_name='Uses_property_value_in_message',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008185
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Comparison_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001094
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='When_condition_only_executed_once',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004167
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PropertyChainTests',
+ test_name='Should_not_be_subchain',
+ result='success',
+ message=None,
+ content=None,
+ time=5.03e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_When_is_applied_to_groupd_rules_when_initial_predicate_is_true'
+ '_and_all_individual_rules_are_satisfied',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000455
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Can_access_colletion_index',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002866
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_throw_when_there_are_not_validation_'
+ 'errors__WhenAsyn_Is_Used(age: 17, cardNumber: null)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005484
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Rules_not_invoked_when_inverse_shared_async_condition_does_not_match',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0028571
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_throw_when_there_are_not_validati'
+ 'on_errors__WhenAsyn_is_used(age: 17, cardNumber: "")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005719
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_when_predicate_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001542
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Nested_conditions_Rule_For_Each',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009411
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='Should_not_be_valid_for_case_insensitve_comparison_with_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002824
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Correctly_gets_collection_indices',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003199
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Should_validate_single_property_where_invalid_property_as_string',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000216
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='Nullable_enum_valid_when_property_value_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001594
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidationResultTests',
+ test_name='Should_not_be_valid_when_there_are_errors',
+ result='success',
+ message=None,
+ content=None,
+ time=5.49e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserSeverityTester',
+ test_name='Correctly_provides_object_being_validated',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003232
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Unexpected_error_code_check',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0016124
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Complex_property_should_be_excluded',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003153
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainingValidatorsTester',
+ test_name='Should_execute_multiple_validators',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001781
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_throw_when_there_are_errors',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008858
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Should_succeed_when_greater_than_input',
+ result='success',
+ message=None,
+ content=None,
+ time=8e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_throw_when_there_are_not_validation_'
+ 'errors__WhenAsyn_Is_Used(age: 42, cardNumber: "cardNumber")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008127
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='TestAsyncWithDependentRules_AsyncEntry',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0050739
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='All_localizations_have_same_parameters_as_English',
+ result='success',
+ message=None,
+ content=None,
+ time=0.021761
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Async_condition_should_work_with_child_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007127
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PropertyChainTests',
+ test_name='Calling_ToString_should_construct_string_representation_of_chain',
+ result='success',
+ message=None,
+ content=None,
+ time=7.48e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Falls_back_to_english_when_translation_missing',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000523
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotNullTester',
+ test_name='NotNullValidator_should_pass_if_value_has_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002119
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Unexpected_message_check(withoutErrMsg: "bar", errMessages: ["foo"])',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003297
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Gets_translation_for_croatian_culture',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004599
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveChildValidator_should_work_with_DependentRules',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012294
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NameResolutionPluggabilityTester',
+ test_name='Resolves_nested_properties',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005703
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WhenPreValidationReturnsTrue_ValidatorsGetHit_Validate',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004371
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='To_and_from_properties_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000131
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Uses_explicit_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005128
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidationResultTests',
+ test_name='ToString_return_error_messages_with_given_separator',
+ result='success',
+ message=None,
+ content=None,
+ time=7.27e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Can_validate_collection_using_validator_for_base_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010737
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_when_property_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003672
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_throw_when_there_are_not_validati'
+ 'on_errors__WhenAsyn_is_used(age: 42, cardNumber: "cardNumber")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000897
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0027288
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_valida'
+ 'tor_should_pass_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Fails_email_validation_aspnetcore_compatible(email: "0")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002222
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Validation_should_fail_when_async_condition_does_not_match',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004177
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ScalePrecisionValidatorTests',
+ test_name='Scale_precision_should_not_be_valid',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006978
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='Nullable_enum_invalid_when_bad_value_specified',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003847
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='LessThan_should_create_LessThanValidator_with_explicit_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002742
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='New_Custom_Returns_single_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000335
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Top_level_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003379
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_not_throw_when_there_are_validation_'
+ 'errors',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007782
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='IsValidTests',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001215
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='When_value_is_Default_for_type_validator_should_fail_datetime',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0019899
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "!def!xyz%abc@example.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.2e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Validates_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005174
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MemberAccessorTests',
+ test_name='ImplicitCast',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008766
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='When_value_is_Default_for_type_validator_should_fail_int',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0018552
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LocalisedMessagesTester',
+ test_name='Formats_string_with_placeholders',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002342
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Multiple_rules_in_chain_with_childvalidator_shouldnt_reuse_accessor',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007222
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Doesnt_throw_NullReferenceException_when_instance_not_null_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0014608
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MemberAccessorTests',
+ test_name='SimpleFieldGet',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004109
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomMessageFormatTester',
+ test_name='Replaces_propertyvalue_with_empty_string_when_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002456
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LocalisedNameTester',
+ test_name='Uses_localized_name_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008903
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='When_the_text_does_not_match_the_regular_expression_then_the_validato'
+ 'r_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001644
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomFailureActionTester',
+ test_name='Does_not_invoke_action_if_validation_success',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002528
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Should_succeed_when_less_than_input',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001783
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='CanValidateInstancesOfType_returns_true_when_comparing_against_same_t'
+ 'ype',
+ result='success',
+ message=None,
+ content=None,
+ time=6.65e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_v'
+ 'alidator_level_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000909
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Executes_custom_rule_when_async_condition_true',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007245
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Should_not_scramble_property_name_when_using_collection_validators_se'
+ 'veral_levels_deep_with_ValidateAsync',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0021348
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Adds_formatted_argument_and_formatted_custom_arguments',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002678
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "\\"Abc\\\\@def\\"@example.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.6e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PredicateValidatorTester',
+ test_name='When_validation_fails_metadata_should_be_set_on_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012067
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PropertyChainTests',
+ test_name='Calling_ToString_should_construct_string_representation_of_chain_with'
+ '_indexers',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002382
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Does_not_throw_when_valid_and_a_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003775
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Comparison_property_uses_custom_resolver',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003967
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Can_replace_default_errorcode_resolver',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003158
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Calling_validate_should_delegate_to_underlying_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0014739
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NullTester',
+ test_name='NullValidator_should_pass_if_value_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003543
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserStateTester',
+ test_name='Correctly_provides_object_being_validated',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003223
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_larger_than_the_range_then_the_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002796
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='When_the_enum_is_initialized_with_invalid_value_then_the_validator_sh'
+ 'ould_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002553
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Tests_nested_property_using_obsolete_method',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004676
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='Can_access_expression_in_message',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002264
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidationResultTests',
+ test_name='Can_serialize_result',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0071021
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_val'
+ 'idator_level_and_overriden_at_rule_level_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001072
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Async_condition_can_be_used_inside_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0018948
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Comparison_Type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002061
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Validates_child_validator_synchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004716
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CreditCardValidatorTests',
+ test_name='IsValidTests',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002171
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_to_second_validator_when_first_validator_succeed'
+ 's_and_cascade_set_to_stop',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001667
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='When_enumType_is_null_it_should_throw',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0021549
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Validates_nullable_with_nullable_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004362
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomMessageFormatTester',
+ test_name='Replaces_propertyvalue_placeholder',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009778
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_throw_when_there_are_not_validation_'
+ 'errors_ruleforeach',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0022202
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='Should_store_property_to_compare',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001834
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Validates_with_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004626
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005735
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='Runs_sync_rule_asynchronously_when_validator_invoked_asynchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005199
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Does_not_invoke_dependent_rule_if_parent_rule_does_not_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000328
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Executes_rules_in_specified_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001594
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Async_condition_should_work_with_complex_property_when_validator_invo'
+ 'ked_synchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007052
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: '
+ '"someName@someDomain.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.67e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WithErrorCode_should_override_error_code',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001849
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='WhenAsyncWithOnFailure_should_invoke_condition_on_async_inner_validat'
+ 'or',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006154
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rul'
+ 'e_level_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008319
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Should_allow_normal_rules_and_chained_property_on_same_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002278
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_When_respects_the_smaller_scope_of_a_inner_Unless_when_the_inn'
+ 'er_Unless_predicate_fails',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001544
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='LessThanOrEqual_should_create_LessThanOrEqualValidator_with_lambda_wi'
+ 'th_other_Nullable',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004351
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Validates_with_nullable_when_property_null_cross_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004635
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='When_the_objects_are_not_equal_then_the_validator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002334
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Nested_dependent_rules_inside_ruleset_no_result_when_top_level_fails',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0016869
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidationResultTests',
+ test_name='Should_be_valid_when_there_are_no_errors',
+ result='success',
+ message=None,
+ content=None,
+ time=3.35e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Default_error_code_should_be_class_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001555
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_exactly_the_size_of_the_lambda_upper_bound_then_the_'
+ 'validator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003149
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StandalonePropertyValidationTester',
+ test_name='Should_validate_property_value_without_instance',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003758
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='Includes_nested_property_using_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005054
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: null)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004724
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='MustAsync_should_create_AsyncPredicteValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005833
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Length_should_create_ExactLengthValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003392
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='Can_access_expression_in_message_lambda_regex',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002767
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Should_set_default_error_when_validation_fails',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001047
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_valida'
+ 'tor_should_fail_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000234
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_When_respects_the_smaller_scope_of_an_inner_Unless_when_the_in'
+ 'ner_Unless_predicate_is_satisfied',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0019156
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidationResultTests',
+ test_name='ToString_return_empty_string_when_there_is_no_error',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001348
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Allows_only_one_failure_to_match',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007083
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Executes_custom_rule_when_condition_true',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010053
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_throw_when_there_are_validation_e'
+ 'rrors__WhenAsyn_is_used(age: 42, cardNumber: null)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008635
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Gets_translation_for_bosnian_latin_culture(cultureName: "bs-Latn-BA")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.1e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_smaller_than_the_range_then_the_validator_should_fa'
+ 'il_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002161
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Validates_chained_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010483
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Runs_otherwise_conditions_for_WhenAsync',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001126
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='When_async_condition_executed_for_each_instance_of_RuleForEach_condit'
+ 'ion_should_not_be_cached',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012985
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Length_should_create_MinimumLengthValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002645
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Executes_in_rule_in_ruleset_and_default',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003802
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Should_set_default_error_when_validation_fails',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001044
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Can_use_custom_subclass_with_nongeneric_overload',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006978
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Serializes_exception',
+ result='success',
+ message=None,
+ content=None,
+ time=0.007024
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Nested_async_conditions_with_Custom_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007695
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='PreValidate_bypasses_nullcheck_on_instance',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002142
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='GreaterThan_should_create_GreaterThanValidator_with_explicit_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002587
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Invalid_email_addressex_regex(email: '
+ '"thisisaverylongstringcodeplex.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=3.16e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WithMessage_should_override_error_message',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000159
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Expected_error_code_check',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005874
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Understands_numeric_formats',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001847
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Should_override_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004755
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Adds_formatted_argument_and_custom_arguments',
+ result='success',
+ message=None,
+ content=None,
+ time=8.08e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Nested_conditions_with_Custom_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004756
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='New_Custom_When_property_name_omitted_infers_property_name_nested',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006318
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='Validates_property_using_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0013178
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_throw_when_there_are_not_validati'
+ 'on_errors__WhenAsyn_is_used(age: 17, cardNumber: "cardNumber")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005838
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Extracts_property_from_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005257
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Validates_collection_several_levels_deep_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010832
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_o'
+ 'verriden_at_rule_level_and_async_validator_is_invoked_synchronously_l'
+ 'egacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005077
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='Should_use_ordinal_comparison_by_default',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002273
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AssemblyScannerTester',
+ test_name='Finds_validators_for_types',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002381
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Falls_back_to_parent_culture',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004487
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='ShouldHaveChildValidator_should_be_true',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012439
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='WhenAsyncWithOnFailure_should_invoke_condition_on_inner_validator_inv'
+ 'oked_synchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003084
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_failure_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001809
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='When_the_property_is_initialized_with_empty_string_then_the_validator'
+ '_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001593
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AssemblyScannerTester',
+ test_name='ForEach_iterates_over_types',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0018574
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Gets_translation_for_serbian_culture(cultureName: "sr-Latn-RS")',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Nullable_object_with_condition_should_not_throw',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001088
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_smaller_than_the_range_then_the_validator_should_fai'
+ 'l',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004057
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AccessorCacheTests',
+ test_name='Equality_comparison_check',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0021363
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "\\"Joe\\\\Blow\\"@example.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.44e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Property_should_return_null_when_it_is_not_a_property_being_validated',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003637
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Expected_severity_check',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0046721
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Can_access_parent_index',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0016135
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_if_overriding_validator_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001488
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_between_the_range_specified_then_the_validator_shoul'
+ 'd_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002179
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Should_succeed_when_less_than_input',
+ result='success',
+ message=None,
+ content=None,
+ time=8.2e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Validation_should_succeed_when_async_condition_matches',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0015482
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomMessageFormatTester',
+ test_name='Should_format_custom_message',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002244
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Should_allow_normal_rules_and_complex_property_on_same_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007508
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_throw_when_there_are_not_validati'
+ 'on_errors__WhenAsyn_is_used(age: 17, cardNumber: null)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005804
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Collection_should_be_excluded',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000544
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='LessThanOrEqual_should_create_LessThanOrEqualValidator_with_explicit_'
+ 'value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006133
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Executes_rules_in_default_ruleset_and_specific_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004761
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Includes_all_rulesets',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008384
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Complex_validator_should_not_be_invoked_on_null_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001677
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_not_throw_when_there_are_not_vali'
+ 'dation_errors_ruleforeach',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008012
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Condition_should_work_with_chained_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002054
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Async_condition_executed_synchronosuly_with_synchronous_collection_ro'
+ 'le',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003216
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveChildValidator_works_on_model_level_rules',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0013494
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='CanValidateInstancesOfType_returns_false_when_comparing_against_some_'
+ 'other_type',
+ result='success',
+ message=None,
+ content=None,
+ time=5.13e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='To_and_from_properties_should_be_set_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=6.7e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Collection_should_be_excluded',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000525
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Ruleset_cascades_to_child_collection_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008193
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Skips_null_items',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004786
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_when_property_is_null_cross_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000466
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.TransformTests',
+ test_name='Transforms_collection_element_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012982
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_Validate(p'
+ 'reValidationResult: )',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009423
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_to_is_smaller_than_the_from_then_the_validator_should_throw',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006236
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Cascade_mode_can_be_set_after_validator_instantiated_async_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0013079
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='CanValidateInstancesOfType_returns_true_when_comparing_against_subcla'
+ 'ss',
+ result='success',
+ message=None,
+ content=None,
+ time=5.66e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_maxlength_validator_fails_the_error_message_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000356
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_with_an_unmatched_rule_and_multiple_errors_'
+ 'should_throw_an_exception',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0017809
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_when_set_to_Continue_at_validator_level_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010564
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Unexpected_state_check',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009751
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: '
+ '"!#$%&\'*+-/=?^_`|~@someDomain.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.74e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='Validates_with_nullable_when_property_not_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004472
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Validation_should_succeed_when_condition_matches',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004142
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='WithMessage_works_inside_rulesets',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001237
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='NotNull_should_create_NotNullValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002713
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='MustAsync_should_create_AsyncPredicateValidator_with_PropertyValidato'
+ 'rContext',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0016185
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WithName_should_override_field_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002032
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure_when_set_to_Stop_globally_and_overrid'
+ 'en_at_rule_level',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000223
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainingValidatorsTester',
+ test_name='Options_should_only_apply_to_current_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002348
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: '
+ '"someName@some~domain.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.66e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotNullTester',
+ test_name='Not_null_validator_should_not_crash_with_non_nullable_value_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002735
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_When_is_not_applied_to_grouped_rules_when_initial_predicate_is'
+ '_false',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001183
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_if_property_name_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002522
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Validates_with_nullable_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005936
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='ToString_provides_error_details',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0117391
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Ruleset_selection_should_cascade_downwards_with_when_setting_child_va'
+ 'lidator_using_include_statement_with_lambda',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000822
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Uses_named_parameters_to_validate_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003616
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='When_validation_fails_error_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002777
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Sync_condition_is_applied_to_async_validators',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006349
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: '
+ '"someName@someDomain\uffef.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.57e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='Should_store_property_to_compare',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003283
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Gets_translation_for_bosnian_latin_culture(cultureName: "bs-Latn")',
+ result='success',
+ message=None,
+ content=None,
+ time=6.27e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='TestValidate_runs_async_throws',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000854
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='WhenWithOnFailure_should_invoke_condition_on_inner_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002855
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Nested_conditions_with_CustomAsync_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0027533
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Can_validate_using_validator_for_base_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0014496
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='When_value_is_empty_string_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002511
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: '
+ '"\\"firstName.lastName\\"@someDomain.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.67e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Expected_state_check',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008908
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_exactly_the_size_of_the_upper_bound_then_the_validat'
+ 'or_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000329
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Does_not_throw_when_valid',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002097
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Overrides_indexer_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011101
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveChildValidator_should_not_throw_when_property_has_collectio'
+ 'n_validators',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005756
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ScalePrecisionValidatorTests',
+ test_name='Scale_precision_should_be_valid_when_ignoring_trailing_zeroes',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0015273
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='All_languages_should_be_loaded',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0013878
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='When_the_validators_fail_then_validatorrunner_should_return_false',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001522
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_when_async_predicate_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001555
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='When_there_is_a_value_then_the_validator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002293
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='To_and_from_properties_should_be_set_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=6.02e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Should_fail_when_equal_to_input',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidationResultTests',
+ test_name='Can_serialize_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=9.95e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Unexpected_severity_check',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009091
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_val'
+ 'idator_level_and_overriden_at_rule_level_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002332
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='When_the_text_is_empty_then_the_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001049
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.TransformTests',
+ test_name='Transforms_property_value_to_another_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004268
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_when_property_not_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002607
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='LessThan_should_create_LessThanValidator_with_lambda',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005323
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='Can_use_property_with_include',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009319
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Outer_async_Unless_clause_will_trump_an_inner_Unless_clause_when_inne'
+ 'r_fails_but_the_outer_is_satisfied',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004874
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "__somename@example.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.19e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NullTester',
+ test_name='When_the_validator_passes_the_error_message_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002424
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Invalid_email_addressex_regex(email: "first.last@test..co.uk")',
+ result='success',
+ message=None,
+ content=None,
+ time=3.34e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_async_When_respects_the_smaller_scope_of_an_inner_Unless_when_'
+ 'the_inner_Unless_predicate_is_satisfied',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004845
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.TrackingCollectionTests',
+ test_name='Add_AddsItem',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006937
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='Executes_correct_rule_when_using_property_with_include',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001118
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AccessorCacheTests',
+ test_name='Gets_member_for_nested_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001084
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Async_condition_should_work_with_complex_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0023119
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PropertyChainTests',
+ test_name='Should_ignore_blanks',
+ result='success',
+ message=None,
+ content=None,
+ time=4.72e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_correctly_handle_explicitly_provi'
+ 'ding_object_to_validate_and_other_property_fails_validation',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0014272
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='OnFailure_called_for_each_failed_rule_asyncAsync',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0018854
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "\\"Abc@def\\"@example.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.45e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Can_access_parent_index_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011019
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='Should_be_able_to_access_error_message_in_OnFailure',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005239
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Always_use_specific_language_with_string_source',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003219
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Validates_with_nullable_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005793
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Overrides_indexer',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012315
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_Should_support_nested_properties',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008523
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.TrackingCollectionTests',
+ test_name='When_Item_Added_Raises_ItemAdded',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008476
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_compile_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001225
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserStateTester',
+ test_name='Can_Provide_state_for_item_in_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001113
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "testperson@gmail.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0163384
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomFailureActionTester',
+ test_name='Invokes_custom_action_on_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002284
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Condition_is_applied_to_single_validator_in_the_chain_when_ApplyCondi'
+ 'tionTo_set_to_CurrentValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003365
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Explicitly_included_properties_should_be_propagated_to_nested_validat'
+ 'ors',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0023437
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='Should_store_comparison_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003359
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='IsValidTests_CaseInsensitive_CaseCorrect',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001096
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExactLengthValidatorTester',
+ test_name='When_the_text_length_is_smaller_the_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004689
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='Fails_for_ienumerable_that_doesnt_implement_ICollection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012461
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='Should_not_be_valid_for_case_insensitve_comparison',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004358
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_with_callback_accepting_derived',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006007
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Nullable_object_with_async_condition_should_not_throw',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005033
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='Comparison_property_uses_custom_resolver',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004998
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_have_validation_error_details_whe'
+ 'n_thrown_ruleforeach',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012661
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEqualValidatorTests',
+ test_name='Validates_across_properties',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003172
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NameResolutionPluggabilityTester',
+ test_name='ShouldHaveValidationError_Should_support_custom_propertynameresolver',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007316
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Outer_Unless_clause_will_trump_an_inner_Unless_clause_when_inner_fail'
+ 's_but_the_outer_is_satisfied',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001804
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InlineValidatorTester',
+ test_name='Uses_inline_validator_to_build_rules',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001679
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_when_property_is_null_cross_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004822
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserSeverityTester',
+ test_name='Should_use_last_supplied_severity',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006834
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Can_use_indexer_in_string_message',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000562
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Runs_otherwise_conditions_for_UnlessAsync',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0041051
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidationResultTests',
+ test_name='Should_add_errors',
+ result='success',
+ message=None,
+ content=None,
+ time=9.17e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveChildvalidator_throws_when_collection_property_Does_not_hav'
+ 'e_child_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003538
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='OverridePropertyName_with_lambda_should_override_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003832
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Executes_all_rules',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007106
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Calling_ValidateAsync_should_delegate_to_underlying_sync_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0735933
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Does_not_execute_customasync_Rule_when_async_condition_false',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008363
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Expected_message_check',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006922
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='Fails_for_array',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000465
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ScalePrecisionValidatorTests',
+ test_name='Scale_precision_should_be_valid',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003178
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorDescriptorTester',
+ test_name='Gets_validators_for_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001789
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomMessageFormatTester',
+ test_name='Uses_custom_delegate_for_building_message_only_for_specific_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003785
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Explicitly_included_properties_should_be_propagated_to_nested_validat'
+ 'ors_using_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001753
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Correctly_gets_collection_indices_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000699
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_to_second_validator_when_first_validator_succeed'
+ 's_and_cascade_set_to_stop_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002155
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_larger_than_the_lambda_range_then_the_validator_shou'
+ 'ld_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003557
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_inheritance_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012652
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='New_custom_uses_empty_property_name_for_model_level_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002515
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Comparison_type',
+ result='success',
+ message=None,
+ content=None,
+ time=8.94e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LocalisedMessagesTester',
+ test_name='Correctly_assigns_default_localized_error_message',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011647
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Gets_translation_for_specific_culture',
+ result='success',
+ message=None,
+ content=None,
+ time=9.89e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_text_is_larger_than_the_range_then_the_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005079
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PropertyChainTests',
+ test_name='Creates_from_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001276
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExactLengthValidatorTester',
+ test_name='Min_and_max_properties_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=7.07e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Populates_errors',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003478
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='OverridePropertyName_should_override_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001676
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ScalePrecisionValidatorTests',
+ test_name='Scale_precision_should_not_be_valid_when_ignoring_trailing_zeroes',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004372
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LocalisedNameTester',
+ test_name='Uses_localized_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003024
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='IsValidTests_CaseSensitive_CaseIncorrect',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001363
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Executes_customasync_rule_when_condition_true',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0014208
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='MustAsync_should_not_throw_InvalidCastException',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0104516
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Comparison_property_uses_custom_resolver',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010333
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_async_When_is_not_applied_to_grouped_rules_when_initial_predic'
+ 'ate_is_false',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004089
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Unexpected_message_check(withoutErrMsg: "bar", errMessages: ["foo", '
+ '"bar"])',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001797
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Does_not_execute_custom_Rule_when_async_condition_false',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000904
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='LessThanOrEqual_should_create_LessThanOrEqualValidator_with_lambda',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005095
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmptyTester',
+ test_name='When_there_is_a_value_then_the_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001989
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_to_is_smaller_than_the_from_then_the_validator_should_throw_'
+ 'for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001329
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_model_async_throws',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011585
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Gets_translation_for_bosnian_latin_culture(cultureName: "bs")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000661
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Condition_should_work_with_child_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007357
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_between_the_range_specified_then_the_validator_shou'
+ 'ld_pass_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002261
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_valida'
+ 'tor_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002263
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='PropertyDescription_should_return_custom_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006558
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExtensionTester',
+ test_name='Should_return_null_for_non_member_expressions',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001368
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Property_should_return_property_being_validated',
+ result='success',
+ message=None,
+ content=None,
+ time=8.16e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Condition_should_work_with_child_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003728
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Validation_should_succeed_when_condition_does_not_match',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002873
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Adds_PropertyName_to_message',
+ result='success',
+ message=None,
+ content=None,
+ time=7.79e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_exactly_the_size_of_the_lower_bound_then_the_validat'
+ 'or_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002191
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: '
+ '"firstName.lastName@someDomain.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.91e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_failure_when_set_to_Continue_and_overriden_at_rul'
+ 'e_level',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002008
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_exactly_the_size_of_the_lambda_lower_bound_then_the_'
+ 'validator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003377
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_valida'
+ 'tor_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002097
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Fails_email_validation_aspnetcore_compatible(email: '
+ '"someName@a@b.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.27e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_text_is_larger_than_the_range_then_the_validator_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002468
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Dependent_rules_inside_when',
+ result='success',
+ message=None,
+ content=None,
+ time=0.00114
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Rule_for_a_non_memberexpression_should_not_generate_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003533
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_async_When_is_applied_to_grouped_rules_when_initial_predicate_'
+ 'is_true',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000946
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_to_second_validator_when_first_validator_succeed'
+ 's_and_cascade_set_to_stop_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000987
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Ruleset_selection_should_not_cascade_downwards_when_set_on_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009641
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_valida'
+ 'tor_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002839
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Separate_validation_on_chained_property_valid',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002025
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WhenPreValidationReturnsTrue_ValidatorsGetHit_ValidateAsync',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0015404
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHAveValidationError_should_not_throw_When_there_are_no_error'
+ 's_with_preconstructed_object',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000721
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_valida'
+ 'tor_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001963
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure_when_set_to_StopOnFirstFailure_at_val'
+ 'idator_level_and_overriden_at_rule_level',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001937
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Adds_value_to_message',
+ result='success',
+ message=None,
+ content=None,
+ time=5.83e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='TestValidate_runs_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007477
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_o'
+ 'verriden_at_rule_level',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000188
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Condition_is_applied_to_all_validators_in_the_chain',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003098
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Validates_with_nullable_when_property_not_null_cross_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005453
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_When_is_applied_to_grouped_rules_when_initial_predicate_is_tru'
+ 'e',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001524
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Dependent_rules_inside_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004097
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_exactly_the_size_of_the_upper_bound_then_the_valida'
+ 'tor_should_pass_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001956
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='Perserves_property_chain_using_custom',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008351
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Unexpected_message_check(withoutErrMsg: "bar", errMessages: [])',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007346
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Empty_should_create_EmptyValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002993
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='ShouldHaveChildValidator_works_with_Include',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002922
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='ValidationException_provides_correct_message_when_appendDefaultMessag'
+ 'e_false',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001514
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExactLengthValidatorTester',
+ test_name='When_the_text_is_an_exact_length_the_validator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002146
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='ValidationException_provides_correct_message_when_appendDefaultMessag'
+ 'e_true',
+ result='success',
+ message=None,
+ content=None,
+ time=9.92e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='PropertyDescription_should_return_property_name_split',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004031
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Should_fail_when_less_than_input',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003948
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='New_Custom_within_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005423
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='IsValidTests_CaseInsensitive_CaseIncorrect',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002316
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='RuleForeach_with_null_instances',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0019478
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='When_the_validators_fail_then_the_errors_Should_be_accessible_via_the'
+ '_errors_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.00017
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_set_custom_error',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001428
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010423
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Nested_dependent_rules_inside_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005315
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Invokes_dependent_rule_if_parent_rule_passes',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003376
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Should_work_with_top_level_collection_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007124
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Validates_with_nullable_when_property_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003426
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "$A12345@example.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.26e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Must_should_create_PredicateValidator_with_PropertyValidatorContext',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0042745
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MemberAccessorTests',
+ test_name='SimpleFieldSet',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004092
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Validates_with_nullable_when_property_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005007
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserSeverityTester',
+ test_name='Can_Provide_severity_for_item_in_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007448
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='NotEqual_should_create_NotEqualValidator_with_explicit_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003685
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_set_custom_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003705
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_when_property_not_null_cross_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000283
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='Validates_with_nullable_when_property_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002167
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_text_is_larger_than_the_range_then_the_validator_should_fail'
+ '_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002392
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ScalePrecisionValidatorTests',
+ test_name='Scale_precision_should_be_valid_when_they_are_equal',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000383
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Throws_exception_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004271
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_exactly_the_size_of_the_lower_bound_then_the_valida'
+ 'tor_should_fail_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009095
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Includes_all_rulesets_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010633
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='Should_succeed_on_case_insensitive_comparison',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002418
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveChildValidator_should_throw_when_property_has_a_different_c'
+ 'hild_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005867
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChildRulesTests',
+ test_name='Can_define_nested_rules_for_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0016096
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Should_not_scramble_property_name_when_using_collection_validators_se'
+ 'veral_levels_deep',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003437
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001706
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Can_specify_condition_for_individual_collection_elements',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004461
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PredicateValidatorTester',
+ test_name='Should_fail_when_predicate_returns_false',
+ result='success',
+ message=None,
+ content=None,
+ time=9.17e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EnumValidatorTests',
+ test_name='Flags_enum_valid_when_using_bitwise_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0192413
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Explicitly_included_properties_should_be_propagated_to_nested_validat'
+ 'ors',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002691
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationErrorFor_takes_account_of_rulesets',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007521
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Combines_rulesets_and_explicit_properties',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000997
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Validates_against_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012022
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveChildValidator_should_not_throw_when_property_Does_have_chi'
+ 'ld_validator_and_expecting_a_basetype',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004634
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Can_replace_message',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002451
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='Comparison_property_uses_custom_resolver',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003829
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='Validates_against_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002933
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_validator_fails_the_error_message_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0113406
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Should_validate_single_Field',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002444
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Runs_otherwise_conditons_for_Unless',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008404
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Fails_email_validation_aspnetcore_compatible(email: "someName")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.3e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MemberAccessorTests',
+ test_name='Equality',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010753
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MemberAccessorTests',
+ test_name='SimplePropertySet',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004415
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmptyTester',
+ test_name='When_value_is_null_validator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002377
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Can_access_colletion_index_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007781
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Chained_validator_should_not_be_invoked_on_null_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000121
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_with_callback_accepting_derived_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0048985
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Can_directly_validate_multiple_fields_of_same_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0034497
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_text_is_larger_than_the_range_then_the_validator_should_fail'
+ '_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002377
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: '
+ '"1234@someDomain.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=3.07e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='Does_not_validate_other_property_using_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003211
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='When_validation_fails_the_default_error_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001968
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_ruleset_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0016248
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_collection_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0040405
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationErrorFor_takes_account_of_rulesets_fluent_approac'
+ 'h',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007776
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainingValidatorsTester',
+ test_name='Should_create_multiple_validators',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003311
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_throw_when_there_are_errors_with_'
+ 'preconstructed_object',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0023915
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: '
+ '"someName@1234.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.58e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserSeverityTester',
+ test_name='Defaults_user_severity_to_error',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001704
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='OnFailure_called_for_each_failed_rule',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000567
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009577
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='RuleSet_can_be_used_inside_async_condition',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011754
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Equal_should_create_EqualValidator_with_explicit_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003343
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Adds_argument_and_custom_arguments',
+ result='success',
+ message=None,
+ content=None,
+ time=6.99e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Validates_collection_asynchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0014053
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='Uses_regex_object',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004951
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_if_message_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001371
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='When_condition_executed_for_each_instance_of_RuleForEach_condition_sh'
+ 'ould_not_be_cached',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006033
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Uses_error_code_as_localization_key',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003393
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='When_the_text_is_null_then_the_validator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=9.28e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_validator_fails_the_error_message_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002354
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='GreaterThanOrEqual_should_create_GreaterThanOrEqualValidator_with_lam'
+ 'bda_with_other_Nullable',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0019589
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MemberAccessorTests',
+ test_name='Name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004323
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmptyTester',
+ test_name='When_value_is_Default_for_type_validator_should_pass_int',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003963
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "TestPerson@gmail.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=8.05e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Throws_exception',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004234
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_should_throw_when_there_are_not_validation_'
+ 'errors__WhenAsyn_Is_Used(age: 17, cardNumber: "cardNumber")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006412
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.StringEnumValidatorTests',
+ test_name='IsValidTests_CaseSensitive_CaseCorrect',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012556
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='Can_access_expression_in_message_lambda',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002801
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_aspnetcore_compatible(email: "\xa0'
+ '@someDomain.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=1.73e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Async_inside_dependent_rules_when_parent_rule_not_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.9925303
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_Validate(p'
+ 'reValidationResult: AnotherInt Test Message)',
+ result='success',
+ message=None,
+ content=None,
+ time=6.28e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Adding_a_validator_should_return_builder',
+ result='success',
+ message=None,
+ content=None,
+ time=7.14e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Validates_nullable_with_nullable_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003854
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='When_the_Validators_pass_then_the_validatorRunner_should_return_true',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001471
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='When_the_text_matches_the_lambda_regex_regular_expression_then_the_va'
+ 'lidator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001215
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MessageFormatterTests',
+ test_name='Understands_date_formats',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001748
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.MemberAccessorTests',
+ test_name='ComplexPropertyGet',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009033
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "\\"Fred Bloggs\\"@example.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.58e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Length_should_create_LengthValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002207
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Creates_validator_using_context_from_property_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011184
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExtensionTester',
+ test_name='SplitPascalCase_should_return_null_when_input_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=3.14e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExtensionTester',
+ test_name='Should_split_pascal_cased_member_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006315
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LocalisedMessagesTester',
+ test_name='Formats_string_with_placeholders_when_you_cant_edit_the_string',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002285
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.UserStateTester',
+ test_name='Stores_user_state_against_validation_failure',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011142
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ChainedValidationTester',
+ test_name='Chained_validator_descriptor',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002971
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='RuleForEach_async_RunsTasksSynchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0236497
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='MemberNameValidatorSelector_returns_true_when_property_name_matches',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002975
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Condition_should_work_with_complex_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004359
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.TransformTests',
+ test_name='Transforms_property_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003746
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_throw_when_there_are_validation_e'
+ 'rrors_ruleforeach',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009397
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Should_validate_public_Field',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003435
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveChildValidator_should_not_throw_when_property_Does_have_chi'
+ 'ld_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0022892
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Can_validate_collection_using_validator_for_base_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004768
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Comparison_type',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002012
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_async_throws',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001366
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_async_When_respects_the_smaller_scope_of_a_inner_Unless_when_t'
+ 'he_inner_Unless_predicate_fails',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0029811
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CollectionValidatorWithParentTests',
+ test_name='Collection_should_be_explicitly_included_with_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006578
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_v'
+ 'alidator_level',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002738
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanOrEqualToValidatorTester',
+ test_name='Should_succeed_when_equal_to_input',
+ result='success',
+ message=None,
+ content=None,
+ time=7.26e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_should_correctly_handle_explicitly_provi'
+ 'ding_object_to_validate',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0031438
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='MustAsync_should_create_AsyncPredicateValidator_with_context',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001972
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Async_condition_is_applied_to_all_validators_in_the_chain_when_execut'
+ 'ed_synchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005363
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "testperson+label@gmail.com")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.75e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='New_CustomAsync_within_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008872
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Executes_rule_for_each_item_in_collection',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003186
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Cascade_mode_can_be_set_after_validator_instantiated',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001778
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_failure_async_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008751
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomValidatorTester',
+ test_name='Runs_async_rule_synchronously_when_validator_invoked_synchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006956
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_Failure_when_set_to_Continue_globally_and_o'
+ 'verriden_at_rule_level_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.00023
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Condition_can_be_used_inside_ruleset',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005964
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Does_not_throw_when_valid_and_a_ruleset_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003892
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Comparison_property_uses_custom_resolver',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004008
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Fails_email_validation_aspnetcore_compatible(email: "")',
+ result='success',
+ message=None,
+ content=None,
+ time=3.14e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldNotHaveValidationError_async_throws',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0022945
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_on_failure_when_set_to_Stop_globally_and_overrid'
+ 'en_at_rule_level_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011028
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Uses_useful_error_message_when_used_on_non_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004356
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_to_is_smaller_than_the_from_then_the_validator_should_throw_'
+ 'for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001562
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidateAndThrowTester',
+ test_name='Throws_exception_with_a_ruleset_async',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0011925
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EqualValidatorTests',
+ test_name='Should_succeed_on_case_insensitive_comparison_using_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002538
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='When_runs_outside_RuleForEach_loop',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004935
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_when_property_not_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002465
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ForEachRuleTests',
+ test_name='Should_override_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003821
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmptyTester',
+ test_name='When_value_is_empty_string_validator_should_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002019
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_if_overriding_validator_provider_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001555
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='Equal_should_create_EqualValidator_with_lambda',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006079
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotNullTester',
+ test_name='When_the_validator_fails_the_error_message_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002246
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Shared_async_When_is_applied_to_groupd_rules_when_initial_predicate_i'
+ 's_true_and_all_individual_rules_are_satisfied',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004461
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_build_property_name',
+ result='success',
+ message=None,
+ content=None,
+ time=5.59e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CreditCardValidatorTests',
+ test_name='When_validation_fails_the_default_error_should_be_set',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0017932
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_to_is_smaller_than_the_from_then_the_validator_should_throw',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003029
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='ScalePrecision_should_create_ScalePrecisionValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0020009
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidationResultTests',
+ test_name='ToString_return_error_messages_with_newline_as_separator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003538
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Validates_child_validator_asynchronously',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0037362
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LengthValidatorTests',
+ test_name='When_the_text_is_smaller_than_the_lambda_range_then_the_validator_sho'
+ 'uld_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003612
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Rules_not_invoked_when_inverse_shared_condition_does_not_match',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0009262
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_between_the_range_specified_then_the_validator_shou'
+ 'ld_pass',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003572
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ConditionTests',
+ test_name='Validation_should_fail_when_async_condition_matches',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007917
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Can_use_indexer_in_string_message_inverse',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000553
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExtensionTester',
+ test_name='Should_extract_member_from_member_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000113
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ComplexValidationTester',
+ test_name='Explicitly_included_properties_should_be_propagated_to_nested_validat'
+ 'ors_using_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008307
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Validates_with_nullable_when_property_not_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002586
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='Does_not_validate_other_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0004189
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleBuilderTests',
+ test_name='Should_throw_if_validator_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001458
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AccessorCacheTests',
+ test_name='Gets_accessor',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003872
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_continues_when_set_to_Continue_at_validator_level',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002021
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RegularExpressionValidatorTests',
+ test_name='Uses_lazily_loaded_expression',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003176
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanValidatorTester',
+ test_name='Validates_with_nullable_when_property_is_null_cross_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002669
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LessThanValidatorTester',
+ test_name='Validates_nullable_with_nullable_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000773
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InclusiveBetweenValidatorTests',
+ test_name='When_the_value_is_between_the_range_specified_then_the_validator_shou'
+ 'ld_pass_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.00022
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.InheritanceValidatorTest',
+ test_name='Validates_with_callback',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0012889
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.OnFailureTests',
+ test_name='WhenWithOnFailure_should_invoke_condition_on_async_inner_validator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000634
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Should_succeed_when_equal_to_input',
+ result='success',
+ message=None,
+ content=None,
+ time=7.8e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='ScalePrecision_should_create_ScalePrecisionValidator_with_ignore_trai'
+ 'ling_zeros',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002146
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.LanguageManagerTests',
+ test_name='Always_use_specific_language',
+ result='success',
+ message=None,
+ content=None,
+ time=6.66e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.SharedConditionTests',
+ test_name='Does_not_execute_custom_Rule_when_condition_false',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008838
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='ShouldHaveValidationError_preconstructed_object_does_not_throw_for_un'
+ 'writable_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008894
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorTesterTester',
+ test_name='Model_level_check_fails_if_no_model_level_failures',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0005599
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='Should_throw_when_rule_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001178
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.AbstractValidatorTester',
+ test_name='WhenPreValidationReturnsFalse_ResultReturnToUserImmediatly_ValidateAs'
+ 'ync(preValidationResult: AnotherInt Test Message)',
+ result='success',
+ message=None,
+ content=None,
+ time=5.78e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Valid_email_addresses_regex(email: "first.last@test.co.uk")',
+ result='success',
+ message=None,
+ content=None,
+ time=2.26e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RuleDependencyTests',
+ test_name='Nested_dependent_rules_inside_ruleset_inside_method',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0007514
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.RulesetTests',
+ test_name='Executes_multiple_rulesets',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0017933
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NullTester',
+ test_name='Passes_when_nullable_value_type_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002748
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ValidatorSelectorTests',
+ test_name='Includes_nested_property',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0006524
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.PredicateValidatorTester',
+ test_name='Should_succeed_when_predicate_returns_true',
+ result='success',
+ message=None,
+ content=None,
+ time=7.66e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NotEmptyTester',
+ test_name='When_value_is_whitespace_validation_should_fail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002178
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.ExclusiveBetweenValidatorTests',
+ test_name='When_the_validator_fails_the_error_message_should_be_set_for_strings',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002668
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.NullTester',
+ test_name='NullValidator_should_fail_if_value_has_value',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002075
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CustomFailureActionTester',
+ test_name='Passes_object_being_validated_to_action',
+ result='success',
+ message=None,
+ content=None,
+ time=0.000852
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.DefaultValidatorExtensionTester',
+ test_name='NotEmpty_should_create_NotEmptyValidator',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002803
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.CascadingFailuresTester',
+ test_name='Validation_stops_on_first_failure_when_set_to_StopOnFirstFailure_at_v'
+ 'alidator_level_legacy',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002253
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.EmailValidatorTests',
+ test_name='Invalid_email_addressex_regex(email: "")',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0003859
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/FluentValidation.Tests.trx',
+ test_file=None,
+ line=None,
+ class_name='FluentValidation.Tests.GreaterThanOrEqualToValidatorTester',
+ test_name='Validates_with_nullable_when_property_is_null',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0002299
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/trx/nunit/FluentValidation.Tests.trx b/python/test/files/trx/nunit/FluentValidation.Tests.trx
new file mode 100644
index 00000000..4ac6323c
--- /dev/null
+++ b/python/test/files/trx/nunit/FluentValidation.Tests.trx
@@ -0,0 +1,4662 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [xUnit.net 00:00:00.8621784] FluentValidation.Tests.AccessorCacheTests.Benchmark [SKIP]
+
+
+
+
\ No newline at end of file
diff --git a/python/test/files/trx/nunit/NUnit-net461-sample.junit-xml b/python/test/files/trx/nunit/NUnit-net461-sample.junit-xml
new file mode 100644
index 00000000..d3120e51
--- /dev/null
+++ b/python/test/files/trx/nunit/NUnit-net461-sample.junit-xml
@@ -0,0 +1,26 @@
+
+
+
+
+ Expected: False
+ But was: True
+ at SampleProject.NUnit.TestServiceTests.TestTheory(Boolean expected) in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.NUnit\TestServiceTests.cs:line 25
+
+
+
+ Ignore test
+
+
+
+ System.Exception : Pretty good exception at SampleProject.TestService.GetException() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject\TestService.cs:line 19
+ at SampleProject.NUnit.TestServiceTests.TestThrowingException() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.NUnit\TestServiceTests.cs:line 50
+
+
+ Expected: True
+ But was: False
+ at SampleProject.NUnit.TestServiceTests.FailTest() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.NUnit\TestServiceTests.cs:line 61
+
+
+
+
+
diff --git a/python/test/files/trx/nunit/NUnit-net461-sample.results b/python/test/files/trx/nunit/NUnit-net461-sample.results
new file mode 100644
index 00000000..f91af859
--- /dev/null
+++ b/python/test/files/trx/nunit/NUnit-net461-sample.results
@@ -0,0 +1,90 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=6,
+ suite_skipped=1,
+ suite_failures=3,
+ suite_errors=0,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='TestTheory(False)',
+ result='failure',
+ message=' Expected: False\r\n But was: True\r\n',
+ content=' Expected: False\r\n But was: True\r\n at '
+ 'SampleProject.NUnit.TestServiceTests.TestTheory(Boolean expected) in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.NUnit'
+ '\\TestServiceTests.cs:line 25\r\n',
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='SkipTest',
+ result='skipped',
+ message='Ignore test',
+ content='Ignore test',
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='TestTheory(True)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.018
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='TestThrowingException',
+ result='failure',
+ message='System.Exception : Pretty good exception',
+ content='System.Exception : Pretty good exception at '
+ 'SampleProject.TestService.GetException() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject\\TestService'
+ '.cs:line 19\r\n at '
+ 'SampleProject.NUnit.TestServiceTests.TestThrowingException() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.NUnit'
+ '\\TestServiceTests.cs:line 50',
+ time=0.005
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='FailTest',
+ result='failure',
+ message=' Expected: True\r\n But was: False\r\n',
+ content=' Expected: True\r\n But was: False\r\n at '
+ 'SampleProject.NUnit.TestServiceTests.FailTest() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.NUnit'
+ '\\TestServiceTests.cs:line 61\r\n',
+ time=0.111
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='PassingTest',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/trx/nunit/NUnit-net461-sample.trx b/python/test/files/trx/nunit/NUnit-net461-sample.trx
new file mode 100644
index 00000000..64ed93b6
--- /dev/null
+++ b/python/test/files/trx/nunit/NUnit-net461-sample.trx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.junit-xml b/python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.junit-xml
new file mode 100644
index 00000000..4c528220
--- /dev/null
+++ b/python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.junit-xml
@@ -0,0 +1,26 @@
+
+
+
+
+ Expected: True
+ But was: False
+ at SampleProject.NUnit.TestServiceTests.FailTest() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.NUnit\TestServiceTests.cs:line 61
+
+
+
+ Ignore test
+
+
+ System.Exception : Pretty good exception at SampleProject.TestService.GetException() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject\TestService.cs:line 19
+ at SampleProject.NUnit.TestServiceTests.TestThrowingException() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.NUnit\TestServiceTests.cs:line 50
+
+
+ Expected: False
+ But was: True
+ at SampleProject.NUnit.TestServiceTests.TestTheory(Boolean expected) in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.NUnit\TestServiceTests.cs:line 25
+
+
+
+
+
+
diff --git a/python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.results b/python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.results
new file mode 100644
index 00000000..02360905
--- /dev/null
+++ b/python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.results
@@ -0,0 +1,90 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=6,
+ suite_skipped=1,
+ suite_failures=3,
+ suite_errors=0,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='FailTest',
+ result='failure',
+ message=' Expected: True\r\n But was: False\r\n',
+ content=' Expected: True\r\n But was: False\r\n at '
+ 'SampleProject.NUnit.TestServiceTests.FailTest() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.NUnit'
+ '\\TestServiceTests.cs:line 61\r\n',
+ time=0.059742
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='SkipTest',
+ result='skipped',
+ message='Ignore test',
+ content='Ignore test',
+ time=0.000447
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='TestThrowingException',
+ result='failure',
+ message='System.Exception : Pretty good exception',
+ content='System.Exception : Pretty good exception at '
+ 'SampleProject.TestService.GetException() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject\\TestService'
+ '.cs:line 19\r\n at '
+ 'SampleProject.NUnit.TestServiceTests.TestThrowingException() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.NUnit'
+ '\\TestServiceTests.cs:line 50',
+ time=0.003151
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='TestTheory(False)',
+ result='failure',
+ message=' Expected: False\r\n But was: True\r\n',
+ content=' Expected: False\r\n But was: True\r\n at '
+ 'SampleProject.NUnit.TestServiceTests.TestTheory(Boolean expected) in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.NUnit'
+ '\\TestServiceTests.cs:line 25\r\n',
+ time=0.001997
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='TestTheory(True)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0113449
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/NUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.NUnit.TestServiceTests',
+ test_name='PassingTest',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0010839
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.trx b/python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.trx
new file mode 100644
index 00000000..65775c3c
--- /dev/null
+++ b/python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.trx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/python/test/files/trx/nunit/SilentNotes.junit-xml b/python/test/files/trx/nunit/SilentNotes.junit-xml
new file mode 100644
index 00000000..68f1453f
--- /dev/null
+++ b/python/test/files/trx/nunit/SilentNotes.junit-xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+ Opens the authorization page in the system browse, to get a real access-token
+
+
+
+
+
+
+
+
+
+
+
+
+ Refreshes a real token
+
+
+
+
+ Too many consecutive fails seems to block an FTP server.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gets a real access-token
+
+
+ Opens the authorization page in the system browse, to get a real authorization-code
+
+
+
+
+
+
+
+
+
+
+
+ Gets a real access-token
+
+
+
+
+ Gets a real access-token
+
+
+ Refreshes a real token
+
+
+
+
+ Opens the authorization page in the system browse, to get a real authorization-code
+
+
+
+ Too many consecutive fails seems to block an FTP server.
+
+
+
+
+
+
+
+ Too many consecutive fails seems to block an FTP server.
+
+
+
+
+
+
+
+ Refreshes a real token
+
+
+
+
+
diff --git a/python/test/files/trx/nunit/SilentNotes.results b/python/test/files/trx/nunit/SilentNotes.results
new file mode 100644
index 00000000..8927a096
--- /dev/null
+++ b/python/test/files/trx/nunit/SilentNotes.results
@@ -0,0 +1,927 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=79,
+ suite_skipped=12,
+ suite_failures=0,
+ suite_errors=0,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2CloudStorageClientTest',
+ test_name='FetchTokenReturnsNullForDeniedAccess',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='SerializedJsonDoesNotContainPlaintextData',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'DropboxCloudStorageClientTest',
+ test_name='ReallyDoOpenAuthorizationPageInBrowser',
+ result='skipped',
+ message='Opens the authorization page in the system browse, to get a real '
+ 'access-token',
+ content='Opens the authorization page in the system browse, to get a real '
+ 'access-token',
+ time=8.3e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'FtpCloudStorageClientTest',
+ test_name='FileLifecycleWorks',
+ result='success',
+ message=None,
+ content=None,
+ time=0.161
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.SecureStringExtensionsTest',
+ test_name='CorrectlyConvertsStringToSecureString',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageCredentialsTest',
+ test_name='ValidateAcceptsValidCredentials',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest',
+ test_name='BuildAuthorizationRequestUrlThrowsWithMissingRedirectUrlForTokenFlow',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest',
+ test_name='ParseRealWorldDropboxSuccessResponse',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest',
+ test_name='BuildAuthorizationRequestUrlUsesAllParameters',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='SerializedDatacontractDoesNotContainNullProperties',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageCredentialsTest',
+ test_name='CorrectlyConvertsSecureStringToString',
+ result='success',
+ message=None,
+ content=None,
+ time=0.007
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='SerializedJsonDoesNotContainNullProperties',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='SerializedDatacontractCanBeReadBack',
+ result='success',
+ message=None,
+ content=None,
+ time=0.016
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'OnedriveCloudStorageClientTest',
+ test_name='ReallyDoRefreshToken',
+ result='skipped',
+ message='Refreshes a real token',
+ content='Refreshes a real token',
+ time=1e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'WebdavCloudStorageClientTest',
+ test_name='ParseStratoWebdavResponseCorrectly',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='SerializedXmlDoesNotContainNullProperties',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'FtpCloudStorageClientTest',
+ test_name='ThrowsWithInvalidUrl',
+ result='skipped',
+ message='Too many consecutive fails seems to block an FTP server.',
+ content='Too many consecutive fails seems to block an FTP server.',
+ time=1.4e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageTokenTest',
+ test_name='NeedsRefreshReturnsFalseIfNotExpired',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'WebdavCloudStorageClientTest',
+ test_name='ThrowsWithInvalidUsername',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'FtpCloudStorageClientTest',
+ test_name='ThrowsWithHttpInsteadOfFtp',
+ result='success',
+ message=None,
+ content=None,
+ time=0.004
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='SerializedXmlDoesNotContainPlaintextData',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'WebdavCloudStorageClientTest',
+ test_name='ThrowsWithInvalidPath',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest',
+ test_name='BuildAuthorizationRequestUrlLeavesOutOptionalParameters',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'FtpCloudStorageClientTest',
+ test_name='SanitizeCredentials_ChangesInvalidPrefix',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.SecureStringExtensionsTest',
+ test_name='CorrectlyConvertsUnicodeBytesToSecureString',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageTokenTest',
+ test_name='NeedsRefreshReturnsTrueIfNoExpirationDate',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest',
+ test_name='ParseRealWorldDropboxRejectResponse',
+ result='success',
+ message=None,
+ content=None,
+ time=0.009
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='SerializedJsonCanBeReadBack',
+ result='success',
+ message=None,
+ content=None,
+ time=0.007
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'GmxCloudStorageClientTest',
+ test_name='ChoosesCorrectUrlForGmxNetEmail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'DropboxCloudStorageClientTest',
+ test_name='ThrowsAccessDeniedExceptionWithInvalidToken',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='SerializedDatacontractDoesNotContainPlaintextData',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2CloudStorageClientTest',
+ test_name='RefreshTokenCanInterpretGoogleResponse',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'WebdavCloudStorageClientTest',
+ test_name='ParseGmxWebdavResponseCorrectly',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.SecureStringExtensionsTest',
+ test_name='CorrectlyConvertsUtf8BytesToSecureString',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageCredentialsTest',
+ test_name='CorrectlyConvertsStringToSecureString',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageCredentialsTest',
+ test_name='AreEqualWorksWithSameContent',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.SecureStringExtensionsTest',
+ test_name='CorrectlyConvertsSecureStringToString',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.AuthorizationResponseErrorTest',
+ test_name='ParsesNullErrorCodeCorrectly',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'GmxCloudStorageClientTest',
+ test_name='ChoosesCorrectUrlForGmxComEmail',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'WebdavCloudStorageClientTest',
+ test_name='FileLifecycleWorks',
+ result='success',
+ message=None,
+ content=None,
+ time=0.014
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageTokenTest',
+ test_name='SetExpiryDateBySecondsWorksWithNull',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageCredentialsTest',
+ test_name='ValidateRejectsInvalidCredentials',
+ result='success',
+ message=None,
+ content=None,
+ time=0.006
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='EncryptBeforeSerializationProtectsAllNecessaryProperties',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='DecryptAfterDesrializationRespectsNullProperties',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'DropboxCloudStorageClientTest',
+ test_name='ReallyDoFetchToken',
+ result='skipped',
+ message='Gets a real access-token',
+ content='Gets a real access-token',
+ time=0.0004561
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'OnedriveCloudStorageClientTest',
+ test_name='ReallyDoOpenAuthorizationPageInBrowser',
+ result='skipped',
+ message='Opens the authorization page in the system browse, to get a real '
+ 'authorization-code',
+ content='Opens the authorization page in the system browse, to get a real '
+ 'authorization-code',
+ time=1e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='DecryptAfterDesrializationCanReadAllPropertiesBack',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'FtpCloudStorageClientTest',
+ test_name='SecureSslConnectionWorks',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageTokenTest',
+ test_name='NeedsRefreshReturnsFalseForTokenFlow',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2CloudStorageClientTest',
+ test_name='FetchTokenCanInterpretGoogleResponse',
+ result='success',
+ message=None,
+ content=None,
+ time=0.007
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageTokenTest',
+ test_name='NeedsRefreshReturnsTrueIfExpired',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest',
+ test_name='ParseRealWorldGoogleSuccessResponse',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'GoogleCloudStorageClientTest',
+ test_name='FileLifecycleWorks',
+ result='success',
+ message=None,
+ content=None,
+ time=0.04
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageTokenTest',
+ test_name='SetExpiryDateBySecondsWorks',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageTokenTest',
+ test_name='SetExpiryDateBySecondsWorksWithVeryShortPeriod',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'GoogleCloudStorageClientTest',
+ test_name='ReallyDoFetchToken',
+ result='skipped',
+ message='Gets a real access-token',
+ content='Gets a real access-token',
+ time=3.1e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'OnedriveCloudStorageClientTest',
+ test_name='FileLifecycleWorks',
+ result='success',
+ message=None,
+ content=None,
+ time=0.015
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.AuthorizationResponseErrorTest',
+ test_name='ParsesAllErrorCodesCorrectly',
+ result='success',
+ message=None,
+ content=None,
+ time=0.003
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'OnedriveCloudStorageClientTest',
+ test_name='ReallyDoFetchToken',
+ result='skipped',
+ message='Gets a real access-token',
+ content='Gets a real access-token',
+ time=3.3e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'GoogleCloudStorageClientTest',
+ test_name='ReallyDoRefreshToken',
+ result='skipped',
+ message='Refreshes a real token',
+ content='Refreshes a real token',
+ time=5.94e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'DropboxCloudStorageClientTest',
+ test_name='FileLifecycleWorks',
+ result='success',
+ message=None,
+ content=None,
+ time=0.095
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest',
+ test_name='ParseRealWorldGoogleRejectResponse',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'GoogleCloudStorageClientTest',
+ test_name='ReallyDoOpenAuthorizationPageInBrowser',
+ result='skipped',
+ message='Opens the authorization page in the system browse, to get a real '
+ 'authorization-code',
+ content='Opens the authorization page in the system browse, to get a real '
+ 'authorization-code',
+ time=1.2e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.SecureStringExtensionsTest',
+ test_name='CorrectlyConvertsSecureStringToUnicodeBytes',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'FtpCloudStorageClientTest',
+ test_name='ThrowsWithInvalidUsername',
+ result='skipped',
+ message='Too many consecutive fails seems to block an FTP server.',
+ content='Too many consecutive fails seems to block an FTP server.',
+ time=1e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest',
+ test_name='BuildAuthorizationRequestUrlEscapesParameters',
+ result='success',
+ message=None,
+ content=None,
+ time=0.002
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2CloudStorageClientTest',
+ test_name='FetchTokenThrowsWithWrongState',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2CloudStorageClientTest',
+ test_name='BuildOAuth2AuthorizationRequestUrlWorks',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.SecureStringExtensionsTest',
+ test_name='AreEqualsWorksCorrectly',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='EncryptBeforeSerializationRespectsNullProperties',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'FtpCloudStorageClientTest',
+ test_name='ThrowsWithInvalidPassword',
+ result='skipped',
+ message='Too many consecutive fails seems to block an FTP server.',
+ content='Too many consecutive fails seems to block an FTP server.',
+ time=1.31e-05
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageCredentialsTest',
+ test_name='AreEqualWorksWithDifferentPassword',
+ result='success',
+ message=None,
+ content=None,
+ time=0.007
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageTokenTest',
+ test_name='AreEqualWorksWithNullDate',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.'
+ 'SerializeableCloudStorageCredentialsTest',
+ test_name='SerializedXmlCanBeReadBack',
+ result='success',
+ message=None,
+ content=None,
+ time=0.016
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.OAuth2UtilsTest',
+ test_name='BuildAuthorizationRequestUrlUsesCodeVerifier',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.SecureStringExtensionsTest',
+ test_name='CorrectlyConvertsSecureStringToUtf8Bytes',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageProviders.'
+ 'DropboxCloudStorageClientTest',
+ test_name='ReallyDoRefreshToken',
+ result='skipped',
+ message='Refreshes a real token',
+ content='Refreshes a real token',
+ time=1.2e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.OAuth2.AuthorizationResponseErrorTest',
+ test_name='ParsesUnknownErrorCodeCorrectly',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='nunit/SilentNotes.trx',
+ test_file=None,
+ line=None,
+ class_name='VanillaCloudStorageClientTest.CloudStorageTokenTest',
+ test_name='AreEqualWorksWithSameContent',
+ result='success',
+ message=None,
+ content=None,
+ time=1e-07
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/trx/nunit/SilentNotes.trx b/python/test/files/trx/nunit/SilentNotes.trx
new file mode 100644
index 00000000..7dbc3c28
--- /dev/null
+++ b/python/test/files/trx/nunit/SilentNotes.trx
@@ -0,0 +1,609 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/python/test/files/trx/xunit/dotnet-trx.junit-xml b/python/test/files/trx/xunit/dotnet-trx.junit-xml
new file mode 100644
index 00000000..f0632825
--- /dev/null
+++ b/python/test/files/trx/xunit/dotnet-trx.junit-xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ Assert.True() Failure
+Expected: True
+Actual: False at DotnetTests.XUnitTests.CalculatorTests.Theory_With_Custom_Name(Int32 i) in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 67
+
+
+
+
+
+
+
+ System.DivideByZeroException : Attempted to divide by zero. at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.Unit\Calculator.cs:line 9
+ at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 33
+
+
+ System.Exception : Test at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 39
+
+
+ Assert.Equal() Failure
+Expected: 3
+Actual: 2 at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 27
+
+
+
+ Assert.True() Failure
+Expected: True
+Actual: False at DotnetTests.XUnitTests.CalculatorTests.Is_Even_Number(Int32 i) in C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs:line 59
+
+
+
diff --git a/python/test/files/trx/xunit/dotnet-trx.results b/python/test/files/trx/xunit/dotnet-trx.results
new file mode 100644
index 00000000..bc6c378e
--- /dev/null
+++ b/python/test/files/trx/xunit/dotnet-trx.results
@@ -0,0 +1,152 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=11,
+ suite_skipped=1,
+ suite_failures=5,
+ suite_errors=0,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Timeout_Test',
+ result='success',
+ message=None,
+ content=None,
+ time=0.1084258
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Passing_Test',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001365
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Should be even number(i: 3)',
+ result='failure',
+ message='Assert.True() Failure\r\nExpected: True\r\nActual: False',
+ content='Assert.True() Failure\r\nExpected: True\r\nActual: False at '
+ 'DotnetTests.XUnitTests.CalculatorTests.Theory_With_Custom_Name(Int32 '
+ 'i) in '
+ 'C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTe'
+ 'sts.XUnitTests\\CalculatorTests.cs:line 67',
+ time=0.0006537
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Skipped_Test',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Custom Name',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0001371
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Should be even number(i: 2)',
+ result='success',
+ message=None,
+ content=None,
+ time=9.7e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Exception_In_TargetTest',
+ result='failure',
+ message='System.DivideByZeroException : Attempted to divide by zero.',
+ content='System.DivideByZeroException : Attempted to divide by zero. at '
+ 'DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) in '
+ 'C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTe'
+ 'sts.Unit\\Calculator.cs:line 9\r\n at '
+ 'DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() in '
+ 'C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTe'
+ 'sts.XUnitTests\\CalculatorTests.cs:line 33',
+ time=0.0008377
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Exception_In_Test',
+ result='failure',
+ message='System.Exception : Test',
+ content='System.Exception : Test at '
+ 'DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() in '
+ 'C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTe'
+ 'sts.XUnitTests\\CalculatorTests.cs:line 39',
+ time=0.0025175
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Failing_Test',
+ result='failure',
+ message='Assert.Equal() Failure\r\nExpected: 3\r\nActual: 2',
+ content='Assert.Equal() Failure\r\nExpected: 3\r\nActual: 2 at '
+ 'DotnetTests.XUnitTests.CalculatorTests.Failing_Test() in '
+ 'C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTe'
+ 'sts.XUnitTests\\CalculatorTests.cs:line 27',
+ time=0.0038697
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Is_Even_Number(i: 2)',
+ result='success',
+ message=None,
+ content=None,
+ time=7.8e-06
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/dotnet-trx.trx',
+ test_file=None,
+ line=None,
+ class_name='DotnetTests.XUnitTests.CalculatorTests',
+ test_name='Is_Even_Number(i: 3)',
+ result='failure',
+ message='Assert.True() Failure\r\nExpected: True\r\nActual: False',
+ content='Assert.True() Failure\r\nExpected: True\r\nActual: False at '
+ 'DotnetTests.XUnitTests.CalculatorTests.Is_Even_Number(Int32 i) in '
+ 'C:\\Users\\Michal\\Workspace\\dorny\\test-reporter\\reports\\dotnet\\DotnetTe'
+ 'sts.XUnitTests\\CalculatorTests.cs:line 59',
+ time=0.0004141
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/trx/xunit/dotnet-trx.trx b/python/test/files/trx/xunit/dotnet-trx.trx
new file mode 100644
index 00000000..bf112b85
--- /dev/null
+++ b/python/test/files/trx/xunit/dotnet-trx.trx
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [xUnit.net 00:00:00.39] DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test [FAIL]
+
+
+ [xUnit.net 00:00:00.51] DotnetTests.XUnitTests.CalculatorTests.Failing_Test [FAIL]
+
+
+ [xUnit.net 00:00:00.51] Should be even number(i: 3) [FAIL]
+
+
+ [xUnit.net 00:00:00.51] DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest [FAIL]
+
+
+ [xUnit.net 00:00:00.51] DotnetTests.XUnitTests.CalculatorTests.Is_Even_Number(i: 3) [FAIL]
+
+
+ [xUnit.net 00:00:00.54] DotnetTests.XUnitTests.CalculatorTests.Skipped_Test [SKIP]
+
+
+
+
\ No newline at end of file
diff --git a/python/test/files/trx/xunit/xUnit-net461-sample.junit-xml b/python/test/files/trx/xunit/xUnit-net461-sample.junit-xml
new file mode 100644
index 00000000..794d427f
--- /dev/null
+++ b/python/test/files/trx/xunit/xUnit-net461-sample.junit-xml
@@ -0,0 +1,24 @@
+
+
+
+
+ Assert.Equal() Failure
+Expected: False
+Actual: True at SampleProject.xUnit.TestServiceTests.TestTheory(Boolean expected) in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.xUnit\TestServiceTests.cs:line 29
+
+
+ Assert.True() Failure
+Expected: True
+Actual: False at SampleProject.xUnit.TestServiceTests.FailTest() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.xUnit\TestServiceTests.cs:line 65
+
+
+
+
+
+ System.Exception : Pretty good exception at SampleProject.TestService.GetException() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject\TestService.cs:line 19
+ at SampleProject.xUnit.TestServiceTests.TestThrowingException() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.xUnit\TestServiceTests.cs:line 54
+
+
+
+
+
diff --git a/python/test/files/trx/xunit/xUnit-net461-sample.results b/python/test/files/trx/xunit/xUnit-net461-sample.results
new file mode 100644
index 00000000..f9bfb85a
--- /dev/null
+++ b/python/test/files/trx/xunit/xUnit-net461-sample.results
@@ -0,0 +1,90 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=6,
+ suite_skipped=1,
+ suite_failures=3,
+ suite_errors=0,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='TestTheory(expected: False)',
+ result='failure',
+ message='Assert.Equal() Failure\r\nExpected: False\r\nActual: True',
+ content='Assert.Equal() Failure\r\nExpected: False\r\nActual: True at '
+ 'SampleProject.xUnit.TestServiceTests.TestTheory(Boolean expected) in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.xUnit'
+ '\\TestServiceTests.cs:line 29',
+ time=0.02
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='FailTest',
+ result='failure',
+ message='Assert.True() Failure\r\nExpected: True\r\nActual: False',
+ content='Assert.True() Failure\r\nExpected: True\r\nActual: False at '
+ 'SampleProject.xUnit.TestServiceTests.FailTest() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.xUnit'
+ '\\TestServiceTests.cs:line 65',
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='SkipTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='TestThrowingException',
+ result='failure',
+ message='System.Exception : Pretty good exception',
+ content='System.Exception : Pretty good exception at '
+ 'SampleProject.TestService.GetException() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject\\TestService'
+ '.cs:line 19\r\n at '
+ 'SampleProject.xUnit.TestServiceTests.TestThrowingException() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.xUnit'
+ '\\TestServiceTests.cs:line 54',
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='TestTheory(expected: True)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.025
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-net461-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='PassingTest',
+ result='success',
+ message=None,
+ content=None,
+ time=0.001
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/trx/xunit/xUnit-net461-sample.trx b/python/test/files/trx/xunit/xUnit-net461-sample.trx
new file mode 100644
index 00000000..53711428
--- /dev/null
+++ b/python/test/files/trx/xunit/xUnit-net461-sample.trx
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [xUnit.net 00:00:01.01] SampleProject.xUnit.TestServiceTests.TestTheory(expected: False) [FAIL]
+
+
+ [xUnit.net 00:00:01.01] SampleProject.xUnit.TestServiceTests.SkipTest [SKIP]
+
+
+ [xUnit.net 00:00:01.24] SampleProject.xUnit.TestServiceTests.TestThrowingException [FAIL]
+
+
+ [xUnit.net 00:00:01.25] SampleProject.xUnit.TestServiceTests.FailTest [FAIL]
+
+
+
+
\ No newline at end of file
diff --git a/python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.junit-xml b/python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.junit-xml
new file mode 100644
index 00000000..78f5e1b6
--- /dev/null
+++ b/python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.junit-xml
@@ -0,0 +1,24 @@
+
+
+
+
+ Assert.True() Failure
+Expected: True
+Actual: False at SampleProject.xUnit.TestServiceTests.FailTest() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.xUnit\TestServiceTests.cs:line 65
+
+
+ Assert.Equal() Failure
+Expected: False
+Actual: True at SampleProject.xUnit.TestServiceTests.TestTheory(Boolean expected) in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.xUnit\TestServiceTests.cs:line 29
+
+
+
+
+
+
+
+ System.Exception : Pretty good exception at SampleProject.TestService.GetException() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject\TestService.cs:line 19
+ at SampleProject.xUnit.TestServiceTests.TestThrowingException() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.xUnit\TestServiceTests.cs:line 54
+
+
+
diff --git a/python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.results b/python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.results
new file mode 100644
index 00000000..65c64135
--- /dev/null
+++ b/python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.results
@@ -0,0 +1,90 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=6,
+ suite_skipped=1,
+ suite_failures=3,
+ suite_errors=0,
+ suite_time=0,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='FailTest',
+ result='failure',
+ message='Assert.True() Failure\r\nExpected: True\r\nActual: False',
+ content='Assert.True() Failure\r\nExpected: True\r\nActual: False at '
+ 'SampleProject.xUnit.TestServiceTests.FailTest() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.xUnit'
+ '\\TestServiceTests.cs:line 65',
+ time=0.0011482
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='TestTheory(expected: False)',
+ result='failure',
+ message='Assert.Equal() Failure\r\nExpected: False\r\nActual: True',
+ content='Assert.Equal() Failure\r\nExpected: False\r\nActual: True at '
+ 'SampleProject.xUnit.TestServiceTests.TestTheory(Boolean expected) in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.xUnit'
+ '\\TestServiceTests.cs:line 29',
+ time=0.0024407
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='SkipTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.001
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='PassingTest',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0008798
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='TestTheory(expected: True)',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0056919
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='xunit/xUnit-netcoreapp3.1-sample.trx',
+ test_file=None,
+ line=None,
+ class_name='SampleProject.xUnit.TestServiceTests',
+ test_name='TestThrowingException',
+ result='failure',
+ message='System.Exception : Pretty good exception',
+ content='System.Exception : Pretty good exception at '
+ 'SampleProject.TestService.GetException() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject\\TestService'
+ '.cs:line 19\r\n at '
+ 'SampleProject.xUnit.TestServiceTests.TestThrowingException() in '
+ 'C:\\Dev\\LiquidTestReports\\test\\SampleProject\\SampleProject.Tests.xUnit'
+ '\\TestServiceTests.cs:line 54',
+ time=0.000522
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.trx b/python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.trx
new file mode 100644
index 00000000..a2bb57bc
--- /dev/null
+++ b/python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.trx
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [xUnit.net 00:00:00.55] SampleProject.xUnit.TestServiceTests.TestTheory(expected: False) [FAIL]
+
+
+ [xUnit.net 00:00:00.56] SampleProject.xUnit.TestServiceTests.SkipTest [SKIP]
+
+
+ [xUnit.net 00:00:00.56] SampleProject.xUnit.TestServiceTests.TestThrowingException [FAIL]
+
+
+ [xUnit.net 00:00:00.56] SampleProject.xUnit.TestServiceTests.FailTest [FAIL]
+
+
+
+
\ No newline at end of file
diff --git a/python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.junit-xml b/python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.junit-xml
new file mode 100644
index 00000000..6ca34d1a
--- /dev/null
+++ b/python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.junit-xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+ UTA007: la firma del método CompareTest definido en la clase Prueba_Sistema.SIARAlgorithmTest no es correcta. El método de prueba marcado con el atributo [TestMethod] debe ser no estático, público, no debe devolver ningún valor ni tomar ningún parámetro. Por ejemplo: public void Test.Class1.Test().
+
+
+
+ El método de prueba Prueba_Sistema.SIARAlgorithmTest.EST_INTER_TEMPTest produjo la excepción:
+System.ArgumentOutOfRangeException: El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección.
+Nombre del parámetro: index en System.ThrowHelper.ThrowArgumentOutOfRangeException()
+ en System.Collections.Generic.List`1.set_Item(Int32 index, T value)
+ en TMC.Components.TemperatureControl.SIARAlgorithm.EST_INTER_TEMP(Double TAMP, Int32 TEXTERN) en E:\TMC\TMC\Components\TemperatureControl\SIARAlgorithms.cs:línea 363
+ en Prueba_Sistema.SIARAlgorithmTest.EST_INTER_TEMPTest() en E:\TMC\Prueba_Sistema\SIARAlgorithmTest.cs:línea 199
+
+
+
+ El método de prueba Prueba_Sistema.SIARAlgorithmTest.EST_LAMB_TEMPTest produjo la excepción:
+System.ArgumentOutOfRangeException: El índice estaba fuera del intervalo. Debe ser un valor no negativo e inferior al tamaño de la colección.
+Nombre del parámetro: index en System.ThrowHelper.ThrowArgumentOutOfRangeException()
+ en System.Collections.Generic.List`1.get_Item(Int32 index)
+ en TMC.Components.TemperatureControl.SIARAlgorithm.EST_LAMB_TEMP(Double TINTPP, Double TAMP, Int32 TEXTERN, Int32 CRPBuscar) en E:\TMC\TMC\Components\TemperatureControl\SIARAlgorithms.cs:línea 474
+ en Prueba_Sistema.SIARAlgorithmTest.EST_LAMB_TEMPTest() en E:\TMC\Prueba_Sistema\SIARAlgorithmTest.cs:línea 217
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.results b/python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.results
new file mode 100644
index 00000000..31a6be70
--- /dev/null
+++ b/python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.results
@@ -0,0 +1,326 @@
+publish.unittestresults.ParsedUnitTestResults(
+ files=1,
+ errors=[],
+ suites=1,
+ suite_tests=25,
+ suite_skipped=21,
+ suite_failures=2,
+ suite_errors=0,
+ suite_time=26,
+ cases=[
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.UnitTest1',
+ test_name='TestMethod1',
+ result='success',
+ message=None,
+ content=None,
+ time=0.0099709
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='CompareTest',
+ result='skipped',
+ message='UTA007: la firma del método CompareTest definido en la clase '
+ 'Prueba_Sistema.SIARAlgorithmTest no es correcta. El método de prueba '
+ 'marcado con el atributo [TestMethod] debe ser no estático, público, '
+ 'no debe devolver ningún valor ni tomar ningún parámetro. Por '
+ 'ejemplo: public void Test.Class1.Test().',
+ content='UTA007: la firma del método CompareTest definido en la clase '
+ 'Prueba_Sistema.SIARAlgorithmTest no es correcta. El método de prueba '
+ 'marcado con el atributo [TestMethod] debe ser no estático, público, '
+ 'no debe devolver ningún valor ni tomar ningún parámetro. Por '
+ 'ejemplo: public void Test.Class1.Test().',
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='ClearListTest',
+ result='success',
+ message=None,
+ content=None,
+ time=0.4619928
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='EST_INTER_TEMPTest',
+ result='failure',
+ message='El método de prueba '
+ 'Prueba_Sistema.SIARAlgorithmTest.EST_INTER_TEMPTest produjo la '
+ 'excepción: \nSystem.ArgumentOutOfRangeException: El índice estaba '
+ 'fuera del intervalo. Debe ser un valor no negativo e inferior al '
+ 'tamaño de la colección.\nNombre del parámetro: index',
+ content='El método de prueba '
+ 'Prueba_Sistema.SIARAlgorithmTest.EST_INTER_TEMPTest produjo la '
+ 'excepción: \nSystem.ArgumentOutOfRangeException: El índice estaba '
+ 'fuera del intervalo. Debe ser un valor no negativo e inferior al '
+ 'tamaño de la colección.\nNombre del parámetro: index en '
+ 'System.ThrowHelper.ThrowArgumentOutOfRangeException()\n en '
+ 'System.Collections.Generic.List`1.set_Item(Int32 index, T value)\n '
+ 'en '
+ 'TMC.Components.TemperatureControl.SIARAlgorithm.EST_INTER_TEMP(Double'
+ ' TAMP, Int32 TEXTERN) en '
+ 'E:\\TMC\\TMC\\Components\\TemperatureControl\\SIARAlgorithms.cs:línea'
+ ' 363\n en Prueba_Sistema.SIARAlgorithmTest.EST_INTER_TEMPTest() en '
+ 'E:\\TMC\\Prueba_Sistema\\SIARAlgorithmTest.cs:línea 199\n',
+ time=19.039413
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='EST_LAMB_TEMPTest',
+ result='failure',
+ message='El método de prueba '
+ 'Prueba_Sistema.SIARAlgorithmTest.EST_LAMB_TEMPTest produjo la '
+ 'excepción: \nSystem.ArgumentOutOfRangeException: El índice estaba '
+ 'fuera del intervalo. Debe ser un valor no negativo e inferior al '
+ 'tamaño de la colección.\nNombre del parámetro: index',
+ content='El método de prueba '
+ 'Prueba_Sistema.SIARAlgorithmTest.EST_LAMB_TEMPTest produjo la '
+ 'excepción: \nSystem.ArgumentOutOfRangeException: El índice estaba '
+ 'fuera del intervalo. Debe ser un valor no negativo e inferior al '
+ 'tamaño de la colección.\nNombre del parámetro: index en '
+ 'System.ThrowHelper.ThrowArgumentOutOfRangeException()\n en '
+ 'System.Collections.Generic.List`1.get_Item(Int32 index)\n en '
+ 'TMC.Components.TemperatureControl.SIARAlgorithm.EST_LAMB_TEMP(Double '
+ 'TINTPP, Double TAMP, Int32 TEXTERN, Int32 CRPBuscar) en '
+ 'E:\\TMC\\TMC\\Components\\TemperatureControl\\SIARAlgorithms.cs:línea'
+ ' 474\n en Prueba_Sistema.SIARAlgorithmTest.EST_LAMB_TEMPTest() en '
+ 'E:\\TMC\\Prueba_Sistema\\SIARAlgorithmTest.cs:línea 217\n',
+ time=2.5091335
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='EST_SEG_TEMPTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=4.6492659
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='GetAlphaExternoTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='GetComposicionTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='GetDiseñoTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='GetSpesorTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='LamdaTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='SiSParcialTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='CostoTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='EspesorTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='FlujoCaloricoTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='MaterialesTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='PerdidaTotalTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='PesoTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='ProjectTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='ProjectObjectTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='SpesorTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='TDataSetTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='TempExternaTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='VolumenTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ ),
+ publish.unittestresults.UnitTestCase(
+ result_file='yami_YAMILEX 2015-10-24 04_18_59.trx',
+ test_file=None,
+ line=None,
+ class_name='Prueba_Sistema.SIARAlgorithmTest',
+ test_name='SIARAlgorithmConstructorTest',
+ result='skipped',
+ message=None,
+ content=None,
+ time=0.0
+ )
+ ]
+)
\ No newline at end of file
diff --git a/python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.trx b/python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.trx
new file mode 100755
index 00000000..7967f273
--- /dev/null
+++ b/python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.trx
@@ -0,0 +1,249 @@
+
+
+
+ Esta es la configuración de pruebas predeterminada para una ejecución de pruebas local.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ El proceso del host de pruebas terminó inesperadamente.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/python/test/files/update_expectations.sh b/python/test/files/update_expectations.sh
new file mode 100755
index 00000000..1af705b0
--- /dev/null
+++ b/python/test/files/update_expectations.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+base=$(dirname "$0")
+
+python $base/../test_junit.py
+python $base/../test_trx.py
+
diff --git a/python/test/requirements.txt b/python/test/requirements.txt
index 16111baa..e4db7ef0 100644
--- a/python/test/requirements.txt
+++ b/python/test/requirements.txt
@@ -1,6 +1,7 @@
flask
mock
+prettyprinter
pytest
pyyaml>=5.1
requests
-urllib3<2.0.0
\ No newline at end of file
+urllib3<2.0.0
diff --git a/python/test/test_action_script.py b/python/test/test_action_script.py
index 8f118ccf..ccd5f4ae 100644
--- a/python/test/test_action_script.py
+++ b/python/test/test_action_script.py
@@ -1,6 +1,7 @@
import json
import logging
import os
+import pathlib
import sys
import tempfile
import unittest
@@ -13,8 +14,10 @@
from publish.github_action import GithubAction
from publish.unittestresults import ParsedUnitTestResults, ParseError
from publish_unit_test_results import get_conclusion, get_commit_sha, get_var, \
- get_settings, get_annotations_config, Settings, get_files, throttle_gh_request_raw, is_float, main
-from test import chdir
+ get_settings, get_annotations_config, Settings, get_files, throttle_gh_request_raw, is_float, parse_files, main
+from test_utils import chdir
+
+test_files_path = pathlib.Path(__file__).parent / 'files'
event = dict(pull_request=dict(head=dict(sha='event_sha')))
@@ -128,6 +131,13 @@ def test_get_var(self):
self.assertEqual(get_var('NAME', dict(INPUT_NAME='precedence', NAME='value')), 'precedence')
self.assertIsNone(get_var('NAME', dict(NAME='')))
+ @classmethod
+ def get_settings_no_default_files(cls,
+ junit_files_glob=None,
+ trx_files_glob=None) -> Settings:
+ return cls.get_settings(junit_files_glob=junit_files_glob,
+ trx_files_glob=trx_files_glob)
+
@staticmethod
def get_settings(token='token',
api_url='http://github.api.url/',
@@ -141,6 +151,7 @@ def get_settings(token='token',
fail_on_errors=True,
fail_on_failures=True,
junit_files_glob='junit-files',
+ trx_files_glob='trx-files',
time_factor=1.0,
check_name='check name',
comment_title='title',
@@ -157,7 +168,7 @@ def get_settings(token='token',
seconds_between_github_reads=1.5,
seconds_between_github_writes=2.5,
json_file=None,
- json_thousands_separator=punctuation_space):
+ json_thousands_separator=punctuation_space) -> Settings:
return Settings(
token=token,
api_url=api_url,
@@ -173,6 +184,7 @@ def get_settings(token='token',
fail_on_errors=fail_on_errors,
fail_on_failures=fail_on_failures,
junit_files_glob=junit_files_glob,
+ trx_files_glob=trx_files_glob,
time_factor=time_factor,
check_name=check_name,
comment_title=comment_title,
@@ -234,16 +246,28 @@ def test_get_settings_github_retries(self):
self.do_test_get_settings(GITHUB_RETRIES=retries, expected=None)
self.assertIn(f'GITHUB_RETRIES must be a positive integer or 0: {retries}', re.exception.args)
+ def test_get_settings_any_files(self):
+ for junit in [None, 'junit-file']:
+ for trx in [None, 'trx-file']:
+ with self.subTest(junit=junit, trx=trx):
+ any_flavour_set = any([flavour is not None for flavour in [junit, trx]])
+ expected = self.get_settings(junit_files_glob=junit if any_flavour_set else '*.xml',
+ trx_files_glob=trx)
+ warnings = None if any_flavour_set else 'At least one of the *_FILES options has to be set! ' \
+ 'Falling back to deprecated default "*.xml"'
+
+ self.do_test_get_settings(JUNIT_FILES=junit, TRX_FILES=trx, expected=expected, warning=warnings)
+
def test_get_settings_junit_files(self):
- self.do_test_get_settings(JUNIT_FILES='file', expected=self.get_settings(junit_files_glob='file'))
- self.do_test_get_settings(JUNIT_FILES='file\nfile2', expected=self.get_settings(junit_files_glob='file\nfile2'))
- self.do_test_get_settings(JUNIT_FILES=None, expected=self.get_settings(junit_files_glob='*.xml'))
+ self.do_test_get_settings_no_default_files(JUNIT_FILES='file', expected=self.get_settings_no_default_files(junit_files_glob='file'))
+ self.do_test_get_settings_no_default_files(JUNIT_FILES='file\nfile2', expected=self.get_settings_no_default_files(junit_files_glob='file\nfile2'))
+ self.do_test_get_settings_no_default_files(JUNIT_FILES=None, expected=self.get_settings_no_default_files(junit_files_glob='*.xml'), warning='At least one of the *_FILES options has to be set! Falling back to deprecated default "*.xml"')
# this is the deprecated version of JUNIT_FILES
- self.do_test_get_settings(JUNIT_FILES='junit-file', FILES='file', expected=self.get_settings(junit_files_glob='junit-file'), warning='Option FILES is deprecated, please use JUNIT_FILES instead!')
- self.do_test_get_settings(JUNIT_FILES=None, FILES='file', expected=self.get_settings(junit_files_glob='file'), warning='Option FILES is deprecated, please use JUNIT_FILES instead!')
- self.do_test_get_settings(JUNIT_FILES=None, FILES='file\nfile2', expected=self.get_settings(junit_files_glob='file\nfile2'), warning='Option FILES is deprecated, please use JUNIT_FILES instead!')
- self.do_test_get_settings(JUNIT_FILES=None, FILES=None, expected=self.get_settings(junit_files_glob='*.xml'))
+ self.do_test_get_settings_no_default_files(JUNIT_FILES='junit-file', FILES='file', expected=self.get_settings_no_default_files(junit_files_glob='junit-file'), warning='Option FILES is deprecated, please use JUNIT_FILES instead!')
+ self.do_test_get_settings_no_default_files(JUNIT_FILES=None, FILES='file', expected=self.get_settings_no_default_files(junit_files_glob='file'), warning=['Option FILES is deprecated, please use JUNIT_FILES instead!', 'At least one of the *_FILES options has to be set! Falling back to deprecated default "*.xml"'])
+ self.do_test_get_settings_no_default_files(JUNIT_FILES=None, FILES='file\nfile2', expected=self.get_settings_no_default_files(junit_files_glob='file\nfile2'), warning=['Option FILES is deprecated, please use JUNIT_FILES instead!', 'At least one of the *_FILES options has to be set! Falling back to deprecated default "*.xml"'])
+ self.do_test_get_settings_no_default_files(JUNIT_FILES=None, FILES=None, expected=self.get_settings_no_default_files(junit_files_glob='*.xml'), warning='At least one of the *_FILES options has to be set! Falling back to deprecated default "*.xml"')
def test_get_settings_time_unit(self):
self.do_test_get_settings(TIME_UNIT=None, expected=self.get_settings(time_factor=1.0))
@@ -448,6 +472,19 @@ def test_get_settings_missing_github_vars(self):
self.do_test_get_settings(GITHUB_REPOSITORY=None)
self.assertEqual('GitHub repository must be provided via action input or environment variable GITHUB_REPOSITORY', str(re.exception))
+ def do_test_get_settings_no_default_files(self,
+ event: dict = {},
+ gha: Optional[GithubAction] = None,
+ warning: Optional[Union[str, List[str]]] = None,
+ expected: Settings = get_settings.__func__(),
+ **kwargs):
+ options = dict(**kwargs)
+ for flavour in ['JUNIT', 'TRX']:
+ if f'{flavour}_FILES' not in kwargs:
+ options[f'{flavour}_FILES'] = None
+
+ self.do_test_get_settings(event, gha, warning, expected, **options)
+
def do_test_get_settings(self,
event: dict = {},
gha: Optional[GithubAction] = None,
@@ -476,6 +513,7 @@ def do_test_get_settings(self,
GITHUB_REPOSITORY='repo',
COMMIT='commit', # defaults to get_commit_sha(event, event_name)
JUNIT_FILES='junit-files',
+ TRX_FILES='trx-files',
COMMENT_TITLE='title', # defaults to check name
COMMENT_MODE='always',
JOB_SUMMARY='true',
@@ -756,6 +794,52 @@ def test_get_files_with_mock(self):
self.assertEqual([], files)
self.assertEqual([mock.call('*.txt', recursive=True), mock.call('file1.txt', recursive=True)], m.call_args_list)
+ def test_parse_files(self):
+ gha = mock.MagicMock()
+ settings = self.get_settings(junit_files_glob=str(test_files_path / 'junit-xml' / '**' / '*.xml'),
+ trx_files_glob=str(test_files_path / 'trx' / '**' / '*.trx'))
+ actual = parse_files(settings, gha)
+
+ gha.warning.assert_not_called()
+ gha.error.assert_not_called()
+
+ self.assertEqual(35, actual.files)
+ self.assertEqual(4, len(actual.errors))
+ self.assertEqual(32, actual.suites)
+ self.assertEqual(1397, actual.suite_tests)
+ self.assertEqual(96, actual.suite_skipped)
+ self.assertEqual(48, actual.suite_failures)
+ self.assertEqual(7, actual.suite_errors)
+ self.assertEqual(2392, actual.suite_time)
+ self.assertEqual(1387, len(actual.cases))
+ self.assertEqual('commit', actual.commit)
+
+ def test_parse_files_no_matches(self):
+ gha = mock.MagicMock()
+ with tempfile.TemporaryDirectory() as path:
+ missing_junit = str(pathlib.Path(path) / 'junit-not-there')
+ missing_trx = str(pathlib.Path(path) / 'trx-not-there')
+ settings = self.get_settings(junit_files_glob=missing_junit,
+ trx_files_glob=missing_trx)
+ actual = parse_files(settings, gha)
+
+ gha.warning.assert_has_calls([
+ mock.call(f'Could not find any files for {missing_junit}'),
+ mock.call(f'Could not find any files for {missing_trx}')
+ ])
+ gha.error.assert_not_called()
+
+ self.assertEqual(0, actual.files)
+ self.assertEqual(0, len(actual.errors))
+ self.assertEqual(0, actual.suites)
+ self.assertEqual(0, actual.suite_tests)
+ self.assertEqual(0, actual.suite_skipped)
+ self.assertEqual(0, actual.suite_failures)
+ self.assertEqual(0, actual.suite_errors)
+ self.assertEqual(0, actual.suite_time)
+ self.assertEqual(0, len(actual.cases))
+ self.assertEqual('commit', actual.commit)
+
def test_throttle_gh_request_raw(self):
logging.root.level = logging.getLevelName('INFO')
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)5s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S %z')
@@ -840,8 +924,12 @@ def do_raise(*args):
m.side_effect = do_raise
main(settings, gha)
- gha.warning.assert_called_once_with('This action is running on a pull_request event for a fork repository. '
- 'It cannot do anything useful like creating check runs or pull request '
- 'comments. To run the action on fork repository pull requests, see '
- 'https://github.com/EnricoMi/publish-unit-test-result-action/blob/v1.20'
- '/README.md#support-fork-repositories-and-dependabot-branches')
+ gha.warning.assert_has_calls([
+ mock.call('This action is running on a pull_request event for a fork repository. '
+ 'It cannot do anything useful like creating check runs or pull request '
+ 'comments. To run the action on fork repository pull requests, see '
+ 'https://github.com/EnricoMi/publish-unit-test-result-action/blob/v1.20'
+ '/README.md#support-fork-repositories-and-dependabot-branches'),
+ mock.call('At least one of the *_FILES options has to be set! '
+ 'Falling back to deprecated default "*.xml"')
+ ], any_order=True)
diff --git a/python/test/test_junit.py b/python/test/test_junit.py
index 11a21574..b997aee8 100644
--- a/python/test/test_junit.py
+++ b/python/test/test_junit.py
@@ -1,14 +1,26 @@
import pathlib
+import re
+import sys
import unittest
from distutils.version import LooseVersion
-from typing import Optional
+from glob import glob
+from typing import Optional, Union, List
-from junitparser import JUnitXml, Element, version
+import junitparser
+import prettyprinter as pp
+from junitparser import JUnitXml, Element
+from lxml import etree
-from publish.junit import parse_junit_xml_files, get_results, get_result, get_content, get_message, Disabled
-from publish.unittestresults import ParsedUnitTestResults, UnitTestCase, ParseError
+sys.path.append(str(pathlib.Path(__file__).resolve().parent.parent))
+sys.path.append(str(pathlib.Path(__file__).resolve().parent))
-test_files_path = pathlib.Path(__file__).parent / 'files'
+from publish.junit import parse_junit_xml_files, process_junit_xml_elems, get_results, get_result, get_content, \
+ get_message, Disabled, JUnitTree
+from publish.unittestresults import ParsedUnitTestResults, UnitTestCase
+from test_utils import temp_locale
+
+test_files_path = pathlib.Path(__file__).parent / 'files' / 'junit-xml'
+pp.install_extras()
class TestElement(Element):
@@ -25,417 +37,107 @@ def text(self):
return self._elem.text
-class TestJunit(unittest.TestCase):
+class JUnitXmlParseTest:
+ @property
+ def test(self):
+ raise NotImplementedError()
- def test_parse_junit_xml_files_with_no_files(self):
- self.assertEqual(
- parse_junit_xml_files([]),
- ParsedUnitTestResults(
- files=0,
- errors=[],
- suites=0,
- suite_tests=0,
- suite_skipped=0,
- suite_failures=0,
- suite_errors=0,
- suite_time=0,
- cases=[]
- ))
+ @staticmethod
+ def _test_files_path() -> pathlib.Path:
+ raise NotImplementedError()
- def test_parse_junit_xml_files_with_spark_diff_file(self):
- result_file = str(test_files_path / 'TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml')
- self.assertEqual(
- parse_junit_xml_files([result_file]),
- ParsedUnitTestResults(
- files=1,
- errors=[],
- suites=1,
- suite_tests=5,
- suite_skipped=0,
- suite_failures=0,
- suite_errors=0,
- suite_time=2,
- cases=[
- UnitTestCase(
- class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
- result_file=result_file,
- test_file=None,
- line=None,
- test_name='diff options with empty diff column name',
- result='success',
- content=None,
- message=None,
- time=0.259
- ),
- UnitTestCase(
- class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
- result_file=result_file,
- test_name='diff options left and right prefixes',
- test_file=None,
- line=None,
- result='success',
- content=None,
- message=None,
- time=1.959
- ),
- UnitTestCase(
- class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
- result_file=result_file,
- test_name='diff options diff value',
- test_file=None,
- line=None,
- result='success',
- content=None,
- message=None,
- time=0.002
- ),
- UnitTestCase(
- class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
- result_file=result_file,
- test_name='diff options with change column name same as diff column',
- test_file=None,
- line=None,
- result='success',
- content=None,
- message=None,
- time=0.002
- ),
- UnitTestCase(
- class_name='uk.co.gresearch.spark.diff.DiffOptionsSuite',
- result_file=result_file,
- test_name='fluent methods of diff options',
- test_file=None,
- line=None,
- result='success',
- content=None,
- message=None,
- time=0.001
- )
- ]
- ))
+ @staticmethod
+ def get_test_files() -> List[str]:
+ raise NotImplementedError()
- def test_parse_junit_xml_files_with_horovod_file(self):
- result_file = str(test_files_path / 'junit.mpi.integration.xml')
- self.assertEqual(
- parse_junit_xml_files([result_file]),
- ParsedUnitTestResults(
- files=1,
- errors=[],
- suites=1,
- suite_tests=3,
- suite_skipped=0,
- suite_failures=0,
- suite_errors=0,
- suite_time=15,
- cases=[
- UnitTestCase(
- result_file=result_file,
- class_name='test.test_interactiverun.InteractiveRunTests',
- test_name='test_failed_run',
- test_file='test/test_interactiverun.py',
- line=78,
- result='success',
- content=None,
- message=None,
- time=9.386
- ),
- UnitTestCase(
- result_file=result_file,
- class_name='test.test_interactiverun.InteractiveRunTests',
- test_name='test_happy_run',
- test_file='test/test_interactiverun.py',
- line=35,
- result='success',
- content=None,
- message=None,
- time=4.012
- ),
- UnitTestCase(
- result_file=result_file,
- class_name='test.test_interactiverun.InteractiveRunTests',
- test_name='test_happy_run_elastic',
- test_file='test/test_interactiverun.py',
- line=63,
- result='success',
- content=None,
- message=None,
- time=1.898
- )
- ]
- ))
+ @staticmethod
+ def parse_file(filename) -> Union[JUnitTree, BaseException]:
+ raise NotImplementedError()
- def test_parse_junit_xml_files_with_spark_extension_file(self):
- result_file = str(test_files_path / 'junit.fail.xml')
- self.assertEqual(
- parse_junit_xml_files([result_file]),
- ParsedUnitTestResults(
- files=1,
- errors=[],
- suite_errors=0,
- suite_failures=1,
- suite_skipped=1,
- suite_tests=5,
- suite_time=2,
- suites=1,
- cases=[
- UnitTestCase(
- class_name='test.test_spark.SparkTests',
- content=None,
- result_file=result_file,
- test_file='test/test_spark.py',
- line=1412,
- message=None,
- result='success',
- test_name='test_check_shape_compatibility',
- time=6.435
- ),
- UnitTestCase(
- class_name='test.test_spark.SparkTests',
- content='/horovod/test/test_spark.py:1642: get_available_devices only\n'
- ' supported in Spark 3.0 and above\n'
- ' ',
- result_file=result_file,
- test_file='test/test_spark.py',
- line=1641,
- message='get_available_devices only supported in Spark 3.0 and above',
- result='skipped',
- test_name='test_get_available_devices',
- time=0.001
- ),
- UnitTestCase(
- class_name='test.test_spark.SparkTests',
- content=None,
- result_file=result_file,
- test_file='test/test_spark.py',
- line=1102,
- message=None,
- result='success',
- test_name='test_get_col_info',
- time=6.417
- ),
- UnitTestCase(
- class_name='test.test_spark.SparkTests',
- content='self = \n'
- '\n'
- ' def test_rsh_events(self):\n'
- ' > self.do_test_rsh_events(3)\n'
- '\n'
- ' test_spark.py:821:\n'
- ' _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n'
- ' test_spark.py:836: in do_test_rsh_events\n'
- ' self.do_test_rsh(command, 143, events=events)\n'
- ' test_spark.py:852: in do_test_rsh\n'
- ' self.assertEqual(expected_result, res)\n'
- ' E AssertionError: 143 != 0\n'
- ' ',
- result_file=result_file,
- test_file='test/test_spark.py',
- line=819,
- message='self = '
- ''
- ' def test_rsh_events(self): '
- '> self.do_test_rsh_events(3) '
- ' '
- 'test_spark.py:821: '
- ' _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ '
- 'test_spark.py:836: in do_test_rsh_events '
- ' self.do_test_rsh(command, 143, events=events) '
- 'test_spark.py:852: in do_test_rsh '
- ' self.assertEqual(expected_result, res) '
- 'E AssertionError: 143 != 0',
- result='failure',
- test_name='test_rsh_events',
- time=7.541
- ),
- UnitTestCase(
- class_name='test.test_spark.SparkTests',
- content=None,
- result_file=result_file,
- test_file='test/test_spark.py',
- line=813,
- message=None,
- result='success',
- test_name='test_rsh_with_non_zero_exit_code',
- time=1.514
- )
- ]
- ))
+ @staticmethod
+ def assert_expectation(test, actual, filename):
+ with open(filename, 'r', encoding='utf-8') as r:
+ expected = r.read()
+ test.assertEqual(expected, actual)
- def test_parse_junit_xml_files_with_minimal_attributes_file(self):
- result_file = str(test_files_path / 'minimal-attributes.xml')
- self.assertEqual(
- parse_junit_xml_files([result_file]),
- ParsedUnitTestResults(
- cases=[
- UnitTestCase(
- class_name='ClassName',
- content=None,
- result_file=result_file,
- test_file=None,
- line=None,
- message=None,
- result='success',
- test_name='test_name',
- time=None
- ),
- UnitTestCase(
- class_name='ClassName',
- content=None,
- result_file=result_file,
- test_file=None,
- line=None,
- message=None,
- result='skipped',
- test_name='skipped_test',
- time=None
- ),
- UnitTestCase(
- class_name='ClassName',
- content=None,
- result_file=result_file,
- test_file=None,
- line=None,
- message=None,
- result='failure',
- test_name='failed_test',
- time=None
- ),
- UnitTestCase(
- class_name='ClassName',
- content=None,
- result_file=result_file,
- test_file=None,
- line=None,
- message=None,
- result='error',
- test_name='error_test',
- time=None
- )
- ],
- files=1,
- errors=[],
- suite_errors=1,
- suite_failures=1,
- suite_skipped=1,
- suite_tests=4,
- suite_time=0,
- suites=1
- ))
+ @classmethod
+ def shorten_filename(cls, filename):
+ return filename[len(str(cls._test_files_path().resolve().as_posix())) + 1:]
- def test_parse_xunit_xml_file(self):
- result_file = str(test_files_path / 'xunit.xml')
- self.assertEqual(
- parse_junit_xml_files([result_file]),
- ParsedUnitTestResults(
- cases=[
- UnitTestCase(
- class_name=None,
- content=None,
- result_file=result_file,
- test_file=None,
- line=None,
- message=None,
- result='success',
- test_name='mytestapp.Tests.AttriubteTests.SetTestNoFeature',
- time=0.4540354
- ),
- UnitTestCase(
- class_name=None,
- content=None,
- result_file=result_file,
- test_file=None,
- line=None,
- message=None,
- result='success',
- test_name='mytestapp.Tests.AttriubteTests.GetTestNoFeature',
- time=0.0039778
- )
- ],
- files=1,
- errors=[],
- suite_errors=0,
- suite_failures=0,
- suite_skipped=0,
- suite_tests=2,
- suite_time=0,
- suites=1
- ))
+ def do_test_parse_and_process_files(self, filename: str):
+ for locale in [None, 'en_US.UTF-8', 'de_DE.UTF-8']:
+ with self.test.subTest(file=self.shorten_filename(filename), locale=locale):
+ with temp_locale(locale):
+ actual = self.parse_file(filename)
+ path = pathlib.Path(filename)
+ if isinstance(actual, BaseException):
+ expectation_path = path.parent / (path.stem + '.exception')
+ actual = self.prettify_exception(actual)
+ self.assert_expectation(self.test, actual, expectation_path)
+ else:
+ xml_expectation_path = path.parent / (path.stem + '.junit-xml')
+ actual_tree = etree.tostring(actual, encoding='utf-8', xml_declaration=True, pretty_print=True).decode('utf-8')
+ self.assert_expectation(self.test, actual_tree, xml_expectation_path)
- def test_parse_junit_xml_files_with_no_attributes_file(self):
- result_file = str(test_files_path / 'no-attributes.xml')
- self.assertEqual(
- parse_junit_xml_files([result_file]),
- ParsedUnitTestResults(
- cases=[],
- files=1,
- errors=[],
- suite_errors=1,
- suite_failures=1,
- suite_skipped=1,
- suite_tests=4,
- suite_time=0,
- suites=1
- ))
+ results_expectation_path = path.parent / (path.stem + '.results')
+ actual_results = process_junit_xml_elems([(self.shorten_filename(str(path.resolve().as_posix())), actual)])
+ self.assert_expectation(self.test, pp.pformat(actual_results, indent=2), results_expectation_path)
- def test_parse_junit_xml_files_with_empty_file(self):
- result_file = str(test_files_path / 'empty.xml')
- self.assertEqual(
- parse_junit_xml_files([result_file]),
- ParsedUnitTestResults(
- cases=[],
- files=1,
- errors=[ParseError(result_file, 'File is empty.')],
- suite_errors=0,
- suite_failures=0,
- suite_skipped=0,
- suite_tests=0,
- suite_time=0,
- suites=0
- ))
+ def test_parse_and_process_files(self):
+ for file in self.get_test_files():
+ self.do_test_parse_and_process_files(file)
- def test_parse_junit_xml_files_with_non_xml_file(self):
- result_file = test_files_path / 'non-xml.xml'
- result_filename = str(result_file)
- expected_filename = ('file:/' + result_file.absolute().as_posix()) if result_file.drive else result_file.name
- self.assertEqual(
- parse_junit_xml_files([result_filename]),
- ParsedUnitTestResults(
- files=1,
- errors=[ParseError(file=result_filename, message=f"Start tag expected, '<' not found, line 1, column 1 ({expected_filename}, line 1)")],
- suites=0,
- suite_tests=0,
- suite_skipped=0,
- suite_failures=0,
- suite_errors=0,
- suite_time=0,
- cases=[]
- ))
+ @classmethod
+ def update_expectations(cls):
+ print('updating expectations')
+ for filename in cls.get_test_files():
+ print(f'- updating {filename}')
+ actual = cls.parse_file(filename)
+ path = pathlib.Path(filename)
+ if isinstance(actual, BaseException):
+ with open(path.parent / (path.stem + '.exception'), 'w', encoding='utf-8') as w:
+ w.write(cls.prettify_exception(actual))
+ else:
+ with open(path.parent / (path.stem + '.junit-xml'), 'w', encoding='utf-8') as w:
+ xml = etree.tostring(actual, encoding='utf-8', xml_declaration=True, pretty_print=True)
+ w.write(xml.decode('utf-8'))
+ with open(path.parent / (path.stem + '.results'), 'w', encoding='utf-8') as w:
+ results = process_junit_xml_elems([(cls.shorten_filename(str(path.resolve().as_posix())), actual)])
+ w.write(pp.pformat(results, indent=2))
- def test_parse_junit_xml_files_with_corrupt_xml_file(self):
- result_file = test_files_path / 'corrupt-xml.xml'
- result_filename = str(result_file)
- expected_filename = ('file:/' + result_file.absolute().as_posix()) if result_file.drive else result_file.name
- self.assertEqual(
- parse_junit_xml_files([result_filename]),
- ParsedUnitTestResults(
- files=1,
- errors=[ParseError(file=result_filename, message=f'Premature end of data in tag skipped line 9, line 11, column 22 ({expected_filename}, line 11)')],
- suites=0,
- suite_tests=0,
- suite_skipped=0,
- suite_failures=0,
- suite_errors=0,
- suite_time=0,
- cases=[]
- ))
+ @staticmethod
+ def prettify_exception(exception) -> str:
+ exception = exception.__repr__()
+ exception = re.sub(r'\(', ': ', exception, 1)
+ exception = re.sub(r',?\s*\)$', '', exception)
+ return exception
+
+
+class TestJunit(unittest.TestCase, JUnitXmlParseTest):
+ maxDiff = None
+
+ @property
+ def test(self):
+ return self
+
+ @staticmethod
+ def _test_files_path() -> pathlib.Path:
+ return test_files_path
- def test_parse_junit_xml_files_with_non_junit_file(self):
- result_file = str(test_files_path / 'non-junit.xml')
+ @staticmethod
+ def get_test_files() -> List[str]:
+ return glob(str(test_files_path / '**' / '*.xml'), recursive=True)
+
+ @staticmethod
+ def parse_file(filename) -> Union[JUnitTree, BaseException]:
+ return list(parse_junit_xml_files([filename]))[0][1]
+
+ def test_process_parse_junit_xml_files_with_no_files(self):
self.assertEqual(
- parse_junit_xml_files([result_file]),
+ process_junit_xml_elems(parse_junit_xml_files([])),
ParsedUnitTestResults(
- files=1,
- errors=[ParseError(file=result_file, message='Invalid format.')],
+ files=0,
+ errors=[],
suites=0,
suite_tests=0,
suite_skipped=0,
@@ -445,109 +147,27 @@ def test_parse_junit_xml_files_with_non_junit_file(self):
cases=[]
))
- def test_parse_junit_xml_files_with_non_existing_file(self):
- self.assertEqual(
- parse_junit_xml_files(['files/does_not_exist.xml']),
- ParsedUnitTestResults(
- cases=[],
- files=1,
- errors=[ParseError('files/does_not_exist.xml', 'File does not exist.')],
- suite_errors=0,
- suite_failures=0,
- suite_skipped=0,
- suite_tests=0,
- suite_time=0,
- suites=0
- ))
-
# tests https://github.com/weiwei/junitparser/issues/64
def test_junitparser_locale(self):
- junit = JUnitXml.fromfile(str(test_files_path / 'junit.spark.integration.1.xml'))
+ junit = JUnitXml.fromfile(str(test_files_path / 'pytest' / 'junit.spark.integration.1.xml'))
self.assertAlmostEqual(162.933, junit.time, 3)
- @unittest.skipIf(LooseVersion(version) < LooseVersion('2.0.0'),
+ @unittest.skipIf(LooseVersion(junitparser.version) < LooseVersion('2.0.0'),
'multiple results per test case not supported by junitparser')
def test_parse_junit_xml_file_with_multiple_results(self):
- junit = parse_junit_xml_files([str(test_files_path / 'junit.multiresult.xml')])
+ junit = process_junit_xml_elems(parse_junit_xml_files([str(test_files_path / 'junit.multiresult.xml')]))
self.assertEqual(4, len(junit.cases))
self.assertEqual("error", junit.cases[0].result)
self.assertEqual("failure", junit.cases[1].result)
self.assertEqual("skipped", junit.cases[2].result)
self.assertEqual("success", junit.cases[3].result)
- def test_parse_junit_xml_file_with_disabled_tests(self):
- result_file = str(test_files_path / 'disabled.xml')
- self.assertEqual(
- parse_junit_xml_files([result_file]),
- ParsedUnitTestResults(
- cases=[UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='positive_arguments_must_produce_expected_result[0]', result='success', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='factorial_of_value_from_fixture', result='failure', message='/home/ivan/prj/tst/tests/failed/main.cpp:72: error: check_eq(3628800, 3628801)', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='factorial_of_value_from_fixture[3]', result='success', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='factorial_of_value_from_fixture[2]', result='success', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='disabled_test', result='disabled', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='positive_arguments_must_produce_expected_result', result='failure', message='/home/ivan/prj/tst/tests/failed/main.cpp:45: error: check_ne(6, 6)hello world!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='test_which_throws_unknown_exception', result='error', message='uncaught (anonymous namespace)::some_unknown_exception', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='positive_arguments_must_produce_expected_result[2]', result='failure', message='/home/ivan/prj/tst/tests/failed/main.cpp:85: error: check(false)', content=None, time=0.001),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='positive_arguments_must_produce_expected_result[3]', result='success', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='factorial_of_value_from_fixture[0]', result='failure', message='/home/ivan/prj/tst/tests/failed/main.cpp:109: error: expected 2', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='disabled_param_test[0]', result='disabled', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='disabled_param_test[1]', result='disabled', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='disabled_param_test[2]', result='disabled', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='test_which_fails_check_eq_with_custom_message', result='failure', message='/home/ivan/prj/tst/tests/failed/main.cpp:62: error: check_eq(6, 7)hello world!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='disabled_param_test[3]', result='disabled', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='positive_arguments_must_produce_expected_result[1]', result='success', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='factorial_of_value_from_fixture[1]', result='success', message=None, content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_ge_print', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:59: error: check_ge(2, 3)failed!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_ge', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:55: error: check_ge(2, 3)Hello world!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_gt_print', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:43: error: check_gt(2, 2)failed!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_lt_print', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:35: error: check_lt(2, 2)failed!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_print', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:11: error: failed!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_gt', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:39: error: check_gt(2, 2)Hello world!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:7: error: Hello world!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_le_print', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:51: error: check_le(2, 1)failed!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_eq', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:15: error: check_eq(1, 2)Hello world!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_eq_print', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:19: error: check_eq(1, 2)failed!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_le', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:47: error: check_le(2, 1)Hello world!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_ne', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:23: error: check_ne(2, 2)Hello world!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_lt', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:31: error: check_lt(2, 2)Hello world!', content=None, time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='check_ne_print', result='failure', message='/home/ivan/prj/tst/tests/failed/checks.cpp:27: error: check_ne(2, 2)failed!', content=None, time=0.001)],
- files=1,
- errors=[],
- suite_errors=1,
- suite_failures=19,
- suite_skipped=5,
- suite_tests=31,
- suite_time=0,
- suites=2
- ))
-
- def test_parse_junit_xml_files_xml_entities_in_test_names(self):
- result_file = str(test_files_path / 'with-xml-entities.xml')
- self.assertEqual(
- parse_junit_xml_files([result_file]),
- ParsedUnitTestResults(
- files=1,
- errors=[],
- suites=1,
- suite_tests=4,
- suite_skipped=2,
- suite_failures=1,
- suite_errors=1,
- suite_time=0,
- cases=[
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='Test with "quotes" in the test name', result='skipped', message='A message with "quotes"', content='Content with "quotes"', time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name="Test with 'apostrophe' in the test name", result='failure', message='A message with \'apostrophes\'', content='Content with \'apostrophes\'', time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='Test with & in the test name', result='error', message='A message with &', content='Content with &', time=0.0),
- UnitTestCase(result_file=result_file, test_file=None, line=None, class_name=None, test_name='Test with < and > in the test name', result='skipped', message='A message with < and >', content='Content with < and >', time=0.0)
- ]
- ))
-
- def test_parse_junit_xml_files_with_time_factor(self):
- result_file = str(test_files_path / 'TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml')
+ def test_process_parse_junit_xml_files_with_time_factor(self):
+ result_file = str(test_files_path / 'scalatest' / 'TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml')
for time_factor in [1.0, 10.0, 60.0, 0.1, 0.001]:
with self.subTest(time_factor=time_factor):
self.assertEqual(
- parse_junit_xml_files([result_file], time_factor),
+ process_junit_xml_elems(parse_junit_xml_files([result_file]), time_factor),
ParsedUnitTestResults(
files=1,
errors=[],
@@ -710,3 +330,7 @@ def test_get_content(self):
with self.subTest(results=results):
actual = get_content(results)
self.assertEqual(expected, actual)
+
+
+if __name__ == "__main__":
+ TestJunit.update_expectations()
diff --git a/python/test/test_publish.py b/python/test/test_publish.py
index 7526c875..a481c9ae 100644
--- a/python/test/test_publish.py
+++ b/python/test/test_publish.py
@@ -1,5 +1,3 @@
-import contextlib
-import locale
import pathlib
import unittest
from collections import defaultdict
@@ -18,40 +16,12 @@
get_test_changes_md, get_test_changes_list_md, get_test_changes_summary_md, \
get_case_annotations, get_case_annotation, get_all_tests_list_annotation, \
get_skipped_tests_list_annotation, get_case_messages, chunk_test_list
-from publish.junit import parse_junit_xml_files
+from publish.junit import parse_junit_xml_files, process_junit_xml_elems
from publish.unittestresults import get_stats, UnitTestCase, ParseError
from publish.unittestresults import get_test_results
-from test import d, n
+from test_utils import temp_locale, d, n
-test_files_path = pathlib.Path(__file__).parent / 'files'
-
-
-@contextlib.contextmanager
-def temp_locale(encoding: str) -> Any:
- old_locale = locale.getlocale()
- encodings = [
- f'{encoding}.utf8', f'{encoding}.utf-8',
- f'{encoding}.UTF8', f'{encoding}.UTF-8',
- encoding
- ]
-
- locale_set = False
- for encoding in encodings:
- try:
- locale.setlocale(locale.LC_ALL, encoding)
- locale_set = True
- break
- except:
- pass
-
- if not locale_set:
- raise ValueError(f'Could not set any of these locale: {", ".join(encodings)}')
-
- try:
- res = yield
- finally:
- locale.setlocale(locale.LC_ALL, old_locale)
- return res
+test_files_path = pathlib.Path(__file__).parent / 'files' / 'junit-xml'
errors = [ParseError('file', 'error', 1, 2)]
@@ -2007,16 +1977,17 @@ def test_chunk(self):
chunks)
def test_files(self):
- parsed = parse_junit_xml_files([str(test_files_path / 'junit.gloo.elastic.spark.tf.xml'),
- str(test_files_path / 'junit.gloo.elastic.spark.torch.xml'),
- str(test_files_path / 'junit.gloo.elastic.xml'),
- str(test_files_path / 'junit.gloo.standalone.xml'),
- str(test_files_path / 'junit.gloo.static.xml'),
- str(test_files_path / 'junit.mpi.integration.xml'),
- str(test_files_path / 'junit.mpi.standalone.xml'),
- str(test_files_path / 'junit.mpi.static.xml'),
- str(test_files_path / 'junit.spark.integration.1.xml'),
- str(test_files_path / 'junit.spark.integration.2.xml')]).with_commit('example')
+ parsed = process_junit_xml_elems(
+ parse_junit_xml_files([str(test_files_path / 'pytest' / 'junit.gloo.elastic.spark.tf.xml'),
+ str(test_files_path / 'pytest' / 'junit.gloo.elastic.spark.torch.xml'),
+ str(test_files_path / 'pytest' / 'junit.gloo.elastic.xml'),
+ str(test_files_path / 'pytest' / 'junit.gloo.standalone.xml'),
+ str(test_files_path / 'pytest' / 'junit.gloo.static.xml'),
+ str(test_files_path / 'pytest' / 'junit.mpi.integration.xml'),
+ str(test_files_path / 'pytest' / 'junit.mpi.standalone.xml'),
+ str(test_files_path / 'pytest' / 'junit.mpi.static.xml'),
+ str(test_files_path / 'pytest' / 'junit.spark.integration.1.xml'),
+ str(test_files_path / 'pytest' / 'junit.spark.integration.2.xml')])).with_commit('example')
results = get_test_results(parsed, False)
stats = get_stats(results)
md = get_long_summary_md(stats)
@@ -2027,7 +1998,7 @@ def test_files(self):
f'Results for commit example.\n'))
def test_file_without_cases(self):
- parsed = parse_junit_xml_files([str(test_files_path / 'no-cases.xml')]).with_commit('a commit sha')
+ parsed = process_junit_xml_elems(parse_junit_xml_files([str(test_files_path / 'no-cases.xml')])).with_commit('a commit sha')
results = get_test_results(parsed, False)
stats = get_stats(results)
md = get_long_summary_md(stats)
@@ -2038,7 +2009,7 @@ def test_file_without_cases(self):
f'Results for commit a commit.\n'))
def test_file_without_cases_but_with_tests(self):
- parsed = parse_junit_xml_files([str(test_files_path / 'no-cases-but-tests.xml')]).with_commit('a commit sha')
+ parsed = process_junit_xml_elems(parse_junit_xml_files([str(test_files_path / 'no-cases-but-tests.xml')])).with_commit('a commit sha')
results = get_test_results(parsed, False)
stats = get_stats(results)
md = get_long_summary_md(stats)
@@ -2049,7 +2020,7 @@ def test_file_without_cases_but_with_tests(self):
f'Results for commit a commit.\n'))
def test_non_parsable_file(self):
- parsed = parse_junit_xml_files(['files/empty.xml']).with_commit('a commit sha')
+ parsed = process_junit_xml_elems(parse_junit_xml_files(['files/empty.xml'])).with_commit('a commit sha')
results = get_test_results(parsed, False)
stats = get_stats(results)
md = get_long_summary_md(stats)
@@ -2061,7 +2032,7 @@ def test_non_parsable_file(self):
f'Results for commit a commit.\n'))
def test_files_with_testcase_in_testcase(self):
- parsed = parse_junit_xml_files([str(test_files_path / 'testcase-in-testcase.xml')]).with_commit('example')
+ parsed = process_junit_xml_elems(parse_junit_xml_files([str(test_files_path / 'testcase-in-testcase.xml')])).with_commit('example')
results = get_test_results(parsed, False)
stats = get_stats(results)
md = get_long_summary_md(stats)
@@ -2072,17 +2043,21 @@ def test_files_with_testcase_in_testcase(self):
f'Results for commit example.\n'))
def test_files_without_annotations(self):
- parsed = parse_junit_xml_files([str(test_files_path / 'junit.gloo.elastic.spark.tf.xml'),
- str(test_files_path / 'junit.gloo.elastic.spark.torch.xml'),
- str(test_files_path / 'junit.gloo.elastic.xml'),
- str(test_files_path / 'junit.gloo.standalone.xml'),
- str(test_files_path / 'junit.gloo.static.xml'),
- str(test_files_path / 'junit.mpi.integration.xml'),
- str(test_files_path / 'junit.mpi.standalone.xml'),
- str(test_files_path / 'junit.mpi.static.xml'),
- str(test_files_path / 'junit.spark.integration.1.xml'),
- str(test_files_path / 'junit.spark.integration.2.xml')],
- drop_testcases=True).with_commit('example')
+ parsed = process_junit_xml_elems(
+ parse_junit_xml_files(
+ [str(test_files_path / 'pytest' / 'junit.gloo.elastic.spark.tf.xml'),
+ str(test_files_path / 'pytest' / 'junit.gloo.elastic.spark.torch.xml'),
+ str(test_files_path / 'pytest' / 'junit.gloo.elastic.xml'),
+ str(test_files_path / 'pytest' / 'junit.gloo.standalone.xml'),
+ str(test_files_path / 'pytest' / 'junit.gloo.static.xml'),
+ str(test_files_path / 'pytest' / 'junit.mpi.integration.xml'),
+ str(test_files_path / 'pytest' / 'junit.mpi.standalone.xml'),
+ str(test_files_path / 'pytest' / 'junit.mpi.static.xml'),
+ str(test_files_path / 'pytest' / 'junit.spark.integration.1.xml'),
+ str(test_files_path / 'pytest' / 'junit.spark.integration.2.xml')],
+ drop_testcases=True
+ )
+ ).with_commit('example')
results = get_test_results(parsed, False)
stats = get_stats(results)
md = get_long_summary_md(stats)
diff --git a/python/test/test_publisher.py b/python/test/test_publisher.py
index 1a1285f6..a4fd3de9 100644
--- a/python/test/test_publisher.py
+++ b/python/test/test_publisher.py
@@ -106,6 +106,7 @@ def create_settings(comment_mode=comment_mode_always,
fail_on_errors=True,
fail_on_failures=True,
junit_files_glob='*.xml',
+ trx_files_glob=None,
time_factor=1.0,
check_name='Check Name',
comment_title='Comment Title',
diff --git a/python/test/test_trx.py b/python/test/test_trx.py
new file mode 100644
index 00000000..8a59653b
--- /dev/null
+++ b/python/test/test_trx.py
@@ -0,0 +1,38 @@
+import pathlib
+import sys
+import unittest
+from glob import glob
+from typing import List, Union
+
+sys.path.append(str(pathlib.Path(__file__).resolve().parent.parent))
+sys.path.append(str(pathlib.Path(__file__).resolve().parent))
+
+from publish.junit import JUnitTree
+from publish.trx import parse_trx_files
+from test_junit import JUnitXmlParseTest
+
+test_files_path = pathlib.Path(__file__).parent / 'files' / 'trx'
+
+
+class TestTrx(unittest.TestCase, JUnitXmlParseTest):
+ maxDiff = None
+
+ @property
+ def test(self):
+ return self
+
+ @staticmethod
+ def _test_files_path() -> pathlib.Path:
+ return test_files_path
+
+ @staticmethod
+ def get_test_files() -> List[str]:
+ return glob(str(test_files_path / '**' / '*.trx'), recursive=True)
+
+ @staticmethod
+ def parse_file(filename) -> Union[JUnitTree, BaseException]:
+ return list(parse_trx_files([filename]))[0][1]
+
+
+if __name__ == "__main__":
+ TestTrx.update_expectations()
diff --git a/python/test/test_unittestresults.py b/python/test/test_unittestresults.py
index 9737b7d0..c8301908 100644
--- a/python/test/test_unittestresults.py
+++ b/python/test/test_unittestresults.py
@@ -7,7 +7,7 @@
ParsedUnitTestResults, ParsedUnitTestResultsWithCommit, \
UnitTestCase, UnitTestResults, UnitTestCaseResults, \
UnitTestRunResults, UnitTestRunDeltaResults, ParseError
-from test import d, n
+from test_utils import d, n
errors = [ParseError('file', 'error')]
errors_dict = [dataclasses.asdict(e) for e in errors]
diff --git a/python/test/__init__.py b/python/test/test_utils.py
similarity index 56%
rename from python/test/__init__.py
rename to python/test/test_utils.py
index 0fa428db..b6d29f02 100644
--- a/python/test/__init__.py
+++ b/python/test/test_utils.py
@@ -12,8 +12,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import locale
import os
from contextlib import contextmanager
+from typing import Any, Optional
def n(number, delta=None):
@@ -28,6 +30,38 @@ def d(duration, delta=None):
return dict(duration=duration, delta=delta)
+@contextmanager
+def temp_locale(encoding: Optional[str]) -> Any:
+ if encoding is None:
+ res = yield
+ return res
+
+ old_locale = locale.setlocale(locale.LC_ALL)
+ encodings = [
+ f'{encoding}.utf8', f'{encoding}.utf-8',
+ f'{encoding}.UTF8', f'{encoding}.UTF-8',
+ encoding
+ ]
+
+ locale_set = False
+ for encoding in encodings:
+ try:
+ locale.setlocale(locale.LC_ALL, encoding)
+ locale_set = True
+ break
+ except:
+ pass
+
+ if not locale_set:
+ raise ValueError(f'Could not set any of these locale: {", ".join(encodings)}')
+
+ try:
+ res = yield
+ finally:
+ locale.setlocale(locale.LC_ALL, old_locale)
+ return res
+
+
@contextmanager
def chdir(path: str):
cwd = os.getcwd()