From e6338765f3420112fa57e88ce01bd2dc522b1cc8 Mon Sep 17 00:00:00 2001 From: Enrico Minack Date: Tue, 21 Jun 2022 11:55:42 +0100 Subject: [PATCH] Add support for TRX files (#287) --- .github/workflows/ci-cd.yml | 17 +- README.md | 16 +- action.yml | 7 +- composite/action.yml | 8 +- python/publish/junit.py | 50 +- python/publish/publisher.py | 4 +- python/publish/trx.py | 28 + python/publish/xslt/trx-to-junit.xslt | 267 + python/publish_unit_test_results.py | 79 +- python/test/files/junit-xml/empty.exception | 1 + python/test/files/{ => junit-xml}/empty.xml | 0 .../junit-xml/junit.multiresult.junit-xml | 19 + .../files/junit-xml/junit.multiresult.results | 56 + .../{ => junit-xml}/junit.multiresult.xml | 0 .../junit-xml/minimal-attributes.junit-xml | 15 + .../junit-xml/minimal-attributes.results | 56 + .../{ => junit-xml}/minimal-attributes.xml | 0 .../files/junit-xml/no-attributes.junit-xml | 15 + .../files/junit-xml/no-attributes.results | 11 + .../files/{ => junit-xml}/no-attributes.xml | 0 .../junit-xml/no-cases-but-tests.junit-xml | 4 + .../junit-xml/no-cases-but-tests.results | 11 + .../{ => junit-xml}/no-cases-but-tests.xml | 0 .../test/files/junit-xml/no-cases.junit-xml | 4 + python/test/files/junit-xml/no-cases.results | 11 + .../test/files/{ => junit-xml}/no-cases.xml | 0 .../test/files/junit-xml/non-junit.exception | 1 + .../test/files/junit-xml/non-junit.junit-xml | 6 + python/test/files/junit-xml/non-junit.results | 16 + .../test/files/{ => junit-xml}/non-junit.xml | 0 python/test/files/junit-xml/non-xml.exception | 1 + python/test/files/{ => junit-xml}/non-xml.xml | 0 .../junit-xml/pytest/corrupt-xml.exception | 1 + .../{ => junit-xml/pytest}/corrupt-xml.xml | 0 .../junit-xml/pytest/junit.fail.junit-xml | 28 + .../files/junit-xml/pytest/junit.fail.results | 82 + .../{ => junit-xml/pytest}/junit.fail.xml | 0 .../pytest/junit.gloo.elastic.junit-xml | 27 + .../pytest/junit.gloo.elastic.results | 170 + .../junit.gloo.elastic.spark.tf.junit-xml | 31 + .../junit.gloo.elastic.spark.tf.results | 278 + .../pytest}/junit.gloo.elastic.spark.tf.xml | 0 .../junit.gloo.elastic.spark.torch.junit-xml | 27 + .../junit.gloo.elastic.spark.torch.results | 254 + .../junit.gloo.elastic.spark.torch.xml | 0 .../pytest}/junit.gloo.elastic.xml | 0 .../pytest/junit.gloo.standalone.junit-xml | 136 + .../pytest/junit.gloo.standalone.results | 1080 ++ .../pytest}/junit.gloo.standalone.xml | 0 .../pytest/junit.gloo.static.junit-xml | 53 + .../pytest/junit.gloo.static.results | 288 + .../pytest}/junit.gloo.static.xml | 0 .../pytest/junit.mpi.integration.junit-xml | 8 + .../pytest/junit.mpi.integration.results | 45 + .../pytest}/junit.mpi.integration.xml | 0 .../pytest/junit.mpi.standalone.junit-xml | 104 + .../pytest/junit.mpi.standalone.results | 1080 ++ .../pytest}/junit.mpi.standalone.xml | 0 .../pytest/junit.mpi.static.junit-xml | 29 + .../junit-xml/pytest/junit.mpi.static.results | 276 + .../pytest}/junit.mpi.static.xml | 0 .../junit.spark.integration.1.junit-xml | 44 + .../pytest/junit.spark.integration.1.results | 402 + .../pytest}/junit.spark.integration.1.xml | 0 .../junit.spark.integration.2.junit-xml | 44 + .../pytest/junit.spark.integration.2.results | 402 + .../pytest}/junit.spark.integration.2.xml | 0 ...arch.spark.diff.DiffOptionsSuite.junit-xml | 84 + ...search.spark.diff.DiffOptionsSuite.results | 67 + ....gresearch.spark.diff.DiffOptionsSuite.xml | 0 .../junit-xml/testcase-in-testcase.junit-xml | 16 + .../junit-xml/testcase-in-testcase.results | 67 + .../{ => junit-xml}/testcase-in-testcase.xml | 0 .../files/junit-xml/tst/disabled.junit-xml | 78 + .../test/files/junit-xml/tst/disabled.results | 368 + .../files/{ => junit-xml/tst}/disabled.xml | 0 .../junit-xml/unsupported-unicode.junit-xml | 30 + .../junit-xml/unsupported-unicode.results | 89 + .../{ => junit-xml}/unsupported-unicode.xml | 2 +- .../junit-xml/with-xml-entities.junit-xml | 17 + .../files/junit-xml/with-xml-entities.results | 56 + .../{ => junit-xml}/with-xml-entities.xml | 0 .../files/junit-xml/xunit/xunit.junit-xml | 15 + .../test/files/junit-xml/xunit/xunit.results | 34 + .../files/{ => junit-xml/xunit}/xunit.xml | 0 .../test/files/trx/mstest/pickles.junit-xml | 25 + python/test/files/trx/mstest/pickles.results | 86 + python/test/files/trx/mstest/pickles.trx | 180 + .../nunit/FluentValidation.Tests.junit-xml | 811 ++ .../trx/nunit/FluentValidation.Tests.results | 9032 +++++++++++++++++ .../trx/nunit/FluentValidation.Tests.trx | 4662 +++++++++ .../trx/nunit/NUnit-net461-sample.junit-xml | 26 + .../trx/nunit/NUnit-net461-sample.results | 90 + .../files/trx/nunit/NUnit-net461-sample.trx | 123 + .../NUnit-netcoreapp3.1-sample.junit-xml | 26 + .../nunit/NUnit-netcoreapp3.1-sample.results | 90 + .../trx/nunit/NUnit-netcoreapp3.1-sample.trx | 123 + .../files/trx/nunit/SilentNotes.junit-xml | 108 + .../test/files/trx/nunit/SilentNotes.results | 927 ++ python/test/files/trx/nunit/SilentNotes.trx | 609 ++ .../test/files/trx/xunit/dotnet-trx.junit-xml | 35 + .../test/files/trx/xunit/dotnet-trx.results | 152 + python/test/files/trx/xunit/dotnet-trx.trx | 184 + .../trx/xunit/xUnit-net461-sample.junit-xml | 24 + .../trx/xunit/xUnit-net461-sample.results | 90 + .../files/trx/xunit/xUnit-net461-sample.trx | 143 + .../xUnit-netcoreapp3.1-sample.junit-xml | 24 + .../xunit/xUnit-netcoreapp3.1-sample.results | 90 + .../trx/xunit/xUnit-netcoreapp3.1-sample.trx | 143 + ...yami_YAMILEX 2015-10-24 04_18_59.junit-xml | 88 + .../yami_YAMILEX 2015-10-24 04_18_59.results | 326 + .../trx/yami_YAMILEX 2015-10-24 04_18_59.trx | 249 + python/test/files/update_expectations.sh | 7 + python/test/requirements.txt | 3 +- python/test/test_action_script.py | 118 +- python/test/test_junit.py | 606 +- python/test/test_publish.py | 91 +- python/test/test_publisher.py | 1 + python/test/test_trx.py | 38 + python/test/test_unittestresults.py | 2 +- python/test/{__init__.py => test_utils.py} | 34 + 121 files changed, 25257 insertions(+), 624 deletions(-) create mode 100644 python/publish/trx.py create mode 100644 python/publish/xslt/trx-to-junit.xslt create mode 100644 python/test/files/junit-xml/empty.exception rename python/test/files/{ => junit-xml}/empty.xml (100%) create mode 100644 python/test/files/junit-xml/junit.multiresult.junit-xml create mode 100644 python/test/files/junit-xml/junit.multiresult.results rename python/test/files/{ => junit-xml}/junit.multiresult.xml (100%) create mode 100644 python/test/files/junit-xml/minimal-attributes.junit-xml create mode 100644 python/test/files/junit-xml/minimal-attributes.results rename python/test/files/{ => junit-xml}/minimal-attributes.xml (100%) create mode 100644 python/test/files/junit-xml/no-attributes.junit-xml create mode 100644 python/test/files/junit-xml/no-attributes.results rename python/test/files/{ => junit-xml}/no-attributes.xml (100%) create mode 100644 python/test/files/junit-xml/no-cases-but-tests.junit-xml create mode 100644 python/test/files/junit-xml/no-cases-but-tests.results rename python/test/files/{ => junit-xml}/no-cases-but-tests.xml (100%) create mode 100644 python/test/files/junit-xml/no-cases.junit-xml create mode 100644 python/test/files/junit-xml/no-cases.results rename python/test/files/{ => junit-xml}/no-cases.xml (100%) create mode 100644 python/test/files/junit-xml/non-junit.exception create mode 100644 python/test/files/junit-xml/non-junit.junit-xml create mode 100644 python/test/files/junit-xml/non-junit.results rename python/test/files/{ => junit-xml}/non-junit.xml (100%) create mode 100644 python/test/files/junit-xml/non-xml.exception rename python/test/files/{ => junit-xml}/non-xml.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/corrupt-xml.exception rename python/test/files/{ => junit-xml/pytest}/corrupt-xml.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.fail.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.fail.results rename python/test/files/{ => junit-xml/pytest}/junit.fail.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.elastic.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.elastic.results create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.tf.results rename python/test/files/{ => junit-xml/pytest}/junit.gloo.elastic.spark.tf.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.elastic.spark.torch.results rename python/test/files/{ => junit-xml/pytest}/junit.gloo.elastic.spark.torch.xml (100%) rename python/test/files/{ => junit-xml/pytest}/junit.gloo.elastic.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.standalone.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.standalone.results rename python/test/files/{ => junit-xml/pytest}/junit.gloo.standalone.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.static.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.gloo.static.results rename python/test/files/{ => junit-xml/pytest}/junit.gloo.static.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.mpi.integration.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.mpi.integration.results rename python/test/files/{ => junit-xml/pytest}/junit.mpi.integration.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.mpi.standalone.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.mpi.standalone.results rename python/test/files/{ => junit-xml/pytest}/junit.mpi.standalone.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.mpi.static.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.mpi.static.results rename python/test/files/{ => junit-xml/pytest}/junit.mpi.static.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.spark.integration.1.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.spark.integration.1.results rename python/test/files/{ => junit-xml/pytest}/junit.spark.integration.1.xml (100%) create mode 100644 python/test/files/junit-xml/pytest/junit.spark.integration.2.junit-xml create mode 100644 python/test/files/junit-xml/pytest/junit.spark.integration.2.results rename python/test/files/{ => junit-xml/pytest}/junit.spark.integration.2.xml (100%) create mode 100644 python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.junit-xml create mode 100644 python/test/files/junit-xml/scalatest/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.results rename python/test/files/{ => junit-xml/scalatest}/TEST-uk.co.gresearch.spark.diff.DiffOptionsSuite.xml (100%) create mode 100644 python/test/files/junit-xml/testcase-in-testcase.junit-xml create mode 100644 python/test/files/junit-xml/testcase-in-testcase.results rename python/test/files/{ => junit-xml}/testcase-in-testcase.xml (100%) create mode 100644 python/test/files/junit-xml/tst/disabled.junit-xml create mode 100644 python/test/files/junit-xml/tst/disabled.results rename python/test/files/{ => junit-xml/tst}/disabled.xml (100%) create mode 100644 python/test/files/junit-xml/unsupported-unicode.junit-xml create mode 100644 python/test/files/junit-xml/unsupported-unicode.results rename python/test/files/{ => junit-xml}/unsupported-unicode.xml (93%) create mode 100644 python/test/files/junit-xml/with-xml-entities.junit-xml create mode 100644 python/test/files/junit-xml/with-xml-entities.results rename python/test/files/{ => junit-xml}/with-xml-entities.xml (100%) create mode 100644 python/test/files/junit-xml/xunit/xunit.junit-xml create mode 100644 python/test/files/junit-xml/xunit/xunit.results rename python/test/files/{ => junit-xml/xunit}/xunit.xml (100%) create mode 100644 python/test/files/trx/mstest/pickles.junit-xml create mode 100644 python/test/files/trx/mstest/pickles.results create mode 100644 python/test/files/trx/mstest/pickles.trx create mode 100644 python/test/files/trx/nunit/FluentValidation.Tests.junit-xml create mode 100644 python/test/files/trx/nunit/FluentValidation.Tests.results create mode 100644 python/test/files/trx/nunit/FluentValidation.Tests.trx create mode 100644 python/test/files/trx/nunit/NUnit-net461-sample.junit-xml create mode 100644 python/test/files/trx/nunit/NUnit-net461-sample.results create mode 100644 python/test/files/trx/nunit/NUnit-net461-sample.trx create mode 100644 python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.junit-xml create mode 100644 python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.results create mode 100644 python/test/files/trx/nunit/NUnit-netcoreapp3.1-sample.trx create mode 100644 python/test/files/trx/nunit/SilentNotes.junit-xml create mode 100644 python/test/files/trx/nunit/SilentNotes.results create mode 100644 python/test/files/trx/nunit/SilentNotes.trx create mode 100644 python/test/files/trx/xunit/dotnet-trx.junit-xml create mode 100644 python/test/files/trx/xunit/dotnet-trx.results create mode 100644 python/test/files/trx/xunit/dotnet-trx.trx create mode 100644 python/test/files/trx/xunit/xUnit-net461-sample.junit-xml create mode 100644 python/test/files/trx/xunit/xUnit-net461-sample.results create mode 100644 python/test/files/trx/xunit/xUnit-net461-sample.trx create mode 100644 python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.junit-xml create mode 100644 python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.results create mode 100644 python/test/files/trx/xunit/xUnit-netcoreapp3.1-sample.trx create mode 100644 python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.junit-xml create mode 100644 python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.results create mode 100755 python/test/files/trx/yami_YAMILEX 2015-10-24 04_18_59.trx create mode 100755 python/test/files/update_expectations.sh create mode 100644 python/test/test_trx.py rename python/test/{__init__.py => test_utils.py} (56%) 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 + + + + + + + + + + + + + + + + + + + + Given I have entered 40 into the calculator + -> done: Steps.GivenIHaveEnteredSomethingIntoTheCalculator(40) (0.0s) + And I have entered 50 into the calculator + -> done: Steps.GivenIHaveEnteredSomethingIntoTheCalculator(50) (0.0s) + When I press add + -> done: Steps.WhenIPressAdd() (0.0s) + Then the result should be 90 on the screen + -> done: Steps.ThenTheResultShouldBePass(90) (0.0s) + + + + + + + Given I have entered 60 into the calculator + -> done: Steps.GivenIHaveEnteredSomethingIntoTheCalculator(60) (0.0s) + And I have entered 70 into the calculator + -> done: Steps.GivenIHaveEnteredSomethingIntoTheCalculator(70) (0.0s) + When I press add + -> done: Steps.WhenIPressAdd() (0.0s) + Then the result should be 130 on the screen + -> done: Steps.ThenTheResultShouldBePass(130) (0.0s) + + + + + + + Given I have entered 50 into the calculator + -> done: Steps.GivenIHaveEnteredSomethingIntoTheCalculator(50) (0.0s) + And I have entered 70 into the calculator + -> done: Steps.GivenIHaveEnteredSomethingIntoTheCalculator(70) (0.0s) + When I press add + -> done: Steps.WhenIPressAdd() (0.0s) + Then the result should be 120 on the screen + -> done: Steps.ThenTheResultShouldBePass(120) (0.0s) + + + + + + + Given I have entered 50 into the calculator + -> done: Steps.GivenIHaveEnteredSomethingIntoTheCalculator(50) (0.0s) + And I have entered -1 into the calculator + -> done: Steps.GivenIHaveEnteredSomethingIntoTheCalculator(-1) (0.0s) + When I press add + -> done: Steps.WhenIPressAdd() (0.0s) + Then the result should be -50 on the screen + -> error: Assert.NotEqual() Failure + + + + 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/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.2837788] Discovering: FluentValidation.Tests +[xUnit.net 00:00:00.5914704] Discovered: FluentValidation.Tests +[xUnit.net 00:00:00.7008540] Starting: FluentValidation.Tests +[xUnit.net 00:00:00.8623084] Manual benchmark +Test 'FluentValidation.Tests.AccessorCacheTests.Benchmark' was skipped in the test run. +[xUnit.net 00:00:04.0635438] Finished: FluentValidation.Tests + + + + + [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 @@ + + + + + + + + + + Running SampleProject.Tests.NUnit tests + + 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 + + Ignore test + + + + + + Running SampleProject.Tests.NUnit tests + + + + + Running SampleProject.Tests.NUnit tests + + 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 + + + + + + Running SampleProject.Tests.NUnit tests +This test will fail + + Expected: True + But was: False + + at SampleProject.NUnit.TestServiceTests.FailTest() in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.NUnit\TestServiceTests.cs:line 61 + + + + + + + Running SampleProject.Tests.NUnit tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NUnit Adapter 3.17.0.0: Test execution started +Running all tests in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.NUnit\bin\Debug\net461\SampleProject.NUnit.dll + NUnit3TestExecutor discovered 6 of 6 NUnit test cases +Running SampleProject.Tests.NUnit tests +This test will fail + +Running SampleProject.Tests.NUnit tests + +SkipTest: Ignore test +Running SampleProject.Tests.NUnit tests + +Running SampleProject.Tests.NUnit tests + +Running SampleProject.Tests.NUnit tests + +NUnit Adapter 3.17.0.0: Test execution complete +Test 'SkipTest' was skipped in the test run. + + + + \ 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 @@ + + + + + + + + + + Running SampleProject.Tests.NUnit tests +This test will fail + + 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 + + Ignore test + + + + + + Running SampleProject.Tests.NUnit tests + + 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 + + + + + + Running SampleProject.Tests.NUnit tests + + 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 + + + + + + + Running SampleProject.Tests.NUnit tests + + + + + Running SampleProject.Tests.NUnit tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NUnit Adapter 3.17.0.0: Test execution started +Running all tests in C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.NUnit\bin\Debug\netcoreapp3.1\SampleProject.NUnit.dll + NUnit3TestExecutor discovered 6 of 6 NUnit test cases +Running SampleProject.Tests.NUnit tests +This test will fail + +Running SampleProject.Tests.NUnit tests + +SkipTest: Ignore test +Running SampleProject.Tests.NUnit tests + +Running SampleProject.Tests.NUnit tests + +Running SampleProject.Tests.NUnit tests + +NUnit Adapter 3.17.0.0: Test execution complete +Test 'SkipTest' was skipped in the test run. + + + + \ 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 @@ + + + + + + + + + + + + Opens the authorization page in the system browse, to get a real access-token + + Opens the authorization page in the system browse, to get a real access-token + + + + + + + + + + + + + + + + Refreshes a real token + + Refreshes a real token + + + + + + + + Too many consecutive fails seems to block an FTP server. + + Too many consecutive fails seems to block an FTP server. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets a real access-token + + Gets a real access-token + + + + + + Opens the authorization page in the system browse, to get a real authorization-code + + Opens the authorization page in the system browse, to get a real authorization-code + + + + + + + + + + + + + + + Gets a real access-token + + Gets a real access-token + + + + + + + + Gets a real access-token + + Gets a real access-token + + + + + + Refreshes a real token + + Refreshes a real token + + + + + + + + Opens the authorization page in the system browse, to get a real authorization-code + + 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. + + + + + + + + + + + Too many consecutive fails seems to block an FTP server. + + Too many consecutive fails seems to block an FTP server. + + + + + + + + + + + Refreshes a real token + + Refreshes a real token + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NUnit Adapter 3.17.0.0: Test execution started +Running all tests in C:\Users\Michal\Workspace\github\SilentNotes\bin\VanillaCloudStorageClientTest\netcoreapp2.1\VanillaCloudStorageClientTest.dll + NUnit3TestExecutor discovered 79 of 79 NUnit test cases +ReallyDoFetchToken: Gets a real access-token +ReallyDoOpenAuthorizationPageInBrowser: Opens the authorization page in the system browse, to get a real access-token +Test 'ReallyDoFetchToken' was skipped in the test run. +Test 'ReallyDoOpenAuthorizationPageInBrowser' was skipped in the test run. +ReallyDoRefreshToken: Refreshes a real token +ThrowsWithInvalidPassword: Too many consecutive fails seems to block an FTP server. +ThrowsWithInvalidUrl: Too many consecutive fails seems to block an FTP server. +ThrowsWithInvalidUsername: Too many consecutive fails seems to block an FTP server. +Test 'ReallyDoRefreshToken' was skipped in the test run. +Test 'ThrowsWithInvalidPassword' was skipped in the test run. +Test 'ThrowsWithInvalidUrl' was skipped in the test run. +Test 'ThrowsWithInvalidUsername' was skipped in the test run. +ReallyDoFetchToken: Gets a real access-token +ReallyDoOpenAuthorizationPageInBrowser: Opens the authorization page in the system browse, to get a real authorization-code +ReallyDoRefreshToken: Refreshes a real token +ReallyDoFetchToken: Gets a real access-token +ReallyDoOpenAuthorizationPageInBrowser: Opens the authorization page in the system browse, to get a real authorization-code +Test 'ReallyDoFetchToken' was skipped in the test run. +Test 'ReallyDoOpenAuthorizationPageInBrowser' was skipped in the test run. +Test 'ReallyDoRefreshToken' was skipped in the test run. +Test 'ReallyDoFetchToken' was skipped in the test run. +Test 'ReallyDoOpenAuthorizationPageInBrowser' was skipped in the test run. +ReallyDoRefreshToken: Refreshes a real token +Test 'ReallyDoRefreshToken' was skipped in the test run. +NUnit Adapter 3.17.0.0: Test execution complete + + + + \ 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 @@ + + + + + + + + + + + + + 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 + + + + + + Skipped test + + + + + + + + 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.4.0 (64-bit .NET Core 3.1.14) +[xUnit.net 00:00:00.27] Discovering: DotnetTests.XUnitTests +[xUnit.net 00:00:00.32] Discovered: DotnetTests.XUnitTests +[xUnit.net 00:00:00.32] Starting: DotnetTests.XUnitTests +[xUnit.net 00:00:00.39] System.Exception : Test +[xUnit.net 00:00:00.39] Stack Trace: +[xUnit.net 00:00:00.39] C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs(39,0): at DotnetTests.XUnitTests.CalculatorTests.Exception_In_Test() +[xUnit.net 00:00:00.51] Assert.Equal() Failure +[xUnit.net 00:00:00.51] Expected: 3 +[xUnit.net 00:00:00.51] Actual: 2 +[xUnit.net 00:00:00.51] Stack Trace: +[xUnit.net 00:00:00.51] C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs(27,0): at DotnetTests.XUnitTests.CalculatorTests.Failing_Test() +[xUnit.net 00:00:00.51] Assert.True() Failure +[xUnit.net 00:00:00.51] Expected: True +[xUnit.net 00:00:00.51] Actual: False +[xUnit.net 00:00:00.51] Stack Trace: +[xUnit.net 00:00:00.51] C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs(67,0): at DotnetTests.XUnitTests.CalculatorTests.Theory_With_Custom_Name(Int32 i) +[xUnit.net 00:00:00.51] System.DivideByZeroException : Attempted to divide by zero. +[xUnit.net 00:00:00.51] Stack Trace: +[xUnit.net 00:00:00.51] C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.Unit\Calculator.cs(9,0): at DotnetTests.Unit.Calculator.Div(Int32 a, Int32 b) +[xUnit.net 00:00:00.51] C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs(33,0): at DotnetTests.XUnitTests.CalculatorTests.Exception_In_TargetTest() +[xUnit.net 00:00:00.51] Assert.True() Failure +[xUnit.net 00:00:00.51] Expected: True +[xUnit.net 00:00:00.51] Actual: False +[xUnit.net 00:00:00.51] Stack Trace: +[xUnit.net 00:00:00.51] C:\Users\Michal\Workspace\dorny\test-reporter\reports\dotnet\DotnetTests.XUnitTests\CalculatorTests.cs(59,0): at DotnetTests.XUnitTests.CalculatorTests.Is_Even_Number(Int32 i) +[xUnit.net 00:00:00.54] Skipped test +[xUnit.net 00:00:00.54] Finished: DotnetTests.XUnitTests +Test 'DotnetTests.XUnitTests.CalculatorTests.Skipped_Test' was skipped in the test run. + + + + + [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 @@ + + + + + + + + + + Running SampleProject.Tests.xUnit tests + + 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 + + + + + + Running SampleProject.Tests.xUnit tests +This test will fail + + 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 + + + + + + Skipped + + + + + Running SampleProject.Tests.xUnit tests + + 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 + + + + + + Running SampleProject.Tests.xUnit tests + + + + + Running SampleProject.Tests.xUnit tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.4.3+1b45f5407b (32-bit Desktop .NET 4.0.30319.42000) +[xUnit.net 00:00:00.65] Discovering: SampleProject.xUnit +[xUnit.net 00:00:00.77] Discovered: SampleProject.xUnit +[xUnit.net 00:00:00.78] Starting: SampleProject.xUnit +[xUnit.net 00:00:01.01] Assert.Equal() Failure +[xUnit.net 00:00:01.01] Expected: False +[xUnit.net 00:00:01.01] Actual: True +[xUnit.net 00:00:01.01] Stack Trace: +[xUnit.net 00:00:01.01] TestServiceTests.cs(29,0): at SampleProject.xUnit.TestServiceTests.TestTheory(Boolean expected) +[xUnit.net 00:00:01.01] Output: +[xUnit.net 00:00:01.01] Running SampleProject.Tests.xUnit tests +[xUnit.net 00:00:01.01] Skipped +[xUnit.net 00:00:01.24] System.Exception : Pretty good exception +[xUnit.net 00:00:01.24] Stack Trace: +[xUnit.net 00:00:01.24] C:\Dev\LiquidTestReports\test\SampleProject\SampleProject\TestService.cs(19,0): at SampleProject.TestService.GetException() +[xUnit.net 00:00:01.24] TestServiceTests.cs(54,0): at SampleProject.xUnit.TestServiceTests.TestThrowingException() +[xUnit.net 00:00:01.24] Output: +[xUnit.net 00:00:01.24] Running SampleProject.Tests.xUnit tests +[xUnit.net 00:00:01.25] Assert.True() Failure +[xUnit.net 00:00:01.25] Expected: True +[xUnit.net 00:00:01.25] Actual: False +[xUnit.net 00:00:01.25] Stack Trace: +[xUnit.net 00:00:01.25] TestServiceTests.cs(65,0): at SampleProject.xUnit.TestServiceTests.FailTest() +[xUnit.net 00:00:01.25] Output: +[xUnit.net 00:00:01.25] Running SampleProject.Tests.xUnit tests +[xUnit.net 00:00:01.25] This test will fail +[xUnit.net 00:00:01.25] Finished: SampleProject.xUnit +Test 'SampleProject.xUnit.TestServiceTests.SkipTest' was skipped in the test run. + + + + + [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 @@ + + + + + + + + + + Running SampleProject.Tests.xUnit tests +This test will fail + + 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 + + + + + + Running SampleProject.Tests.xUnit tests + + 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 + + + + + + Skipped + + + + + Running SampleProject.Tests.xUnit tests + + + + + Running SampleProject.Tests.xUnit tests + + + + + Running SampleProject.Tests.xUnit tests + + 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.4.3+1b45f5407b (64-bit .NET Core 3.1.13) +[xUnit.net 00:00:00.38] Discovering: SampleProject.xUnit +[xUnit.net 00:00:00.44] Discovered: SampleProject.xUnit +[xUnit.net 00:00:00.44] Starting: SampleProject.xUnit +[xUnit.net 00:00:00.55] Assert.Equal() Failure +[xUnit.net 00:00:00.55] Expected: False +[xUnit.net 00:00:00.55] Actual: True +[xUnit.net 00:00:00.55] Stack Trace: +[xUnit.net 00:00:00.56] C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.xUnit\TestServiceTests.cs(29,0): at SampleProject.xUnit.TestServiceTests.TestTheory(Boolean expected) +[xUnit.net 00:00:00.56] Output: +[xUnit.net 00:00:00.56] Running SampleProject.Tests.xUnit tests +[xUnit.net 00:00:00.56] Skipped +[xUnit.net 00:00:00.56] System.Exception : Pretty good exception +[xUnit.net 00:00:00.56] Stack Trace: +[xUnit.net 00:00:00.56] C:\Dev\LiquidTestReports\test\SampleProject\SampleProject\TestService.cs(19,0): at SampleProject.TestService.GetException() +[xUnit.net 00:00:00.56] C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.xUnit\TestServiceTests.cs(54,0): at SampleProject.xUnit.TestServiceTests.TestThrowingException() +[xUnit.net 00:00:00.56] Output: +[xUnit.net 00:00:00.56] Running SampleProject.Tests.xUnit tests +[xUnit.net 00:00:00.56] Assert.True() Failure +[xUnit.net 00:00:00.56] Expected: True +[xUnit.net 00:00:00.56] Actual: False +[xUnit.net 00:00:00.56] Stack Trace: +[xUnit.net 00:00:00.56] C:\Dev\LiquidTestReports\test\SampleProject\SampleProject.Tests.xUnit\TestServiceTests.cs(65,0): at SampleProject.xUnit.TestServiceTests.FailTest() +[xUnit.net 00:00:00.56] Output: +[xUnit.net 00:00:00.56] Running SampleProject.Tests.xUnit tests +[xUnit.net 00:00:00.56] This test will fail +[xUnit.net 00:00:00.56] Finished: SampleProject.xUnit +Test 'SampleProject.xUnit.TestServiceTests.SkipTest' was skipped in the test run. + + + + + [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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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()