diff --git a/.editorconfig b/.editorconfig
index 3513ec6283..5d3beb0336 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -13,6 +13,9 @@ vsspell_dictionary_languages = en-US
vsspell_section_id = 842f80e2d4aa4288afdcd0e42833eeaf
vsspell_ignored_words_842f80e2d4aa4288afdcd0e42833eeaf = runsettings|nullable|args|testhost|mutex|trx|vstest|arity|async|bool|inlined|json|jsonite|jsonrpc|localhost|readonly|xml|stylecop|indices|dotnet|lifecycle
+[*.{xlf,resx}]
+insert_final_newline = unset
+
# Xml localization files
[*.xlf]
vsspell_spell_check_as_you_type = false
@@ -35,7 +38,11 @@ charset = utf-8
indent_size = 2
# Xml files
-[*.{xml}]
+[*.xml]
+indent_size = 2
+
+# Xlf files
+[*.xlf]
indent_size = 2
# YAML files
@@ -428,6 +435,9 @@ dotnet_diagnostic.CA1854.severity = warning
# CA1863: Use 'CompositeFormat'
dotnet_diagnostic.CA1863.severity = none
+# CA2007: Consider calling ConfigureAwait on the awaited task
+dotnet_diagnostic.CA2007.severity = warning
+
# CA2016: Forward the 'CancellationToken' parameter to methods
dotnet_diagnostic.CA2016.severity = warning
@@ -458,9 +468,6 @@ dotnet_diagnostic.CA2245.severity = warning
# CA2248: Provide correct enum argument to Enum.HasFlag
dotnet_diagnostic.CA2248.severity = warning
-# RS0016: Only enable if API files are present
-dotnet_public_api_analyzer.require_api_files = true
-
# RS0041: Do not use 'Obsolete' attribute
dotnet_diagnostic.RS0041.severity = none
@@ -683,11 +690,14 @@ csharp_style_unused_value_expression_statement_preference = discard_variable:sil
# IDE0290: Use primary constructor
csharp_style_prefer_primary_constructors = false
+# Empty constructor
+resharper_empty_constructor_highlighting = warning
+
# Redundant empty argument list on object creation expression
resharper_redundant_empty_object_creation_argument_list_highlighting = warning
-# IDE0300: Simplify collection initialization
-dotnet_style_prefer_collection_expression = false
+# IDE0300-IDE0306: Simplify collection initialization
+dotnet_style_prefer_collection_expression = true
# IDE0065: using directive placement
csharp_using_directive_placement = outside_namespace:warning
@@ -826,4 +836,4 @@ resharper_replace_with_single_call_to_first_or_default_highlighting = warning
resharper_replace_conditional_expression_with_null_coalescing_highlighting = warning
# Redundant cast
-resharper_redundant_cast_highlighting = warning
\ No newline at end of file
+resharper_redundant_cast_highlighting = warning
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
new file mode 100644
index 0000000000..8910537ae2
--- /dev/null
+++ b/.github/copilot-instructions.md
@@ -0,0 +1,42 @@
+This is a .NET based repository that contains the MSTest testing framework and Microsoft.Testing.Platform (aka MTP) testing platform. Please follow these guidelines when contributing:
+
+## Code Standards
+
+You MUST follow all code-formatting and naming conventions defined in [`.editorconfig`](../.editorconfig).
+
+In addition to the rules enforced by `.editorconfig`, you SHOULD:
+
+- Favor style and conventions that are consistent with the existing codebase.
+- Prefer file-scoped namespace declarations and single-line using directives.
+- Ensure that the final return statement of a method is on its own line.
+- Use pattern matching and switch expressions wherever possible.
+- Use `nameof` instead of string literals when referring to member names.
+- Always use `is null` or `is not null` instead of `== null` or `!= null`.
+- Trust the C# null annotations and don't add null checks when the type system says a value cannot be null.
+- Prefer `?.` if applicable (e.g. `scope?.Dispose()`).
+- Use `ObjectDisposedException.ThrowIf` where applicable.
+- Respect StyleCop.Analyzers rules, in particular:
+ - SA1028: Code must not contain trailing whitespace
+ - SA1316: Tuple element names should use correct casing
+ - SA1518: File is required to end with a single newline character
+
+You MUST minimize adding public API surface area but any newly added public API MUST be declared in the related `PublicAPI.Unshipped.txt` file.
+
+## Localization Guidelines
+
+Anytime you add a new localization resource, you MUST:
+- Add a corresponding entry in the localization resource file.
+- Add an entry in all `*.xlf` files related to the modified `.resx` file.
+- Do not modify existing entries in '*.xlf' files unless you are also modifying the corresponding `.resx` file.
+
+## Testing Guidelines
+
+- Tests for MTP and MSTest analyzers MUST use MSTest.
+- Unit tests for MSTest MUST use the internal test framework defined in [`TestFramework.ForTestingMSTest`](../test/Utilities/TestFramework.ForTestingMSTest).
+- All assertions must be written using FluentAssertions style of assertion.
+
+## Pull Request guidelines
+
+- Let other developers discuss their comments to your PRs, unless something sounds like a direct order to you, don't do changes.
+- Do the changes when you are specifically tagged or mentioned as copilot.
+- If you are unsure comment with the temperature and sentiment of the comment, so we know how to efficiently address you as a member of the team rather than having to tag you.
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 07e9451eef..25bc4f05d6 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -10,4 +10,14 @@ updates:
- dependency-name: "Microsoft.DotNet.Arcade.Sdk"
- dependency-name: Moq
commit-message:
- prefix: '[main] '
\ No newline at end of file
+ prefix: '[main] '
+ - package-ecosystem: dotnet-sdk
+ directory: /
+ schedule:
+ interval: weekly
+ day: wednesday
+ ignore:
+ - dependency-name: '*'
+ update-types:
+ - version-update:semver-major
+ - version-update:semver-minor
diff --git a/.github/workflows/backport-base.yml b/.github/workflows/backport-base.yml
index 5941ec39fb..f53a7c1cec 100644
--- a/.github/workflows/backport-base.yml
+++ b/.github/workflows/backport-base.yml
@@ -2,10 +2,10 @@ on:
workflow_call:
inputs:
pr_title_template:
- description: 'The template used for the PR title. Special placeholder tokens that will be replaced with a value: %target_branch%, %source_pr_title%, %source_pr_number%, %cc_users%.'
+ description: 'The template used for the PR title. Special placeholder tokens that will be replaced with a value: %target_branch%, %source_pr_title%, %source_pr_number%, %source_pr_author%, %cc_users%.'
required: false
type: string
- default: '[%target_branch%] %source_pr_title%'
+ default: '%source_pr_title% by @%source_pr_author% in #%source_pr_number% (backport to %target_branch%)'
pr_description_template:
description: 'The template used for the PR description. Special placeholder tokens that will be replaced with a value: %target_branch%, %source_pr_title%, %source_pr_number%, %cc_users%.'
required: false
@@ -116,6 +116,7 @@ jobs:
.replace(/%target_branch%/g, target_branch)
.replace(/%source_pr_title%/g, context.payload.issue.title)
.replace(/%source_pr_number%/g, context.payload.issue.number)
+ .replace(/%source_pr_author%/g, context.payload.issue.user.login)
return backport_pr_title;
diff --git a/.globalconfig b/.globalconfig
new file mode 100644
index 0000000000..cd088247ab
--- /dev/null
+++ b/.globalconfig
@@ -0,0 +1,10 @@
+is_global = true
+
+# RS0016: Only enable if API files are present
+# This should NOT be in .editorconfig.
+# .editorconfig is a per-file (syntax tree) concept.
+# The public API analyzer will attempt to get the options for the **first tree**.
+# The first tree could be a file outside of our repo (e.g, a source-only package like Polyfill)
+# By having this option here in .globalconfig, we ensure it's picked up correctly regardless of what the first tree is.
+# See comments in https://github.com/microsoft/testfx/pull/6230 for clarification.
+dotnet_public_api_analyzer.require_api_files = true
diff --git a/Build.cmd b/Build.cmd
old mode 100644
new mode 100755
diff --git a/Directory.Build.props b/Directory.Build.props
index 81e8489fd4..52438c9dd4 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -5,6 +5,10 @@
true
+
+
+
+ false
@@ -14,6 +18,7 @@
enabletrueenable
+ true
@@ -36,6 +41,9 @@
embedded0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7
+
+
+ $(NoWarn);TPEXP
@@ -62,12 +70,13 @@
- TestingPlatformRunner
+ Microsoft.Testing.Platformtrue
+ true
diff --git a/Directory.Build.targets b/Directory.Build.targets
index 5b18285eb1..0b157c8623 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -1,5 +1,12 @@
+
+
+
+
+
+
+
@@ -22,4 +29,44 @@
+
+
+
+
+
+
+ <_TemplateProperties>Version=$(Version)
+ <_TemplatePropertiesCacheFile>$(IntermediateOutputPath)$(MSBuildProjectFile).GenerateVersionSourceFile.cache
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_TemplateCsproj Include="$(MSBuildProjectDirectory)/BuildInfo.cs.template" Destination="$(IntermediateOutputPath)BuildInfo.cs" />
+
+
+
+
+
+
+
+
diff --git a/Directory.Packages.props b/Directory.Packages.props
index b276b09c02..d4fc62a1e4 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -12,40 +12,43 @@
false
- 9.0.0
+ 9.5.017.11.43.11.04.10.0
- 3.11.0-beta1.25173.3
+ 4.8.0
+ 4.14.0$(MicrosoftCodeAnalysisPublicApiAnalyzersVersion)6.2.1417.13.0
- 1.50.0
- 17.14.0-beta.25202.4
+ 1.55.0
+ 17.14.11.5.0-preview.24577.44.5.41.1.3-beta1.24423.1
- 3.9.0-preview.25229.4
- 1.7.0-preview.25226.1
-
+
+
+
+
+
+
-
@@ -54,16 +57,19 @@
-
+
-
+
+
+
+
@@ -74,10 +80,9 @@
-
-
+
-
+
diff --git a/MSTest.slnf b/MSTest.slnf
index 111ef185e0..c629708190 100644
--- a/MSTest.slnf
+++ b/MSTest.slnf
@@ -1,14 +1,17 @@
{
"solution": {
- "path": "TestFx.sln",
+ "path": "TestFx.slnx",
"projects": [
"samples\\FxExtensibility\\FxExtensibility.csproj",
"samples\\Playground\\Playground.csproj",
+ "src\\Adapter\\MSTest.Engine\\MSTest.Engine.csproj",
"src\\Adapter\\MSTest.TestAdapter\\MSTest.TestAdapter.csproj",
"src\\Adapter\\MSTestAdapter.PlatformServices\\MSTestAdapter.PlatformServices.csproj",
"src\\Analyzers\\MSTest.Analyzers.CodeFixes\\MSTest.Analyzers.CodeFixes.csproj",
"src\\Analyzers\\MSTest.Analyzers.Package\\MSTest.Analyzers.Package.csproj",
"src\\Analyzers\\MSTest.Analyzers\\MSTest.Analyzers.csproj",
+ "src\\Analyzers\\MSTest.GlobalConfigsGenerator\\MSTest.GlobalConfigsGenerator.csproj",
+ "src\\Analyzers\\MSTest.SourceGeneration\\MSTest.SourceGeneration.csproj",
"src\\Package\\MSTest.Sdk\\MSTest.Sdk.csproj",
"src\\Package\\MSTest\\MSTest.csproj",
"src\\TestFramework\\TestFramework.Extensions\\TestFramework.Extensions.csproj",
@@ -40,6 +43,7 @@
"test\\IntegrationTests\\TestAssets\\SampleFrameworkExtensions\\SampleFrameworkExtensions.csproj",
"test\\IntegrationTests\\TestAssets\\SampleProjectForAssemblyResolution\\SampleProjectForAssemblyResolution.csproj",
"test\\IntegrationTests\\TestAssets\\SuiteLifeCycleTestProject\\SuiteLifeCycleTestProject.csproj",
+ "test\\IntegrationTests\\TestAssets\\TestCategoriesFromTestDataRowProject\\TestCategoriesFromTestDataRowProject.csproj",
"test\\IntegrationTests\\TestAssets\\TestIdProject.DefaultStrategy\\TestIdProject.DefaultStrategy.csproj",
"test\\IntegrationTests\\TestAssets\\TestIdProject.DisplayNameStrategy\\TestIdProject.DisplayNameStrategy.csproj",
"test\\IntegrationTests\\TestAssets\\TestIdProject.FullyQualifiedTestStrategy\\TestIdProject.FullyQualifiedStrategy.csproj",
@@ -50,10 +54,11 @@
"test\\UnitTests\\MSTest.Analyzers.UnitTests\\MSTest.Analyzers.UnitTests.csproj",
"test\\UnitTests\\MSTestAdapter.PlatformServices.UnitTests\\MSTestAdapter.PlatformServices.UnitTests.csproj",
"test\\UnitTests\\MSTestAdapter.UnitTests\\MSTestAdapter.UnitTests.csproj",
+ "test\\UnitTests\\MSTest.SelfRealExamples.UnitTests\\MSTest.SelfRealExamples.UnitTests.csproj",
"test\\UnitTests\\TestFramework.UnitTests\\TestFramework.UnitTests.csproj",
"test\\Utilities\\Automation.CLI\\Automation.CLI.csproj",
"test\\Utilities\\Microsoft.Testing.TestInfrastructure\\Microsoft.Testing.TestInfrastructure.csproj",
"test\\Utilities\\TestFramework.ForTestingMSTest\\TestFramework.ForTestingMSTest.csproj"
]
}
-}
\ No newline at end of file
+}
diff --git a/Microsoft.Testing.Platform.slnf b/Microsoft.Testing.Platform.slnf
index 1595904e3a..d32084741e 100644
--- a/Microsoft.Testing.Platform.slnf
+++ b/Microsoft.Testing.Platform.slnf
@@ -1,6 +1,6 @@
{
"solution": {
- "path": "TestFx.sln",
+ "path": "TestFx.slnx",
"projects": [
"samples\\Playground\\Playground.csproj",
"src\\Platform\\Microsoft.Testing.Extensions.CrashDump\\Microsoft.Testing.Extensions.CrashDump.csproj",
diff --git a/NonWindowsTests.slnf b/NonWindowsTests.slnf
index e965c3ed7e..a69cbb51e1 100644
--- a/NonWindowsTests.slnf
+++ b/NonWindowsTests.slnf
@@ -1,14 +1,40 @@
{
"solution": {
- "path": "TestFx.sln",
+ "path": "TestFx.slnx",
"projects": [
- "test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests.csproj",
- "test/IntegrationTests/MSTest.Acceptance.IntegrationTests/MSTest.Acceptance.IntegrationTests.csproj",
- "test/UnitTests/Microsoft.Testing.Extensions.UnitTests/Microsoft.Testing.Extensions.UnitTests.csproj",
- "test/UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests/Microsoft.Testing.Extensions.VSTestBridge.UnitTests.csproj",
- "test/UnitTests/Microsoft.Testing.Platform.UnitTests/Microsoft.Testing.Platform.UnitTests.csproj",
- "test/UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests/Microsoft.Testing.Platform.MSBuild.UnitTests.csproj",
- "test/UnitTests/MSTest.Analyzers.UnitTests/MSTest.Analyzers.UnitTests.csproj"
+ "src\\Adapter\\MSTest.Engine\\MSTest.Engine.csproj",
+ "src\\Adapter\\MSTest.TestAdapter\\MSTest.TestAdapter.csproj",
+ "src\\Adapter\\MSTestAdapter.PlatformServices\\MSTestAdapter.PlatformServices.csproj",
+ "src\\Analyzers\\MSTest.Analyzers.CodeFixes\\MSTest.Analyzers.CodeFixes.csproj",
+ "src\\Analyzers\\MSTest.Analyzers.Package\\MSTest.Analyzers.Package.csproj",
+ "src\\Analyzers\\MSTest.Analyzers\\MSTest.Analyzers.csproj",
+ "src\\Analyzers\\MSTest.GlobalConfigsGenerator\\MSTest.GlobalConfigsGenerator.csproj",
+ "src\\Analyzers\\MSTest.Internal.Analyzers\\MSTest.Internal.Analyzers.csproj",
+ "src\\Analyzers\\MSTest.SourceGeneration\\MSTest.SourceGeneration.csproj",
+ "src\\Package\\MSTest.Sdk\\MSTest.Sdk.csproj",
+ "src\\Package\\MSTest\\MSTest.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.AzureDevOpsReport\\Microsoft.Testing.Extensions.AzureDevOpsReport.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.CrashDump\\Microsoft.Testing.Extensions.CrashDump.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.HangDump\\Microsoft.Testing.Extensions.HangDump.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.HotReload\\Microsoft.Testing.Extensions.HotReload.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.MSBuild\\Microsoft.Testing.Extensions.MSBuild.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.Retry\\Microsoft.Testing.Extensions.Retry.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.Telemetry\\Microsoft.Testing.Extensions.Telemetry.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.TrxReport.Abstractions\\Microsoft.Testing.Extensions.TrxReport.Abstractions.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.TrxReport\\Microsoft.Testing.Extensions.TrxReport.csproj",
+ "src\\Platform\\Microsoft.Testing.Extensions.VSTestBridge\\Microsoft.Testing.Extensions.VSTestBridge.csproj",
+ "src\\Platform\\Microsoft.Testing.Platform.MSBuild\\Microsoft.Testing.Platform.MSBuild.csproj",
+ "src\\Platform\\Microsoft.Testing.Platform\\Microsoft.Testing.Platform.csproj",
+ "src\\TestFramework\\TestFramework.Extensions\\TestFramework.Extensions.csproj",
+ "src\\TestFramework\\TestFramework\\TestFramework.csproj",
+ "test\\IntegrationTests\\MSTest.Acceptance.IntegrationTests\\MSTest.Acceptance.IntegrationTests.csproj",
+ "test\\IntegrationTests\\Microsoft.Testing.Platform.Acceptance.IntegrationTests\\Microsoft.Testing.Platform.Acceptance.IntegrationTests.csproj",
+ "test\\UnitTests\\MSTest.Analyzers.UnitTests\\MSTest.Analyzers.UnitTests.csproj",
+ "test\\UnitTests\\Microsoft.Testing.Extensions.UnitTests\\Microsoft.Testing.Extensions.UnitTests.csproj",
+ "test\\UnitTests\\Microsoft.Testing.Extensions.VSTestBridge.UnitTests\\Microsoft.Testing.Extensions.VSTestBridge.UnitTests.csproj",
+ "test\\UnitTests\\Microsoft.Testing.Platform.MSBuild.UnitTests\\Microsoft.Testing.Platform.MSBuild.UnitTests.csproj",
+ "test\\UnitTests\\Microsoft.Testing.Platform.UnitTests\\Microsoft.Testing.Platform.UnitTests.csproj",
+ "test\\Utilities\\Microsoft.Testing.TestInfrastructure\\Microsoft.Testing.TestInfrastructure.csproj"
]
}
}
\ No newline at end of file
diff --git a/NuGet.config b/NuGet.config
index 712f79ac00..5c00c1d17d 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -5,6 +5,10 @@
+
+
+
+
@@ -17,6 +21,10 @@
+
+
+
+
diff --git a/TestFx.sln b/TestFx.sln
deleted file mode 100644
index ef5738fbb2..0000000000
--- a/TestFx.sln
+++ /dev/null
@@ -1,629 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.1.31910.343
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{FF8B1B72-55A1-4FFE-809E-7B79323ED8D0}"
- ProjectSection(SolutionItems) = preProject
- src\.editorconfig = src\.editorconfig
- src\Directory.Build.props = src\Directory.Build.props
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2 - Adapter", "2 - Adapter", "{24088844-2107-4DB2-8F3F-CBCA94FC4B28}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.TestAdapter", "src\Adapter\MSTest.TestAdapter\MSTest.TestAdapter.csproj", "{98BA6D2C-1F3D-4636-8E1D-D4932B7A253D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTestAdapter.PlatformServices", "src\Adapter\MSTestAdapter.PlatformServices\MSTestAdapter.PlatformServices.csproj", "{5D153CAA-80C2-4551-9549-6C406FCEEFB1}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3 - TestFramework", "3 - TestFramework", "{E48AC786-E150-4F41-9A16-32F02E4493D8}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestFramework", "src\TestFramework\TestFramework\TestFramework.csproj", "{7252D9E3-267D-442C-96BC-C73AEF3241D6}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A9596292-7E67-4566-9096-143DDAA4E8D8}"
- ProjectSection(SolutionItems) = preProject
- test\.editorconfig = test\.editorconfig
- test\Directory.Build.props = test\Directory.Build.props
- test\Directory.Build.targets = test\Directory.Build.targets
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestFramework.Extensions", "src\TestFramework\TestFramework.Extensions\TestFramework.Extensions.csproj", "{DF131865-84EE-4540-8112-E88ACEBDEA09}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestUtilities", "TestUtilities", "{33D3029D-E653-4929-BB31-C714178C4BEE}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{929A3EDE-893B-4801-82BA-01FD947291CB}"
- ProjectSection(SolutionItems) = preProject
- .editorconfig = .editorconfig
- .gitignore = .gitignore
- Directory.Build.props = Directory.Build.props
- Directory.Build.targets = Directory.Build.targets
- Directory.Packages.props = Directory.Packages.props
- global.json = global.json
- Nuget.config = Nuget.config
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "5 - Package", "5 - Package", "{E374A3A6-C364-4890-B315-D60F5C682B6E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTestAdapter.UnitTests", "test\UnitTests\MSTestAdapter.UnitTests\MSTestAdapter.UnitTests.csproj", "{1CEB5743-70BF-475E-91BC-0AEBD63835B7}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTestAdapter.PlatformServices.UnitTests", "test\UnitTests\MSTestAdapter.PlatformServices.UnitTests\MSTestAdapter.PlatformServices.UnitTests.csproj", "{599833DC-EC5A-40CA-B5CF-DEF719548EEF}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestFramework.UnitTests", "test\UnitTests\TestFramework.UnitTests\TestFramework.UnitTests.csproj", "{0A4A76DD-FEE1-4D04-926B-38E1A24A7ED2}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "eng", "eng", "{FE0DF239-0D81-46CA-9277-3342009E83F9}"
- ProjectSection(SolutionItems) = preProject
- eng\AfterSolutionBuild.targets = eng\AfterSolutionBuild.targets
- eng\Analyzers.props = eng\Analyzers.props
- eng\Build.props = eng\Build.props
- eng\coverage.config = eng\coverage.config
- eng\install-windows-sdk.ps1 = eng\install-windows-sdk.ps1
- eng\verify-nupkgs.ps1 = eng\verify-nupkgs.ps1
- eng\Version.Details.xml = eng\Version.Details.xml
- eng\Versions.props = eng\Versions.props
- eng\write-release-notes.ps1 = eng\write-release-notes.ps1
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{92F8E9A2-903E-4025-99BC-7DC478D5466D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FxExtensibility", "samples\FxExtensibility\FxExtensibility.csproj", "{A82770C0-1FF5-43C7-8790-471D5E4F8D6E}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTests", "UnitTests", "{BB874DF1-44FE-415A-B634-A6B829107890}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IntegrationTests", "IntegrationTests", "{FF69998C-C661-4EF0-804B-845675B3602E}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestAssets", "TestAssets", "{C9F82701-0E0F-4E61-B05B-AE387E7631F6}"
- ProjectSection(SolutionItems) = preProject
- test\IntegrationTests\TestAssets\Directory.Build.targets = test\IntegrationTests\TestAssets\Directory.Build.targets
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.IntegrationTests", "test\IntegrationTests\MSTest.IntegrationTests\MSTest.IntegrationTests.csproj", "{6359B7FD-5C63-487A-9467-99323C17AA10}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.VstestConsoleWrapper.IntegrationTests", "test\IntegrationTests\MSTest.VstestConsoleWrapper.IntegrationTests\MSTest.VstestConsoleWrapper.IntegrationTests.csproj", "{FE2A0AE6-835E-4603-9CE9-C8E25D14C4A0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlatformServices.Desktop.IntegrationTests", "test\IntegrationTests\PlatformServices.Desktop.IntegrationTests\PlatformServices.Desktop.IntegrationTests.csproj", "{93D3B3B5-6850-461C-9A08-A78D2921F86F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataRowTestProject", "test\IntegrationTests\TestAssets\DataRowTestProject\DataRowTestProject.csproj", "{2833FDA8-ECA0-439C-97E4-620AB9EC45AA}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataSourceTestProject", "test\IntegrationTests\TestAssets\DataSourceTestProject\DataSourceTestProject.csproj", "{60116E14-11A3-47DF-B730-8A28ABD9B7AF}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeploymentTestProject.Never", "test\IntegrationTests\TestAssets\DeploymentTestProject.Never\DeploymentTestProject.Never.csproj", "{CA6A4A5A-CFDE-440B-898E-FF6FBA405540}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeploymentTestProject.PreserveNewest", "test\IntegrationTests\TestAssets\DeploymentTestProject.PreserveNewest\DeploymentTestProject.PreserveNewest.csproj", "{9C81E66B-5DFE-4130-982E-64EF8D7F6A60}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesktopTestProjectx64Debug", "test\IntegrationTests\TestAssets\DesktopTestProjectx64Debug\DesktopTestProjectx64Debug.csproj", "{BE21907B-A4C1-41D7-A2EF-5C73A33090A0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesktopTestProjectx64Release", "test\IntegrationTests\TestAssets\DesktopTestProjectx64Release\DesktopTestProjectx64Release.csproj", "{F6AD3FE2-3C82-44E8-A694-C4C447EB2F10}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesktopTestProjectx86Debug", "test\IntegrationTests\TestAssets\DesktopTestProjectx86Debug\DesktopTestProjectx86Debug.csproj", "{41DD903C-CA88-4761-831B-978EC793508F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesktopTestProjectx86Release", "test\IntegrationTests\TestAssets\DesktopTestProjectx86Release\DesktopTestProjectx86Release.csproj", "{93B2E07F-A41D-42DC-AF5D-47048761DFA9}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscoverInternalsProject", "test\IntegrationTests\TestAssets\DiscoverInternalsProject\DiscoverInternalsProject.csproj", "{48A0431B-9EFA-46DA-9AA9-D6552A7DA109}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DoNotParallelizeTestProject", "test\IntegrationTests\TestAssets\DoNotParallelizeTestProject\DoNotParallelizeTestProject.csproj", "{A2C5B6FE-A5B4-4419-A1FC-3F977DE24D2B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamicDataTestProject", "test\IntegrationTests\TestAssets\DynamicDataTestProject\DynamicDataTestProject.csproj", "{D11D17B0-74DB-43B2-B5AC-7F86E0ACEFCD}"
-EndProject
-Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharpTestProject", "test\IntegrationTests\TestAssets\FSharpTestProject\FSharpTestProject.fsproj", "{C37026D9-6525-4128-A4A1-9E3E2C195737}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FxExtensibilityTestProject", "test\IntegrationTests\TestAssets\FxExtensibilityTestProject\FxExtensibilityTestProject.csproj", "{2F4DFABA-B031-4164-A178-25F0753C9971}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HierarchyProject", "test\IntegrationTests\TestAssets\HierarchyProject\HierarchyProject.csproj", "{77CDBBF7-895B-44E1-8C86-05D81286BC3A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibProjectReferencedByDataSourceTest", "test\IntegrationTests\TestAssets\LibProjectReferencedByDataSourceTest\LibProjectReferencedByDataSourceTest.csproj", "{DBE6C4AF-4D79-44BB-94B5-C57FEC8B4E69}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OutputTestProject", "test\IntegrationTests\TestAssets\OutputTestProject\OutputTestProject.csproj", "{2607F3CC-3AFE-4968-B028-4F502B9F6A28}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ParallelClassesTestProject", "test\IntegrationTests\TestAssets\ParallelTestClass\ParallelClassesTestProject.csproj", "{60AE14C4-C54C-419D-AFF8-D7E49901D42B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleFrameworkExtensions", "test\IntegrationTests\TestAssets\SampleFrameworkExtensions\SampleFrameworkExtensions.csproj", "{17025461-E4B9-4D4A-AD74-AF1C355E61BC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleProjectForAssemblyResolution", "test\IntegrationTests\TestAssets\SampleProjectForAssemblyResolution\SampleProjectForAssemblyResolution.csproj", "{279E5DCA-3CD6-4C66-9D5F-475FDE96F3B8}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SuiteLifeCycleTestProject", "test\IntegrationTests\TestAssets\SuiteLifeCycleTestProject\SuiteLifeCycleTestProject.csproj", "{CAA66039-6747-4516-ADBA-F3D4C349E9EA}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestIdProject.DefaultStrategy", "test\IntegrationTests\TestAssets\TestIdProject.DefaultStrategy\TestIdProject.DefaultStrategy.csproj", "{8BCC6F49-CF4F-40DA-8EFC-D232C7984ABC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestIdProject.DisplayNameStrategy", "test\IntegrationTests\TestAssets\TestIdProject.DisplayNameStrategy\TestIdProject.DisplayNameStrategy.csproj", "{34714FAD-A226-432E-9083-6BCF79D71873}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestIdProject.FullyQualifiedStrategy", "test\IntegrationTests\TestAssets\TestIdProject.FullyQualifiedTestStrategy\TestIdProject.FullyQualifiedStrategy.csproj", "{27CFE39F-3F60-47E0-9281-12CB13C7B91E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestIdProject.LegacyStrategy", "test\IntegrationTests\TestAssets\TestIdProject.LegacyStrategy\TestIdProject.LegacyStrategy.csproj", "{DBA74878-65BF-4EE7-925A-67AF395F7D11}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestProjectForDiscovery", "test\IntegrationTests\TestAssets\TestProject\TestProjectForDiscovery.csproj", "{B3419F35-A31F-4CAA-A606-034D5DB669A2}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TimeoutTestProject", "test\IntegrationTests\TestAssets\TimeoutTestProject\TimeoutTestProject.csproj", "{4A184EC4-8BAB-498F-ABC6-300C70BF8240}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ParallelMethodsTestProject", "test\IntegrationTests\TestAssets\ParallelTestMethods\ParallelMethodsTestProject.csproj", "{CA5D66E2-7244-4E72-AFB6-58A826A30B74}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Automation.CLI", "test\Utilities\Automation.CLI\Automation.CLI.csproj", "{35E90097-976B-4FF5-B55F-2F51561D7A33}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestFramework.ForTestingMSTest", "test\Utilities\TestFramework.ForTestingMSTest\TestFramework.ForTestingMSTest.csproj", "{17CE999F-F3D1-48B4-A18F-8BA050C3A4AD}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest", "src\Package\MSTest\MSTest.csproj", "{ED8534D1-3136-4915-8071-5547E8D84DC3}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestingPlatformRunner", "TestingPlatformRunner", "{A9F9C49E-3CDA-4207-AA53-CC80AF1798FE}"
- ProjectSection(SolutionItems) = preProject
- eng\TestingPlatformRunner\TestingPlatform.Runner.targets = eng\TestingPlatformRunner\TestingPlatform.Runner.targets
- eng\TestingPlatformRunner\TestingPlatformRunner.targets = eng\TestingPlatformRunner\TestingPlatformRunner.targets
- EndProjectSection
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "1 - Platform and Extensions", "1 - Platform and Extensions", "{6AEE1440-FDF0-4729-8196-B24D0E333550}"
- ProjectSection(SolutionItems) = preProject
- src\Platform\Directory.Build.props = src\Platform\Directory.Build.props
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Platform", "src\Platform\Microsoft.Testing.Platform\Microsoft.Testing.Platform.csproj", "{48FAB979-8DA5-492E-8B3F-5DBBE82F659A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Platform.UnitTests", "test\UnitTests\Microsoft.Testing.Platform.UnitTests\Microsoft.Testing.Platform.UnitTests.csproj", "{0F1BB08E-BB6C-43E0-A7DF-1D6A03DA5DC7}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4 - Analyzers", "4 - Analyzers", "{E7F15C9C-3928-47AD-8462-64FD29FFCA54}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.Analyzers", "src\Analyzers\MSTest.Analyzers\MSTest.Analyzers.csproj", "{72C4FA49-E553-4B39-825A-8C4EA6CE93E2}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.Analyzers.CodeFixes", "src\Analyzers\MSTest.Analyzers.CodeFixes\MSTest.Analyzers.CodeFixes.csproj", "{462B0201-1C26-4951-97C9-722C2A58EF8C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.Analyzers.Package", "src\Analyzers\MSTest.Analyzers.Package\MSTest.Analyzers.Package.csproj", "{DC068986-7549-4B75-8EFC-A9958FD5CF88}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.Analyzers.UnitTests", "test\UnitTests\MSTest.Analyzers.UnitTests\MSTest.Analyzers.UnitTests.csproj", "{1FF35C23-C128-4C95-B3F8-67B1B4C51E4D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.Sdk", "src\Package\MSTest.Sdk\MSTest.Sdk.csproj", "{10930CFD-EDF9-4486-B0A3-49230B5A6798}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClsTestProject", "test\IntegrationTests\TestAssets\ClsTestProject\ClsTestProject.csproj", "{100CF515-8291-45FF-9FFD-2A9064FECC72}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.TestInfrastructure", "test\Utilities\Microsoft.Testing.TestInfrastructure\Microsoft.Testing.TestInfrastructure.csproj", "{9DCE14DA-3DFB-48DE-A3CC-A02C3465973C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Platform.Acceptance.IntegrationTests", "test\IntegrationTests\Microsoft.Testing.Platform.Acceptance.IntegrationTests\Microsoft.Testing.Platform.Acceptance.IntegrationTests.csproj", "{3CF3861E-EB1B-4FA6-9355-372A9816DF6B}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Performance", "Performance", "{CB0CC552-2017-40C0-934A-C8A3B00EF650}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.Performance.Runner", "test\Performance\MSTest.Performance.Runner\MSTest.Performance.Runner.csproj", "{7E9D98E7-733C-4D6B-A5AC-087D588A40ED}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Playground", "samples\Playground\Playground.csproj", "{8A41B37E-0732-4F28-B214-A44233B447FE}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MSTest.Acceptance.IntegrationTests", "test\IntegrationTests\MSTest.Acceptance.IntegrationTests\MSTest.Acceptance.IntegrationTests.csproj", "{BCB42780-C559-40B6-8C4A-85EBC464AAA8}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FixturesTestProject", "test\IntegrationTests\TestAssets\FixturesTestProject\FixturesTestProject.csproj", "{A7D0995D-0516-4975-ABBD-EB93E1B79292}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Extensions.TrxReport.Abstractions", "src\Platform\Microsoft.Testing.Extensions.TrxReport.Abstractions\Microsoft.Testing.Extensions.TrxReport.Abstractions.csproj", "{9164E0BA-0846-4839-BA0F-C25F5FBE056C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Extensions.TrxReport", "src\Platform\Microsoft.Testing.Extensions.TrxReport\Microsoft.Testing.Extensions.TrxReport.csproj", "{29B9F157-3733-471E-A11E-A5FF3C6D1348}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Extensions.VSTestBridge", "src\Platform\Microsoft.Testing.Extensions.VSTestBridge\Microsoft.Testing.Extensions.VSTestBridge.csproj", "{60763BAA-C963-4858-8DA1-78DB92428865}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Platform.MSBuild", "src\Platform\Microsoft.Testing.Platform.MSBuild\Microsoft.Testing.Platform.MSBuild.csproj", "{1B30B69C-A4E3-4660-9CA8-140D0C34B4A5}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Extensions.Telemetry", "src\Platform\Microsoft.Testing.Extensions.Telemetry\Microsoft.Testing.Extensions.Telemetry.csproj", "{BCA498E6-22C7-4E3F-8862-A7FAA06652D1}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Extensions.CrashDump", "src\Platform\Microsoft.Testing.Extensions.CrashDump\Microsoft.Testing.Extensions.CrashDump.csproj", "{DFC9B46A-BFA7-407D-B872-7104C78A0787}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Extensions.HangDump", "src\Platform\Microsoft.Testing.Extensions.HangDump\Microsoft.Testing.Extensions.HangDump.csproj", "{8C743361-B796-4A92-BD69-3B5DD734BA6F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Extensions.UnitTests", "test\UnitTests\Microsoft.Testing.Extensions.UnitTests\Microsoft.Testing.Extensions.UnitTests.csproj", "{16FEFD31-B0D6-4291-B620-F902A16F39DC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Extensions.VSTestBridge.UnitTests", "test\UnitTests\Microsoft.Testing.Extensions.VSTestBridge.UnitTests\Microsoft.Testing.Extensions.VSTestBridge.UnitTests.csproj", "{573C617F-6BB2-403A-AD87-E00A7FD537F0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Testing.Platform.MSBuild.UnitTests", "test\UnitTests\Microsoft.Testing.Platform.MSBuild.UnitTests\Microsoft.Testing.Platform.MSBuild.UnitTests.csproj", "{F422398C-72CD-43EA-AC8E-E0DBD08E5563}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Testing.Extensions.MSBuild", "src\Platform\Microsoft.Testing.Extensions.MSBuild\Microsoft.Testing.Extensions.MSBuild.csproj", "{8CE782A2-7374-4916-9C69-1F87E51A64A9}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSTest.Internal.Analyzers", "src\Analyzers\MSTest.Internal.Analyzers\MSTest.Internal.Analyzers.csproj", "{4A93E1A2-B61E-31B2-33F2-478156A9B5E7}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Testing.Extensions.HotReload", "src\Platform\Microsoft.Testing.Extensions.HotReload\Microsoft.Testing.Extensions.HotReload.csproj", "{53EBA540-F6CF-0715-1F62-241A53F537EC}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Testing.Extensions.Retry", "src\Platform\Microsoft.Testing.Extensions.Retry\Microsoft.Testing.Extensions.Retry.csproj", "{FB4ED3AA-A12E-4192-861F-4B025876AA0F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSTest.GlobalConfigsGenerator", "src\Analyzers\MSTest.GlobalConfigsGenerator\MSTest.GlobalConfigsGenerator.csproj", "{A85AA656-6DB6-4A0B-AA80-CBB4058B3DDB}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSTest.Engine", "src\Adapter\MSTest.Engine\MSTest.Engine.csproj", "{82881535-7E40-80D9-F086-A3847775F2E7}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSTest.SourceGeneration", "src\Analyzers\MSTest.SourceGeneration\MSTest.SourceGeneration.csproj", "{7BA0E74E-798E-4399-2EDE-A23BD5DA78CA}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSTest.Engine.UnitTests", "test\UnitTests\MSTest.Engine.UnitTests\MSTest.Engine.UnitTests.csproj", "{2C0DFAC0-5D58-D172-ECE4-CBB78AD03435}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSTest.SourceGeneration.UnitTests", "test\UnitTests\MSTest.SourceGeneration.UnitTests\MSTest.SourceGeneration.UnitTests.csproj", "{E6C0466E-BE8D-C04F-149A-FD98438F1413}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Testing.Extensions.AzureDevOpsReport", "src\Platform\Microsoft.Testing.Extensions.AzureDevOpsReport\Microsoft.Testing.Extensions.AzureDevOpsReport.csproj", "{F608D3A3-125B-CD88-1D51-8714ED142029}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {98BA6D2C-1F3D-4636-8E1D-D4932B7A253D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {98BA6D2C-1F3D-4636-8E1D-D4932B7A253D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {98BA6D2C-1F3D-4636-8E1D-D4932B7A253D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {98BA6D2C-1F3D-4636-8E1D-D4932B7A253D}.Release|Any CPU.Build.0 = Release|Any CPU
- {5D153CAA-80C2-4551-9549-6C406FCEEFB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5D153CAA-80C2-4551-9549-6C406FCEEFB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5D153CAA-80C2-4551-9549-6C406FCEEFB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5D153CAA-80C2-4551-9549-6C406FCEEFB1}.Release|Any CPU.Build.0 = Release|Any CPU
- {7252D9E3-267D-442C-96BC-C73AEF3241D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7252D9E3-267D-442C-96BC-C73AEF3241D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7252D9E3-267D-442C-96BC-C73AEF3241D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7252D9E3-267D-442C-96BC-C73AEF3241D6}.Release|Any CPU.Build.0 = Release|Any CPU
- {DF131865-84EE-4540-8112-E88ACEBDEA09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DF131865-84EE-4540-8112-E88ACEBDEA09}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DF131865-84EE-4540-8112-E88ACEBDEA09}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DF131865-84EE-4540-8112-E88ACEBDEA09}.Release|Any CPU.Build.0 = Release|Any CPU
- {1CEB5743-70BF-475E-91BC-0AEBD63835B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1CEB5743-70BF-475E-91BC-0AEBD63835B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1CEB5743-70BF-475E-91BC-0AEBD63835B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1CEB5743-70BF-475E-91BC-0AEBD63835B7}.Release|Any CPU.Build.0 = Release|Any CPU
- {599833DC-EC5A-40CA-B5CF-DEF719548EEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {599833DC-EC5A-40CA-B5CF-DEF719548EEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {599833DC-EC5A-40CA-B5CF-DEF719548EEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {599833DC-EC5A-40CA-B5CF-DEF719548EEF}.Release|Any CPU.Build.0 = Release|Any CPU
- {0A4A76DD-FEE1-4D04-926B-38E1A24A7ED2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0A4A76DD-FEE1-4D04-926B-38E1A24A7ED2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0A4A76DD-FEE1-4D04-926B-38E1A24A7ED2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0A4A76DD-FEE1-4D04-926B-38E1A24A7ED2}.Release|Any CPU.Build.0 = Release|Any CPU
- {A82770C0-1FF5-43C7-8790-471D5E4F8D6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A82770C0-1FF5-43C7-8790-471D5E4F8D6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A82770C0-1FF5-43C7-8790-471D5E4F8D6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A82770C0-1FF5-43C7-8790-471D5E4F8D6E}.Release|Any CPU.Build.0 = Release|Any CPU
- {6359B7FD-5C63-487A-9467-99323C17AA10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6359B7FD-5C63-487A-9467-99323C17AA10}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6359B7FD-5C63-487A-9467-99323C17AA10}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6359B7FD-5C63-487A-9467-99323C17AA10}.Release|Any CPU.Build.0 = Release|Any CPU
- {FE2A0AE6-835E-4603-9CE9-C8E25D14C4A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FE2A0AE6-835E-4603-9CE9-C8E25D14C4A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FE2A0AE6-835E-4603-9CE9-C8E25D14C4A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FE2A0AE6-835E-4603-9CE9-C8E25D14C4A0}.Release|Any CPU.Build.0 = Release|Any CPU
- {93D3B3B5-6850-461C-9A08-A78D2921F86F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {93D3B3B5-6850-461C-9A08-A78D2921F86F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {93D3B3B5-6850-461C-9A08-A78D2921F86F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {93D3B3B5-6850-461C-9A08-A78D2921F86F}.Release|Any CPU.Build.0 = Release|Any CPU
- {2833FDA8-ECA0-439C-97E4-620AB9EC45AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2833FDA8-ECA0-439C-97E4-620AB9EC45AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2833FDA8-ECA0-439C-97E4-620AB9EC45AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2833FDA8-ECA0-439C-97E4-620AB9EC45AA}.Release|Any CPU.Build.0 = Release|Any CPU
- {60116E14-11A3-47DF-B730-8A28ABD9B7AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {60116E14-11A3-47DF-B730-8A28ABD9B7AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {60116E14-11A3-47DF-B730-8A28ABD9B7AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {60116E14-11A3-47DF-B730-8A28ABD9B7AF}.Release|Any CPU.Build.0 = Release|Any CPU
- {CA6A4A5A-CFDE-440B-898E-FF6FBA405540}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CA6A4A5A-CFDE-440B-898E-FF6FBA405540}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CA6A4A5A-CFDE-440B-898E-FF6FBA405540}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CA6A4A5A-CFDE-440B-898E-FF6FBA405540}.Release|Any CPU.Build.0 = Release|Any CPU
- {9C81E66B-5DFE-4130-982E-64EF8D7F6A60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9C81E66B-5DFE-4130-982E-64EF8D7F6A60}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9C81E66B-5DFE-4130-982E-64EF8D7F6A60}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9C81E66B-5DFE-4130-982E-64EF8D7F6A60}.Release|Any CPU.Build.0 = Release|Any CPU
- {BE21907B-A4C1-41D7-A2EF-5C73A33090A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BE21907B-A4C1-41D7-A2EF-5C73A33090A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BE21907B-A4C1-41D7-A2EF-5C73A33090A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BE21907B-A4C1-41D7-A2EF-5C73A33090A0}.Release|Any CPU.Build.0 = Release|Any CPU
- {F6AD3FE2-3C82-44E8-A694-C4C447EB2F10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F6AD3FE2-3C82-44E8-A694-C4C447EB2F10}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F6AD3FE2-3C82-44E8-A694-C4C447EB2F10}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F6AD3FE2-3C82-44E8-A694-C4C447EB2F10}.Release|Any CPU.Build.0 = Release|Any CPU
- {41DD903C-CA88-4761-831B-978EC793508F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {41DD903C-CA88-4761-831B-978EC793508F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {41DD903C-CA88-4761-831B-978EC793508F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {41DD903C-CA88-4761-831B-978EC793508F}.Release|Any CPU.Build.0 = Release|Any CPU
- {93B2E07F-A41D-42DC-AF5D-47048761DFA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {93B2E07F-A41D-42DC-AF5D-47048761DFA9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {93B2E07F-A41D-42DC-AF5D-47048761DFA9}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {93B2E07F-A41D-42DC-AF5D-47048761DFA9}.Release|Any CPU.Build.0 = Release|Any CPU
- {48A0431B-9EFA-46DA-9AA9-D6552A7DA109}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {48A0431B-9EFA-46DA-9AA9-D6552A7DA109}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {48A0431B-9EFA-46DA-9AA9-D6552A7DA109}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {48A0431B-9EFA-46DA-9AA9-D6552A7DA109}.Release|Any CPU.Build.0 = Release|Any CPU
- {A2C5B6FE-A5B4-4419-A1FC-3F977DE24D2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A2C5B6FE-A5B4-4419-A1FC-3F977DE24D2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A2C5B6FE-A5B4-4419-A1FC-3F977DE24D2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A2C5B6FE-A5B4-4419-A1FC-3F977DE24D2B}.Release|Any CPU.Build.0 = Release|Any CPU
- {D11D17B0-74DB-43B2-B5AC-7F86E0ACEFCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D11D17B0-74DB-43B2-B5AC-7F86E0ACEFCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D11D17B0-74DB-43B2-B5AC-7F86E0ACEFCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D11D17B0-74DB-43B2-B5AC-7F86E0ACEFCD}.Release|Any CPU.Build.0 = Release|Any CPU
- {C37026D9-6525-4128-A4A1-9E3E2C195737}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C37026D9-6525-4128-A4A1-9E3E2C195737}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C37026D9-6525-4128-A4A1-9E3E2C195737}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C37026D9-6525-4128-A4A1-9E3E2C195737}.Release|Any CPU.Build.0 = Release|Any CPU
- {2F4DFABA-B031-4164-A178-25F0753C9971}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2F4DFABA-B031-4164-A178-25F0753C9971}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2F4DFABA-B031-4164-A178-25F0753C9971}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2F4DFABA-B031-4164-A178-25F0753C9971}.Release|Any CPU.Build.0 = Release|Any CPU
- {77CDBBF7-895B-44E1-8C86-05D81286BC3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {77CDBBF7-895B-44E1-8C86-05D81286BC3A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {77CDBBF7-895B-44E1-8C86-05D81286BC3A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {77CDBBF7-895B-44E1-8C86-05D81286BC3A}.Release|Any CPU.Build.0 = Release|Any CPU
- {DBE6C4AF-4D79-44BB-94B5-C57FEC8B4E69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DBE6C4AF-4D79-44BB-94B5-C57FEC8B4E69}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DBE6C4AF-4D79-44BB-94B5-C57FEC8B4E69}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DBE6C4AF-4D79-44BB-94B5-C57FEC8B4E69}.Release|Any CPU.Build.0 = Release|Any CPU
- {2607F3CC-3AFE-4968-B028-4F502B9F6A28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2607F3CC-3AFE-4968-B028-4F502B9F6A28}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2607F3CC-3AFE-4968-B028-4F502B9F6A28}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2607F3CC-3AFE-4968-B028-4F502B9F6A28}.Release|Any CPU.Build.0 = Release|Any CPU
- {60AE14C4-C54C-419D-AFF8-D7E49901D42B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {60AE14C4-C54C-419D-AFF8-D7E49901D42B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {60AE14C4-C54C-419D-AFF8-D7E49901D42B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {60AE14C4-C54C-419D-AFF8-D7E49901D42B}.Release|Any CPU.Build.0 = Release|Any CPU
- {17025461-E4B9-4D4A-AD74-AF1C355E61BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {17025461-E4B9-4D4A-AD74-AF1C355E61BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {17025461-E4B9-4D4A-AD74-AF1C355E61BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {17025461-E4B9-4D4A-AD74-AF1C355E61BC}.Release|Any CPU.Build.0 = Release|Any CPU
- {279E5DCA-3CD6-4C66-9D5F-475FDE96F3B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {279E5DCA-3CD6-4C66-9D5F-475FDE96F3B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {279E5DCA-3CD6-4C66-9D5F-475FDE96F3B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {279E5DCA-3CD6-4C66-9D5F-475FDE96F3B8}.Release|Any CPU.Build.0 = Release|Any CPU
- {CAA66039-6747-4516-ADBA-F3D4C349E9EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CAA66039-6747-4516-ADBA-F3D4C349E9EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CAA66039-6747-4516-ADBA-F3D4C349E9EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CAA66039-6747-4516-ADBA-F3D4C349E9EA}.Release|Any CPU.Build.0 = Release|Any CPU
- {8BCC6F49-CF4F-40DA-8EFC-D232C7984ABC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8BCC6F49-CF4F-40DA-8EFC-D232C7984ABC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8BCC6F49-CF4F-40DA-8EFC-D232C7984ABC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8BCC6F49-CF4F-40DA-8EFC-D232C7984ABC}.Release|Any CPU.Build.0 = Release|Any CPU
- {34714FAD-A226-432E-9083-6BCF79D71873}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {34714FAD-A226-432E-9083-6BCF79D71873}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {34714FAD-A226-432E-9083-6BCF79D71873}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {34714FAD-A226-432E-9083-6BCF79D71873}.Release|Any CPU.Build.0 = Release|Any CPU
- {27CFE39F-3F60-47E0-9281-12CB13C7B91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {27CFE39F-3F60-47E0-9281-12CB13C7B91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {27CFE39F-3F60-47E0-9281-12CB13C7B91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {27CFE39F-3F60-47E0-9281-12CB13C7B91E}.Release|Any CPU.Build.0 = Release|Any CPU
- {DBA74878-65BF-4EE7-925A-67AF395F7D11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DBA74878-65BF-4EE7-925A-67AF395F7D11}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DBA74878-65BF-4EE7-925A-67AF395F7D11}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DBA74878-65BF-4EE7-925A-67AF395F7D11}.Release|Any CPU.Build.0 = Release|Any CPU
- {B3419F35-A31F-4CAA-A606-034D5DB669A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B3419F35-A31F-4CAA-A606-034D5DB669A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B3419F35-A31F-4CAA-A606-034D5DB669A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B3419F35-A31F-4CAA-A606-034D5DB669A2}.Release|Any CPU.Build.0 = Release|Any CPU
- {4A184EC4-8BAB-498F-ABC6-300C70BF8240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4A184EC4-8BAB-498F-ABC6-300C70BF8240}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4A184EC4-8BAB-498F-ABC6-300C70BF8240}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4A184EC4-8BAB-498F-ABC6-300C70BF8240}.Release|Any CPU.Build.0 = Release|Any CPU
- {CA5D66E2-7244-4E72-AFB6-58A826A30B74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CA5D66E2-7244-4E72-AFB6-58A826A30B74}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CA5D66E2-7244-4E72-AFB6-58A826A30B74}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CA5D66E2-7244-4E72-AFB6-58A826A30B74}.Release|Any CPU.Build.0 = Release|Any CPU
- {35E90097-976B-4FF5-B55F-2F51561D7A33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {35E90097-976B-4FF5-B55F-2F51561D7A33}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {35E90097-976B-4FF5-B55F-2F51561D7A33}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {35E90097-976B-4FF5-B55F-2F51561D7A33}.Release|Any CPU.Build.0 = Release|Any CPU
- {17CE999F-F3D1-48B4-A18F-8BA050C3A4AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {17CE999F-F3D1-48B4-A18F-8BA050C3A4AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {17CE999F-F3D1-48B4-A18F-8BA050C3A4AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {17CE999F-F3D1-48B4-A18F-8BA050C3A4AD}.Release|Any CPU.Build.0 = Release|Any CPU
- {ED8534D1-3136-4915-8071-5547E8D84DC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {ED8534D1-3136-4915-8071-5547E8D84DC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {ED8534D1-3136-4915-8071-5547E8D84DC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {ED8534D1-3136-4915-8071-5547E8D84DC3}.Release|Any CPU.Build.0 = Release|Any CPU
- {48FAB979-8DA5-492E-8B3F-5DBBE82F659A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {48FAB979-8DA5-492E-8B3F-5DBBE82F659A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {48FAB979-8DA5-492E-8B3F-5DBBE82F659A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {48FAB979-8DA5-492E-8B3F-5DBBE82F659A}.Release|Any CPU.Build.0 = Release|Any CPU
- {0F1BB08E-BB6C-43E0-A7DF-1D6A03DA5DC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0F1BB08E-BB6C-43E0-A7DF-1D6A03DA5DC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0F1BB08E-BB6C-43E0-A7DF-1D6A03DA5DC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0F1BB08E-BB6C-43E0-A7DF-1D6A03DA5DC7}.Release|Any CPU.Build.0 = Release|Any CPU
- {72C4FA49-E553-4B39-825A-8C4EA6CE93E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {72C4FA49-E553-4B39-825A-8C4EA6CE93E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {72C4FA49-E553-4B39-825A-8C4EA6CE93E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {72C4FA49-E553-4B39-825A-8C4EA6CE93E2}.Release|Any CPU.Build.0 = Release|Any CPU
- {462B0201-1C26-4951-97C9-722C2A58EF8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {462B0201-1C26-4951-97C9-722C2A58EF8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {462B0201-1C26-4951-97C9-722C2A58EF8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {462B0201-1C26-4951-97C9-722C2A58EF8C}.Release|Any CPU.Build.0 = Release|Any CPU
- {DC068986-7549-4B75-8EFC-A9958FD5CF88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DC068986-7549-4B75-8EFC-A9958FD5CF88}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DC068986-7549-4B75-8EFC-A9958FD5CF88}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DC068986-7549-4B75-8EFC-A9958FD5CF88}.Release|Any CPU.Build.0 = Release|Any CPU
- {1FF35C23-C128-4C95-B3F8-67B1B4C51E4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1FF35C23-C128-4C95-B3F8-67B1B4C51E4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1FF35C23-C128-4C95-B3F8-67B1B4C51E4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1FF35C23-C128-4C95-B3F8-67B1B4C51E4D}.Release|Any CPU.Build.0 = Release|Any CPU
- {10930CFD-EDF9-4486-B0A3-49230B5A6798}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {10930CFD-EDF9-4486-B0A3-49230B5A6798}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {10930CFD-EDF9-4486-B0A3-49230B5A6798}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {10930CFD-EDF9-4486-B0A3-49230B5A6798}.Release|Any CPU.Build.0 = Release|Any CPU
- {100CF515-8291-45FF-9FFD-2A9064FECC72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {100CF515-8291-45FF-9FFD-2A9064FECC72}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {100CF515-8291-45FF-9FFD-2A9064FECC72}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {100CF515-8291-45FF-9FFD-2A9064FECC72}.Release|Any CPU.Build.0 = Release|Any CPU
- {9DCE14DA-3DFB-48DE-A3CC-A02C3465973C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9DCE14DA-3DFB-48DE-A3CC-A02C3465973C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9DCE14DA-3DFB-48DE-A3CC-A02C3465973C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9DCE14DA-3DFB-48DE-A3CC-A02C3465973C}.Release|Any CPU.Build.0 = Release|Any CPU
- {3CF3861E-EB1B-4FA6-9355-372A9816DF6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3CF3861E-EB1B-4FA6-9355-372A9816DF6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3CF3861E-EB1B-4FA6-9355-372A9816DF6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3CF3861E-EB1B-4FA6-9355-372A9816DF6B}.Release|Any CPU.Build.0 = Release|Any CPU
- {7E9D98E7-733C-4D6B-A5AC-087D588A40ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7E9D98E7-733C-4D6B-A5AC-087D588A40ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7E9D98E7-733C-4D6B-A5AC-087D588A40ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7E9D98E7-733C-4D6B-A5AC-087D588A40ED}.Release|Any CPU.Build.0 = Release|Any CPU
- {8A41B37E-0732-4F28-B214-A44233B447FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8A41B37E-0732-4F28-B214-A44233B447FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8A41B37E-0732-4F28-B214-A44233B447FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8A41B37E-0732-4F28-B214-A44233B447FE}.Release|Any CPU.Build.0 = Release|Any CPU
- {BCB42780-C559-40B6-8C4A-85EBC464AAA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BCB42780-C559-40B6-8C4A-85EBC464AAA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BCB42780-C559-40B6-8C4A-85EBC464AAA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BCB42780-C559-40B6-8C4A-85EBC464AAA8}.Release|Any CPU.Build.0 = Release|Any CPU
- {A7D0995D-0516-4975-ABBD-EB93E1B79292}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A7D0995D-0516-4975-ABBD-EB93E1B79292}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A7D0995D-0516-4975-ABBD-EB93E1B79292}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A7D0995D-0516-4975-ABBD-EB93E1B79292}.Release|Any CPU.Build.0 = Release|Any CPU
- {9164E0BA-0846-4839-BA0F-C25F5FBE056C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9164E0BA-0846-4839-BA0F-C25F5FBE056C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9164E0BA-0846-4839-BA0F-C25F5FBE056C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9164E0BA-0846-4839-BA0F-C25F5FBE056C}.Release|Any CPU.Build.0 = Release|Any CPU
- {29B9F157-3733-471E-A11E-A5FF3C6D1348}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {29B9F157-3733-471E-A11E-A5FF3C6D1348}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {29B9F157-3733-471E-A11E-A5FF3C6D1348}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {29B9F157-3733-471E-A11E-A5FF3C6D1348}.Release|Any CPU.Build.0 = Release|Any CPU
- {60763BAA-C963-4858-8DA1-78DB92428865}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {60763BAA-C963-4858-8DA1-78DB92428865}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {60763BAA-C963-4858-8DA1-78DB92428865}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {60763BAA-C963-4858-8DA1-78DB92428865}.Release|Any CPU.Build.0 = Release|Any CPU
- {1B30B69C-A4E3-4660-9CA8-140D0C34B4A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1B30B69C-A4E3-4660-9CA8-140D0C34B4A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1B30B69C-A4E3-4660-9CA8-140D0C34B4A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1B30B69C-A4E3-4660-9CA8-140D0C34B4A5}.Release|Any CPU.Build.0 = Release|Any CPU
- {BCA498E6-22C7-4E3F-8862-A7FAA06652D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BCA498E6-22C7-4E3F-8862-A7FAA06652D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BCA498E6-22C7-4E3F-8862-A7FAA06652D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BCA498E6-22C7-4E3F-8862-A7FAA06652D1}.Release|Any CPU.Build.0 = Release|Any CPU
- {DFC9B46A-BFA7-407D-B872-7104C78A0787}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DFC9B46A-BFA7-407D-B872-7104C78A0787}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {DFC9B46A-BFA7-407D-B872-7104C78A0787}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {DFC9B46A-BFA7-407D-B872-7104C78A0787}.Release|Any CPU.Build.0 = Release|Any CPU
- {8C743361-B796-4A92-BD69-3B5DD734BA6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8C743361-B796-4A92-BD69-3B5DD734BA6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8C743361-B796-4A92-BD69-3B5DD734BA6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8C743361-B796-4A92-BD69-3B5DD734BA6F}.Release|Any CPU.Build.0 = Release|Any CPU
- {16FEFD31-B0D6-4291-B620-F902A16F39DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {16FEFD31-B0D6-4291-B620-F902A16F39DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {16FEFD31-B0D6-4291-B620-F902A16F39DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {16FEFD31-B0D6-4291-B620-F902A16F39DC}.Release|Any CPU.Build.0 = Release|Any CPU
- {573C617F-6BB2-403A-AD87-E00A7FD537F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {573C617F-6BB2-403A-AD87-E00A7FD537F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {573C617F-6BB2-403A-AD87-E00A7FD537F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {573C617F-6BB2-403A-AD87-E00A7FD537F0}.Release|Any CPU.Build.0 = Release|Any CPU
- {F422398C-72CD-43EA-AC8E-E0DBD08E5563}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F422398C-72CD-43EA-AC8E-E0DBD08E5563}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F422398C-72CD-43EA-AC8E-E0DBD08E5563}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F422398C-72CD-43EA-AC8E-E0DBD08E5563}.Release|Any CPU.Build.0 = Release|Any CPU
- {8CE782A2-7374-4916-9C69-1F87E51A64A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {8CE782A2-7374-4916-9C69-1F87E51A64A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {8CE782A2-7374-4916-9C69-1F87E51A64A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {8CE782A2-7374-4916-9C69-1F87E51A64A9}.Release|Any CPU.Build.0 = Release|Any CPU
- {4A93E1A2-B61E-31B2-33F2-478156A9B5E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4A93E1A2-B61E-31B2-33F2-478156A9B5E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4A93E1A2-B61E-31B2-33F2-478156A9B5E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4A93E1A2-B61E-31B2-33F2-478156A9B5E7}.Release|Any CPU.Build.0 = Release|Any CPU
- {53EBA540-F6CF-0715-1F62-241A53F537EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {53EBA540-F6CF-0715-1F62-241A53F537EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {53EBA540-F6CF-0715-1F62-241A53F537EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {53EBA540-F6CF-0715-1F62-241A53F537EC}.Release|Any CPU.Build.0 = Release|Any CPU
- {FB4ED3AA-A12E-4192-861F-4B025876AA0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FB4ED3AA-A12E-4192-861F-4B025876AA0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FB4ED3AA-A12E-4192-861F-4B025876AA0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FB4ED3AA-A12E-4192-861F-4B025876AA0F}.Release|Any CPU.Build.0 = Release|Any CPU
- {A85AA656-6DB6-4A0B-AA80-CBB4058B3DDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A85AA656-6DB6-4A0B-AA80-CBB4058B3DDB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A85AA656-6DB6-4A0B-AA80-CBB4058B3DDB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A85AA656-6DB6-4A0B-AA80-CBB4058B3DDB}.Release|Any CPU.Build.0 = Release|Any CPU
- {82881535-7E40-80D9-F086-A3847775F2E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {82881535-7E40-80D9-F086-A3847775F2E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {82881535-7E40-80D9-F086-A3847775F2E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {82881535-7E40-80D9-F086-A3847775F2E7}.Release|Any CPU.Build.0 = Release|Any CPU
- {7BA0E74E-798E-4399-2EDE-A23BD5DA78CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7BA0E74E-798E-4399-2EDE-A23BD5DA78CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7BA0E74E-798E-4399-2EDE-A23BD5DA78CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7BA0E74E-798E-4399-2EDE-A23BD5DA78CA}.Release|Any CPU.Build.0 = Release|Any CPU
- {2C0DFAC0-5D58-D172-ECE4-CBB78AD03435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2C0DFAC0-5D58-D172-ECE4-CBB78AD03435}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2C0DFAC0-5D58-D172-ECE4-CBB78AD03435}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2C0DFAC0-5D58-D172-ECE4-CBB78AD03435}.Release|Any CPU.Build.0 = Release|Any CPU
- {E6C0466E-BE8D-C04F-149A-FD98438F1413}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E6C0466E-BE8D-C04F-149A-FD98438F1413}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E6C0466E-BE8D-C04F-149A-FD98438F1413}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E6C0466E-BE8D-C04F-149A-FD98438F1413}.Release|Any CPU.Build.0 = Release|Any CPU
- {F608D3A3-125B-CD88-1D51-8714ED142029}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F608D3A3-125B-CD88-1D51-8714ED142029}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F608D3A3-125B-CD88-1D51-8714ED142029}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F608D3A3-125B-CD88-1D51-8714ED142029}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {24088844-2107-4DB2-8F3F-CBCA94FC4B28} = {FF8B1B72-55A1-4FFE-809E-7B79323ED8D0}
- {98BA6D2C-1F3D-4636-8E1D-D4932B7A253D} = {24088844-2107-4DB2-8F3F-CBCA94FC4B28}
- {5D153CAA-80C2-4551-9549-6C406FCEEFB1} = {24088844-2107-4DB2-8F3F-CBCA94FC4B28}
- {E48AC786-E150-4F41-9A16-32F02E4493D8} = {FF8B1B72-55A1-4FFE-809E-7B79323ED8D0}
- {7252D9E3-267D-442C-96BC-C73AEF3241D6} = {E48AC786-E150-4F41-9A16-32F02E4493D8}
- {DF131865-84EE-4540-8112-E88ACEBDEA09} = {E48AC786-E150-4F41-9A16-32F02E4493D8}
- {33D3029D-E653-4929-BB31-C714178C4BEE} = {A9596292-7E67-4566-9096-143DDAA4E8D8}
- {E374A3A6-C364-4890-B315-D60F5C682B6E} = {FF8B1B72-55A1-4FFE-809E-7B79323ED8D0}
- {1CEB5743-70BF-475E-91BC-0AEBD63835B7} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {599833DC-EC5A-40CA-B5CF-DEF719548EEF} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {0A4A76DD-FEE1-4D04-926B-38E1A24A7ED2} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {FE0DF239-0D81-46CA-9277-3342009E83F9} = {929A3EDE-893B-4801-82BA-01FD947291CB}
- {A82770C0-1FF5-43C7-8790-471D5E4F8D6E} = {92F8E9A2-903E-4025-99BC-7DC478D5466D}
- {BB874DF1-44FE-415A-B634-A6B829107890} = {A9596292-7E67-4566-9096-143DDAA4E8D8}
- {FF69998C-C661-4EF0-804B-845675B3602E} = {A9596292-7E67-4566-9096-143DDAA4E8D8}
- {C9F82701-0E0F-4E61-B05B-AE387E7631F6} = {FF69998C-C661-4EF0-804B-845675B3602E}
- {6359B7FD-5C63-487A-9467-99323C17AA10} = {FF69998C-C661-4EF0-804B-845675B3602E}
- {FE2A0AE6-835E-4603-9CE9-C8E25D14C4A0} = {FF69998C-C661-4EF0-804B-845675B3602E}
- {93D3B3B5-6850-461C-9A08-A78D2921F86F} = {FF69998C-C661-4EF0-804B-845675B3602E}
- {2833FDA8-ECA0-439C-97E4-620AB9EC45AA} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {60116E14-11A3-47DF-B730-8A28ABD9B7AF} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {CA6A4A5A-CFDE-440B-898E-FF6FBA405540} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {9C81E66B-5DFE-4130-982E-64EF8D7F6A60} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {BE21907B-A4C1-41D7-A2EF-5C73A33090A0} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {F6AD3FE2-3C82-44E8-A694-C4C447EB2F10} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {41DD903C-CA88-4761-831B-978EC793508F} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {93B2E07F-A41D-42DC-AF5D-47048761DFA9} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {48A0431B-9EFA-46DA-9AA9-D6552A7DA109} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {A2C5B6FE-A5B4-4419-A1FC-3F977DE24D2B} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {D11D17B0-74DB-43B2-B5AC-7F86E0ACEFCD} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {C37026D9-6525-4128-A4A1-9E3E2C195737} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {2F4DFABA-B031-4164-A178-25F0753C9971} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {77CDBBF7-895B-44E1-8C86-05D81286BC3A} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {DBE6C4AF-4D79-44BB-94B5-C57FEC8B4E69} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {2607F3CC-3AFE-4968-B028-4F502B9F6A28} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {60AE14C4-C54C-419D-AFF8-D7E49901D42B} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {17025461-E4B9-4D4A-AD74-AF1C355E61BC} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {279E5DCA-3CD6-4C66-9D5F-475FDE96F3B8} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {CAA66039-6747-4516-ADBA-F3D4C349E9EA} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {8BCC6F49-CF4F-40DA-8EFC-D232C7984ABC} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {34714FAD-A226-432E-9083-6BCF79D71873} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {27CFE39F-3F60-47E0-9281-12CB13C7B91E} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {DBA74878-65BF-4EE7-925A-67AF395F7D11} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {B3419F35-A31F-4CAA-A606-034D5DB669A2} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {4A184EC4-8BAB-498F-ABC6-300C70BF8240} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {CA5D66E2-7244-4E72-AFB6-58A826A30B74} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {35E90097-976B-4FF5-B55F-2F51561D7A33} = {33D3029D-E653-4929-BB31-C714178C4BEE}
- {17CE999F-F3D1-48B4-A18F-8BA050C3A4AD} = {33D3029D-E653-4929-BB31-C714178C4BEE}
- {ED8534D1-3136-4915-8071-5547E8D84DC3} = {E374A3A6-C364-4890-B315-D60F5C682B6E}
- {A9F9C49E-3CDA-4207-AA53-CC80AF1798FE} = {FE0DF239-0D81-46CA-9277-3342009E83F9}
- {6AEE1440-FDF0-4729-8196-B24D0E333550} = {FF8B1B72-55A1-4FFE-809E-7B79323ED8D0}
- {48FAB979-8DA5-492E-8B3F-5DBBE82F659A} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {0F1BB08E-BB6C-43E0-A7DF-1D6A03DA5DC7} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {E7F15C9C-3928-47AD-8462-64FD29FFCA54} = {FF8B1B72-55A1-4FFE-809E-7B79323ED8D0}
- {72C4FA49-E553-4B39-825A-8C4EA6CE93E2} = {E7F15C9C-3928-47AD-8462-64FD29FFCA54}
- {462B0201-1C26-4951-97C9-722C2A58EF8C} = {E7F15C9C-3928-47AD-8462-64FD29FFCA54}
- {DC068986-7549-4B75-8EFC-A9958FD5CF88} = {E7F15C9C-3928-47AD-8462-64FD29FFCA54}
- {1FF35C23-C128-4C95-B3F8-67B1B4C51E4D} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {10930CFD-EDF9-4486-B0A3-49230B5A6798} = {E374A3A6-C364-4890-B315-D60F5C682B6E}
- {100CF515-8291-45FF-9FFD-2A9064FECC72} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {9DCE14DA-3DFB-48DE-A3CC-A02C3465973C} = {33D3029D-E653-4929-BB31-C714178C4BEE}
- {3CF3861E-EB1B-4FA6-9355-372A9816DF6B} = {FF69998C-C661-4EF0-804B-845675B3602E}
- {CB0CC552-2017-40C0-934A-C8A3B00EF650} = {A9596292-7E67-4566-9096-143DDAA4E8D8}
- {7E9D98E7-733C-4D6B-A5AC-087D588A40ED} = {CB0CC552-2017-40C0-934A-C8A3B00EF650}
- {8A41B37E-0732-4F28-B214-A44233B447FE} = {92F8E9A2-903E-4025-99BC-7DC478D5466D}
- {BCB42780-C559-40B6-8C4A-85EBC464AAA8} = {FF69998C-C661-4EF0-804B-845675B3602E}
- {A7D0995D-0516-4975-ABBD-EB93E1B79292} = {C9F82701-0E0F-4E61-B05B-AE387E7631F6}
- {9164E0BA-0846-4839-BA0F-C25F5FBE056C} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {29B9F157-3733-471E-A11E-A5FF3C6D1348} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {60763BAA-C963-4858-8DA1-78DB92428865} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {1B30B69C-A4E3-4660-9CA8-140D0C34B4A5} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {BCA498E6-22C7-4E3F-8862-A7FAA06652D1} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {DFC9B46A-BFA7-407D-B872-7104C78A0787} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {8C743361-B796-4A92-BD69-3B5DD734BA6F} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {16FEFD31-B0D6-4291-B620-F902A16F39DC} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {573C617F-6BB2-403A-AD87-E00A7FD537F0} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {F422398C-72CD-43EA-AC8E-E0DBD08E5563} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {8CE782A2-7374-4916-9C69-1F87E51A64A9} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {4A93E1A2-B61E-31B2-33F2-478156A9B5E7} = {E7F15C9C-3928-47AD-8462-64FD29FFCA54}
- {53EBA540-F6CF-0715-1F62-241A53F537EC} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {FB4ED3AA-A12E-4192-861F-4B025876AA0F} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- {A85AA656-6DB6-4A0B-AA80-CBB4058B3DDB} = {E7F15C9C-3928-47AD-8462-64FD29FFCA54}
- {82881535-7E40-80D9-F086-A3847775F2E7} = {24088844-2107-4DB2-8F3F-CBCA94FC4B28}
- {7BA0E74E-798E-4399-2EDE-A23BD5DA78CA} = {E7F15C9C-3928-47AD-8462-64FD29FFCA54}
- {2C0DFAC0-5D58-D172-ECE4-CBB78AD03435} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {E6C0466E-BE8D-C04F-149A-FD98438F1413} = {BB874DF1-44FE-415A-B634-A6B829107890}
- {F608D3A3-125B-CD88-1D51-8714ED142029} = {6AEE1440-FDF0-4729-8196-B24D0E333550}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {31E0F4D5-975A-41CC-933E-545B2201FAF9}
- EndGlobalSection
-EndGlobal
diff --git a/TestFx.slnx b/TestFx.slnx
new file mode 100644
index 0000000000..d1a4ea3a97
--- /dev/null
+++ b/TestFx.slnx
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/azure-pipelines-official.yml b/azure-pipelines-official.yml
index 2ead4ae47b..982eec0b70 100644
--- a/azure-pipelines-official.yml
+++ b/azure-pipelines-official.yml
@@ -140,13 +140,16 @@ extends:
- ${{ if eq(parameters.SkipTests, False) }}:
# -ci is allowing to import some environment variables and some required configurations
- # -nobl avoids overwriting build binlog with binlog from tests
- script: Test.cmd
-configuration $(_BuildConfig)
-ci
-nobl
+ /bl:$(BUILD.SOURCESDIRECTORY)\artifacts\TestResults\$(_BuildConfig)\TestStep.binlog
name: Test
displayName: Test
+ env:
+ TESTINGPLATFORM_DEFAULT_HANG_TIMEOUT: 5m
+ DOTNET_ROOT: $(Build.SourcesDirectory)/.dotnet
- task: CopyFiles@2
displayName: 'Copy binlogs'
@@ -169,25 +172,27 @@ extends:
Remove-Item -Path $(Build.SourcesDirectory)/artifacts/tmp -Recurse -Force
displayName: Remove artifacts/tmp
- # This step is only helpful for diagnosing some issues with vstest/test host that would not appear
- # through the console or trx
- task: 1ES.PublishBuildArtifacts@1
displayName: 'Publish Test Results folders'
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
- ArtifactName: TestResults_Windows
- condition: failed()
+ ArtifactName: TestResults_Windows_Attempt$(System.JobAttempt)
+ condition: always()
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate to test-tools feed'
- - task: 1ES.PublishNuget@1
- displayName: 'Publish NuGet packages to test-tools feed'
- inputs:
- # Do not push symbol packages nor Microsoft.Testing.Platform package
- packageParentPath: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)'
- packagesToPush: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/**/*.nupkg;!$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/**/*.symbols.nupkg;!$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/NonShipping/Microsoft.Testing.Platform.*.nupkg'
- publishVstsFeed: 'public/test-tools'
+ # Final builds should not go into test-tools package feed, so we can keep re-building them until we are ready to ship to nuget.org.
+ # This has to depend on the parameter and not on variable, variables are not defined early enough to be used in templating condition.
+ # We still need the final builds on test-tools so that internal repos can consume it, so we will publish it manually.
+ - ${{ if eq(parameters.isRTM, False) }}:
+ - task: 1ES.PublishNuget@1
+ displayName: 'Publish NuGet packages to test-tools feed'
+ inputs:
+ # Do not push symbol packages nor Microsoft.Testing.Platform package
+ packageParentPath: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)'
+ packagesToPush: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/**/*.nupkg;!$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/**/*.symbols.nupkg;!$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/NonShipping/Microsoft.Testing.Platform.*.nupkg'
+ publishVstsFeed: 'public/test-tools'
- job: Linux
timeoutInMinutes: 90
@@ -208,21 +213,21 @@ extends:
- ${{ if eq(parameters.SkipTests, False) }}:
# -ci is allowing to import some environment variables and some required configurations
- # --nobl avoids overwriting build binlog with binlog from tests
- script: |
chmod +x ./test.sh
- ./test.sh --configuration $(_BuildConfig) --ci --test --integrationTest --nobl
+ ./test.sh --configuration $(_BuildConfig) --ci --test --integrationTest --nobl /bl:$(BUILD.SOURCESDIRECTORY)/artifacts/TestResults/$(_BuildConfig)/TestStep.binlog
name: Test
displayName: Tests
+ env:
+ TESTINGPLATFORM_DEFAULT_HANG_TIMEOUT: 5m
+ DOTNET_ROOT: $(Build.SourcesDirectory)/.dotnet
- # This step is only helpful for diagnosing some issues with vstest/test host that would not appear
- # through the console or trx
- task: 1ES.PublishBuildArtifacts@1
displayName: 'Publish Test Results folders'
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
- ArtifactName: TestResults_Linux
- condition: failed()
+ ArtifactName: TestResults_Linux_Attempt$(System.JobAttempt)
+ condition: always()
- ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
- template: /eng/common/templates-official/job/onelocbuild.yml@self
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 1a37097e89..8ec5bd75e4 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -1,3 +1,9 @@
+trigger:
+ branches:
+ include:
+ - main
+ - rel/*
+
# Branch(es) that trigger(s) build(s) on PR
pr:
branches:
@@ -16,6 +22,7 @@ pr:
- README.md
- SECURITY.md
- src/**/*.xlf
+ - azure-pipelines-official.yml
parameters:
# This option should be used with caution. This is useful for unblocking circular deps issue with testanywhere
@@ -76,7 +83,15 @@ stages:
filePath: ./eng/install-procdump.ps1
failOnStderr: true
showWarnings: true
-
+ - task: PowerShell@2
+ displayName: 'Enable local dumps'
+ inputs:
+ targetType: 'inline'
+ script: |
+ New-Item -Path $(Build.SourcesDirectory)\artifacts\CrashDumps -ItemType Directory -Force
+ Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps"
+ New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" -Name "DumpFolder" -Value "$(Build.SourcesDirectory)\artifacts\CrashDumps" -PropertyType ExpandString -Force
+ New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps" -Name "DumpCount" -Value 10 -PropertyType DWord -Force
- task: PowerShell@2
displayName: 'Install Access Database Engine'
inputs:
@@ -88,31 +103,38 @@ stages:
- script: eng\common\CIBuild.cmd
-configuration $(_BuildConfig)
-prepareMachine
+ /p:Publish=false
/p:Test=false
/p:FastAcceptanceTest=true
name: Build
displayName: Build
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish NuGet packages'
+ inputs:
+ PathtoPublish: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/Shipping'
+ ArtifactName: '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)'
+ condition: always()
+
- ${{ if eq(parameters.SkipTests, False) }}:
# Because the build step is using -ci flag, restore is done in a local .packages directory.
# We need to pass NUGET_PACKAGES so that when dotnet test is doing evaluation phase on the projects, it can resolve .props/.targets from packages and import them.
# Otherwise, props/targets are not imported. It's important that they are imported so that IsTestingPlatformApplication ends up being set.
- - script: $(Build.SourcesDirectory)/.dotnet/dotnet test -c $(_BuildConfig) --no-build -bl:$(BUILD.SOURCESDIRECTORY)\artifacts\log\$(_BuildConfig)\TestStep.binlog
+ - script: dotnet test -c $(_BuildConfig) --no-build -bl:$(BUILD.SOURCESDIRECTORY)\artifacts\TestResults\$(_BuildConfig)\TestStep.binlog --no-progress -p:UsingDotNetTest=true
name: Test
displayName: Test
env:
DOTNET_ROOT: $(Build.SourcesDirectory)/.dotnet
NUGET_PACKAGES: $(Build.SourcesDirectory)/.packages
+ DOTNET_CLI_CONTEXT_VERBOSE: 1
- # This step is only helpful for diagnosing some issues with vstest/test host that would not appear
- # through the console or trx
- task: PublishBuildArtifacts@1
displayName: 'Publish Test Results folders'
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
- ArtifactName: TestResults_Windows_$(_BuildConfig)
- condition: failed()
+ ArtifactName: TestResults_Windows_$(_BuildConfig)_Attempt$(System.JobAttempt)
+ condition: always()
- task: CopyFiles@2
displayName: 'Copy binlogs'
@@ -131,13 +153,20 @@ stages:
condition: always()
# Upload code coverage to codecov.io
- - script: $(Build.SourcesDirectory)/.dotnet/dotnet msbuild -restore
+ - script: dotnet msbuild -restore
eng/CodeCoverage.proj
/p:Configuration=$(_BuildConfig)
/bl:$(BUILD.SOURCESDIRECTORY)\artifacts\log\$(_BuildConfig)\CodeCoverage.binlog
displayName: Upload coverage to codecov.io
condition: and(succeeded(), eq(variables._BuildConfig, 'Debug'))
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish local dumps'
+ inputs:
+ PathtoPublish: '$(Build.SourcesDirectory)/artifacts/CrashDumps'
+ ArtifactName: TestResults_Windows_$(_BuildConfig)
+ condition: failed()
+
- job: Linux
timeoutInMinutes: 90
pool:
@@ -154,29 +183,36 @@ stages:
-configuration $(_BuildConfig)
-prepareMachine
/p:Test=false
+ /p:Publish=false
/p:NonWindowsBuild=true
/p:FastAcceptanceTest=true
displayName: Build
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish NuGet packages'
+ inputs:
+ PathtoPublish: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/Shipping'
+ ArtifactName: '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)'
+ condition: always()
+
- ${{ if eq(parameters.SkipTests, False) }}:
# Because the build step is using -ci flag, restore is done in a local .packages directory.
# We need to pass NUGET_PACKAGES so that when dotnet test is doing evaluation phase on the projects, it can resolve .props/.targets from packages and import them.
# Otherwise, props/targets are not imported. It's important that they are imported so that IsTestingPlatformApplication ends up being set.
- - script: $(Build.SourcesDirectory)/.dotnet/dotnet test --solution NonWindowsTests.slnf -c $(_BuildConfig) --no-build -bl:$(BUILD.SOURCESDIRECTORY)\artifacts\log\$(_BuildConfig)\TestStep.binlog
+ - script: dotnet test --solution NonWindowsTests.slnf -c $(_BuildConfig) --no-build -bl:$(BUILD.SOURCESDIRECTORY)/artifacts/TestResults/$(_BuildConfig)/TestStep.binlog --no-progress -p:UsingDotNetTest=true
name: Test
displayName: Test
env:
DOTNET_ROOT: $(Build.SourcesDirectory)/.dotnet
NUGET_PACKAGES: $(Build.SourcesDirectory)/.packages
+ DOTNET_CLI_CONTEXT_VERBOSE: 1
- # This step is only helpful for diagnosing some issues with vstest/test host that would not appear
- # through the console or trx
- task: PublishBuildArtifacts@1
displayName: 'Publish Test Results folders'
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
- ArtifactName: TestResults_Linux_$(_BuildConfig)
- condition: failed()
+ ArtifactName: TestResults_Linux_$(_BuildConfig)_Attempt$(System.JobAttempt)
+ condition: always()
- task: CopyFiles@2
displayName: 'Copy binlogs'
@@ -211,29 +247,36 @@ stages:
-configuration $(_BuildConfig)
-prepareMachine
/p:Test=false
+ /p:Publish=false
/p:NonWindowsBuild=true
/p:FastAcceptanceTest=true
displayName: Build
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish NuGet packages'
+ inputs:
+ PathtoPublish: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)/Shipping'
+ ArtifactName: '$(Agent.Os)_$(Agent.JobName)_Attempt$(System.JobAttempt)'
+ condition: always()
+
- ${{ if eq(parameters.SkipTests, False) }}:
# Because the build step is using -ci flag, restore is done in a local .packages directory.
# We need to pass NUGET_PACKAGES so that when dotnet test is doing evaluation phase on the projects, it can resolve .props/.targets from packages and import them.
# Otherwise, props/targets are not imported. It's important that they are imported so that IsTestingPlatformApplication ends up being set.
- - script: $(Build.SourcesDirectory)/.dotnet/dotnet test --solution NonWindowsTests.slnf -c $(_BuildConfig) --no-build -bl:$(BUILD.SOURCESDIRECTORY)\artifacts\log\$(_BuildConfig)\TestStep.binlog
+ - script: dotnet test --solution NonWindowsTests.slnf -c $(_BuildConfig) --no-build -bl:$(BUILD.SOURCESDIRECTORY)/artifacts/TestResults/$(_BuildConfig)/TestStep.binlog --no-progress -p:UsingDotNetTest=true
name: Test
displayName: Test
env:
DOTNET_ROOT: $(Build.SourcesDirectory)/.dotnet
NUGET_PACKAGES: $(Build.SourcesDirectory)/.packages
+ DOTNET_CLI_CONTEXT_VERBOSE: 1
- # This step is only helpful for diagnosing some issues with vstest/test host that would not appear
- # through the console or trx
- task: PublishBuildArtifacts@1
displayName: 'Publish Test Results folders'
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)'
- ArtifactName: TestResults_MacOs_$(_BuildConfig)
- condition: failed()
+ ArtifactName: TestResults_MacOs_$(_BuildConfig)_Attempt$(System.JobAttempt)
+ condition: always()
- task: CopyFiles@2
displayName: 'Copy binlogs'
diff --git a/docs/Changelog-Platform.md b/docs/Changelog-Platform.md
index 766d06c90e..edd71dc4ac 100644
--- a/docs/Changelog-Platform.md
+++ b/docs/Changelog-Platform.md
@@ -4,9 +4,335 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
+## [1.8.5] - 2025-09-30
+
+See full log [of v3.10.4...v3.10.5](https://github.com/microsoft/testfx/compare/v3.10.4...v3.10.5)
+
+### Fixed
+
+* Avoid long path issues for pipes by @Youssef1313 in [#6536](https://github.com/microsoft/testfx/pull/6536)
+* Clean TestProgressState on TestExecutionCompleted to fix HotReload by @Youssef1313 in [#6505](https://github.com/microsoft/testfx/pull/6551)
+
+### Artifacts
+
+* Microsoft.Testing.Platform: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Platform/1.8.5)
+* Microsoft.Testing.Platform.MSBuild: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild/1.8.5)
+* Microsoft.Testing.Extensions.CrashDump: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.8.5)
+* Microsoft.Testing.Extensions.HangDump: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.8.5)
+* Microsoft.Testing.Extensions.HotReload: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.8.5)
+* Microsoft.Testing.Extensions.Retry: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.8.5)
+* Microsoft.Testing.Extensions.Telemetry: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Telemetry/1.8.5)
+* Microsoft.Testing.Extensions.TrxReport: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.8.5)
+* Microsoft.Testing.Extensions.TrxReport.Abstractions: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions/1.8.5)
+* Microsoft.Testing.Extensions.VSTestBridge: [1.8.5](https://www.nuget.org/packages/Microsoft.Testing.Extensions.VSTestBridge/1.8.5)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25480.6](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25480.6)
+
+## [1.8.4] - 2025-09-02
+
+See full log [of v3.10.3...v3.10.4](https://github.com/microsoft/testfx/compare/v3.10.3...v3.10.4)
+
+### Fixed
+
+* Fix command-line arguments escaping when retry and test host controllers start child processes by @Youssef1313 in [#6462](https://github.com/microsoft/testfx/pull/6462)
+* Don't keep MTP process alive if pipe disconnects by @Youssef1313 in [#6477](https://github.com/microsoft/testfx/pull/6477)
+
+### Artifacts
+
+* Microsoft.Testing.Platform: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Platform/1.8.4)
+* Microsoft.Testing.Platform.MSBuild: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild/1.8.4)
+* Microsoft.Testing.Extensions.CrashDump: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.8.4)
+* Microsoft.Testing.Extensions.HangDump: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.8.4)
+* Microsoft.Testing.Extensions.HotReload: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.8.4)
+* Microsoft.Testing.Extensions.Retry: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.8.4)
+* Microsoft.Testing.Extensions.Telemetry: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Telemetry/1.8.4)
+* Microsoft.Testing.Extensions.TrxReport: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.8.4)
+* Microsoft.Testing.Extensions.TrxReport.Abstractions: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions/1.8.4)
+* Microsoft.Testing.Extensions.VSTestBridge: [1.8.4](https://www.nuget.org/packages/Microsoft.Testing.Extensions.VSTestBridge/1.8.4)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25452.8](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25452.8)
+
+## [1.8.3] - 2025-08-26
+
+See full log [of v3.10.2...v3.10.3](https://github.com/microsoft/testfx/compare/v3.10.2...v3.10.3)
+
+### Fixed
+
+* Unify reading runsettings by @Youssef1313 in [#6434](https://github.com/microsoft/testfx/pull/6434)
+
+### Artifacts
+
+* Microsoft.Testing.Platform: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Platform/1.8.3)
+* Microsoft.Testing.Platform.MSBuild: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild/1.8.3)
+* Microsoft.Testing.Extensions.CrashDump: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.8.3)
+* Microsoft.Testing.Extensions.HangDump: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.8.3)
+* Microsoft.Testing.Extensions.HotReload: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.8.3)
+* Microsoft.Testing.Extensions.Retry: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.8.3)
+* Microsoft.Testing.Extensions.Telemetry: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Telemetry/1.8.3)
+* Microsoft.Testing.Extensions.TrxReport: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.8.3)
+* Microsoft.Testing.Extensions.TrxReport.Abstractions: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions/1.8.3)
+* Microsoft.Testing.Extensions.VSTestBridge: [1.8.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.VSTestBridge/1.8.3)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25425.9](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25425.9)
+
+## [1.8.2] - 2025-08-12
+
+See full log [of v3.10.1...v3.10.2](https://github.com/microsoft/testfx/compare/v3.10.1...v3.10.2)
+
+* No change, released to keep version aligned with MSTest.
+
+### Artifacts
+
+* Microsoft.Testing.Platform: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Platform/1.8.2)
+* Microsoft.Testing.Platform.MSBuild: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild/1.8.2)
+* Microsoft.Testing.Extensions.CrashDump: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.8.2)
+* Microsoft.Testing.Extensions.HangDump: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.8.2)
+* Microsoft.Testing.Extensions.HotReload: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.8.2)
+* Microsoft.Testing.Extensions.Retry: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.8.2)
+* Microsoft.Testing.Extensions.Telemetry: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Telemetry/1.8.2)
+* Microsoft.Testing.Extensions.TrxReport: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.8.2)
+* Microsoft.Testing.Extensions.TrxReport.Abstractions: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions/1.8.2)
+* Microsoft.Testing.Extensions.VSTestBridge: [1.8.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.VSTestBridge/1.8.2)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25411.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25411.2)
+
+## [1.8.1] - 2025-08-05
+
+See full log [of v3.10.0...v3.10.1](https://github.com/microsoft/testfx/compare/v3.10.0...v3.10.1)
+
+* No change, released to keep version aligned with MSTest.
+
+### Artifacts
+
+* Microsoft.Testing.Platform: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Platform/1.8.1)
+* Microsoft.Testing.Platform.MSBuild: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild/1.8.1)
+* Microsoft.Testing.Extensions.CrashDump: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.8.1)
+* Microsoft.Testing.Extensions.HangDump: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.8.1)
+* Microsoft.Testing.Extensions.HotReload: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.8.1)
+* Microsoft.Testing.Extensions.Retry: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.8.1)
+* Microsoft.Testing.Extensions.Telemetry: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Telemetry/1.8.1)
+* Microsoft.Testing.Extensions.TrxReport: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.8.1)
+* Microsoft.Testing.Extensions.TrxReport.Abstractions: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions/1.8.1)
+* Microsoft.Testing.Extensions.VSTestBridge: [1.8.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.VSTestBridge/1.8.1)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25405.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25405.1)
+
+## [1.8.0] - 2025-07-29
+
+See full log [of v3.9.3...v3.10.0](https://github.com/microsoft/testfx/compare/v3.9.3...v3.10.0)
+
+### Added
+
+* Enable filtering with `TestMetadataProperty` in the treenode filter by @thomhurst in [#5679](https://github.com/microsoft/testfx/pull/5679)
+* Show colors in AzDo and GH actions by @nohwnd in [#5535](https://github.com/microsoft/testfx/pull/5535)
+* Handle metadata properties in TrxReport by @Youssef1313 in [#5891](https://github.com/microsoft/testfx/pull/5891)
+* Obsolete `ITestApplicationLifecycleCallbacks` and add `ITestHostApplicationLifetime` by @Youssef1313 in [#5889](https://github.com/microsoft/testfx/pull/5889)
+* Fix TrxReport not including test ignore reason by @Youssef1313 in [#5896](https://github.com/microsoft/testfx/pull/5896)
+* Support `--filter-uid` on console by @Youssef1313 in [#6002](https://github.com/microsoft/testfx/pull/6002)
+* Support unary not operator in TreeNodeFilter by @Youssef1313 in [#6127](https://github.com/microsoft/testfx/pull/6127)
+
+### Fixed
+
+* Fix MTP timeout parsing to use invariant culture instead of current culture by @Copilot in [#5705](https://github.com/microsoft/testfx/pull/5705)
+* Add lifecycle callbacks to test host orchestrator by @Youssef1313 in [#5717](https://github.com/microsoft/testfx/pull/5717)
+* Avoid potential clash with default TRX file name by @Youssef1313 in [#5939](https://github.com/microsoft/testfx/pull/5939)
+* Ensure TestRun id for retries is the same in TRX by @Youssef1313 in [#5945](https://github.com/microsoft/testfx/pull/5945)
+* Do not create TestResults dir for help and info options by @Evangelink in [#6020](https://github.com/microsoft/testfx/pull/6020)
+
+### Housekeeping
+
+* remove redundant Empty constructor and mark as warning by @SimonCropp in [#5378](https://github.com/microsoft/testfx/pull/5378)
+* use char based APIs in TryUnescape by @SimonCropp in [#5608](https://github.com/microsoft/testfx/pull/5608)
+* attribute param nullability in TryUnescape by @SimonCropp in [#5609](https://github.com/microsoft/testfx/pull/5609)
+* Cleanup TestApplicationResult by @Youssef1313 in [#5615](https://github.com/microsoft/testfx/pull/5615)
+* remove redundant fields by @SimonCropp in [#5610](https://github.com/microsoft/testfx/pull/5610)
+* Rename RegisterTestFramework adapterFactory parameter to frameworkFactory by @Copilot in [#5691](https://github.com/microsoft/testfx/pull/5691)
+* prefer specific scoped variables by @SimonCropp in [#5611](https://github.com/microsoft/testfx/pull/5611)
+* \[VSTestBridge] Avoid creating Uri instance for every test case. by @Youssef1313 in [#5743](https://github.com/microsoft/testfx/pull/5743)
+* avoid redundant string builder instance in ValidateTestHostEnvironmentVariablesAsync by @SimonCropp in [#5905](https://github.com/microsoft/testfx/pull/5905)
+* remove redundant assignment in TryGetOptionArgumentList by @SimonCropp in [#5908](https://github.com/microsoft/testfx/pull/5908)
+* remove redundant environment instance in TestHostBuilder by @SimonCropp in [#5914](https://github.com/microsoft/testfx/pull/5914)
+* Avoid keeping instance of process in DotnetMuxerLocator by @SimonCropp in [#5911](https://github.com/microsoft/testfx/pull/5911)
+* Add ProcessId to IEnvironment by @SimonCropp in [#5913](https://github.com/microsoft/testfx/pull/5913)
+* CrashDumpEnvironmentVariableProvider prefixes can be static by @SimonCropp in [#5909](https://github.com/microsoft/testfx/pull/5909)
+* remove unused SystemProcessHandler parameter by @SimonCropp in [#5918](https://github.com/microsoft/testfx/pull/5918)
+* missing using in AttachDebuggerIfNeeded by @SimonCropp in [#5919](https://github.com/microsoft/testfx/pull/5919)
+* redundant null checks in TrxProcessLifetimeHandler by @SimonCropp in [#5960](https://github.com/microsoft/testfx/pull/5960)
+* remove redundant BuildConsumerProducersAsync by @SimonCropp in [#5962](https://github.com/microsoft/testfx/pull/5962)
+* remove non generic ActionResult by @SimonCropp in [#5959](https://github.com/microsoft/testfx/pull/5959)
+* fix nullablity in FromFailedTest by @SimonCropp in [#5971](https://github.com/microsoft/testfx/pull/5971)
+* make dicts in NamedPipeBase strong typed by @SimonCropp in [#5973](https://github.com/microsoft/testfx/pull/5973)
+* simplify reading installLocation content by @SimonCropp in [#5968](https://github.com/microsoft/testfx/pull/5968)
+* update Polyfill and use Process.Kill by @SimonCropp in [#5943](https://github.com/microsoft/testfx/pull/5943)
+* Simplify IProcess.MainModule by @SimonCropp in [#5955](https://github.com/microsoft/testfx/pull/5955)
+* use ReadExactly from Polyfill by @SimonCropp in [#5972](https://github.com/microsoft/testfx/pull/5972)
+* suppress TPEXP warning for solution by @SimonCropp in [#5984](https://github.com/microsoft/testfx/pull/5984)
+* use ReadAllTextAsync from polyfill by @SimonCropp in [#5953](https://github.com/microsoft/testfx/pull/5953)
+* use TryAdd instead of TryGetValue and Add in Async MessageBus by @SimonCropp in [#5963](https://github.com/microsoft/testfx/pull/5963)
+* use XElement.LoadAsync in TrxCompareTool by @SimonCropp in [#5975](https://github.com/microsoft/testfx/pull/5975)
+* fix RunSettingsEnvironmentVariableProvider file name by @SimonCropp in [#6007](https://github.com/microsoft/testfx/pull/6007)
+* fix nullability of TestProgressState.DiscoveredTests by @SimonCropp in [#6011](https://github.com/microsoft/testfx/pull/6011)
+* remove Uid from DiscoveredTests by @SimonCropp in [#6019](https://github.com/microsoft/testfx/pull/6019)
+* remove predicate from RetryHelper by @SimonCropp in [#6027](https://github.com/microsoft/testfx/pull/6027)
+* update Polyfill and simplify SHA256 usage by @SimonCropp in [#6029](https://github.com/microsoft/testfx/pull/6029)
+* simplify TrxCompareTool using an inner type instead of tuples by @SimonCropp in [#6024](https://github.com/microsoft/testfx/pull/6024)
+* reduce some linq alloc in AppendTestDiscoverySummary by @SimonCropp in [#6025](https://github.com/microsoft/testfx/pull/6025)
+* fix Syncronous typo by @SimonCropp in [#6048](https://github.com/microsoft/testfx/pull/6048)
+
+### Artifacts
+
+* Microsoft.Testing.Platform: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Platform/1.8.0)
+* Microsoft.Testing.Platform.MSBuild: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Platform.MSBuild/1.8.0)
+* Microsoft.Testing.Extensions.CrashDump: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.8.0)
+* Microsoft.Testing.Extensions.HangDump: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.8.0)
+* Microsoft.Testing.Extensions.HotReload: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.8.0)
+* Microsoft.Testing.Extensions.Retry: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.8.0)
+* Microsoft.Testing.Extensions.Telemetry: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Telemetry/1.8.0)
+* Microsoft.Testing.Extensions.TrxReport: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.8.0)
+* Microsoft.Testing.Extensions.TrxReport.Abstractions: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport.Abstractions/1.8.0)
+* Microsoft.Testing.Extensions.VSTestBridge: [1.8.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.VSTestBridge/1.8.0)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25379.8](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25379.8)
+
+## [1.7.3] - 2025-06-17
+
+See full log [of v3.9.2...v3.9.3](https://github.com/microsoft/testfx/compare/v3.9.2...v3.9.3)
+
+### Fixed
+
+* Simpler fix for dotnet test when using retry by @Youssef1313 in [#5731](https://github.com/microsoft/testfx/pull/5684)
+
+### Artifacts
+
+* Microsoft.Testing.Extensions.CrashDump: [1.7.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.7.3)
+* Microsoft.Testing.Extensions.HangDump: [1.7.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.7.3)
+* Microsoft.Testing.Extensions.HotReload: [1.7.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.7.3)
+* Microsoft.Testing.Extensions.Retry: [1.7.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.7.3)
+* Microsoft.Testing.Extensions.TrxReport: [1.7.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.7.3)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25317.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25317.1)
+
+## [1.7.2] - 2025-06-10
+
+See full log [of v3.9.1...v3.9.2](https://github.com/microsoft/testfx/compare/v3.9.1...v3.9.2)
+
+### Fixed
+
+* Allow framework authors to use TestCase.FullyQualifiedName as the TestNodeUid by @Youssef1313 in [#5658](https://github.com/microsoft/testfx/pull/5658)
+
+### Artifacts
+
+* Microsoft.Testing.Extensions.CrashDump: [1.7.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.7.2)
+* Microsoft.Testing.Extensions.HangDump: [1.7.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.7.2)
+* Microsoft.Testing.Extensions.HotReload: [1.7.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.7.2)
+* Microsoft.Testing.Extensions.Retry: [1.7.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.7.2)
+* Microsoft.Testing.Extensions.TrxReport: [1.7.2](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.7.2)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25310.6](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25310.6)
+
+## [1.7.1] - 2025-05-27
+
+See full log [of v3.9.0...v3.9.1](https://github.com/microsoft/testfx/compare/v3.9.0...v3.9.1)
+
+### Fixed
+
+* VSTestBridge: Handle TestPropertyAttributes.Trait instead of special casing specific properties by @Youssef1313 in [#5644](https://github.com/microsoft/testfx/pull/5644)
+
+### Artifacts
+
+* MSTest: [3.9.1](https://www.nuget.org/packages/MSTest/3.9.1)
+* MSTest.TestFramework: [3.9.1](https://www.nuget.org/packages/MSTest.TestFramework/3.9.1)
+* MSTest.TestAdapter: [3.9.1](https://www.nuget.org/packages/MSTest.TestAdapter/3.9.1)
+* MSTest.Analyzers: [3.9.1](https://www.nuget.org/packages/MSTest.Analyzers/3.9.1)
+* MSTest.Sdk: [3.9.1](https://www.nuget.org/packages/MSTest.Sdk/3.9.1)
+* Microsoft.Testing.Extensions.CrashDump: [1.7.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.7.1)
+* Microsoft.Testing.Extensions.HangDump: [1.7.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.7.1)
+* Microsoft.Testing.Extensions.HotReload: [1.7.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.7.1)
+* Microsoft.Testing.Extensions.Retry: [1.7.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.7.1)
+* Microsoft.Testing.Extensions.TrxReport: [1.7.1](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.7.1)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25277.3](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25277.3)
+* MSTest.SourceGeneration: [1.0.0-alpha.25277.3](https://www.nuget.org/packages/MSTest.SourceGeneration/1.0.0-alpha.25277.3)
+* MSTest.Engine: [1.0.0-alpha.25277.3](https://www.nuget.org/packages/MSTest.Engine/1.0.0-alpha.25277.3)
+
+## [1.7.0] - 2025-05-20
+
+See full log [of v3.8.3...v3.9.0](https://github.com/microsoft/testfx/compare/v3.8.3...v3.9.0)
+
+### Added
+
+* [Source Breaking (only for framework authors)]: Support test artifacts in VS by @Youssef1313 in [#5323](https://github.com/microsoft/testfx/pull/5323)
+* Add (alpha) Azure DevOps extension to report errors by @nohwnd in [#5260](https://github.com/microsoft/testfx/pull/5260)
+* Add banner for MSTest.Engine by @Youssef1313 in [#5051](https://github.com/microsoft/testfx/pull/5051)
+* Use terminal logger for discovery by @nohwnd in [#4907](https://github.com/microsoft/testfx/pull/4907)
+* Add RetryContext.FirstRunResults by @Youssef1313 in [#5314](https://github.com/microsoft/testfx/pull/5314)
+* VSTestBridge: Add traits as TestMetadataProperty by @Youssef1313 in [#5316](https://github.com/microsoft/testfx/pull/5316)
+* Mark APIs not supported in wasi by @Youssef1313 in [#5367](https://github.com/microsoft/testfx/pull/5367)
+* Show disk info when hang dump fails by @Youssef1313 in [#5404](https://github.com/microsoft/testfx/pull/5404)
+* Implement analyzer for RetryAttribute to be present on test methods by @Youssef1313 in [#5437](https://github.com/microsoft/testfx/pull/5437)
+* Add TestMethodIdentifierProperty constructor with arity parameter by @Youssef1313 in [#5528](https://github.com/microsoft/testfx/pull/5528)
+
+### Fixed
+
+* Kill testhost if writing hang dump fails by @Youssef1313 in [#5538](https://github.com/microsoft/testfx/pull/5538)
+* Simplify generated file name by using DefaultLanguageSourceExtension by @Youssef1313 in [#5026](https://github.com/microsoft/testfx/pull/5026)
+* Fix handling of unsupported platforms of CancelKeyPress by @Youssef1313 in [#5038](https://github.com/microsoft/testfx/pull/5038)
+* Refactor logic around GetCurrentTestApplicationFullPath by @Youssef1313 in [#5037](https://github.com/microsoft/testfx/pull/5037)
+* Enable platform compatibility warnings for android, ios, tvos, and browser by @Youssef1313 in [#5046](https://github.com/microsoft/testfx/pull/5046)
+* Improve MSTest.SourceGeneration incrementality by @Youssef1313 in [#5053](https://github.com/microsoft/testfx/pull/5053)
+* remove redundant IPlatformOutputDeviceManager by @SimonCropp in [#4848](https://github.com/microsoft/testfx/pull/4848)
+* Avoid using unsupported APIs by @Youssef1313 in [#5057](https://github.com/microsoft/testfx/pull/5057)
+* Fix binlog base name for .NET Framework tests by @Youssef1313 in [#5102](https://github.com/microsoft/testfx/pull/5102)
+* Improve ExecutionContext propagation by @Youssef1313 in [#5156](https://github.com/microsoft/testfx/pull/5156)
+* use StringBuilder AppendJoin by @SimonCropp in [#5167](https://github.com/microsoft/testfx/pull/5167)
+* Update README.md with MSTest.Sdk information by @stan-sz in [#5214](https://github.com/microsoft/testfx/pull/5214)
+* Add assembly name by @nohwnd in [#5235](https://github.com/microsoft/testfx/pull/5235)
+* Correct branding as Microsoft.Testing.Platform by @Youssef1313 in [#5240](https://github.com/microsoft/testfx/pull/5240)
+* Remove extra space by @nohwnd in [#5238](https://github.com/microsoft/testfx/pull/5238)
+* Fix Retry for dotnet test by @Youssef1313 in [#5261](https://github.com/microsoft/testfx/pull/5261)
+* Onboard to new dotnet test experience by @Evangelink in [#5111](https://github.com/microsoft/testfx/pull/5111)
+* Add InstanceId to communication with dotnet test by @mariam-abdulla in [#5279](https://github.com/microsoft/testfx/pull/5279)
+* Add instance id to dotnet test protocol by @mariam-abdulla in [#5287](https://github.com/microsoft/testfx/pull/5287)
+* Use FileAccess.Read when reading testconfig.json file by @Youssef1313 in [#5264](https://github.com/microsoft/testfx/pull/5264)
+* Fix double empty line by @nohwnd in [#5317](https://github.com/microsoft/testfx/pull/5317)
+* Remove SessionUid from FileArtifactProperty by @Youssef1313 in [#5347](https://github.com/microsoft/testfx/pull/5347)
+* Fix typo in DotnetTestDataConsumer causes only first artifact to be sent by @Youssef1313 in [#5349](https://github.com/microsoft/testfx/pull/5349)
+* fix nullability in GetRepoRoot by @SimonCropp in [#5392](https://github.com/microsoft/testfx/pull/5392)
+* remove redundant null check in FormatInnerExceptions by @SimonCropp in [#5397](https://github.com/microsoft/testfx/pull/5397)
+* fix nullability of CreateBindCtx by @SimonCropp in [#5385](https://github.com/microsoft/testfx/pull/5385)
+* remove redundant control flow statements by @SimonCropp in [#5403](https://github.com/microsoft/testfx/pull/5403)
+* fix nullability of InvokeTestingPlatformTask _outputFileName by @SimonCropp in [#5394](https://github.com/microsoft/testfx/pull/5394)
+* fix nullability of argument in GetProcessExitCodeAsync_IgnoreExitCodes by @SimonCropp in [#5386](https://github.com/microsoft/testfx/pull/5386)
+* remove redundant null check for OpenBaseKey return by @SimonCropp in [#5395](https://github.com/microsoft/testfx/pull/5395)
+* remove redundant null check in GetStringFromIndexOrDefault by @SimonCropp in [#5396](https://github.com/microsoft/testfx/pull/5396)
+* fix nullability in FileLoggerProvider by @SimonCropp in [#5398](https://github.com/microsoft/testfx/pull/5398)
+* remove un-used TestNodeProcessor by @SimonCropp in [#5430](https://github.com/microsoft/testfx/pull/5430)
+* Rename MTP entrypoint to MicrosoftTestingPlatformEntryPoint by @Youssef1313 in [#5423](https://github.com/microsoft/testfx/pull/5423)
+* use null propagation and mark as warning in editorconfig by @SimonCropp in [#5383](https://github.com/microsoft/testfx/pull/5383)
+* FindNode cant return null by @SimonCropp in [#5448](https://github.com/microsoft/testfx/pull/5448)
+* remove un-used methods in UnicodeCharacterUtilities by @SimonCropp in [#5444](https://github.com/microsoft/testfx/pull/5444)
+* remove ServerLogMessageInMemoryStore by @SimonCropp in [#5456](https://github.com/microsoft/testfx/pull/5456)
+* Remove some redundant casts and mark as a warning for rider and R# by @SimonCropp in [#5459](https://github.com/microsoft/testfx/pull/5459)
+* Use GetFileNameWithoutExtension for crashdump file name to be consistent with hangdump by @Youssef1313 in [#5454](https://github.com/microsoft/testfx/pull/5454)
+* Remove dead --internal-vstest-adapter by @Youssef1313 in [#5450](https://github.com/microsoft/testfx/pull/5450)
+* Consistent command-line options provider properties by @Youssef1313 in [#5452](https://github.com/microsoft/testfx/pull/5452)
+* Update Fakes dependency by @stan-sz in [#5482](https://github.com/microsoft/testfx/pull/5482)
+* Use PlatformVersion.Version as the server version by @Youssef1313 in [#5486](https://github.com/microsoft/testfx/pull/5486)
+* Handle DebugOrTraceTrxMessage in TrxReportEngine by @Youssef1313 in [#5510](https://github.com/microsoft/testfx/pull/5510)
+* Few improvements to AzDO extension by @Youssef1313 in [#5513](https://github.com/microsoft/testfx/pull/5513)
+* VSTestBridge+MSTest: Use TestMethodIdentifierProperty and stop sending VSTest-specifics by @Youssef1313 in [#5409](https://github.com/microsoft/testfx/pull/5409)
+* Add vstest.TestCase.CodeFilePath and vstest.TestCase.LineNumber by @Youssef1313 in [#5539](https://github.com/microsoft/testfx/pull/5539)
+
+### Artifacts
+
+* MSTest: [3.9.0](https://www.nuget.org/packages/MSTest/3.9.0)
+* MSTest.TestFramework: [3.9.0](https://www.nuget.org/packages/MSTest.TestFramework/3.9.0)
+* MSTest.TestAdapter: [3.9.0](https://www.nuget.org/packages/MSTest.TestAdapter/3.9.0)
+* MSTest.Analyzers: [3.9.0](https://www.nuget.org/packages/MSTest.Analyzers/3.9.0)
+* MSTest.Sdk: [3.9.0](https://www.nuget.org/packages/MSTest.Sdk/3.9.0)
+* Microsoft.Testing.Extensions.CrashDump: [1.7.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.CrashDump/1.7.0)
+* Microsoft.Testing.Extensions.HangDump: [1.7.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HangDump/1.7.0)
+* Microsoft.Testing.Extensions.HotReload: [1.7.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.HotReload/1.7.0)
+* Microsoft.Testing.Extensions.Retry: [1.7.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.Retry/1.7.0)
+* Microsoft.Testing.Extensions.TrxReport: [1.7.0](https://www.nuget.org/packages/Microsoft.Testing.Extensions.TrxReport/1.7.0)
+* Microsoft.Testing.Extensions.AzureDevOpsReport [1.0.0-alpha.25256.6](https://www.nuget.org/packages/Microsoft.Testing.Extensions.AzureDevOpsReport/1.0.0-alpha.25256.6)
+* MSTest.SourceGeneration: [1.0.0-alpha.25256.6](https://www.nuget.org/packages/MSTest.SourceGeneration/1.0.0-alpha.25256.6)
+* MSTest.Engine: [1.0.0-alpha.25256.6](https://www.nuget.org/packages/MSTest.Engine/1.0.0-alpha.25256.6)
+
## [1.6.3] - 2025-03-17
-See full log [here](https://github.com/microsoft/testfx/compare/v3.8.2...v3.8.3)
+See full log [of v3.8.2...v3.8.3](https://github.com/microsoft/testfx/compare/v3.8.2...v3.8.3)
### Fixed
@@ -35,7 +361,7 @@ See full log [here](https://github.com/microsoft/testfx/compare/v3.8.2...v3.8.3)
## [1.6.2] - 2025-02-19
-See full log [here](https://github.com/microsoft/testfx/compare/v3.8.1...v3.8.2)
+See full log [of v3.8.1...v3.8.2](https://github.com/microsoft/testfx/compare/v3.8.1...v3.8.2)
### Fixed
@@ -56,7 +382,7 @@ See full log [here](https://github.com/microsoft/testfx/compare/v3.8.1...v3.8.2)
## [1.6.1] - 2025-02-18
-See full log [here](https://github.com/microsoft/testfx/compare/v3.8.0...v3.8.1)
+See full log [of v3.8.0...v3.8.1](https://github.com/microsoft/testfx/compare/v3.8.0...v3.8.1)
### Fixed
@@ -79,7 +405,7 @@ See full log [here](https://github.com/microsoft/testfx/compare/v3.8.0...v3.8.1)
## [1.6.0] - 2025-02-12
-See full log [here](https://github.com/microsoft/testfx/compare/v3.7.3...v3.8.0)
+See full log [of v3.7.3...v3.8.0](https://github.com/microsoft/testfx/compare/v3.7.3...v3.8.0)
### Added
@@ -117,7 +443,7 @@ See full log [here](https://github.com/microsoft/testfx/compare/v3.7.3...v3.8.0)
## [1.5.3] - 2025-01-27
-See full log [here](https://github.com/microsoft/testfx/compare/v3.7.2...v3.7.3)
+See full log [of v3.7.2...v3.7.3](https://github.com/microsoft/testfx/compare/v3.7.2...v3.7.3)
### Fixed
@@ -138,7 +464,7 @@ See full log [here](https://github.com/microsoft/testfx/compare/v3.7.2...v3.7.3)
## [1.5.2] - 2025-01-21
-See full log [here](https://github.com/microsoft/testfx/compare/v3.7.1...v3.7.2)
+See full log [of v3.7.1...v3.7.2](https://github.com/microsoft/testfx/compare/v3.7.1...v3.7.2)
### Fixed
@@ -159,7 +485,7 @@ See full log [here](https://github.com/microsoft/testfx/compare/v3.7.1...v3.7.2)
## [1.5.1] - 2025-01-13
-See full log [here](https://github.com/microsoft/testfx/compare/v3.7.0...v3.7.1)
+See full log [of v3.7.0...v3.7.1](https://github.com/microsoft/testfx/compare/v3.7.0...v3.7.1)
### Fixed
@@ -181,7 +507,7 @@ See full log [here](https://github.com/microsoft/testfx/compare/v3.7.0...v3.7.1)
## [1.5.0] - 2024-12-20
-See full log [here](https://github.com/microsoft/testfx/compare/v1.4.3...v1.5.0)
+See full log [of v1.4.3...v1.5.0](https://github.com/microsoft/testfx/compare/v1.4.3...v1.5.0)
### Added
@@ -236,7 +562,7 @@ See full log [here](https://github.com/microsoft/testfx/compare/v1.4.3...v1.5.0)
## [1.4.3] - 2024-11-12
-See full log [here](https://github.com/microsoft/testanywhere/compare/v1.4.2...v1.4.3)
+See full log [of v1.4.2...v1.4.3](https://github.com/microsoft/testanywhere/compare/v1.4.2...v1.4.3)
### Fixed
@@ -259,7 +585,7 @@ See full log [here](https://github.com/microsoft/testanywhere/compare/v1.4.2...v
## [1.4.2] - 2024-10-31
-See full log [here](https://github.com/microsoft/testanywhere/compare/v1.4.1...v1.4.2)
+See full log [of v1.4.1...v1.4.2](https://github.com/microsoft/testanywhere/compare/v1.4.1...v1.4.2)
### Fixed
@@ -282,7 +608,7 @@ See full log [here](https://github.com/microsoft/testanywhere/compare/v1.4.1...v
## [1.4.1] - 2024-10-03
-See full log [here](https://github.com/microsoft/testanywhere/compare/v1.4.0...v1.4.1)
+See full log [of v1.4.0...v1.4.1](https://github.com/microsoft/testanywhere/compare/v1.4.0...v1.4.1)
### Fixed
@@ -305,7 +631,7 @@ See full log [here](https://github.com/microsoft/testanywhere/compare/v1.4.0...v
## [1.4.0] - 2024-09-11
-See full log [here](https://github.com/microsoft/testanywhere/compare/v1.3.2...v1.4.0)
+See full log [of v1.3.2...v1.4.0](https://github.com/microsoft/testanywhere/compare/v1.3.2...v1.4.0)
### Added
@@ -377,7 +703,7 @@ See full log [here](https://github.com/microsoft/testanywhere/compare/v1.3.2...v
## [1.3.2] - 2024-08-05
-See full log [here](https://github.com/microsoft/testanywhere/compare/v1.3.1...v1.3.2)
+See full log [of v1.3.1...v1.3.2](https://github.com/microsoft/testanywhere/compare/v1.3.1...v1.3.2)
### Fixed
@@ -401,7 +727,7 @@ See full log [here](https://github.com/microsoft/testanywhere/compare/v1.3.1...v
## [1.3.1] - 2024-07-15
-See full log [here](https://github.com/microsoft/testanywhere/compare/v1.2.1...v1.3.1)
+See full log [of v1.2.1...v1.3.1](https://github.com/microsoft/testanywhere/compare/v1.2.1...v1.3.1)
### Added
diff --git a/docs/Changelog.md b/docs/Changelog.md
index 24e4e4da1b..f831a96576 100644
--- a/docs/Changelog.md
+++ b/docs/Changelog.md
@@ -4,9 +4,360 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
+## [3.10.5] - 2025-09-30
+
+See full log [of v3.10.4...v3.10.5](https://github.com/microsoft/testfx/compare/v3.10.4...v3.10.5)
+
+### Fixed
+
+* Include TestFramework.Extensions.dll in TestAdapter NuGet package for .NET Framework by @Youssef1313 in [#6625](https://github.com/microsoft/testfx/pull/6625)
+
+### Artifacts
+
+* MSTest: [3.10.5](https://www.nuget.org/packages/MSTest/3.10.5)
+* MSTest.TestFramework: [3.10.5](https://www.nuget.org/packages/MSTest.TestFramework/3.10.5)
+* MSTest.TestAdapter: [3.10.5](https://www.nuget.org/packages/MSTest.TestAdapter/3.10.5)
+* MSTest.Analyzers: [3.10.5](https://www.nuget.org/packages/MSTest.Analyzers/3.10.5)
+* MSTest.Sdk: [3.10.5](https://www.nuget.org/packages/MSTest.Sdk/3.10.5)
+* MSTest.SourceGeneration: [1.0.0-alpha.25480.6](https://www.nuget.org/packages/MSTest.SourceGeneration/1.0.0-alpha.25480.6)
+* MSTest.Engine: [1.0.0-alpha.25480.6](https://www.nuget.org/packages/MSTest.Engine/1.0.0-alpha.25480.6)
+
+## [3.10.4] - 2025-09-02
+
+See full log [of v3.10.3...v3.10.4](https://github.com/microsoft/testfx/compare/v3.10.3...v3.10.4)
+
+### Fixed
+
+* Synchronize _testContextMessageStringBuilder by @Youssef1313 in [#6459](https://github.com/microsoft/testfx/pull/6459)
+* Fix MSTEST0001 (parallelization analyzer) to work with VSTest by @Youssef1313 in [#6480](https://github.com/microsoft/testfx/pull/6480)
+* Fix StringAssertToAssertFixer to swap StringComparison and message arguments by @Youssef1313 in [#6481](https://github.com/microsoft/testfx/pull/6481)
+* Fix MSTEST0002 codefix to not change modifier order by @Youssef1313 in [#6479](https://github.com/microsoft/testfx/pull/6479)
+
+### Artifacts
+
+* MSTest: [3.10.4](https://www.nuget.org/packages/MSTest/3.10.4)
+* MSTest.TestFramework: [3.10.4](https://www.nuget.org/packages/MSTest.TestFramework/3.10.4)
+* MSTest.TestAdapter: [3.10.4](https://www.nuget.org/packages/MSTest.TestAdapter/3.10.4)
+* MSTest.Analyzers: [3.10.4](https://www.nuget.org/packages/MSTest.Analyzers/3.10.4)
+* MSTest.Sdk: [3.10.4](https://www.nuget.org/packages/MSTest.Sdk/3.10.4)
+* MSTest.SourceGeneration: [1.0.0-alpha.25452.8](https://www.nuget.org/packages/MSTest.SourceGeneration/1.0.0-alpha.25452.8)
+* MSTest.Engine: [1.0.0-alpha.25452.8](https://www.nuget.org/packages/MSTest.Engine/1.0.0-alpha.25452.8)
+
+## [3.10.3] - 2025-08-26
+
+See full log [of v3.10.2...v3.10.3](https://github.com/microsoft/testfx/compare/v3.10.2...v3.10.3)
+
+### Fixed
+
+* No change, released to keep version aligned with Microsoft.Testing.Platform.
+
+### Artifacts
+
+* MSTest: [3.10.3](https://www.nuget.org/packages/MSTest/3.10.3)
+* MSTest.TestFramework: [3.10.3](https://www.nuget.org/packages/MSTest.TestFramework/3.10.3)
+* MSTest.TestAdapter: [3.10.3](https://www.nuget.org/packages/MSTest.TestAdapter/3.10.3)
+* MSTest.Analyzers: [3.10.3](https://www.nuget.org/packages/MSTest.Analyzers/3.10.3)
+* MSTest.Sdk: [3.10.3](https://www.nuget.org/packages/MSTest.Sdk/3.10.3)
+* MSTest.SourceGeneration: [1.0.0-alpha.25425.9](https://www.nuget.org/packages/MSTest.SourceGeneration/1.0.0-alpha.25425.9)
+* MSTest.Engine: [1.0.0-alpha.25425.9](https://www.nuget.org/packages/MSTest.Engine/1.0.0-alpha.25425.9)
+
+## [3.10.2] - 2025-08-12
+
+See full log [of v3.10.1...v3.10.2](https://github.com/microsoft/testfx/compare/v3.10.1...v3.10.2)
+
+### Fixed
+
+* Revert Assert.That obsoletion by @Youssef1313 in [#6323](https://github.com/microsoft/testfx/pull/6323)
+
+### Artifacts
+
+* MSTest: [3.10.2](https://www.nuget.org/packages/MSTest/3.10.2)
+* MSTest.TestFramework: [3.10.2](https://www.nuget.org/packages/MSTest.TestFramework/3.10.2)
+* MSTest.TestAdapter: [3.10.2](https://www.nuget.org/packages/MSTest.TestAdapter/3.10.2)
+* MSTest.Analyzers: [3.10.2](https://www.nuget.org/packages/MSTest.Analyzers/3.10.2)
+* MSTest.Sdk: [3.10.2](https://www.nuget.org/packages/MSTest.Sdk/3.10.2)
+* MSTest.SourceGeneration: [1.0.0-alpha.25411.2](https://www.nuget.org/packages/MSTest.SourceGeneration/1.0.0-alpha.25411.2)
+* MSTest.Engine: [1.0.0-alpha.25411.2](https://www.nuget.org/packages/MSTest.Engine/1.0.0-alpha.25411.2)
+
+## [3.10.1] - 2025-08-05
+
+See full log [of v3.10.0...v3.10.1](https://github.com/microsoft/testfx/compare/v3.10.0...v3.10.1)
+
+### Fixed
+
+* Add compat overload for GetPipeName by @Youssef1313 in [#6227](https://github.com/microsoft/testfx/pull/6227)
+* Fix race in TestContextImplementation by @Youssef1313 in [#6249](https://github.com/microsoft/testfx/pull/6249)
+* Fix codefix of analyzer for flowing cancellation token by @Copilot in [#6239](https://github.com/microsoft/testfx/pull/6239)
+* Don't return null types from AssemblyEnumerator when ReflectionTypeLoadException is encountered by @Youssef1313 in [#6276](https://github.com/microsoft/testfx/pull/6276)
+* Fix analyzer false positives for collection asserts by @Youssef1313 in [#6300](https://github.com/microsoft/testfx/pull/6300)
+
+### Artifacts
+
+* MSTest: [3.10.1](https://www.nuget.org/packages/MSTest/3.10.1)
+* MSTest.TestFramework: [3.10.1](https://www.nuget.org/packages/MSTest.TestFramework/3.10.1)
+* MSTest.TestAdapter: [3.10.1](https://www.nuget.org/packages/MSTest.TestAdapter/3.10.1)
+* MSTest.Analyzers: [3.10.1](https://www.nuget.org/packages/MSTest.Analyzers/3.10.1)
+* MSTest.Sdk: [3.10.1](https://www.nuget.org/packages/MSTest.Sdk/3.10.1)
+* MSTest.SourceGeneration: [1.0.0-alpha.25405.1](https://www.nuget.org/packages/MSTest.SourceGeneration/1.0.0-alpha.25405.1)
+* MSTest.Engine: [1.0.0-alpha.25405.1](https://www.nuget.org/packages/MSTest.Engine/1.0.0-alpha.25405.1)
+
+## [3.10.0] - 2025-07-29
+
+See full log [of v3.9.3...v3.10.0](https://github.com/microsoft/testfx/compare/v3.9.3...v3.10.0)
+
+### Added
+
+* Inherit OwnerAttribute and PriorityAttribute from TestPropertyAttribute by @Youssef1313 in [#5591](https://github.com/microsoft/testfx/pull/5591)
+* Better handling of MSTest.TestAdapter under .NET Standard by @Youssef1313 in [#5647](https://github.com/microsoft/testfx/pull/5647)
+* Add implicit using even when not using MSTest.Sdk by @Youssef1313 in [#5589](https://github.com/microsoft/testfx/pull/5589)
+* Allow serialization of DateOnly/TimeOnly for parameterized tests by @Youssef1313 in [#5676](https://github.com/microsoft/testfx/pull/5676)
+* Implement analyzer/codefix to move from DataTestMethodAttribute to TestMethodAttribute by @Copilot in [#5706](https://github.com/microsoft/testfx/pull/5706)
+* Error if framework/adapter versions are mismatched at runtime by @Youssef1313 in [#5703](https://github.com/microsoft/testfx/pull/5703)
+* Add predicate-based overloads for Assert.ContainsSingle API by @Copilot in [#5767](https://github.com/microsoft/testfx/pull/5767)
+* Add Assert.IsInRange API with three overloads by @Copilot in [#5765](https://github.com/microsoft/testfx/pull/5765)
+* Add comparison Assert APIs (IsGreaterThan, IsLessThan, IsPositive, IsNegative) by @Copilot in [#5790](https://github.com/microsoft/testfx/pull/5790)
+* Add analyzer to suggest using cooperative cancellation for timeout by @Copilot in [#5786](https://github.com/microsoft/testfx/pull/5786)
+* Deprecates `That` property and suggest `Instance` instead by @Evangelink in [#5811](https://github.com/microsoft/testfx/pull/5811)
+* Improve error message for all Assert.Contains.cs APIs by @Copilot in [#5793](https://github.com/microsoft/testfx/pull/5793)
+* Add Assert StartsWith/DoesNotStartWith, EndsWith/DoesNotEndsWith, MatchesRegex/DoesNotMatchRegex by @Evangelink in [#5768](https://github.com/microsoft/testfx/pull/5768)
+* Obsolete Assert.Equals and add obsolete Assert.ReferenceEquals by @Copilot in [#5815](https://github.com/microsoft/testfx/pull/5815)
+* Bump AvoidExpectedExceptionAttributeAnalyzer to warning by @Youssef1313 in [#5864](https://github.com/microsoft/testfx/pull/5864)
+* Bump UseNewerAssertThrowsAnalyzer to warning by @Youssef1313 in [#5863](https://github.com/microsoft/testfx/pull/5863)
+* Add analyzer and code fix to migrate from StringAssert to Assert APIs by @Copilot in [#5792](https://github.com/microsoft/testfx/pull/5792)
+* Improve DataRow type mismatch error messages with descriptive parameter information by @Copilot in [#5819](https://github.com/microsoft/testfx/pull/5819)
+* Inherit DescriptionAttribute from TestPropertyAttribute by @Youssef1313 in [#6004](https://github.com/microsoft/testfx/pull/6004)
+* Add CIConditionAttribute to support CI-specific test execution control by @Copilot in [#5797](https://github.com/microsoft/testfx/pull/5797)
+* Obsolete CssIteration and CssProjectStructure attributes for v3.10 by @Copilot in [#5981](https://github.com/microsoft/testfx/pull/5981)
+* Support passing arguments to DynamicData methods by @Youssef1313 in [#5892](https://github.com/microsoft/testfx/pull/5892)
+* Add TestCategories property to ITestDataRow for per-test-case categorization by @Copilot in [#5795](https://github.com/microsoft/testfx/pull/5795)
+* Add diagnostic suppressor for IDE0060 warnings on TestContext parameters in MSTest fixture methods by @Copilot in [#6055](https://github.com/microsoft/testfx/pull/6055)
+* Add analyzer for incorrect TestContext property usage in fixture methods by @Copilot in [#5990](https://github.com/microsoft/testfx/pull/5990)
+* Update UseProperAssertMethodsAnalyzer to handle more use cases by @Copilot in [#6058](https://github.com/microsoft/testfx/pull/6058)
+* Add analyzer to flow TestContext.CTS.Token by @Youssef1313 in [#6126](https://github.com/microsoft/testfx/pull/6126)
+* Obsolete `TestTimeout` by @Evangelink in [#6144](https://github.com/microsoft/testfx/pull/6144)
+* Make ConditionBaseAttribute.IgnoreMessage settable by @Evangelink in [#6150](https://github.com/microsoft/testfx/pull/6150)
+* Add GlobalTestInitializeAttribute and GlobalTestCleanupAttribute by @Youssef1313 in [#6132](https://github.com/microsoft/testfx/pull/6132)
+
+### Fixed
+
+* OSConditionAttribute: Make ignore message depend on ConditionMode by @Youssef1313 in [#5587](https://github.com/microsoft/testfx/pull/5587)
+* Fix MSTEST0004 analyzer to recognize TestClass-derived attributes by @Copilot in [#5600](https://github.com/microsoft/testfx/pull/5600)
+* Fix MSTEST0005 false positive when using null-checking with TestContext constructor parameter by @Copilot in [#5601](https://github.com/microsoft/testfx/pull/5601)
+* Fix async void analyzer to detect StringAssert and CollectionAssert by @Copilot in [#5650](https://github.com/microsoft/testfx/pull/5650)
+* Fix leak in TestRunCancellationToken by @Youssef1313 in [#5730](https://github.com/microsoft/testfx/pull/5730)
+* Fix TraceListenerManager thread safety issue by @Youssef1313 in [#5750](https://github.com/microsoft/testfx/pull/5750)
+* Store the actual data to instead of deserializing by @Youssef1313 in [#5778](https://github.com/microsoft/testfx/pull/5778)
+* Fix STA regression when async method completes asynchronously between sync methods by @Youssef1313 in [#5922](https://github.com/microsoft/testfx/pull/5922)
+* Call GetDisplayName with the right arguments when tuples are used by @Youssef1313 in [#5929](https://github.com/microsoft/testfx/pull/5929)
+* Fix MSTEST0020 codefix placing code in static constructors by @Copilot in [#5935](https://github.com/microsoft/testfx/pull/5935)
+* Fix MSTEST0020 codefix constructor added in place of the TestInitialize method by @Copilot in [#5944](https://github.com/microsoft/testfx/pull/5944)
+* Fix TypeContainingTestMethodShouldBeATestClassAnalyzer to handle structs with TestMethod by @Copilot in [#5818](https://github.com/microsoft/testfx/pull/5818)
+* MSTest configuration improvement by @Youssef1313 in [#6078](https://github.com/microsoft/testfx/pull/6078)
+* Fix nullability suppressor for TestContext when explicit constructor is declared by @Youssef1313 in [#6139](https://github.com/microsoft/testfx/pull/6139)
+* Fix codefix behavior for partial classes with TestCleanup and Dispose in different parts by @Copilot in [#6164](https://github.com/microsoft/testfx/pull/6164)
+* Add missing `Func
+
+
+
diff --git a/eng/common/post-build/nuget-verification.ps1 b/eng/common/post-build/nuget-verification.ps1
index a365194a93..ac5c69ffca 100644
--- a/eng/common/post-build/nuget-verification.ps1
+++ b/eng/common/post-build/nuget-verification.ps1
@@ -30,7 +30,7 @@
[CmdletBinding(PositionalBinding = $false)]
param(
[string]$NuGetExePath,
- [string]$PackageSource = "https://api.nuget.org/v3/index.json",
+ [string]$PackageSource = "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json",
[string]$DownloadPath,
[Parameter(ValueFromRemainingArguments = $true)]
[string[]]$args
diff --git a/eng/common/sdk-task.ps1 b/eng/common/sdk-task.ps1
index a9d2a2d269..4655af7a2d 100644
--- a/eng/common/sdk-task.ps1
+++ b/eng/common/sdk-task.ps1
@@ -7,13 +7,14 @@ Param(
[switch] $restore,
[switch] $prepareMachine,
[switch][Alias('nobl')]$excludeCIBinaryLog,
+ [switch]$noWarnAsError,
[switch] $help,
[Parameter(ValueFromRemainingArguments=$true)][String[]]$properties
)
$ci = $true
$binaryLog = if ($excludeCIBinaryLog) { $false } else { $true }
-$warnAsError = $true
+$warnAsError = if ($noWarnAsError) { $false } else { $true }
. $PSScriptRoot\tools.ps1
@@ -67,7 +68,7 @@ try {
$GlobalJson.tools | Add-Member -Name "vs" -Value (ConvertFrom-Json "{ `"version`": `"16.5`" }") -MemberType NoteProperty
}
if( -not ($GlobalJson.tools.PSObject.Properties.Name -match "xcopy-msbuild" )) {
- $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.13.0" -MemberType NoteProperty
+ $GlobalJson.tools | Add-Member -Name "xcopy-msbuild" -Value "17.14.16" -MemberType NoteProperty
}
if ($GlobalJson.tools."xcopy-msbuild".Trim() -ine "none") {
$xcopyMSBuildToolsFolder = InitializeXCopyMSBuild $GlobalJson.tools."xcopy-msbuild" -install $true
diff --git a/eng/common/sdk-task.sh b/eng/common/sdk-task.sh
index 2f83adc026..3270f83fa9 100644
--- a/eng/common/sdk-task.sh
+++ b/eng/common/sdk-task.sh
@@ -10,6 +10,7 @@ show_usage() {
echo "Advanced settings:"
echo " --excludeCIBinarylog Don't output binary log (short: -nobl)"
+ echo " --noWarnAsError Do not warn as error"
echo ""
echo "Command line arguments not listed above are passed thru to msbuild."
}
@@ -52,6 +53,7 @@ exclude_ci_binary_log=false
restore=false
help=false
properties=''
+warnAsError=true
while (($# > 0)); do
lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")"
@@ -73,6 +75,10 @@ while (($# > 0)); do
exclude_ci_binary_log=true
shift 1
;;
+ --noWarnAsError)
+ warnAsError=false
+ shift 1
+ ;;
--help)
help=true
shift 1
@@ -85,7 +91,6 @@ while (($# > 0)); do
done
ci=true
-warnAsError=true
if $help; then
show_usage
diff --git a/eng/common/template-guidance.md b/eng/common/template-guidance.md
index 98bbc1ded0..4bf4cf41bd 100644
--- a/eng/common/template-guidance.md
+++ b/eng/common/template-guidance.md
@@ -50,7 +50,7 @@ extends:
- task: CopyFiles@2
displayName: Gather build output
inputs:
- SourceFolder: '$(Build.SourcesDirectory)/artifacts/marvel'
+ SourceFolder: '$(System.DefaultWorkingDirectory)/artifacts/marvel'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/marvel'
```
diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml
index a8a9432874..92a0664f56 100644
--- a/eng/common/templates-official/job/job.yml
+++ b/eng/common/templates-official/job/job.yml
@@ -3,7 +3,7 @@ parameters:
enableSbom: true
runAsPublic: false
PackageVersion: 9.0.0
- BuildDropPath: '$(Build.SourcesDirectory)/artifacts'
+ BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts'
jobs:
- template: /eng/common/core-templates/job/job.yml
diff --git a/eng/common/templates-official/variables/sdl-variables.yml b/eng/common/templates-official/variables/sdl-variables.yml
index dbdd66d4a4..f1311bbb1b 100644
--- a/eng/common/templates-official/variables/sdl-variables.yml
+++ b/eng/common/templates-official/variables/sdl-variables.yml
@@ -4,4 +4,4 @@ variables:
- name: DefaultGuardianVersion
value: 0.109.0
- name: GuardianPackagesConfigFile
- value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config
\ No newline at end of file
+ value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config
\ No newline at end of file
diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml
index 7cbf668c22..238fa0818f 100644
--- a/eng/common/templates/job/job.yml
+++ b/eng/common/templates/job/job.yml
@@ -6,7 +6,7 @@ parameters:
enableSbom: true
runAsPublic: false
PackageVersion: 9.0.0
- BuildDropPath: '$(Build.SourcesDirectory)/artifacts'
+ BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts'
jobs:
- template: /eng/common/core-templates/job/job.yml
@@ -77,7 +77,7 @@ jobs:
parameters:
is1ESPipeline: false
args:
- targetPath: '$(Build.SourcesDirectory)\eng\common\BuildConfiguration'
+ targetPath: '$(System.DefaultWorkingDirectory)\eng\common\BuildConfiguration'
artifactName: 'BuildConfiguration'
displayName: 'Publish build retry configuration'
continueOnError: true
diff --git a/eng/common/templates/steps/vmr-sync.yml b/eng/common/templates/steps/vmr-sync.yml
new file mode 100644
index 0000000000..599afb6186
--- /dev/null
+++ b/eng/common/templates/steps/vmr-sync.yml
@@ -0,0 +1,207 @@
+### These steps synchronize new code from product repositories into the VMR (https://github.com/dotnet/dotnet).
+### They initialize the darc CLI and pull the new updates.
+### Changes are applied locally onto the already cloned VMR (located in $vmrPath).
+
+parameters:
+- name: targetRef
+ displayName: Target revision in dotnet/ to synchronize
+ type: string
+ default: $(Build.SourceVersion)
+
+- name: vmrPath
+ displayName: Path where the dotnet/dotnet is checked out to
+ type: string
+ default: $(Agent.BuildDirectory)/vmr
+
+- name: additionalSyncs
+ displayName: Optional list of package names whose repo's source will also be synchronized in the local VMR, e.g. NuGet.Protocol
+ type: object
+ default: []
+
+steps:
+- checkout: vmr
+ displayName: Clone dotnet/dotnet
+ path: vmr
+ clean: true
+
+- checkout: self
+ displayName: Clone $(Build.Repository.Name)
+ path: repo
+ fetchDepth: 0
+
+# This step is needed so that when we get a detached HEAD / shallow clone,
+# we still pull the commit into the temporary repo clone to use it during the sync.
+# Also unshallow the clone so that forwardflow command would work.
+- script: |
+ git branch repo-head
+ git rev-parse HEAD
+ displayName: Label PR commit
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- script: |
+ vmr_sha=$(grep -oP '(?<=Sha=")[^"]*' $(Agent.BuildDirectory)/repo/eng/Version.Details.xml)
+ echo "##vso[task.setvariable variable=vmr_sha]$vmr_sha"
+ displayName: Obtain the vmr sha from Version.Details.xml (Unix)
+ condition: ne(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- powershell: |
+ [xml]$xml = Get-Content -Path $(Agent.BuildDirectory)/repo/eng/Version.Details.xml
+ $vmr_sha = $xml.SelectSingleNode("//Source").Sha
+ Write-Output "##vso[task.setvariable variable=vmr_sha]$vmr_sha"
+ displayName: Obtain the vmr sha from Version.Details.xml (Windows)
+ condition: eq(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- script: |
+ git fetch --all
+ git checkout $(vmr_sha)
+ displayName: Checkout VMR at correct sha for repo flow
+ workingDirectory: ${{ parameters.vmrPath }}
+
+- script: |
+ git config --global user.name "dotnet-maestro[bot]"
+ git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com"
+ displayName: Set git author to dotnet-maestro[bot]
+ workingDirectory: ${{ parameters.vmrPath }}
+
+- script: |
+ ./eng/common/vmr-sync.sh \
+ --vmr ${{ parameters.vmrPath }} \
+ --tmp $(Agent.TempDirectory) \
+ --azdev-pat '$(dn-bot-all-orgs-code-r)' \
+ --ci \
+ --debug
+
+ if [ "$?" -ne 0 ]; then
+ echo "##vso[task.logissue type=error]Failed to synchronize the VMR"
+ exit 1
+ fi
+ displayName: Sync repo into VMR (Unix)
+ condition: ne(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- script: |
+ git config --global diff.astextplain.textconv echo
+ git config --system core.longpaths true
+ displayName: Configure Windows git (longpaths, astextplain)
+ condition: eq(variables['Agent.OS'], 'Windows_NT')
+
+- powershell: |
+ ./eng/common/vmr-sync.ps1 `
+ -vmr ${{ parameters.vmrPath }} `
+ -tmp $(Agent.TempDirectory) `
+ -azdevPat '$(dn-bot-all-orgs-code-r)' `
+ -ci `
+ -debugOutput
+
+ if ($LASTEXITCODE -ne 0) {
+ echo "##vso[task.logissue type=error]Failed to synchronize the VMR"
+ exit 1
+ }
+ displayName: Sync repo into VMR (Windows)
+ condition: eq(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
+ - task: CopyFiles@2
+ displayName: Collect failed patches
+ condition: failed()
+ inputs:
+ SourceFolder: '$(Agent.TempDirectory)'
+ Contents: '*.patch'
+ TargetFolder: '$(Build.ArtifactStagingDirectory)/FailedPatches'
+
+ - publish: '$(Build.ArtifactStagingDirectory)/FailedPatches'
+ artifact: $(System.JobDisplayName)_FailedPatches
+ displayName: Upload failed patches
+ condition: failed()
+
+- ${{ each assetName in parameters.additionalSyncs }}:
+ # The vmr-sync script ends up staging files in the local VMR so we have to commit those
+ - script:
+ git commit --allow-empty -am "Forward-flow $(Build.Repository.Name)"
+ displayName: Commit local VMR changes
+ workingDirectory: ${{ parameters.vmrPath }}
+
+ - script: |
+ set -ex
+
+ echo "Searching for details of asset ${{ assetName }}..."
+
+ # Use darc to get dependencies information
+ dependencies=$(./.dotnet/dotnet darc get-dependencies --name '${{ assetName }}' --ci)
+
+ # Extract repository URL and commit hash
+ repository=$(echo "$dependencies" | grep 'Repo:' | sed 's/Repo:[[:space:]]*//' | head -1)
+
+ if [ -z "$repository" ]; then
+ echo "##vso[task.logissue type=error]Asset ${{ assetName }} not found in the dependency list"
+ exit 1
+ fi
+
+ commit=$(echo "$dependencies" | grep 'Commit:' | sed 's/Commit:[[:space:]]*//' | head -1)
+
+ echo "Updating the VMR from $repository / $commit..."
+ cd ..
+ git clone $repository ${{ assetName }}
+ cd ${{ assetName }}
+ git checkout $commit
+ git branch "sync/$commit"
+
+ ./eng/common/vmr-sync.sh \
+ --vmr ${{ parameters.vmrPath }} \
+ --tmp $(Agent.TempDirectory) \
+ --azdev-pat '$(dn-bot-all-orgs-code-r)' \
+ --ci \
+ --debug
+
+ if [ "$?" -ne 0 ]; then
+ echo "##vso[task.logissue type=error]Failed to synchronize the VMR"
+ exit 1
+ fi
+ displayName: Sync ${{ assetName }} into (Unix)
+ condition: ne(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
+
+ - powershell: |
+ $ErrorActionPreference = 'Stop'
+
+ Write-Host "Searching for details of asset ${{ assetName }}..."
+
+ $dependencies = .\.dotnet\dotnet darc get-dependencies --name '${{ assetName }}' --ci
+
+ $repository = $dependencies | Select-String -Pattern 'Repo:\s+([^\s]+)' | Select-Object -First 1
+ $repository -match 'Repo:\s+([^\s]+)' | Out-Null
+ $repository = $matches[1]
+
+ if ($repository -eq $null) {
+ Write-Error "Asset ${{ assetName }} not found in the dependency list"
+ exit 1
+ }
+
+ $commit = $dependencies | Select-String -Pattern 'Commit:\s+([^\s]+)' | Select-Object -First 1
+ $commit -match 'Commit:\s+([^\s]+)' | Out-Null
+ $commit = $matches[1]
+
+ Write-Host "Updating the VMR from $repository / $commit..."
+ cd ..
+ git clone $repository ${{ assetName }}
+ cd ${{ assetName }}
+ git checkout $commit
+ git branch "sync/$commit"
+
+ .\eng\common\vmr-sync.ps1 `
+ -vmr ${{ parameters.vmrPath }} `
+ -tmp $(Agent.TempDirectory) `
+ -azdevPat '$(dn-bot-all-orgs-code-r)' `
+ -ci `
+ -debugOutput
+
+ if ($LASTEXITCODE -ne 0) {
+ echo "##vso[task.logissue type=error]Failed to synchronize the VMR"
+ exit 1
+ }
+ displayName: Sync ${{ assetName }} into (Windows)
+ condition: ne(variables['Agent.OS'], 'Windows_NT')
+ workingDirectory: $(Agent.BuildDirectory)/repo
diff --git a/eng/common/templates/vmr-build-pr.yml b/eng/common/templates/vmr-build-pr.yml
new file mode 100644
index 0000000000..ce3c29a62f
--- /dev/null
+++ b/eng/common/templates/vmr-build-pr.yml
@@ -0,0 +1,42 @@
+# This pipeline is used for running the VMR verification of the PR changes in repo-level PRs.
+#
+# It will run a full set of verification jobs defined in:
+# https://github.com/dotnet/dotnet/blob/10060d128e3f470e77265f8490f5e4f72dae738e/eng/pipelines/templates/stages/vmr-build.yml#L27-L38
+#
+# For repos that do not need to run the full set, you would do the following:
+#
+# 1. Copy this YML file to a repo-specific location, i.e. outside of eng/common.
+#
+# 2. Add `verifications` parameter to VMR template reference
+#
+# Examples:
+# - For source-build stage 1 verification, add the following:
+# verifications: [ "source-build-stage1" ]
+#
+# - For Windows only verifications, add the following:
+# verifications: [ "unified-build-windows-x64", "unified-build-windows-x86" ]
+
+trigger: none
+pr: none
+
+variables:
+- template: /eng/common/templates/variables/pool-providers.yml@self
+
+- name: skipComponentGovernanceDetection # we run CG on internal builds only
+ value: true
+
+- name: Codeql.Enabled # we run CodeQL on internal builds only
+ value: false
+
+resources:
+ repositories:
+ - repository: vmr
+ type: github
+ name: dotnet/dotnet
+ endpoint: dotnet
+
+stages:
+- template: /eng/pipelines/templates/stages/vmr-build.yml@vmr
+ parameters:
+ isBuiltFromVmr: false
+ scope: lite
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index 7373e53054..4bc50bd568 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -65,10 +65,8 @@ $ErrorActionPreference = 'Stop'
# Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed
[string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null }
-# True if the build is a product build
-[bool]$productBuild = if (Test-Path variable:productBuild) { $productBuild } else { $false }
-
-[String[]]$properties = if (Test-Path variable:properties) { $properties } else { @() }
+# True when the build is running within the VMR.
+[bool]$fromVMR = if (Test-Path variable:fromVMR) { $fromVMR } else { $false }
function Create-Directory ([string[]] $path) {
New-Item -Path $path -Force -ItemType 'Directory' | Out-Null
@@ -259,7 +257,20 @@ function Retry($downloadBlock, $maxRetries = 5) {
function GetDotNetInstallScript([string] $dotnetRoot) {
$installScript = Join-Path $dotnetRoot 'dotnet-install.ps1'
+ $shouldDownload = $false
+
if (!(Test-Path $installScript)) {
+ $shouldDownload = $true
+ } else {
+ # Check if the script is older than 30 days
+ $fileAge = (Get-Date) - (Get-Item $installScript).LastWriteTime
+ if ($fileAge.Days -gt 30) {
+ Write-Host "Existing install script is too old, re-downloading..."
+ $shouldDownload = $true
+ }
+ }
+
+ if ($shouldDownload) {
Create-Directory $dotnetRoot
$ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit
$uri = "https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.ps1"
@@ -383,8 +394,8 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
# If the version of msbuild is going to be xcopied,
# use this version. Version matches a package here:
- # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/17.13.0
- $defaultXCopyMSBuildVersion = '17.13.0'
+ # https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet-eng/NuGet/Microsoft.DotNet.Arcade.MSBuild.Xcopy/versions/17.14.16
+ $defaultXCopyMSBuildVersion = '17.14.16'
if (!$vsRequirements) {
if (Get-Member -InputObject $GlobalJson.tools -Name 'vs') {
@@ -416,7 +427,7 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
# Locate Visual Studio installation or download x-copy msbuild.
$vsInfo = LocateVisualStudio $vsRequirements
- if ($vsInfo -ne $null) {
+ if ($vsInfo -ne $null -and $env:ForceUseXCopyMSBuild -eq $null) {
# Ensure vsInstallDir has a trailing slash
$vsInstallDir = Join-Path $vsInfo.installationPath "\"
$vsMajorVersion = $vsInfo.installationVersion.Split('.')[0]
@@ -533,7 +544,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){
if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') {
$vswhereVersion = $GlobalJson.tools.vswhere
} else {
- $vswhereVersion = '2.5.2'
+ # keep this in sync with the VSWhereVersion in DefaultVersions.props
+ $vswhereVersion = '3.1.7'
}
$vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion"
@@ -541,7 +553,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){
if (!(Test-Path $vsWhereExe)) {
Create-Directory $vsWhereDir
- Write-Host 'Downloading vswhere'
+ Write-Host "Downloading vswhere $vswhereVersion"
+ $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit
Retry({
Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -OutFile $vswhereExe
})
@@ -646,7 +659,6 @@ function GetNuGetPackageCachePath() {
$env:NUGET_PACKAGES = Join-Path $env:UserProfile '.nuget\packages\'
} else {
$env:NUGET_PACKAGES = Join-Path $RepoRoot '.packages\'
- $env:RESTORENOHTTPCACHE = $true
}
}
@@ -768,28 +780,13 @@ function MSBuild() {
$toolsetBuildProject = InitializeToolset
$basePath = Split-Path -parent $toolsetBuildProject
- $possiblePaths = @(
- # new scripts need to work with old packages, so we need to look for the old names/versions
- (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll')),
- (Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.Arcade.Sdk.dll')),
-
- # This list doesn't need to be updated anymore and can eventually be removed.
- (Join-Path $basePath (Join-Path net9.0 'Microsoft.DotNet.ArcadeLogging.dll')),
- (Join-Path $basePath (Join-Path net9.0 'Microsoft.DotNet.Arcade.Sdk.dll')),
- (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.ArcadeLogging.dll')),
- (Join-Path $basePath (Join-Path net8.0 'Microsoft.DotNet.Arcade.Sdk.dll'))
- )
- $selectedPath = $null
- foreach ($path in $possiblePaths) {
- if (Test-Path $path -PathType Leaf) {
- $selectedPath = $path
- break
- }
- }
+ $selectedPath = Join-Path $basePath (Join-Path $buildTool.Framework 'Microsoft.DotNet.ArcadeLogging.dll')
+
if (-not $selectedPath) {
- Write-PipelineTelemetryError -Category 'Build' -Message 'Unable to find arcade sdk logger assembly.'
+ Write-PipelineTelemetryError -Category 'Build' -Message "Unable to find arcade sdk logger assembly: $selectedPath"
ExitWithExitCode 1
}
+
$args += "/logger:$selectedPath"
}
@@ -852,8 +849,8 @@ function MSBuild-Core() {
}
# When running on Azure Pipelines, override the returned exit code to avoid double logging.
- # Skip this when the build is a child of the VMR orchestrator build.
- if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$productBuild -and -not($properties -like "*DotNetBuildRepo=true*")) {
+ # Skip this when the build is a child of the VMR build.
+ if ($ci -and $env:SYSTEM_TEAMPROJECT -ne $null -and !$fromVMR) {
Write-PipelineSetResult -Result "Failed" -Message "msbuild execution failed."
# Exiting with an exit code causes the azure pipelines task to log yet another "noise" error
# The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error
diff --git a/eng/common/tools.sh b/eng/common/tools.sh
index d51f300c77..c1841c9dfd 100644
--- a/eng/common/tools.sh
+++ b/eng/common/tools.sh
@@ -5,6 +5,9 @@
# CI mode - set to true on CI server for PR validation build or official build.
ci=${ci:-false}
+# Build mode
+source_build=${source_build:-false}
+
# Set to true to use the pipelines logger which will enable Azure logging output.
# https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md
# This flag is meant as a temporary opt-opt for the feature while validate it across
@@ -58,7 +61,8 @@ use_installed_dotnet_cli=${use_installed_dotnet_cli:-true}
dotnetInstallScriptVersion=${dotnetInstallScriptVersion:-'v1'}
# True to use global NuGet cache instead of restoring packages to repository-local directory.
-if [[ "$ci" == true ]]; then
+# Keep in sync with NuGetPackageroot in Arcade SDK's RepositoryLayout.props.
+if [[ "$ci" == true || "$source_build" == true ]]; then
use_global_nuget_cache=${use_global_nuget_cache:-false}
else
use_global_nuget_cache=${use_global_nuget_cache:-true}
@@ -68,8 +72,8 @@ fi
runtime_source_feed=${runtime_source_feed:-''}
runtime_source_feed_key=${runtime_source_feed_key:-''}
-# True if the build is a product build
-product_build=${product_build:-false}
+# True when the build is running within the VMR.
+from_vmr=${from_vmr:-false}
# Resolve any symlinks in the given path.
function ResolvePath {
@@ -296,8 +300,29 @@ function GetDotNetInstallScript {
local root=$1
local install_script="$root/dotnet-install.sh"
local install_script_url="https://builds.dotnet.microsoft.com/dotnet/scripts/$dotnetInstallScriptVersion/dotnet-install.sh"
+ local timestamp_file="$root/.dotnet-install.timestamp"
+ local should_download=false
if [[ ! -a "$install_script" ]]; then
+ should_download=true
+ elif [[ -f "$timestamp_file" ]]; then
+ # Check if the script is older than 30 days using timestamp file
+ local download_time=$(cat "$timestamp_file" 2>/dev/null || echo "0")
+ local current_time=$(date +%s)
+ local age_seconds=$((current_time - download_time))
+
+ # 30 days = 30 * 24 * 60 * 60 = 2592000 seconds
+ if [[ $age_seconds -gt 2592000 ]]; then
+ echo "Existing install script is too old, re-downloading..."
+ should_download=true
+ fi
+ else
+ # No timestamp file exists, assume script is old and re-download
+ echo "No timestamp found for existing install script, re-downloading..."
+ should_download=true
+ fi
+
+ if [[ "$should_download" == true ]]; then
mkdir -p "$root"
echo "Downloading '$install_script_url'"
@@ -324,6 +349,9 @@ function GetDotNetInstallScript {
ExitWithExitCode $exit_code
}
fi
+
+ # Create timestamp file to track download time in seconds from epoch
+ date +%s > "$timestamp_file"
fi
# return value
_GetDotNetInstallScript="$install_script"
@@ -341,14 +369,12 @@ function InitializeBuildTool {
_InitializeBuildToolCommand="msbuild"
}
-# Set RestoreNoHttpCache as a workaround for https://github.com/NuGet/Home/issues/3116
function GetNuGetPackageCachePath {
if [[ -z ${NUGET_PACKAGES:-} ]]; then
if [[ "$use_global_nuget_cache" == true ]]; then
export NUGET_PACKAGES="$HOME/.nuget/packages/"
else
export NUGET_PACKAGES="$repo_root/.packages/"
- export RESTORENOHTTPCACHE=true
fi
fi
@@ -445,27 +471,13 @@ function MSBuild {
fi
local toolset_dir="${_InitializeToolset%/*}"
- # new scripts need to work with old packages, so we need to look for the old names/versions
- local selectedPath=
- local possiblePaths=()
- possiblePaths+=( "$toolset_dir/net/Microsoft.DotNet.ArcadeLogging.dll" )
- possiblePaths+=( "$toolset_dir/net/Microsoft.DotNet.Arcade.Sdk.dll" )
-
- # This list doesn't need to be updated anymore and can eventually be removed.
- possiblePaths+=( "$toolset_dir/net9.0/Microsoft.DotNet.ArcadeLogging.dll" )
- possiblePaths+=( "$toolset_dir/net9.0/Microsoft.DotNet.Arcade.Sdk.dll" )
- possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.ArcadeLogging.dll" )
- possiblePaths+=( "$toolset_dir/net8.0/Microsoft.DotNet.Arcade.Sdk.dll" )
- for path in "${possiblePaths[@]}"; do
- if [[ -f $path ]]; then
- selectedPath=$path
- break
- fi
- done
+ local selectedPath="$toolset_dir/net/Microsoft.DotNet.ArcadeLogging.dll"
+
if [[ -z "$selectedPath" ]]; then
- Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly."
+ Write-PipelineTelemetryError -category 'Build' "Unable to find arcade sdk logger assembly: $selectedPath"
ExitWithExitCode 1
fi
+
args+=( "-logger:$selectedPath" )
fi
@@ -502,8 +514,8 @@ function MSBuild-Core {
echo "Build failed with exit code $exit_code. Check errors above."
# When running on Azure Pipelines, override the returned exit code to avoid double logging.
- # Skip this when the build is a child of the VMR orchestrator build.
- if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$product_build" != true && "$properties" != *"DotNetBuildRepo=true"* ]]; then
+ # Skip this when the build is a child of the VMR build.
+ if [[ "$ci" == true && -n ${SYSTEM_TEAMPROJECT:-} && "$from_vmr" != true ]]; then
Write-PipelineSetResult -result "Failed" -message "msbuild execution failed."
# Exiting with an exit code causes the azure pipelines task to log yet another "noise" error
# The above Write-PipelineSetResult will cause the task to be marked as failure without adding yet another error
@@ -526,6 +538,7 @@ function GetDarc {
fi
"$eng_root/common/darc-init.sh" --toolpath "$darc_path" $version
+ darc_tool="$darc_path/darc"
}
# Returns a full path to an Arcade SDK task project file.
diff --git a/eng/common/vmr-sync.ps1 b/eng/common/vmr-sync.ps1
new file mode 100644
index 0000000000..97302f3205
--- /dev/null
+++ b/eng/common/vmr-sync.ps1
@@ -0,0 +1,138 @@
+<#
+.SYNOPSIS
+
+This script is used for synchronizing the current repository into a local VMR.
+It pulls the current repository's code into the specified VMR directory for local testing or
+Source-Build validation.
+
+.DESCRIPTION
+
+The tooling used for synchronization will clone the VMR repository into a temporary folder if
+it does not already exist. These clones can be reused in future synchronizations, so it is
+recommended to dedicate a folder for this to speed up re-runs.
+
+.EXAMPLE
+ Synchronize current repository into a local VMR:
+ ./vmr-sync.ps1 -vmrDir "$HOME/repos/dotnet" -tmpDir "$HOME/repos/tmp"
+
+.PARAMETER tmpDir
+Required. Path to the temporary folder where repositories will be cloned
+
+.PARAMETER vmrBranch
+Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch
+
+.PARAMETER azdevPat
+Optional. Azure DevOps PAT to use for cloning private repositories.
+
+.PARAMETER vmrDir
+Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder
+
+.PARAMETER debugOutput
+Optional. Enables debug logging in the darc vmr command.
+
+.PARAMETER ci
+Optional. Denotes that the script is running in a CI environment.
+#>
+param (
+ [Parameter(Mandatory=$true, HelpMessage="Path to the temporary folder where repositories will be cloned")]
+ [string][Alias('t', 'tmp')]$tmpDir,
+ [string][Alias('b', 'branch')]$vmrBranch,
+ [string]$remote,
+ [string]$azdevPat,
+ [string][Alias('v', 'vmr')]$vmrDir,
+ [switch]$ci,
+ [switch]$debugOutput
+)
+
+function Fail {
+ Write-Host "> $($args[0])" -ForegroundColor 'Red'
+}
+
+function Highlight {
+ Write-Host "> $($args[0])" -ForegroundColor 'Cyan'
+}
+
+$verbosity = 'verbose'
+if ($debugOutput) {
+ $verbosity = 'debug'
+}
+# Validation
+
+if (-not $tmpDir) {
+ Fail "Missing -tmpDir argument. Please specify the path to the temporary folder where the repositories will be cloned"
+ exit 1
+}
+
+# Sanitize the input
+
+if (-not $vmrDir) {
+ $vmrDir = Join-Path $tmpDir 'dotnet'
+}
+
+if (-not (Test-Path -Path $tmpDir -PathType Container)) {
+ New-Item -ItemType Directory -Path $tmpDir | Out-Null
+}
+
+# Prepare the VMR
+
+if (-not (Test-Path -Path $vmrDir -PathType Container)) {
+ Highlight "Cloning 'dotnet/dotnet' into $vmrDir.."
+ git clone https://github.com/dotnet/dotnet $vmrDir
+
+ if ($vmrBranch) {
+ git -C $vmrDir switch -c $vmrBranch
+ }
+}
+else {
+ if ((git -C $vmrDir diff --quiet) -eq $false) {
+ Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes"
+ exit 1
+ }
+
+ if ($vmrBranch) {
+ Highlight "Preparing $vmrDir"
+ git -C $vmrDir checkout $vmrBranch
+ git -C $vmrDir pull
+ }
+}
+
+Set-StrictMode -Version Latest
+
+# Prepare darc
+
+Highlight 'Installing .NET, preparing the tooling..'
+. .\eng\common\tools.ps1
+$dotnetRoot = InitializeDotNetCli -install:$true
+$darc = Get-Darc
+$dotnet = "$dotnetRoot\dotnet.exe"
+
+Highlight "Starting the synchronization of VMR.."
+
+# Synchronize the VMR
+$darcArgs = (
+ "vmr", "forwardflow",
+ "--tmp", $tmpDir,
+ "--$verbosity",
+ $vmrDir
+)
+
+if ($ci) {
+ $darcArgs += ("--ci")
+}
+
+if ($azdevPat) {
+ $darcArgs += ("--azdev-pat", $azdevPat)
+}
+
+& "$darc" $darcArgs
+
+if ($LASTEXITCODE -eq 0) {
+ Highlight "Synchronization succeeded"
+}
+else {
+ Fail "Synchronization of repo to VMR failed!"
+ Fail "'$vmrDir' is left in its last state (re-run of this script will reset it)."
+ Fail "Please inspect the logs which contain path to the failing patch file (use -debugOutput to get all the details)."
+ Fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script."
+ exit 1
+}
diff --git a/eng/common/vmr-sync.sh b/eng/common/vmr-sync.sh
new file mode 100644
index 0000000000..44239e331c
--- /dev/null
+++ b/eng/common/vmr-sync.sh
@@ -0,0 +1,207 @@
+#!/bin/bash
+
+### This script is used for synchronizing the current repository into a local VMR.
+### It pulls the current repository's code into the specified VMR directory for local testing or
+### Source-Build validation.
+###
+### The tooling used for synchronization will clone the VMR repository into a temporary folder if
+### it does not already exist. These clones can be reused in future synchronizations, so it is
+### recommended to dedicate a folder for this to speed up re-runs.
+###
+### USAGE:
+### Synchronize current repository into a local VMR:
+### ./vmr-sync.sh --tmp "$HOME/repos/tmp" "$HOME/repos/dotnet"
+###
+### Options:
+### -t, --tmp, --tmp-dir PATH
+### Required. Path to the temporary folder where repositories will be cloned
+###
+### -b, --branch, --vmr-branch BRANCH_NAME
+### Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch
+###
+### --debug
+### Optional. Turns on the most verbose logging for the VMR tooling
+###
+### --remote name:URI
+### Optional. Additional remote to use during the synchronization
+### This can be used to synchronize to a commit from a fork of the repository
+### Example: 'runtime:https://github.com/yourfork/runtime'
+###
+### --azdev-pat
+### Optional. Azure DevOps PAT to use for cloning private repositories.
+###
+### -v, --vmr, --vmr-dir PATH
+### Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder
+
+source="${BASH_SOURCE[0]}"
+
+# resolve $source until the file is no longer a symlink
+while [[ -h "$source" ]]; do
+ scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+ source="$(readlink "$source")"
+ # if $source was a relative symlink, we need to resolve it relative to the path where the
+ # symlink file was located
+ [[ $source != /* ]] && source="$scriptroot/$source"
+done
+scriptroot="$( cd -P "$( dirname "$source" )" && pwd )"
+
+function print_help () {
+ sed -n '/^### /,/^$/p' "$source" | cut -b 5-
+}
+
+COLOR_RED=$(tput setaf 1 2>/dev/null || true)
+COLOR_CYAN=$(tput setaf 6 2>/dev/null || true)
+COLOR_CLEAR=$(tput sgr0 2>/dev/null || true)
+COLOR_RESET=uniquesearchablestring
+FAILURE_PREFIX='> '
+
+function fail () {
+ echo "${COLOR_RED}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_RED}}${COLOR_CLEAR}" >&2
+}
+
+function highlight () {
+ echo "${COLOR_CYAN}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_CYAN}}${COLOR_CLEAR}"
+}
+
+tmp_dir=''
+vmr_dir=''
+vmr_branch=''
+additional_remotes=''
+verbosity=verbose
+azdev_pat=''
+ci=false
+
+while [[ $# -gt 0 ]]; do
+ opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")"
+ case "$opt" in
+ -t|--tmp|--tmp-dir)
+ tmp_dir=$2
+ shift
+ ;;
+ -v|--vmr|--vmr-dir)
+ vmr_dir=$2
+ shift
+ ;;
+ -b|--branch|--vmr-branch)
+ vmr_branch=$2
+ shift
+ ;;
+ --remote)
+ additional_remotes="$additional_remotes $2"
+ shift
+ ;;
+ --azdev-pat)
+ azdev_pat=$2
+ shift
+ ;;
+ --ci)
+ ci=true
+ ;;
+ -d|--debug)
+ verbosity=debug
+ ;;
+ -h|--help)
+ print_help
+ exit 0
+ ;;
+ *)
+ fail "Invalid argument: $1"
+ print_help
+ exit 1
+ ;;
+ esac
+
+ shift
+done
+
+# Validation
+
+if [[ -z "$tmp_dir" ]]; then
+ fail "Missing --tmp-dir argument. Please specify the path to the temporary folder where the repositories will be cloned"
+ exit 1
+fi
+
+# Sanitize the input
+
+if [[ -z "$vmr_dir" ]]; then
+ vmr_dir="$tmp_dir/dotnet"
+fi
+
+if [[ ! -d "$tmp_dir" ]]; then
+ mkdir -p "$tmp_dir"
+fi
+
+if [[ "$verbosity" == "debug" ]]; then
+ set -x
+fi
+
+# Prepare the VMR
+
+if [[ ! -d "$vmr_dir" ]]; then
+ highlight "Cloning 'dotnet/dotnet' into $vmr_dir.."
+ git clone https://github.com/dotnet/dotnet "$vmr_dir"
+
+ if [[ -n "$vmr_branch" ]]; then
+ git -C "$vmr_dir" switch -c "$vmr_branch"
+ fi
+else
+ if ! git -C "$vmr_dir" diff --quiet; then
+ fail "There are changes in the working tree of $vmr_dir. Please commit or stash your changes"
+ exit 1
+ fi
+
+ if [[ -n "$vmr_branch" ]]; then
+ highlight "Preparing $vmr_dir"
+ git -C "$vmr_dir" checkout "$vmr_branch"
+ git -C "$vmr_dir" pull
+ fi
+fi
+
+set -e
+
+# Prepare darc
+
+highlight 'Installing .NET, preparing the tooling..'
+source "./eng/common/tools.sh"
+InitializeDotNetCli true
+GetDarc
+dotnetDir=$( cd ./.dotnet/; pwd -P )
+dotnet=$dotnetDir/dotnet
+
+highlight "Starting the synchronization of VMR.."
+set +e
+
+if [[ -n "$additional_remotes" ]]; then
+ additional_remotes="--additional-remotes $additional_remotes"
+fi
+
+if [[ -n "$azdev_pat" ]]; then
+ azdev_pat="--azdev-pat $azdev_pat"
+fi
+
+ci_arg=''
+if [[ "$ci" == "true" ]]; then
+ ci_arg="--ci"
+fi
+
+# Synchronize the VMR
+
+export DOTNET_ROOT="$dotnetDir"
+
+"$darc_tool" vmr forwardflow \
+ --tmp "$tmp_dir" \
+ $azdev_pat \
+ --$verbosity \
+ $ci_arg \
+ $additional_remotes \
+ "$vmr_dir"
+
+if [[ $? == 0 ]]; then
+ highlight "Synchronization succeeded"
+else
+ fail "Synchronization of repo to VMR failed!"
+ fail "'$vmr_dir' is left in its last state (re-run of this script will reset it)."
+ fail "Please inspect the logs which contain path to the failing patch file (use --debug to get all the details)."
+ fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script."
+ exit 1
+fi
diff --git a/eng/verify-nupkgs.ps1 b/eng/verify-nupkgs.ps1
index cd18465fe1..719c8aefd7 100644
--- a/eng/verify-nupkgs.ps1
+++ b/eng/verify-nupkgs.ps1
@@ -20,8 +20,8 @@ function Confirm-NugetPackages {
Write-Verbose "Starting Confirm-NugetPackages."
$expectedNumOfFiles = @{
"MSTest.Sdk" = 15
- "MSTest.TestFramework" = 154
- "MSTest.TestAdapter" = 93
+ "MSTest.TestFramework" = 162
+ "MSTest.TestAdapter" = 81
"MSTest" = 14
"MSTest.Analyzers" = 56
}
diff --git a/es-metadata.yml b/es-metadata.yml
new file mode 100644
index 0000000000..11af1e321e
--- /dev/null
+++ b/es-metadata.yml
@@ -0,0 +1,8 @@
+schemaVersion: 0.0.1
+isProduction: true
+accountableOwners:
+ service: 88877424-b87d-45a2-8ab8-48321d99a5d2
+routing:
+ defaultAreaPath:
+ org: devdiv
+ path: DevDiv\Testing Platforms
diff --git a/global.json b/global.json
index 1814242c89..d17d80f519 100644
--- a/global.json
+++ b/global.json
@@ -1,34 +1,42 @@
{
"tools": {
- "dotnet": "10.0.100-preview.4.25206.7",
+ "dotnet": "10.0.100-rc.2.25464.104",
"runtimes": {
"dotnet": [
"3.1.32",
"6.0.36",
"7.0.20",
- "8.0.14",
- "9.0.3"
+ "8.0.18",
+ "9.0.7"
],
"dotnet/x86": [
"3.1.32",
"6.0.36",
- "9.0.3"
+ "9.0.7"
],
"aspnetcore": [
- "9.0.3"
+ "9.0.7"
]
},
"vs": {
- "version": "17.8.0"
+ "version": "17.14.10"
}
},
"sdk": {
- "version": "10.0.100-preview.4.25206.7",
+ "version": "10.0.100-rc.2.25464.104",
+ "paths": [
+ ".dotnet",
+ "$host$"
+ ],
+ "errorMessage": "The .NET SDK could not be found, please run ./build.cmd on Windows or ./build.sh on Linux and macOS.",
"allowPrerelease": true,
"rollForward": "latestFeature"
},
+ "test": {
+ "runner": "Microsoft.Testing.Platform"
+ },
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25229.4",
+ "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.25479.7",
"MSBuild.Sdk.Extras": "3.0.44"
}
}
diff --git a/open-code.cmd b/open-code.cmd
new file mode 100644
index 0000000000..82dda1d310
--- /dev/null
+++ b/open-code.cmd
@@ -0,0 +1,2 @@
+@echo off
+powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0eng\build.ps1""" -vscode %*"
\ No newline at end of file
diff --git a/samples/.editorconfig b/samples/.editorconfig
index 6fcce99672..2a4c6b6b21 100644
--- a/samples/.editorconfig
+++ b/samples/.editorconfig
@@ -9,3 +9,6 @@ root = false
#### .NET Coding Conventions ####
dotnet_analyzer_diagnostic.category-StyleCop.CSharp.DocumentationRules.severity = none # Disable StyleCop.CSharp.DocumentationRules
+
+# CA2007: Consider calling ConfigureAwait on the awaited task
+dotnet_diagnostic.CA2007.severity = none
diff --git a/samples/FxExtensibility/FxExtensibility.csproj b/samples/FxExtensibility/FxExtensibility.csproj
index 13face57bd..e8a0b1e442 100644
--- a/samples/FxExtensibility/FxExtensibility.csproj
+++ b/samples/FxExtensibility/FxExtensibility.csproj
@@ -8,9 +8,11 @@
MSTest.Extensibility.SamplesMSTest.Extensibility.Samples
- TRACE
+ $(DefineConstants);TRACEprompt4
+ false
+ $(NoWarn);SA0001;EnableGenerateDocumentationFile
diff --git a/samples/Playground/DebuggerUtility.cs b/samples/Playground/DebuggerUtility.cs
index 1064e1a597..57f8bdf769 100644
--- a/samples/Playground/DebuggerUtility.cs
+++ b/samples/Playground/DebuggerUtility.cs
@@ -28,7 +28,7 @@ private static bool AttachVSToProcess(int? pid, int? vsPid, bool enableLog = fal
using var process = Process.GetProcessById(pid.Value);
Trace($"Starting with pid '{pid}({process.ProcessName})', and vsPid '{vsPid}'", enabled: enableLog);
Trace($"Using pid: {pid} to get parent VS.", enabled: enableLog);
- Process? vs = GetVsFromPid(Process.GetProcessById(vsPid ?? process.Id));
+ using Process? vs = GetVsFromPid(Process.GetProcessById(vsPid ?? process.Id));
if (vs != null)
{
@@ -38,7 +38,7 @@ private static bool AttachVSToProcess(int? pid, int? vsPid, bool enableLog = fal
}
Trace("Parent VS not found, finding the first VS that started.", enabled: enableLog);
- Process? firstVsProcess = GetFirstVsProcess();
+ using Process? firstVsProcess = GetFirstVsProcess();
if (firstVsProcess != null)
{
@@ -149,7 +149,6 @@ private static bool AttachVs(Process vs, int pid, bool enableLog = false)
if (dn.StartsWith("!VisualStudio.DTE.", StringComparison.Ordinal) && dn.EndsWith(dteSuffix, StringComparison.Ordinal))
{
- object dbg, lps;
runningObjectTable.GetObject(moniker[0], out object dte);
// The COM object can be busy, we retry few times, hoping that it won't be busy next time.
@@ -157,8 +156,8 @@ private static bool AttachVs(Process vs, int pid, bool enableLog = false)
{
try
{
- dbg = dte.GetType().InvokeMember("Debugger", BindingFlags.GetProperty, null, dte, null, CultureInfo.InvariantCulture)!;
- lps = dbg.GetType().InvokeMember("LocalProcesses", BindingFlags.GetProperty, null, dbg, null, CultureInfo.InvariantCulture)!;
+ object dbg = dte.GetType().InvokeMember("Debugger", BindingFlags.GetProperty, null, dte, null, CultureInfo.InvariantCulture)!;
+ object lps = dbg.GetType().InvokeMember("LocalProcesses", BindingFlags.GetProperty, null, dbg, null, CultureInfo.InvariantCulture)!;
var lpn = (System.Collections.IEnumerator)lps.GetType().InvokeMember("GetEnumerator", BindingFlags.InvokeMethod, null, lps, null, CultureInfo.InvariantCulture)!;
while (lpn.MoveNext())
diff --git a/samples/Playground/Playground.csproj b/samples/Playground/Playground.csproj
index b8570b8348..ba8afed52d 100644
--- a/samples/Playground/Playground.csproj
+++ b/samples/Playground/Playground.csproj
@@ -5,15 +5,20 @@
net9.0enablefalse
- $(NoWarn);NETSDK1023
+ $(NoWarn);NETSDK1023;SA0001;EnableGenerateDocumentationFiletrue
+ false
+
+
+
+
diff --git a/samples/Playground/Program.cs b/samples/Playground/Program.cs
index 4a3d04350a..8e12c8794c 100644
--- a/samples/Playground/Program.cs
+++ b/samples/Playground/Program.cs
@@ -26,7 +26,7 @@ public static async Task Main(string[] args)
{
#if NETCOREAPP
// To attach to the children
- Microsoft.Testing.TestInfrastructure.DebuggerUtility.AttachCurrentProcessToParentVSProcess();
+ // Microsoft.Testing.TestInfrastructure.DebuggerUtility.AttachCurrentProcessToParentVSProcess();
#endif
ITestApplicationBuilder testApplicationBuilder = await TestApplication.CreateBuilderAsync(args);
@@ -57,7 +57,7 @@ public static async Task Main(string[] args)
using TestingPlatformClient client = await TestingPlatformClientFactory.StartAsServerAndConnectToTheClientAsync(Environment.ProcessPath!);
await client.InitializeAsync();
- List testNodeUpdates = new();
+ List testNodeUpdates = [];
ResponseListener discoveryResponse = await client.DiscoverTestsAsync(Guid.NewGuid(), node =>
{
testNodeUpdates.AddRange(node);
@@ -65,7 +65,7 @@ public static async Task Main(string[] args)
});
await discoveryResponse.WaitCompletionAsync();
- ResponseListener runRequest = await client.RunTestsAsync(Guid.NewGuid(), testNodeUpdates.Select(x => x.Node).ToArray(), _ => Task.CompletedTask);
+ ResponseListener runRequest = await client.RunTestsAsync(Guid.NewGuid(), [.. testNodeUpdates.Select(x => x.Node)], _ => Task.CompletedTask);
await runRequest.WaitCompletionAsync();
await client.ExitAsync();
@@ -76,7 +76,7 @@ public static async Task Main(string[] args)
}
}
-internal sealed class DummyAdapter() : ITestFramework, IDataProducer
+internal sealed class DummyAdapter : ITestFramework, IDataProducer
{
public string Uid => nameof(DummyAdapter);
@@ -86,7 +86,7 @@ internal sealed class DummyAdapter() : ITestFramework, IDataProducer
public string Description => string.Empty;
- public Type[] DataTypesProduced => new[] { typeof(TestNodeUpdateMessage) };
+ public Type[] DataTypesProduced => [typeof(TestNodeUpdateMessage)];
public Task CloseTestSessionAsync(CloseTestSessionContext context) => Task.FromResult(new CloseTestSessionResult { IsSuccess = true });
diff --git a/samples/Playground/ServerMode/TestNodeUpdateCollector.cs b/samples/Playground/ServerMode/TestNodeUpdateCollector.cs
index 067a4f4410..799aab6ab5 100644
--- a/samples/Playground/ServerMode/TestNodeUpdateCollector.cs
+++ b/samples/Playground/ServerMode/TestNodeUpdateCollector.cs
@@ -10,7 +10,7 @@ public class TestNodeUpdateCollector
private readonly TaskCompletionSource _taskCompletionSource = new();
private readonly Func? _completeCollector;
- public ConcurrentBag TestNodeUpdates { get; } = new();
+ public ConcurrentBag TestNodeUpdates { get; } = [];
public TestNodeUpdateCollector(Func? completeCollectorWhen = null) => _completeCollector = completeCollectorWhen;
diff --git a/samples/Playground/ServerMode/TestingPlatformClientFactory.cs b/samples/Playground/ServerMode/TestingPlatformClientFactory.cs
index 44491c2798..5fe8dc28d6 100644
--- a/samples/Playground/ServerMode/TestingPlatformClientFactory.cs
+++ b/samples/Playground/ServerMode/TestingPlatformClientFactory.cs
@@ -5,6 +5,7 @@
using System.Net.Sockets;
using Microsoft.Testing.Platform.ServerMode.IntegrationTests.Messages.V100;
+using Microsoft.Testing.TestInfrastructure;
namespace MSTest.Acceptance.IntegrationTests.Messages.V100;
@@ -382,25 +383,3 @@ public static class WellKnownEnvironmentVariables
"TESTINGPLATFORM_CONSOLEOUTPUTDEVICE_SKIP_BANNER"
];
}
-
-public static class RootFinder
-{
- public static string Find()
- {
- string path = AppContext.BaseDirectory;
- string dir = path;
- while (Directory.GetDirectoryRoot(dir) != dir)
- {
- if (Directory.Exists(Path.Combine(dir, ".git")))
- {
- return dir;
- }
- else
- {
- dir = Directory.GetParent(dir)!.ToString();
- }
- }
-
- throw new InvalidOperationException($"Could not find solution root, .git not found in {path} or any parent directory.");
- }
-}
diff --git a/samples/Playground/ServerMode/v1.0.0/TestingPlatformClient.cs b/samples/Playground/ServerMode/v1.0.0/TestingPlatformClient.cs
index 3b40c4d341..d789e2bd04 100644
--- a/samples/Playground/ServerMode/v1.0.0/TestingPlatformClient.cs
+++ b/samples/Playground/ServerMode/v1.0.0/TestingPlatformClient.cs
@@ -64,14 +64,9 @@ private async Task CheckedInvokeAsync(Func func)
{
await func();
}
- catch (Exception ex)
+ catch (Exception ex) when (_disconnectionReason.Length > 0)
{
- if (_disconnectionReason.Length > 0)
- {
- throw new InvalidOperationException($"{ex.Message}\n{_disconnectionReason}", ex);
- }
-
- throw;
+ throw new InvalidOperationException($"{ex.Message}\n{_disconnectionReason}", ex);
}
}
@@ -171,11 +166,9 @@ private sealed class TargetHandler
private readonly ConcurrentDictionary _listeners
= new();
- private readonly ConcurrentBag _logListeners
- = new();
+ private readonly ConcurrentBag _logListeners = [];
- private readonly ConcurrentBag _telemetryPayloads
- = new();
+ private readonly ConcurrentBag _telemetryPayloads = [];
public void RegisterTelemetryListener(TelemetryCollector listener)
=> _telemetryPayloads.Add(listener);
diff --git a/samples/Playground/Tests.cs b/samples/Playground/Tests.cs
index c3b540e601..b77a79c78b 100644
--- a/samples/Playground/Tests.cs
+++ b/samples/Playground/Tests.cs
@@ -13,17 +13,7 @@ namespace Playground;
public class TestClass
{
[TestMethod]
- [DynamicData(nameof(Data))]
- public void Test3(int a, int b)
+ public void Test1()
{
}
-
- public static IEnumerable<(int A, int B)> Data
- {
- get
- {
- yield return (1, 2);
- yield return (3, 4);
- }
- }
}
diff --git a/samples/public/Directory.Build.props b/samples/public/Directory.Build.props
index 0cee8689b5..20019790aa 100644
--- a/samples/public/Directory.Build.props
+++ b/samples/public/Directory.Build.props
@@ -1,13 +1,15 @@
- 9.0.0
- 17.13.1
- 3.8.3
- 1.0.0-alpha.25167.5
- 1.50.0
- 1.6.3
+ 9.4.0
+ 17.14.2
+ 3.10.1
+ 1.0.0-alpha.25405.1
+ 1.54.0
+ 1.8.117.13.0
+ false
+ $(NoWarn);SA0001;EnableGenerateDocumentationFile
diff --git a/samples/public/global.json b/samples/public/global.json
index 11074d3c4b..17e37be137 100644
--- a/samples/public/global.json
+++ b/samples/public/global.json
@@ -1,5 +1,5 @@
{
"msbuild-sdks": {
- "MSTest.Sdk": "3.8.1"
+ "MSTest.Sdk": "3.10.1"
}
}
diff --git a/src/Adapter/MSTest.Engine/BannedSymbols.txt b/src/Adapter/MSTest.Engine/BannedSymbols.txt
index 8c5d85ec6d..f7256d3c54 100644
--- a/src/Adapter/MSTest.Engine/BannedSymbols.txt
+++ b/src/Adapter/MSTest.Engine/BannedSymbols.txt
@@ -2,5 +2,5 @@
M:System.Threading.Tasks.Task.Run(System.Func{System.Threading.Tasks.Task},System.Threading.CancellationToken); Use 'ITask' instead
M:System.String.IsNullOrEmpty(System.String); Use 'RoslynString.IsNullOrEmpty' instead
M:System.String.IsNullOrWhiteSpace(System.String); Use 'RoslynString.IsNullOrWhiteSpace' instead
-M:System.Diagnostics.Debug.Assert(System.Boolean); Use 'RoslynDebug.Assert' instead
+M:System.Diagnostics.Debug.Assert(System.Boolean); Use 'RoslynDebug.Assert' instead
M:System.Diagnostics.Debug.Assert(System.Boolean,System.String); Use 'RoslynDebug.Assert' instead
diff --git a/src/Adapter/MSTest.Engine/RepositoryVersion.cs.template b/src/Adapter/MSTest.Engine/BuildInfo.cs.template
similarity index 100%
rename from src/Adapter/MSTest.Engine/RepositoryVersion.cs.template
rename to src/Adapter/MSTest.Engine/BuildInfo.cs.template
diff --git a/src/Adapter/MSTest.Engine/Engine/BFSTestNodeVisitor.cs b/src/Adapter/MSTest.Engine/Engine/BFSTestNodeVisitor.cs
index 9d3cf88a38..faa7301a1b 100644
--- a/src/Adapter/MSTest.Engine/Engine/BFSTestNodeVisitor.cs
+++ b/src/Adapter/MSTest.Engine/Engine/BFSTestNodeVisitor.cs
@@ -9,7 +9,6 @@
namespace Microsoft.Testing.Framework;
-#pragma warning disable TPEXP // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
internal sealed class BFSTestNodeVisitor
{
private readonly IEnumerable _rootTestNodes;
@@ -29,12 +28,12 @@ public BFSTestNodeVisitor(IEnumerable rootTestNodes, ITestExecutionFil
_testArgumentsManager = testArgumentsManager;
}
- internal KeyValuePair>[] DuplicatedNodes { get; private set; } = Array.Empty>>();
+ internal KeyValuePair>[] DuplicatedNodes { get; private set; } = [];
public async Task VisitAsync(Func onIncludedTestNodeAsync)
{
// This is case sensitive, and culture insensitive, to keep UIDs unique, and comparable between different system.
- Dictionary> testNodesByUid = new();
+ Dictionary> testNodesByUid = [];
Queue<(TestNode CurrentNode, TestNodeUid? ParentNodeUid, StringBuilder NodeFullPath)> queue = new();
foreach (TestNode node in _rootTestNodes)
{
@@ -47,7 +46,7 @@ public async Task VisitAsync(Func onIncludedTestNo
if (!testNodesByUid.TryGetValue(currentNode.StableUid, out List? testNodes))
{
- testNodes = new();
+ testNodes = [];
testNodesByUid.Add(currentNode.StableUid, testNodes);
}
@@ -78,14 +77,14 @@ public async Task VisitAsync(Func onIncludedTestNo
// If the node is expandable, we expand it (replacing the original node)
if (TestArgumentsManager.IsExpandableTestNode(currentNode))
{
- currentNode = await _testArgumentsManager.ExpandTestNodeAsync(currentNode);
+ currentNode = await _testArgumentsManager.ExpandTestNodeAsync(currentNode).ConfigureAwait(false);
}
// If the node is not filtered out by the test execution filter, we call the callback with the node.
if (_testExecutionFilter is not TestNodeUidListFilter listFilter
|| listFilter.TestNodeUids.Any(uid => currentNode.StableUid.ToPlatformTestNodeUid() == uid))
{
- await onIncludedTestNodeAsync(currentNode, parentNodeUid);
+ await onIncludedTestNodeAsync(currentNode, parentNodeUid).ConfigureAwait(false);
}
foreach (TestNode childNode in currentNode.Tests)
@@ -94,7 +93,7 @@ public async Task VisitAsync(Func onIncludedTestNo
}
}
- DuplicatedNodes = testNodesByUid.Where(x => x.Value.Count > 1).ToArray();
+ DuplicatedNodes = [.. testNodesByUid.Where(x => x.Value.Count > 1)];
}
private static PropertyBag CreatePropertyBagForFilter(IProperty[] properties)
diff --git a/src/Adapter/MSTest.Engine/Engine/TestArgumentsManager.cs b/src/Adapter/MSTest.Engine/Engine/TestArgumentsManager.cs
index 1003fe27ef..1fb6ec6235 100644
--- a/src/Adapter/MSTest.Engine/Engine/TestArgumentsManager.cs
+++ b/src/Adapter/MSTest.Engine/Engine/TestArgumentsManager.cs
@@ -3,11 +3,13 @@
using Microsoft.Testing.Platform;
+using Polyfills;
+
namespace Microsoft.Testing.Framework;
internal sealed class TestArgumentsManager : ITestArgumentsManager
{
- private readonly Dictionary> _testArgumentsEntryProviders = new();
+ private readonly Dictionary> _testArgumentsEntryProviders = [];
private bool _isRegistrationFrozen;
public void RegisterTestArgumentsEntryProvider(
@@ -19,12 +21,10 @@ public void RegisterTestArgumentsEntryProvider(
throw new InvalidOperationException("Cannot register TestArgumentsEntry provider after registration is frozen.");
}
- if (_testArgumentsEntryProviders.ContainsKey(testNodeStableUid))
+ if (!_testArgumentsEntryProviders.TryAdd(testNodeStableUid, argumentPropertiesProviderCallback))
{
throw new InvalidOperationException($"TestArgumentsEntry provider is already registered for test node with UID '{testNodeStableUid}'.");
}
-
- _testArgumentsEntryProviders.Add(testNodeStableUid, argumentPropertiesProviderCallback);
}
internal void FreezeRegistration() => _isRegistrationFrozen = true;
@@ -37,8 +37,6 @@ internal async Task ExpandTestNodeAsync(TestNode currentNode)
{
RoslynDebug.Assert(IsExpandableTestNode(currentNode), "Test node is not expandable");
- var expandableTestNode = (IExpandableTestNode)currentNode;
-
int argumentsRowIndex = -1;
bool isIndexArgumentPropertiesProvider = false;
if (!_testArgumentsEntryProviders.TryGetValue(
@@ -53,8 +51,8 @@ internal async Task ExpandTestNodeAsync(TestNode currentNode)
};
}
- HashSet expandedTestNodeUids = new();
- List expandedTestNodes = new(currentNode.Tests);
+ HashSet expandedTestNodeUids = [];
+ List expandedTestNodes = [.. currentNode.Tests];
switch (currentNode)
{
case IParameterizedTestNode parameterizedTestNode:
@@ -67,7 +65,7 @@ internal async Task ExpandTestNodeAsync(TestNode currentNode)
break;
case ITaskParameterizedTestNode parameterizedTestNode:
- foreach (object? arguments in await parameterizedTestNode.GetArguments())
+ foreach (object? arguments in await parameterizedTestNode.GetArguments().ConfigureAwait(false))
{
ExpandNodeWithArguments(currentNode, arguments, ref argumentsRowIndex, expandedTestNodes,
expandedTestNodeUids, argumentPropertiesProvider, isIndexArgumentPropertiesProvider);
@@ -77,7 +75,7 @@ internal async Task ExpandTestNodeAsync(TestNode currentNode)
#if NET
case IAsyncParameterizedTestNode parameterizedTestNode:
- await foreach (object? arguments in parameterizedTestNode.GetArguments())
+ await foreach (object? arguments in parameterizedTestNode.GetArguments().ConfigureAwait(false))
{
ExpandNodeWithArguments(currentNode, arguments, ref argumentsRowIndex, expandedTestNodes,
expandedTestNodeUids, argumentPropertiesProvider, isIndexArgumentPropertiesProvider);
@@ -98,7 +96,7 @@ internal async Task ExpandTestNodeAsync(TestNode currentNode)
DisplayName = currentNode.DisplayName,
OverriddenEdgeName = currentNode.OverriddenEdgeName,
Properties = currentNode.Properties,
- Tests = expandedTestNodes.ToArray(),
+ Tests = [.. expandedTestNodes],
};
return expandedNode;
diff --git a/src/Adapter/MSTest.Engine/Engine/TestFixtureManager.cs b/src/Adapter/MSTest.Engine/Engine/TestFixtureManager.cs
index 4c26895bc4..9da126c44b 100644
--- a/src/Adapter/MSTest.Engine/Engine/TestFixtureManager.cs
+++ b/src/Adapter/MSTest.Engine/Engine/TestFixtureManager.cs
@@ -10,13 +10,13 @@ namespace Microsoft.Testing.Framework;
internal sealed class TestFixtureManager : ITestFixtureManager
{
- private readonly Dictionary>> _fixtureInstancesByFixtureId = new();
- private readonly Dictionary _fixtureIdsUsedByTestNode = new();
+ private readonly Dictionary>> _fixtureInstancesByFixtureId = [];
+ private readonly Dictionary _fixtureIdsUsedByTestNode = [];
// We could improve this by doing some optimistic lock but we expect a rather low contention on this.
// We use a dictionary as performance improvement because we know that when the registration is complete
// we will only read the collection (so no need for concurrency handling).
- private readonly Dictionary _fixtureUses = new();
+ private readonly Dictionary _fixtureUses = [];
private readonly CancellationToken _cancellationToken;
private bool _isRegistrationFrozen;
private bool _isUsageRegistrationFrozen;
@@ -58,7 +58,7 @@ public async Task GetFixtureAsync(string fixtureId)
if (!fixture.IsValueCreated || !fixture.Value.IsCompleted)
{
- await fixture.Value;
+ await fixture.Value.ConfigureAwait(false);
}
// We can safely cast here because we know that the fixture is of type TFixture and is awaited.
@@ -79,7 +79,7 @@ internal void RegisterFixtureUsage(TestNode testNode, string[] fixtureIds)
return;
}
- _fixtureIdsUsedByTestNode.Add(testNode, fixtureIds.Select(x => new FixtureId(x)).ToArray());
+ _fixtureIdsUsedByTestNode.Add(testNode, [.. fixtureIds.Select(x => new FixtureId(x))]);
foreach (string fixtureId in fixtureIds)
{
if (!_fixtureUses.TryGetValue(fixtureId, out CountHolder? uses))
@@ -114,7 +114,7 @@ internal async Task SetupUsedFixturesAsync(TestNode testNode)
{
if (!lazyFixture.IsValueCreated || !lazyFixture.Value.IsCompleted)
{
- await lazyFixture.Value;
+ await lazyFixture.Value.ConfigureAwait(false);
}
}
}
@@ -142,7 +142,7 @@ internal async Task CleanUnusedFixturesAsync(TestNode testNode)
// cleaning the fixture multiple times.
if (usesCount == 0)
{
- await CleanupAndDisposeFixtureAsync(fixtureId);
+ await CleanupAndDisposeFixtureAsync(fixtureId).ConfigureAwait(false);
}
}
}
@@ -167,7 +167,7 @@ private void TryRegisterFixture(string fixtureId, Func>
{
fixtureInstancesPerType.Add(
typeof(TFixture),
- new(async () => await CreateAndInitializeFixtureAsync(asyncFactory, _cancellationToken), LazyThreadSafetyMode.ExecutionAndPublication));
+ new(async () => await CreateAndInitializeFixtureAsync(asyncFactory, _cancellationToken).ConfigureAwait(false), LazyThreadSafetyMode.ExecutionAndPublication));
}
}
else
@@ -177,14 +177,14 @@ private void TryRegisterFixture(string fixtureId, Func>
new()
{
[typeof(TFixture)] = new(
- async () => await CreateAndInitializeFixtureAsync(asyncFactory, _cancellationToken),
+ async () => await CreateAndInitializeFixtureAsync(asyncFactory, _cancellationToken).ConfigureAwait(false),
LazyThreadSafetyMode.ExecutionAndPublication),
});
}
static async Task CreateAndInitializeFixtureAsync(Func> asyncFactory, CancellationToken cancellationToken)
{
- TFixture fixture = await asyncFactory();
+ TFixture fixture = await asyncFactory().ConfigureAwait(false);
return fixture;
}
}
@@ -207,7 +207,7 @@ private async Task CleanupAndDisposeFixtureAsync(FixtureId fixtureId)
object fixture = lazyFixture.Value.Result;
#pragma warning restore VSTHRD103 // Call async methods when in an async method
- await DisposeHelper.DisposeAsync(fixture);
+ await DisposeHelper.DisposeAsync(fixture).ConfigureAwait(false);
}
}
diff --git a/src/Adapter/MSTest.Engine/Engine/TestFrameworkEngine.cs b/src/Adapter/MSTest.Engine/Engine/TestFrameworkEngine.cs
index f78f930f7a..00527b1d27 100644
--- a/src/Adapter/MSTest.Engine/Engine/TestFrameworkEngine.cs
+++ b/src/Adapter/MSTest.Engine/Engine/TestFrameworkEngine.cs
@@ -38,8 +38,7 @@ public TestFrameworkEngine(TestFrameworkConfiguration testFrameworkConfiguration
_configuration = new(configuration);
}
- public Type[] DataTypesProduced { get; }
- = new Type[1] { typeof(TestNodeUpdateMessage) };
+ public Type[] DataTypesProduced { get; } = [typeof(TestNodeUpdateMessage)];
public string Uid => _extension.Uid;
@@ -49,20 +48,20 @@ public TestFrameworkEngine(TestFrameworkConfiguration testFrameworkConfiguration
public string Description => _extension.Description;
- public async Task IsEnabledAsync() => await _extension.IsEnabledAsync();
+ public async Task IsEnabledAsync() => await _extension.IsEnabledAsync().ConfigureAwait(false);
public async Task ExecuteRequestAsync(TestExecutionRequest testExecutionRequest, IMessageBus messageBus, CancellationToken cancellationToken)
=> testExecutionRequest switch
{
- DiscoverTestExecutionRequest discoveryRequest => await ExecuteTestNodeDiscoveryAsync(discoveryRequest, messageBus, cancellationToken),
- RunTestExecutionRequest runRequest => await ExecuteTestNodeRunAsync(runRequest, messageBus, cancellationToken),
+ DiscoverTestExecutionRequest discoveryRequest => await ExecuteTestNodeDiscoveryAsync(discoveryRequest, messageBus, cancellationToken).ConfigureAwait(false),
+ RunTestExecutionRequest runRequest => await ExecuteTestNodeRunAsync(runRequest, messageBus, cancellationToken).ConfigureAwait(false),
_ => Result.Fail($"Unexpected request type: '{testExecutionRequest.GetType().FullName}'"),
};
private async Task ExecuteTestNodeRunAsync(RunTestExecutionRequest request, IMessageBus messageBus,
CancellationToken cancellationToken)
{
- List allRootTestNodes = new();
+ List allRootTestNodes = [];
TestFixtureManager fixtureManager = new(cancellationToken);
TestArgumentsManager argumentsManager = new();
TestSessionContext testSessionContext = new(_configuration, fixtureManager, argumentsManager, request.Session.SessionUid,
@@ -72,7 +71,7 @@ private async Task ExecuteTestNodeRunAsync(RunTestExecutionRequest reque
{
foreach (ITestNodesBuilder testNodeBuilder in _testNodesBuilders)
{
- TestNode[] testNodes = await testNodeBuilder.BuildAsync(testSessionContext);
+ TestNode[] testNodes = await testNodeBuilder.BuildAsync(testSessionContext).ConfigureAwait(false);
allRootTestNodes.AddRange(testNodes);
}
@@ -96,11 +95,11 @@ await testNodesVisitor.VisitAsync((testNode, parentTestNodeUid) =>
.OfType()
.SingleOrDefault()
.UsedFixtureIds
- ?? Array.Empty();
+ ?? [];
fixtureManager.RegisterFixtureUsage(testNode, fixtureIds);
return Task.CompletedTask;
- });
+ }).ConfigureAwait(false);
if (testNodesVisitor.DuplicatedNodes.Length > 0)
{
@@ -120,13 +119,13 @@ await testNodesVisitor.VisitAsync((testNode, parentTestNodeUid) =>
testNodeRunner.StartTests();
// Finally, we want to wait for all tests to complete.
- return await testNodeRunner.WaitAllTestsAsync(cancellationToken);
+ return await testNodeRunner.WaitAllTestsAsync(cancellationToken).ConfigureAwait(false);
}
finally
{
foreach (ITestNodesBuilder testNodeBuilder in _testNodesBuilders)
{
- await DisposeHelper.DisposeAsync(testNodeBuilder);
+ await DisposeHelper.DisposeAsync(testNodeBuilder).ConfigureAwait(false);
}
}
@@ -142,7 +141,7 @@ Task PublishDataAsync(IData data)
private async Task ExecuteTestNodeDiscoveryAsync(DiscoverTestExecutionRequest request, IMessageBus messageBus,
CancellationToken cancellationToken)
{
- List allRootTestNodes = new();
+ List allRootTestNodes = [];
TestFixtureManager fixtureManager = new(cancellationToken);
TestArgumentsManager argumentsManager = new();
TestSessionContext testSessionContext = new(_configuration, fixtureManager, argumentsManager, request.Session.SessionUid,
@@ -152,7 +151,7 @@ private async Task ExecuteTestNodeDiscoveryAsync(DiscoverTestExecutionRe
{
foreach (ITestNodesBuilder testNodeBuilder in _testNodesBuilders)
{
- TestNode[] testNodes = await testNodeBuilder.BuildAsync(testSessionContext);
+ TestNode[] testNodes = await testNodeBuilder.BuildAsync(testSessionContext).ConfigureAwait(false);
allRootTestNodes.AddRange(testNodes);
}
@@ -172,8 +171,8 @@ await testNodesVisitor.VisitAsync(async (testNode, parentTestNodeUid) =>
}
await messageBus.PublishAsync(this, new TestNodeUpdateMessage(request.Session.SessionUid, progressNode,
- parentTestNodeUid?.ToPlatformTestNodeUid()));
- });
+ parentTestNodeUid?.ToPlatformTestNodeUid())).ConfigureAwait(false);
+ }).ConfigureAwait(false);
if (testNodesVisitor.DuplicatedNodes.Length > 0)
{
@@ -192,7 +191,7 @@ await testNodesVisitor.VisitAsync(async (testNode, parentTestNodeUid) =>
{
foreach (ITestNodesBuilder testNodeBuilder in _testNodesBuilders)
{
- await DisposeHelper.DisposeAsync(testNodeBuilder);
+ await DisposeHelper.DisposeAsync(testNodeBuilder).ConfigureAwait(false);
}
}
diff --git a/src/Adapter/MSTest.Engine/Engine/TestSessionContext.cs b/src/Adapter/MSTest.Engine/Engine/TestSessionContext.cs
index 8db024032c..22042a1e5b 100644
--- a/src/Adapter/MSTest.Engine/Engine/TestSessionContext.cs
+++ b/src/Adapter/MSTest.Engine/Engine/TestSessionContext.cs
@@ -27,5 +27,5 @@ public TestSessionContext(IConfiguration configuration, ITestFixtureManager _, I
public IConfiguration Configuration { get; }
public async Task AddTestAttachmentAsync(FileInfo file, string displayName, string? description = null)
- => await _publishDataAsync(new SessionFileArtifact(_sessionUid, file, displayName, description));
+ => await _publishDataAsync(new SessionFileArtifact(_sessionUid, file, displayName, description)).ConfigureAwait(false);
}
diff --git a/src/Adapter/MSTest.Engine/Engine/ThreadPoolTestNodeRunner.cs b/src/Adapter/MSTest.Engine/Engine/ThreadPoolTestNodeRunner.cs
index 3ef4aa070f..3070130114 100644
--- a/src/Adapter/MSTest.Engine/Engine/ThreadPoolTestNodeRunner.cs
+++ b/src/Adapter/MSTest.Engine/Engine/ThreadPoolTestNodeRunner.cs
@@ -16,7 +16,7 @@ namespace Microsoft.Testing.Framework;
internal sealed class ThreadPoolTestNodeRunner : IDisposable
{
private readonly SemaphoreSlim? _maxParallelTests;
- private readonly ConcurrentBag> _runningTests = new();
+ private readonly ConcurrentBag> _runningTests = [];
private readonly ConcurrentDictionary _runningTestNodeUids = new();
private readonly CountdownEvent _ensureTaskQueuedCountdownEvent = new(1);
private readonly Func _publishDataAsync;
@@ -63,12 +63,12 @@ public void EnqueueTest(TestNode frameworkTestNode, TestNodeUid? parentTestNodeU
{
// We don't have a timeout here because we can have really slow fixture and it's on user
// the decision on how much to wait for it.
- await _waitForStart.Task;
+ await _waitForStart.Task.ConfigureAwait(false);
// Handle the global parallelism.
if (_maxParallelTests is not null)
{
- await _maxParallelTests.WaitAsync();
+ await _maxParallelTests.WaitAsync().ConfigureAwait(false);
}
try
@@ -77,9 +77,9 @@ public void EnqueueTest(TestNode frameworkTestNode, TestNodeUid? parentTestNodeU
PlatformTestNode progressNode = frameworkTestNode.ToPlatformTestNode();
progressNode.Properties.Add(InProgressTestNodeStateProperty.CachedInstance);
- await _publishDataAsync(new TestNodeUpdateMessage(_sessionUid, progressNode, parentTestNodeUid?.ToPlatformTestNodeUid()));
+ await _publishDataAsync(new TestNodeUpdateMessage(_sessionUid, progressNode, parentTestNodeUid?.ToPlatformTestNodeUid())).ConfigureAwait(false);
- Result result = await CreateTestRunTaskAsync(frameworkTestNode, parentTestNodeUid);
+ Result result = await CreateTestRunTaskAsync(frameworkTestNode, parentTestNodeUid).ConfigureAwait(false);
_runningTestNodeUids.TryRemove(frameworkTestNode.StableUid, out int count);
@@ -118,7 +118,7 @@ private async Task CreateTestRunTaskAsync(TestNode testNode, TestNodeUid
{
try
{
- await _testFixtureManager.SetupUsedFixturesAsync(testNode);
+ await _testFixtureManager.SetupUsedFixturesAsync(testNode).ConfigureAwait(false);
}
catch (Exception ex)
{
@@ -135,7 +135,7 @@ private async Task CreateTestRunTaskAsync(TestNode testNode, TestNodeUid
switch (testNode)
{
case IAsyncActionTestNode actionTestNode:
- await actionTestNode.InvokeAsync(testExecutionContext);
+ await actionTestNode.InvokeAsync(testExecutionContext).ConfigureAwait(false);
break;
case IActionTestNode actionTestNode:
@@ -145,7 +145,7 @@ private async Task CreateTestRunTaskAsync(TestNode testNode, TestNodeUid
case IParameterizedAsyncActionTestNode actionTestNode:
await actionTestNode.InvokeAsync(
testExecutionContext,
- action => InvokeTestNodeAndPublishResultAsync(testNode, parentTestNodeUid, (_, _) => action(), skipPublishResult: false));
+ action => InvokeTestNodeAndPublishResultAsync(testNode, parentTestNodeUid, (_, _) => action(), skipPublishResult: false)).ConfigureAwait(false);
break;
default:
@@ -154,12 +154,12 @@ await actionTestNode.InvokeAsync(
},
// Because parameterized tests report multiple results (one per parameter set), we don't want to publish the result
// of the overall test node execution, but only the results of the individual parameterized tests.
- skipPublishResult: testNode is IParameterizedAsyncActionTestNode);
+ skipPublishResult: testNode is IParameterizedAsyncActionTestNode).ConfigureAwait(false);
// Try to cleanup the fixture is not more used.
try
{
- await _testFixtureManager.CleanUnusedFixturesAsync(testNode);
+ await _testFixtureManager.CleanUnusedFixturesAsync(testNode).ConfigureAwait(false);
return result;
}
catch (Exception ex)
@@ -177,8 +177,8 @@ public async Task WaitAllTestsAsync(CancellationToken cancellationToken)
try
{
_ensureTaskQueuedCountdownEvent.Signal();
- await _ensureTaskQueuedCountdownEvent.WaitAsync(cancellationToken);
- Result[] results = await Task.WhenAll(_runningTests);
+ await _ensureTaskQueuedCountdownEvent.WaitAsync(cancellationToken).ConfigureAwait(false);
+ Result[] results = await Task.WhenAll(_runningTests).ConfigureAwait(false);
return Result.Combine(results);
}
catch (OperationCanceledException ex) when (ex.CancellationToken == cancellationToken)
@@ -216,7 +216,7 @@ private async Task InvokeTestNodeAndPublishResultAsync(TestNode testNode
// If we're already enqueued we cancel the test before the start
// The test could not use the cancellation and we should wait the end of the test self to cancel.
_cancellationToken.ThrowIfCancellationRequested();
- await testNodeInvokeAction(testNode, testExecutionContext);
+ await testNodeInvokeAction(testNode, testExecutionContext).ConfigureAwait(false);
if (!platformTestNode.Properties.Any())
{
@@ -245,7 +245,7 @@ private async Task InvokeTestNodeAndPublishResultAsync(TestNode testNode
if (!skipPublishResult)
{
- await _publishDataAsync(new TestNodeUpdateMessage(_sessionUid, platformTestNode, parentTestNodeUid?.ToPlatformTestNodeUid()));
+ await _publishDataAsync(new TestNodeUpdateMessage(_sessionUid, platformTestNode, parentTestNodeUid?.ToPlatformTestNodeUid())).ConfigureAwait(false);
}
return Result.Ok();
diff --git a/src/Adapter/MSTest.Engine/Helpers/ISuccessReason.cs b/src/Adapter/MSTest.Engine/Helpers/ISuccessReason.cs
index e9f739f4e5..5952b324bf 100644
--- a/src/Adapter/MSTest.Engine/Helpers/ISuccessReason.cs
+++ b/src/Adapter/MSTest.Engine/Helpers/ISuccessReason.cs
@@ -3,6 +3,4 @@
namespace Microsoft.Testing.Framework;
-internal interface ISuccessReason : IReason
-{
-}
+internal interface ISuccessReason : IReason;
diff --git a/src/Adapter/MSTest.Engine/Helpers/IWarningReason.cs b/src/Adapter/MSTest.Engine/Helpers/IWarningReason.cs
index 7b38a5ea9c..e5a50b9aba 100644
--- a/src/Adapter/MSTest.Engine/Helpers/IWarningReason.cs
+++ b/src/Adapter/MSTest.Engine/Helpers/IWarningReason.cs
@@ -3,6 +3,4 @@
namespace Microsoft.Testing.Framework;
-internal interface IWarningReason : IReason
-{
-}
+internal interface IWarningReason : IReason;
diff --git a/src/Adapter/MSTest.Engine/Helpers/Result.cs b/src/Adapter/MSTest.Engine/Helpers/Result.cs
index 6f6a70af1d..881c9fa4d1 100644
--- a/src/Adapter/MSTest.Engine/Helpers/Result.cs
+++ b/src/Adapter/MSTest.Engine/Helpers/Result.cs
@@ -5,7 +5,7 @@ namespace Microsoft.Testing.Framework;
internal sealed class Result
{
- private readonly List _reasons = new();
+ private readonly List _reasons = [];
private Result()
{
diff --git a/src/Adapter/MSTest.Engine/MSTest.Engine.csproj b/src/Adapter/MSTest.Engine/MSTest.Engine.csproj
index 1f19b9202b..a0ab34f686 100644
--- a/src/Adapter/MSTest.Engine/MSTest.Engine.csproj
+++ b/src/Adapter/MSTest.Engine/MSTest.Engine.csproj
@@ -13,6 +13,8 @@
$(NoWarn);CS1591true
+
+ true
@@ -28,19 +30,6 @@
true
-
-
- false
-
-
-
-
-
-
-
-
-
-
@@ -83,23 +72,6 @@ This package provides a new experimental engine for MSTest test framework.]]>
-
-
-
-
-
-
- <_TemplateProperties>Version=$(Version)
-
-
- <_TemplateCsproj Include="$(MSBuildProjectDirectory)/RepositoryVersion.cs.template" Destination="$(IntermediateOutputPath)/RepositoryVersion.cs" />
-
-
-
-
-
-
-
diff --git a/src/Adapter/MSTest.Engine/TestFramework/TestFramework.cs b/src/Adapter/MSTest.Engine/TestFramework/TestFramework.cs
index 1fb61c5f9d..88e34f3fea 100644
--- a/src/Adapter/MSTest.Engine/TestFramework/TestFramework.cs
+++ b/src/Adapter/MSTest.Engine/TestFramework/TestFramework.cs
@@ -23,8 +23,8 @@ internal sealed class TestFramework : IDisposable, ITestFramework
private readonly TestingFrameworkExtension _extension;
private readonly CountdownEvent _incomingRequestCounter = new(1);
private readonly TestFrameworkEngine _engine;
- private readonly List _sessionWarningMessages = new();
- private readonly List _sessionErrorMessages = new();
+ private readonly List _sessionWarningMessages = [];
+ private readonly List _sessionErrorMessages = [];
private SessionUid? _sessionId;
public TestFramework(TestFrameworkConfiguration testFrameworkConfiguration, ITestNodesBuilder[] testNodesBuilders, TestingFrameworkExtension extension,
@@ -47,7 +47,7 @@ public TestFramework(TestFrameworkConfiguration testFrameworkConfiguration, ITes
public string Description => _extension.Description;
///
- public async Task IsEnabledAsync() => await _extension.IsEnabledAsync();
+ public async Task IsEnabledAsync() => await _extension.IsEnabledAsync().ConfigureAwait(false);
public Task CreateTestSessionAsync(CreateTestSessionContext context)
{
@@ -71,7 +71,7 @@ public async Task CloseTestSessionAsync(CloseTestSession
{
// Ensure we have finished processing all requests.
_incomingRequestCounter.Signal();
- await _incomingRequestCounter.WaitAsync(context.CancellationToken);
+ await _incomingRequestCounter.WaitAsync(context.CancellationToken).ConfigureAwait(false);
if (_sessionErrorMessages.Count > 0)
{
@@ -121,7 +121,7 @@ public async Task ExecuteRequestAsync(ExecuteRequestContext context)
throw new InvalidOperationException($"Request type '{context.Request.GetType().FullName}' is not supported");
}
- Result result = await _engine.ExecuteRequestAsync(testExecutionRequest, context.MessageBus, context.CancellationToken);
+ Result result = await _engine.ExecuteRequestAsync(testExecutionRequest, context.MessageBus, context.CancellationToken).ConfigureAwait(false);
foreach (IReason reason in result.Reasons)
{
diff --git a/src/Adapter/MSTest.Engine/TestFramework/TestFrameworkCapabilities.cs b/src/Adapter/MSTest.Engine/TestFramework/TestFrameworkCapabilities.cs
index 868a1e63db..c7a853b973 100644
--- a/src/Adapter/MSTest.Engine/TestFramework/TestFrameworkCapabilities.cs
+++ b/src/Adapter/MSTest.Engine/TestFramework/TestFrameworkCapabilities.cs
@@ -18,7 +18,7 @@ public TestFrameworkCapabilities(ITestNodesBuilder[] testNodesBuilders, IBannerM
}
public IReadOnlyCollection Capabilities
- => new[] { new TestFrameworkCapabilitiesSet(_testNodesBuilders), _bannerMessageOwnerCapability };
+ => [new TestFrameworkCapabilitiesSet(_testNodesBuilders), _bannerMessageOwnerCapability];
}
internal sealed class TestFrameworkCapabilitiesSet :
@@ -39,7 +39,7 @@ public TestFrameworkCapabilitiesSet(ITestNodesBuilder[] testNodesBuilders)
public bool IsTrxReportCapabilitySupported { get; }
- bool ITestNodesTreeFilterTestFrameworkCapability.IsSupported { get; } = true;
+ bool ITestNodesTreeFilterTestFrameworkCapability.IsSupported => true;
bool ITrxReportCapability.IsSupported => IsTrxReportCapabilitySupported;
diff --git a/src/Adapter/MSTest.Engine/TestNodes/FactoryTestNodesBuilder.cs b/src/Adapter/MSTest.Engine/TestNodes/FactoryTestNodesBuilder.cs
index 8f2b9bc3b6..eaad6454de 100644
--- a/src/Adapter/MSTest.Engine/TestNodes/FactoryTestNodesBuilder.cs
+++ b/src/Adapter/MSTest.Engine/TestNodes/FactoryTestNodesBuilder.cs
@@ -15,8 +15,7 @@ public FactoryTestNodesBuilder(Func testNodesFactory)
public bool IsSupportingTrxProperties { get; }
- IReadOnlyCollection ICapabilities.Capabilities
- => Array.Empty();
+ IReadOnlyCollection ICapabilities.Capabilities => [];
public Task BuildAsync(ITestSessionContext _) => Task.FromResult(_testNodesFactory());
}
diff --git a/src/Adapter/MSTest.Engine/TestNodes/FrameworkTestNodeProperties.cs b/src/Adapter/MSTest.Engine/TestNodes/FrameworkTestNodeProperties.cs
index 718e6b8b40..3c61f91f6c 100644
--- a/src/Adapter/MSTest.Engine/TestNodes/FrameworkTestNodeProperties.cs
+++ b/src/Adapter/MSTest.Engine/TestNodes/FrameworkTestNodeProperties.cs
@@ -9,5 +9,5 @@ internal readonly struct FrameworkEngineMetadataProperty() : IProperty
{
public bool PreventArgumentsExpansion { get; init; }
- public string[] UsedFixtureIds { get; init; } = Array.Empty();
+ public string[] UsedFixtureIds { get; init; } = [];
}
diff --git a/src/Adapter/MSTest.Engine/TestNodes/IActionableTestNode.cs b/src/Adapter/MSTest.Engine/TestNodes/IActionableTestNode.cs
index 158cd96a6e..2631b535d2 100644
--- a/src/Adapter/MSTest.Engine/TestNodes/IActionableTestNode.cs
+++ b/src/Adapter/MSTest.Engine/TestNodes/IActionableTestNode.cs
@@ -3,6 +3,4 @@
namespace Microsoft.Testing.Framework;
-internal interface IActionableTestNode
-{
-}
+internal interface IActionableTestNode;
diff --git a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeActionParameterizedTestNode.cs b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeActionParameterizedTestNode.cs
index 749b65b3a0..2f2f7ad49f 100644
--- a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeActionParameterizedTestNode.cs
+++ b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeActionParameterizedTestNode.cs
@@ -26,7 +26,7 @@ await safeInvoke(() =>
{
Body(testExecutionContext, item);
return Task.CompletedTask;
- });
+ }).ConfigureAwait(false);
}
}
diff --git a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeActionTaskParameterizedTestNode.cs b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeActionTaskParameterizedTestNode.cs
index 28dffaa306..b5a195628c 100644
--- a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeActionTaskParameterizedTestNode.cs
+++ b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeActionTaskParameterizedTestNode.cs
@@ -16,17 +16,17 @@ public sealed class InternalUnsafeActionTaskParameterizedTestNode
public required Func>> GetArguments { get; init; }
- Func> ITaskParameterizedTestNode.GetArguments => async () => await GetArguments();
+ Func> ITaskParameterizedTestNode.GetArguments => async () => await GetArguments().ConfigureAwait(false);
async Task IParameterizedAsyncActionTestNode.InvokeAsync(ITestExecutionContext testExecutionContext, Func, Task> safeInvoke)
{
- foreach (TData item in await GetArguments())
+ foreach (TData item in await GetArguments().ConfigureAwait(false))
{
await safeInvoke(() =>
{
Body(testExecutionContext, item);
return Task.CompletedTask;
- });
+ }).ConfigureAwait(false);
}
}
diff --git a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionParameterizedTestNode.cs b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionParameterizedTestNode.cs
index 3dbc8ace32..84a220e558 100644
--- a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionParameterizedTestNode.cs
+++ b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionParameterizedTestNode.cs
@@ -22,7 +22,7 @@ async Task IParameterizedAsyncActionTestNode.InvokeAsync(ITestExecutionContext t
{
foreach (TData item in GetArguments())
{
- await safeInvoke(async () => await Body(testExecutionContext, item));
+ await safeInvoke(async () => await Body(testExecutionContext, item).ConfigureAwait(false)).ConfigureAwait(false);
}
}
diff --git a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionTaskParameterizedTestNode.cs b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionTaskParameterizedTestNode.cs
index f27470ba19..1a56446928 100644
--- a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionTaskParameterizedTestNode.cs
+++ b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionTaskParameterizedTestNode.cs
@@ -16,13 +16,13 @@ public sealed class InternalUnsafeAsyncActionTaskParameterizedTestNode
public required Func>> GetArguments { get; init; }
- Func> ITaskParameterizedTestNode.GetArguments => async () => await GetArguments();
+ Func> ITaskParameterizedTestNode.GetArguments => async () => await GetArguments().ConfigureAwait(false);
async Task IParameterizedAsyncActionTestNode.InvokeAsync(ITestExecutionContext testExecutionContext, Func, Task> safeInvoke)
{
- foreach (TData item in await GetArguments())
+ foreach (TData item in await GetArguments().ConfigureAwait(false))
{
- await safeInvoke(async () => await Body(testExecutionContext, item));
+ await safeInvoke(async () => await Body(testExecutionContext, item).ConfigureAwait(false)).ConfigureAwait(false);
}
}
diff --git a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionTestNode.cs b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionTestNode.cs
index 5d8a0aa48a..f6abe9f436 100644
--- a/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionTestNode.cs
+++ b/src/Adapter/MSTest.Engine/TestNodes/InternalUnsafeAsyncActionTestNode.cs
@@ -11,5 +11,5 @@ public sealed class InternalUnsafeAsyncActionTestNode : TestNode, IAsyncActionTe
public required Func Body { get; init; }
async Task IAsyncActionTestNode.InvokeAsync(ITestExecutionContext testExecutionContext)
- => await Body(testExecutionContext);
+ => await Body(testExecutionContext).ConfigureAwait(false);
}
diff --git a/src/Adapter/MSTest.Engine/TestNodes/TestNode.cs b/src/Adapter/MSTest.Engine/TestNodes/TestNode.cs
index 58f015c055..8119973fde 100644
--- a/src/Adapter/MSTest.Engine/TestNodes/TestNode.cs
+++ b/src/Adapter/MSTest.Engine/TestNodes/TestNode.cs
@@ -17,7 +17,7 @@ public class TestNode
///
public string? OverriddenEdgeName { get; init; }
- public IProperty[] Properties { get; init; } = Array.Empty();
+ public IProperty[] Properties { get; init; } = [];
- public TestNode[] Tests { get; init; } = Array.Empty();
+ public TestNode[] Tests { get; init; } = [];
}
diff --git a/src/Adapter/MSTest.TestAdapter/MSTestVersion.cs.template b/src/Adapter/MSTest.TestAdapter/BuildInfo.cs.template
similarity index 100%
rename from src/Adapter/MSTest.TestAdapter/MSTestVersion.cs.template
rename to src/Adapter/MSTest.TestAdapter/BuildInfo.cs.template
diff --git a/src/Adapter/MSTest.TestAdapter/Execution/ClassCleanupManager.cs b/src/Adapter/MSTest.TestAdapter/Execution/ClassCleanupManager.cs
deleted file mode 100644
index fca58e95d8..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Execution/ClassCleanupManager.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Helpers;
-using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
-using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
-using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-
-namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution;
-
-internal sealed class ClassCleanupManager
-{
- private readonly ClassCleanupBehavior? _lifecycleFromMsTest;
- private readonly ClassCleanupBehavior _lifecycleFromAssembly;
- private readonly ReflectHelper _reflectHelper;
- private readonly ConcurrentDictionary> _remainingTestsByClass;
-
- public ClassCleanupManager(
- IEnumerable testsToRun,
- ClassCleanupBehavior? lifecycleFromMsTest,
- ClassCleanupBehavior lifecycleFromAssembly,
- ReflectHelper reflectHelper)
- {
- IEnumerable runnableTests = testsToRun.Where(t => t.Traits is null || !t.Traits.Any(t => t.Name == Constants.FixturesTestTrait));
- _remainingTestsByClass =
- new(runnableTests.GroupBy(t => t.TestMethod.FullClassName)
- .ToDictionary(
- g => g.Key,
- g => new List(g.Select(t => t.TestMethod.UniqueName))));
- _lifecycleFromMsTest = lifecycleFromMsTest;
- _lifecycleFromAssembly = lifecycleFromAssembly;
- _reflectHelper = reflectHelper;
- }
-
- public bool ShouldRunEndOfAssemblyCleanup { get; private set; }
-
- public void MarkTestComplete(TestMethodInfo testMethodInfo, TestMethod testMethod, out bool shouldRunEndOfClassCleanup)
- {
- shouldRunEndOfClassCleanup = false;
- if (!_remainingTestsByClass.TryGetValue(testMethodInfo.TestClassName, out List? testsByClass))
- {
- return;
- }
-
- lock (testsByClass)
- {
- testsByClass.Remove(testMethod.UniqueName);
- if (testsByClass.Count == 0)
- {
- _remainingTestsByClass.TryRemove(testMethodInfo.TestClassName, out _);
- if (testMethodInfo.Parent.HasExecutableCleanupMethod)
- {
- ClassCleanupBehavior cleanupLifecycle = _reflectHelper.GetClassCleanupBehavior(testMethodInfo.Parent)
- ?? _lifecycleFromMsTest
- ?? _lifecycleFromAssembly;
-
- shouldRunEndOfClassCleanup = cleanupLifecycle == ClassCleanupBehavior.EndOfClass;
- }
- }
-
- ShouldRunEndOfAssemblyCleanup = _remainingTestsByClass.IsEmpty;
- }
- }
-
- internal static void ForceCleanup(TypeCache typeCache, IDictionary sourceLevelParameters, IMessageLogger logger)
- {
- using var writer = new ThreadSafeStringWriter(CultureInfo.InvariantCulture, "context");
- TestContext testContext = new TestContextImplementation(null, writer, sourceLevelParameters, logger);
- IEnumerable classInfoCache = typeCache.ClassInfoListWithExecutableCleanupMethods;
- LogMessageListener? listener = null;
- foreach (TestClassInfo classInfo in classInfoCache)
- {
- TestFailedException? ex = classInfo.ExecuteClassCleanup(testContext, out listener);
- if (ex is not null)
- {
- throw ex;
- }
- }
-
- IEnumerable assemblyInfoCache = typeCache.AssemblyInfoListWithExecutableCleanupMethods;
- foreach (TestAssemblyInfo assemblyInfo in assemblyInfoCache)
- {
- TestFailedException? ex = assemblyInfo.ExecuteAssemblyCleanup(testContext, ref listener);
- if (ex is not null)
- {
- throw ex;
- }
- }
- }
-}
diff --git a/src/Adapter/MSTest.TestAdapter/Execution/TcmTestPropertiesProvider.cs b/src/Adapter/MSTest.TestAdapter/Execution/TcmTestPropertiesProvider.cs
deleted file mode 100644
index 1735b1cf0b..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Execution/TcmTestPropertiesProvider.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-using TestPlatformObjectModel = Microsoft.VisualStudio.TestPlatform.ObjectModel;
-
-namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution;
-
-///
-/// Reads and parses the TcmTestProperties in order to populate them in TestRunParameters.
-///
-internal static class TcmTestPropertiesProvider
-{
- ///
- /// Gets tcm properties from test case.
- ///
- /// Test case.
- /// Tcm properties.
- public static IDictionary GetTcmProperties(TestPlatformObjectModel.TestCase? testCase)
- {
- var tcmProperties = new Dictionary();
-
- // Return empty properties when testCase is null or when test case id is zero.
- if (testCase == null ||
- testCase.GetPropertyValue(Constants.TestCaseIdProperty, default) == 0)
- {
- return tcmProperties;
- }
-
- // Step 1: Add common properties.
- tcmProperties[Constants.TestRunIdProperty] = testCase.GetPropertyValue(Constants.TestRunIdProperty, default);
- tcmProperties[Constants.TestPlanIdProperty] = testCase.GetPropertyValue(Constants.TestPlanIdProperty, default);
- tcmProperties[Constants.BuildConfigurationIdProperty] = testCase.GetPropertyValue(Constants.BuildConfigurationIdProperty, default);
- tcmProperties[Constants.BuildDirectoryProperty] = testCase.GetPropertyValue(Constants.BuildDirectoryProperty, default);
- tcmProperties[Constants.BuildFlavorProperty] = testCase.GetPropertyValue(Constants.BuildFlavorProperty, default);
- tcmProperties[Constants.BuildNumberProperty] = testCase.GetPropertyValue(Constants.BuildNumberProperty, default);
- tcmProperties[Constants.BuildPlatformProperty] = testCase.GetPropertyValue(Constants.BuildPlatformProperty, default);
- tcmProperties[Constants.BuildUriProperty] = testCase.GetPropertyValue(Constants.BuildUriProperty, default);
- tcmProperties[Constants.TfsServerCollectionUrlProperty] = testCase.GetPropertyValue(Constants.TfsServerCollectionUrlProperty, default);
- tcmProperties[Constants.TfsTeamProjectProperty] = testCase.GetPropertyValue(Constants.TfsTeamProjectProperty, default);
- tcmProperties[Constants.IsInLabEnvironmentProperty] = testCase.GetPropertyValue(Constants.IsInLabEnvironmentProperty, default);
-
- // Step 2: Add test case specific properties.
- tcmProperties[Constants.TestCaseIdProperty] = testCase.GetPropertyValue(Constants.TestCaseIdProperty, default);
- tcmProperties[Constants.TestConfigurationIdProperty] = testCase.GetPropertyValue(Constants.TestConfigurationIdProperty, default);
- tcmProperties[Constants.TestConfigurationNameProperty] = testCase.GetPropertyValue(Constants.TestConfigurationNameProperty, default);
- tcmProperties[Constants.TestPointIdProperty] = testCase.GetPropertyValue(Constants.TestPointIdProperty, default);
-
- return tcmProperties;
- }
-}
diff --git a/src/Adapter/MSTest.TestAdapter/Execution/TestRunCancellationToken.cs b/src/Adapter/MSTest.TestAdapter/Execution/TestRunCancellationToken.cs
deleted file mode 100644
index fbd7b24255..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Execution/TestRunCancellationToken.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
-
-///
-/// Cancellation token supporting cancellation of a test run.
-///
-#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
-#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
-#endif
-public class TestRunCancellationToken
-{
- ///
- /// Callbacks to be invoked when canceled.
- /// Needs to be a concurrent collection, see https://github.com/microsoft/testfx/issues/3953.
- ///
- private readonly ConcurrentBag<(Action, object?)> _registeredCallbacks = new();
-
- ///
- /// Gets a value indicating whether the test run is canceled.
- ///
- public bool Canceled
- {
- get;
- private set
- {
- bool previousValue = field;
- field = value;
-
- if (!previousValue && value)
- {
- foreach ((Action callBack, object? state) in _registeredCallbacks)
- {
- callBack.Invoke(state);
- }
- }
- }
- }
-
- ///
- /// Cancels the execution of a test run.
- ///
- public void Cancel() => Canceled = true;
-
- ///
- /// Registers a callback method to be invoked when canceled.
- ///
- /// Callback delegate for handling cancellation.
- public void Register(Action callback) => _registeredCallbacks.Add((_ => callback(), null));
-
- internal void Register(Action callback, object? state) => _registeredCallbacks.Add((callback, state));
-
- ///
- /// Unregister the callback method.
- ///
- public void Unregister()
-#if NETCOREAPP || WINDOWS_UWP
- => _registeredCallbacks.Clear();
-#else
- {
- while (!_registeredCallbacks.IsEmpty)
- {
- _ = _registeredCallbacks.TryTake(out _);
- }
- }
-#endif
-
- internal void ThrowIfCancellationRequested()
- {
- if (Canceled)
- {
- throw new OperationCanceledException();
- }
- }
-}
diff --git a/src/Adapter/MSTest.TestAdapter/Extensions/ExceptionExtensions.cs b/src/Adapter/MSTest.TestAdapter/Extensions/ExceptionExtensions.cs
deleted file mode 100644
index 648fbc41db..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Extensions/ExceptionExtensions.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution;
-using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-
-using UTF = Microsoft.VisualStudio.TestTools.UnitTesting;
-
-namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions;
-
-///
-/// Extensions to type.
-///
-internal static class ExceptionExtensions
-{
- ///
- /// TargetInvocationException and TypeInitializationException do not carry any useful information
- /// to the user. Find the first inner exception that has useful information.
- ///
- internal static Exception GetRealException(this Exception exception)
- {
- // TargetInvocationException: Because .NET Framework wraps method.Invoke() into TargetInvocationException.
- // TypeInitializationException: Because AssemblyInitialize is static, and often helpers that are also static
- // are used to implement it, and they fail in constructor.
- while (exception is TargetInvocationException or TypeInitializationException
- && exception.InnerException is not null)
- {
- exception = exception.InnerException;
- }
-
- return exception;
- }
-
- ///
- /// Get the exception message if available, empty otherwise.
- ///
- /// An object.
- /// Exception message.
- internal static string TryGetMessage(this Exception? exception)
- {
- if (exception == null)
- {
- return string.Format(CultureInfo.CurrentCulture, Resource.UTF_FailedToGetExceptionMessage, "null");
- }
-
- // It is safe to retrieve an exception message, it should not throw in any case.
- return exception.Message ?? string.Empty;
- }
-
- ///
- /// Gets the for an exception.
- ///
- /// An instance.
- /// StackTraceInformation for the exception.
- internal static StackTraceInformation? TryGetStackTraceInformation(this Exception exception) => !StringEx.IsNullOrEmpty(exception.StackTrace)
- ? ExceptionHelper.CreateStackTraceInformation(exception, false, exception.StackTrace)
- : null;
-
- ///
- /// Checks whether exception is an Assert exception.
- ///
- /// An instance.
- /// Framework's Outcome depending on type of assertion.
- /// Exception message.
- /// StackTraceInformation for the exception.
- /// True, if Assert exception. False, otherwise.
- internal static bool TryGetUnitTestAssertException(this Exception exception, out UTF.UnitTestOutcome outcome,
- [NotNullWhen(true)] out string? exceptionMessage, out StackTraceInformation? exceptionStackTrace)
- {
- if (exception is UnitTestAssertException)
- {
- outcome = exception is AssertInconclusiveException
- ? UTF.UnitTestOutcome.Inconclusive
- : UTF.UnitTestOutcome.Failed;
-
- exceptionMessage = exception.TryGetMessage();
- exceptionStackTrace = exception.TryGetStackTraceInformation();
- return true;
- }
-
- outcome = UTF.UnitTestOutcome.Failed;
- exceptionMessage = null;
- exceptionStackTrace = null;
- return false;
- }
-}
diff --git a/src/Adapter/MSTest.TestAdapter/Friends.cs b/src/Adapter/MSTest.TestAdapter/Friends.cs
deleted file mode 100644
index bdfd4316bd..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Friends.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-// Friend assemblies
-[assembly: InternalsVisibleTo(assemblyName: "Microsoft.VisualStudio.TestPlatform.MSTestAdapter.UnitTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293")]
-[assembly: InternalsVisibleTo(assemblyName: "DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
-[assembly: InternalsVisibleTo(assemblyName: "MSTest.VstestConsoleWrapper.IntegrationTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293")]
-[assembly: InternalsVisibleTo(assemblyName: "MSTest.IntegrationTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293")]
diff --git a/src/Adapter/MSTest.TestAdapter/Helpers/AttributeComparer.cs b/src/Adapter/MSTest.TestAdapter/Helpers/AttributeComparer.cs
deleted file mode 100644
index c82f46d996..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Helpers/AttributeComparer.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Helpers;
-
-internal static class AttributeComparer
-{
- public static bool IsNonDerived(Attribute attribute) =>
- // We are explicitly checking the given type *exactly*. We don't want to consider inheritance.
- // So, this should NOT be refactored to 'attribute is TAttribute'.
- attribute.GetType() == typeof(TAttribute);
-
- public static bool IsDerived(Attribute attribute) => attribute is TAttribute;
-}
diff --git a/src/Adapter/MSTest.TestAdapter/Helpers/EnvironmentWrapper.cs b/src/Adapter/MSTest.TestAdapter/Helpers/EnvironmentWrapper.cs
deleted file mode 100644
index 792366d479..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Helpers/EnvironmentWrapper.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Helpers;
-
-internal sealed class EnvironmentWrapper : IEnvironment
-{
- public string MachineName => Environment.MachineName;
-}
diff --git a/src/Adapter/MSTest.TestAdapter/Helpers/IEnvironment.cs b/src/Adapter/MSTest.TestAdapter/Helpers/IEnvironment.cs
deleted file mode 100644
index 96395c6bc4..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Helpers/IEnvironment.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-
-namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Helpers;
-
-///
-/// Interface to abstract environment related information.
-///
-internal interface IEnvironment
-{
- ///
- /// Gets the machine name.
- ///
- string MachineName { get; }
-}
diff --git a/src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj b/src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj
index 9574cbfe6e..2537f7345f 100644
--- a/src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj
+++ b/src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.csproj
@@ -37,12 +37,14 @@
$(NoWarn);NU5127;NU5128;NU5100
+
+ trueMicrosoft.VisualStudio.TestPlatform.MSTest.TestAdapterMicrosoft.VisualStudio.TestPlatform.MSTest.TestAdapter
- TRACE
+ $(DefineConstants);TRACEtrue
@@ -61,10 +63,6 @@
-
-
-
-
@@ -72,17 +70,6 @@
-
- True
- True
- Resource.resx
-
-
- ResXFileCodeGenerator
- Resource.Designer.cs
- Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter
- Designer
-
@@ -105,36 +92,16 @@
-
-
-
-
-
- True
- True
- Resource.resx
-
+
+
-
-
- <_TemplateProperties>Version=$(Version)
-
-
- <_TemplateCsproj Include="$(MSBuildProjectDirectory)/MSTestVersion.cs.template" Destination="$(IntermediateOutputPath)/MSTestVersion.cs" />
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.nuspec b/src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.nuspec
index 513ffc408a..e1388eac5f 100644
--- a/src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.nuspec
+++ b/src/Adapter/MSTest.TestAdapter/MSTest.TestAdapter.nuspec
@@ -133,6 +133,13 @@
-->
+
+
+
diff --git a/src/Adapter/MSTest.TestAdapter/Properties/AssemblyInfo.cs b/src/Adapter/MSTest.TestAdapter/Properties/AssemblyInfo.cs
index 03648cfe6d..1986d819e5 100644
--- a/src/Adapter/MSTest.TestAdapter/Properties/AssemblyInfo.cs
+++ b/src/Adapter/MSTest.TestAdapter/Properties/AssemblyInfo.cs
@@ -3,5 +3,24 @@
using Microsoft.VisualStudio.TestPlatform;
using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
+using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution;
+using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions;
+using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
[assembly: TestExtensionTypes(typeof(MSTestDiscoverer), typeof(MSTestExecutor))]
+
+#pragma warning disable RS0016 // Add public types and members to the declared API (type forwarding is not public API)
+[assembly: TypeForwardedTo(typeof(LogMessageListener))]
+[assembly: TypeForwardedTo(typeof(MSTestSettings))]
+[assembly: TypeForwardedTo(typeof(RunConfigurationSettings))]
+[assembly: TypeForwardedTo(typeof(TestAssemblyInfo))]
+[assembly: TypeForwardedTo(typeof(TestClassInfo))]
+[assembly: TypeForwardedTo(typeof(TestExecutionManager))]
+[assembly: TypeForwardedTo(typeof(TestMethod))]
+[assembly: TypeForwardedTo(typeof(TestMethodInfo))]
+[assembly: TypeForwardedTo(typeof(TestResultExtensions))]
+[assembly: TypeForwardedTo(typeof(TestRunCancellationToken))]
+[assembly: TypeForwardedTo(typeof(UnitTestOutcome))]
+[assembly: TypeForwardedTo(typeof(UnitTestOutcomeExtensions))]
+[assembly: TypeForwardedTo(typeof(UnitTestResult))]
+#pragma warning restore RS0016
diff --git a/src/Adapter/MSTest.TestAdapter/PublicAPI/PublicAPI.Shipped.txt b/src/Adapter/MSTest.TestAdapter/PublicAPI/PublicAPI.Shipped.txt
index 1a24faebf6..7c85eb0167 100644
--- a/src/Adapter/MSTest.TestAdapter/PublicAPI/PublicAPI.Shipped.txt
+++ b/src/Adapter/MSTest.TestAdapter/PublicAPI/PublicAPI.Shipped.txt
@@ -1,65 +1,4 @@
#nullable enable
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.TimeoutWhenNotSet = 0 -> int
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.SettingsName = "MSTest" -> string!
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.SettingsNameAlias = "MSTestV2" -> string!
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.TotalHierarchyLevels = 4 -> int
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.SettingsName = "RunConfiguration" -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.DebugTrace.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.Dispose() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.GetAndClearDebugTrace() -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.GetAndClearStandardError() -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.GetAndClearStandardOutput() -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.LogMessageListener(bool captureDebugTraces) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.StandardError.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.StandardOutput.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.AssemblyCleanupMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.AssemblyInitializationException.get -> System.Exception?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.AssemblyInitializeMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.HasExecutableCleanupMethod.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.IsAssemblyInitializeExecuted.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.RunAssemblyCleanup() -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.RunAssemblyInitialize(Microsoft.VisualStudio.TestTools.UnitTesting.TestContext! testContext) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseClassCleanupMethodsStack.get -> System.Collections.Generic.Stack!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseClassInitAndCleanupMethods.get -> System.Collections.Generic.Queue!>!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseTestCleanupMethodsQueue.get -> System.Collections.Generic.Queue!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseTestInitializeMethodsQueue.get -> System.Collections.Generic.Queue!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassAttribute.get -> Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassCleanupException.get -> System.Exception?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassCleanupMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassInitializationException.get -> System.Exception?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassInitializeMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassType.get -> System.Type!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.Constructor.get -> System.Reflection.ConstructorInfo!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.HasExecutableCleanupMethod.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.IsClassCleanupExecuted.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.IsClassInitializeExecuted.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.Parent.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.RunClassCleanup(Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior classCleanupLifecycle = Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior.EndOfAssembly) -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.RunClassInitialize(Microsoft.VisualStudio.TestTools.UnitTesting.TestContext! testContext) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.TestCleanupMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.TestContextProperty.get -> System.Reflection.PropertyInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.TestInitializeMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager.RunTests(System.Collections.Generic.IEnumerable! tests, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IRunContext? runContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IFrameworkHandle! frameworkHandle, Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken! runCancellationToken) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager.RunTests(System.Collections.Generic.IEnumerable! sources, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IRunContext? runContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IFrameworkHandle! frameworkHandle, Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken! cancellationToken) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager.TestExecutionManager() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.Arguments.get -> object?[]?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.GetAllAttributes(bool inherit) -> System.Attribute![]?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.GetAttributes(bool inherit) -> TAttributeType![]!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.IsRunnable.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.IsTimeoutSet.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.MethodInfo.get -> System.Reflection.MethodInfo!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.NotRunnableReason.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.ParameterTypes.get -> System.Reflection.ParameterInfo![]!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.ReturnType.get -> System.Type!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.TestClassName.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.TestMethodName.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.TestResultExtensions
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.UnitTestOutcomeExtensions
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestDiscoverer
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestDiscoverer.DiscoverTests(System.Collections.Generic.IEnumerable! sources, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IDiscoveryContext! discoveryContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging.IMessageLogger! logger, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.ITestCaseDiscoverySink! discoverySink) -> void
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestDiscoverer.MSTestDiscoverer() -> void
@@ -70,83 +9,7 @@ Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestExecutor.RunTests(S
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestExecutor.RunTests(System.Collections.Generic.IEnumerable? sources, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IRunContext? runContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IFrameworkHandle? frameworkHandle) -> void
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestExecutor.TestExecutionManager.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager!
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestExecutor.TestExecutionManager.set -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.CaptureDebugTraces.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ClassCleanupLifecycle.get -> Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.DisableParallelization.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.EnableBaseClassTestMethodsFromOtherAssemblies.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ForcedLegacyMode.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.MapInconclusiveToFailed.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.MapNotRunnableToFailed.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.MSTestSettings() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ParallelizationScope.get -> Microsoft.VisualStudio.TestTools.UnitTesting.ExecutionScope?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ParallelizationWorkers.get -> int?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TestSettingsFile.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TestTimeout.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TreatClassAndAssemblyCleanupWarningsAsErrors.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TreatDiscoveryWarningsAsErrors.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.AssemblyName.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringAssemblyName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringAssemblyName.set -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringClassFullName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringClassFullName.set -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.FullClassName.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.HasManagedMethodAndTypeProperties.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.Hierarchy.get -> System.Collections.Generic.IReadOnlyCollection!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.IsAsync.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.ManagedMethodName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.ManagedTypeName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.Name.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.TestIdGenerationStrategy.get -> Microsoft.VisualStudio.TestTools.UnitTesting.TestIdGenerationStrategy
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.TestMethod(string! name, string! fullClassName, string! assemblyName, bool isAsync) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Error = 0 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Failed = 1 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Ignored = 4 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Inconclusive = 3 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.InProgress = 8 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.NotFound = 7 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.NotRunnable = 5 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Passed = 6 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Timeout = 2 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.DatarowIndex.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.DebugTrace.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.DisplayName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.Duration.get -> System.TimeSpan
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorColumnNumber.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorFilePath.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorLineNumber.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorMessage.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorStackTrace.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ExecutionId.get -> System.Guid
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.InnerResultsCount.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.Outcome.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ParentExecId.get -> System.Guid
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ResultFiles.get -> System.Collections.Generic.IList?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.StandardError.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.StandardOut.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.TestContextMessages.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.CollectSourceInformation.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.RunConfigurationSettings() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Cancel() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Canceled.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Register(System.Action! callback) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.TestRunCancellationToken() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Unregister() -> void
Microsoft.VisualStudio.TestTools.UnitTesting.TestApplicationBuilderExtensions
Microsoft.VisualStudio.TestTools.UnitTesting.TestingPlatformBuilderHook
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.TestResultExtensions.ToUnitTestResults(this Microsoft.VisualStudio.TestTools.UnitTesting.TestResult![]! testResults) -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult![]!
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.UnitTestOutcomeExtensions.ToUnitTestOutcome(this Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome frameworkTestOutcome) -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.CurrentSettings.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings!
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.IsLegacyScenario(Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging.IMessageLogger! logger) -> bool
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.PopulateSettings(Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings! settings) -> void
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.PopulateSettings(Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IDiscoveryContext? context) -> void
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.RunConfigurationSettings.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings!
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.PopulateSettings(Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IDiscoveryContext? context) -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings!
static Microsoft.VisualStudio.TestTools.UnitTesting.TestApplicationBuilderExtensions.AddMSTest(this Microsoft.Testing.Platform.Builder.ITestApplicationBuilder! testApplicationBuilder, System.Func!>! getTestAssemblies) -> void
static Microsoft.VisualStudio.TestTools.UnitTesting.TestingPlatformBuilderHook.AddExtensions(Microsoft.Testing.Platform.Builder.ITestApplicationBuilder! testApplicationBuilder, string![]! arguments) -> void
-virtual Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.Invoke(object?[]? arguments) -> Microsoft.VisualStudio.TestTools.UnitTesting.TestResult!
diff --git a/src/Adapter/MSTest.TestAdapter/PublicAPI/PublicAPI.Unshipped.txt b/src/Adapter/MSTest.TestAdapter/PublicAPI/PublicAPI.Unshipped.txt
index 22b19265a6..7dc5c58110 100644
--- a/src/Adapter/MSTest.TestAdapter/PublicAPI/PublicAPI.Unshipped.txt
+++ b/src/Adapter/MSTest.TestAdapter/PublicAPI/PublicAPI.Unshipped.txt
@@ -1,2 +1 @@
#nullable enable
-virtual Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.InvokeAsync(object?[]? arguments) -> System.Threading.Tasks.Task!
diff --git a/src/Adapter/MSTest.TestAdapter/PublicAPI/uwp/PublicAPI.Shipped.txt b/src/Adapter/MSTest.TestAdapter/PublicAPI/uwp/PublicAPI.Shipped.txt
index 100104fa6b..078eb58f29 100644
--- a/src/Adapter/MSTest.TestAdapter/PublicAPI/uwp/PublicAPI.Shipped.txt
+++ b/src/Adapter/MSTest.TestAdapter/PublicAPI/uwp/PublicAPI.Shipped.txt
@@ -1,65 +1,4 @@
#nullable enable
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.TimeoutWhenNotSet = 0 -> int
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.SettingsName = "MSTest" -> string!
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.SettingsNameAlias = "MSTestV2" -> string!
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.TotalHierarchyLevels = 4 -> int
-const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.SettingsName = "RunConfiguration" -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.DebugTrace.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.Dispose() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.GetAndClearDebugTrace() -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.GetAndClearStandardError() -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.GetAndClearStandardOutput() -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.LogMessageListener(bool captureDebugTraces) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.StandardError.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.StandardOutput.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.AssemblyCleanupMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.AssemblyInitializationException.get -> System.Exception?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.AssemblyInitializeMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.HasExecutableCleanupMethod.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.IsAssemblyInitializeExecuted.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.RunAssemblyCleanup() -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.RunAssemblyInitialize(Microsoft.VisualStudio.TestTools.UnitTesting.TestContext! testContext) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseClassCleanupMethodsStack.get -> System.Collections.Generic.Stack!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseClassInitAndCleanupMethods.get -> System.Collections.Generic.Queue!>!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseTestCleanupMethodsQueue.get -> System.Collections.Generic.Queue!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseTestInitializeMethodsQueue.get -> System.Collections.Generic.Queue!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassAttribute.get -> Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassCleanupException.get -> System.Exception?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassCleanupMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassInitializationException.get -> System.Exception?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassInitializeMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassType.get -> System.Type!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.Constructor.get -> System.Reflection.ConstructorInfo!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.HasExecutableCleanupMethod.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.IsClassCleanupExecuted.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.IsClassInitializeExecuted.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.Parent.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.RunClassCleanup(Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior classCleanupLifecycle = Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior.EndOfAssembly) -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.RunClassInitialize(Microsoft.VisualStudio.TestTools.UnitTesting.TestContext! testContext) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.TestCleanupMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.TestContextProperty.get -> System.Reflection.PropertyInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.TestInitializeMethod.get -> System.Reflection.MethodInfo?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager.RunTests(System.Collections.Generic.IEnumerable! tests, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IRunContext? runContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IFrameworkHandle! frameworkHandle, Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken! runCancellationToken) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager.RunTests(System.Collections.Generic.IEnumerable! sources, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IRunContext? runContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IFrameworkHandle! frameworkHandle, Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken! cancellationToken) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager.TestExecutionManager() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.Arguments.get -> object?[]?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.GetAllAttributes(bool inherit) -> System.Attribute![]?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.GetAttributes(bool inherit) -> TAttributeType![]!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.IsRunnable.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.IsTimeoutSet.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.MethodInfo.get -> System.Reflection.MethodInfo!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.NotRunnableReason.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.ParameterTypes.get -> System.Reflection.ParameterInfo![]!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.ReturnType.get -> System.Type!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.TestClassName.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.TestMethodName.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.TestResultExtensions
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.UnitTestOutcomeExtensions
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestDiscoverer
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestDiscoverer.DiscoverTests(System.Collections.Generic.IEnumerable! sources, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IDiscoveryContext! discoveryContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging.IMessageLogger! logger, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.ITestCaseDiscoverySink! discoverySink) -> void
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestDiscoverer.MSTestDiscoverer() -> void
@@ -70,79 +9,3 @@ Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestExecutor.RunTests(S
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestExecutor.RunTests(System.Collections.Generic.IEnumerable? sources, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IRunContext? runContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IFrameworkHandle? frameworkHandle) -> void
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestExecutor.TestExecutionManager.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager!
Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestExecutor.TestExecutionManager.set -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.CaptureDebugTraces.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ClassCleanupLifecycle.get -> Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.DisableParallelization.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.EnableBaseClassTestMethodsFromOtherAssemblies.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ForcedLegacyMode.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.MapInconclusiveToFailed.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.MapNotRunnableToFailed.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.MSTestSettings() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ParallelizationScope.get -> Microsoft.VisualStudio.TestTools.UnitTesting.ExecutionScope?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ParallelizationWorkers.get -> int?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TestSettingsFile.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TestTimeout.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TreatClassAndAssemblyCleanupWarningsAsErrors.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TreatDiscoveryWarningsAsErrors.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.AssemblyName.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringAssemblyName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringAssemblyName.set -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringClassFullName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringClassFullName.set -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.FullClassName.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.HasManagedMethodAndTypeProperties.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.Hierarchy.get -> System.Collections.Generic.IReadOnlyCollection!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.IsAsync.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.ManagedMethodName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.ManagedTypeName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.Name.get -> string!
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.TestIdGenerationStrategy.get -> Microsoft.VisualStudio.TestTools.UnitTesting.TestIdGenerationStrategy
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.TestMethod(string! name, string! fullClassName, string! assemblyName, bool isAsync) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Error = 0 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Failed = 1 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Ignored = 4 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Inconclusive = 3 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.InProgress = 8 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.NotFound = 7 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.NotRunnable = 5 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Passed = 6 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Timeout = 2 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.DatarowIndex.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.DebugTrace.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.DisplayName.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.Duration.get -> System.TimeSpan
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorColumnNumber.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorFilePath.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorLineNumber.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorMessage.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorStackTrace.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ExecutionId.get -> System.Guid
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.InnerResultsCount.get -> int
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.Outcome.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ParentExecId.get -> System.Guid
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ResultFiles.get -> System.Collections.Generic.IList?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.StandardError.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.StandardOut.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.TestContextMessages.get -> string?
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.CollectSourceInformation.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.RunConfigurationSettings() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Cancel() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Canceled.get -> bool
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Register(System.Action! callback) -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.TestRunCancellationToken() -> void
-Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Unregister() -> void
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.TestResultExtensions.ToUnitTestResults(this Microsoft.VisualStudio.TestTools.UnitTesting.TestResult![]! testResults) -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult![]!
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.UnitTestOutcomeExtensions.ToUnitTestOutcome(this Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome frameworkTestOutcome) -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.CurrentSettings.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings!
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.IsLegacyScenario(Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging.IMessageLogger! logger) -> bool
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.PopulateSettings(Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings! settings) -> void
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.PopulateSettings(Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IDiscoveryContext? context) -> void
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.RunConfigurationSettings.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings!
-static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.PopulateSettings(Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IDiscoveryContext? context) -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings!
-virtual Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.Invoke(object?[]? arguments) -> Microsoft.VisualStudio.TestTools.UnitTesting.TestResult!
diff --git a/src/Adapter/MSTest.TestAdapter/PublicAPI/uwp/PublicAPI.Unshipped.txt b/src/Adapter/MSTest.TestAdapter/PublicAPI/uwp/PublicAPI.Unshipped.txt
index 22b19265a6..7dc5c58110 100644
--- a/src/Adapter/MSTest.TestAdapter/PublicAPI/uwp/PublicAPI.Unshipped.txt
+++ b/src/Adapter/MSTest.TestAdapter/PublicAPI/uwp/PublicAPI.Unshipped.txt
@@ -1,2 +1 @@
#nullable enable
-virtual Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.InvokeAsync(object?[]? arguments) -> System.Threading.Tasks.Task!
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/Resource.Designer.cs b/src/Adapter/MSTest.TestAdapter/Resources/Resource.Designer.cs
deleted file mode 100644
index 8daf3f194b..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/Resource.Designer.cs
+++ /dev/null
@@ -1,888 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resource {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resource() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Resources.Resource", typeof(Resource).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized string similar to Assembly cleanup method '{0}.{1}' timed out after {2}ms.
- ///
- internal static string AssemblyCleanupTimedOut {
- get {
- return ResourceManager.GetString("AssemblyCleanupTimedOut", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Assembly cleanup method '{0}.{1}' was canceled.
- ///
- internal static string AssemblyCleanupWasCancelled {
- get {
- return ResourceManager.GetString("AssemblyCleanupWasCancelled", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Assembly initialize method '{0}.{1}' timed out after {2}ms.
- ///
- internal static string AssemblyInitializeTimedOut {
- get {
- return ResourceManager.GetString("AssemblyInitializeTimedOut", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Assembly initialize method '{0}.{1}' was canceled.
- ///
- internal static string AssemblyInitializeWasCancelled {
- get {
- return ResourceManager.GetString("AssemblyInitializeWasCancelled", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to MSTestAdapterV2.
- ///
- internal static string AttachmentSetDisplayName {
- get {
- return ResourceManager.GetString("AttachmentSetDisplayName", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}.
- ///
- internal static string CannotEnumerateIDataSourceAttribute {
- get {
- return ResourceManager.GetString("CannotEnumerateIDataSourceAttribute", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}.
- ///
- internal static string CannotExpandIDataSourceAttribute {
- get {
- return ResourceManager.GetString("CannotExpandIDataSourceAttribute", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution"..
- ///
- internal static string CannotExpandIDataSourceAttribute_CannotSerialize {
- get {
- return ResourceManager.GetString("CannotExpandIDataSourceAttribute_CannotSerialize", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique..
- ///
- internal static string CannotExpandIDataSourceAttribute_DuplicateDisplayName {
- get {
- return ResourceManager.GetString("CannotExpandIDataSourceAttribute_DuplicateDisplayName", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
- ///Test expected {2} parameter(s), with types '{3}',
- ///but received {4} argument(s), with types '{5}'..
- ///
- internal static string CannotRunTestArgumentsMismatchError {
- get {
- return ResourceManager.GetString("CannotRunTestArgumentsMismatchError", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data..
- ///
- internal static string CannotRunTestMethodNoDataError {
- get {
- return ResourceManager.GetString("CannotRunTestMethodNoDataError", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Class cleanup method '{0}.{1}' timed out after {2}ms.
- ///
- internal static string ClassCleanupTimedOut {
- get {
- return ResourceManager.GetString("ClassCleanupTimedOut", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Class cleanup method '{0}.{1}' was canceled.
- ///
- internal static string ClassCleanupWasCancelled {
- get {
- return ResourceManager.GetString("ClassCleanupWasCancelled", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Class initialize method '{0}.{1}' timed out after {2}ms.
- ///
- internal static string ClassInitializeTimedOut {
- get {
- return ResourceManager.GetString("ClassInitializeTimedOut", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Class initialize method '{0}.{1}' was canceled.
- ///
- internal static string ClassInitializeWasCancelled {
- get {
- return ResourceManager.GetString("ClassInitializeWasCancelled", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}..
- ///
- internal static string CouldNotInspectTypeDuringDiscovery {
- get {
- return ResourceManager.GetString("CouldNotInspectTypeDuringDiscovery", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to {0} (Data Row {1}).
- ///
- internal static string DataDrivenResultDisplayName {
- get {
- return ResourceManager.GetString("DataDrivenResultDisplayName", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Debug Trace:.
- ///
- internal static string DebugTraceBanner {
- get {
- return ResourceManager.GetString("DebugTraceBanner", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to [MSTest][Discovery][{0}] {1}.
- ///
- internal static string DiscoveryWarning {
- get {
- return ResourceManager.GetString("DiscoveryWarning", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files..
- ///
- internal static string DuplicateConfigurationError {
- get {
- return ResourceManager.GetString("DuplicateConfigurationError", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to {0}: {1}.
- ///
- internal static string EnumeratorLoadTypeErrorFormat {
- get {
- return ResourceManager.GetString("EnumeratorLoadTypeErrorFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to "{0}": (Failed to get exception description due to an exception of type "{1}"..
- ///
- internal static string ExceptionOccuredWhileGettingTheExceptionDescription {
- get {
- return ResourceManager.GetString("ExceptionOccuredWhileGettingTheExceptionDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Exceptions thrown:.
- ///
- internal static string ExceptionsThrown {
- get {
- return ResourceManager.GetString("ExceptionsThrown", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test '{0}' was canceled.
- ///
- internal static string Execution_Test_Cancelled {
- get {
- return ResourceManager.GetString("Execution_Test_Cancelled", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test '{0}' timed out after {1}ms.
- ///
- internal static string Execution_Test_Timeout {
- get {
- return ResourceManager.GetString("Execution_Test_Timeout", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}.
- ///
- internal static string FailedToGetCustomAttribute {
- get {
- return ResourceManager.GetString("FailedToGetCustomAttribute", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The type of the generic parameter '{0}' could not be inferred..
- ///
- internal static string GenericParameterCantBeInferred {
- get {
- return ResourceManager.GetString("GenericParameterCantBeInferred", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred..
- ///
- internal static string GenericParameterCantBeInferredBecauseNoArguments {
- get {
- return ResourceManager.GetString("GenericParameterCantBeInferredBecauseNoArguments", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'..
- ///
- internal static string GenericParameterConflict {
- get {
- return ResourceManager.GetString("GenericParameterConflict", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}..
- ///
- internal static string InvalidClassCleanupLifecycleValue {
- get {
- return ResourceManager.GetString("InvalidClassCleanupLifecycleValue", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}..
- ///
- internal static string InvalidParallelScopeValue {
- get {
- return ResourceManager.GetString("InvalidParallelScopeValue", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer..
- ///
- internal static string InvalidParallelWorkersValue {
- get {
- return ResourceManager.GetString("InvalidParallelWorkersValue", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'..
- ///
- internal static string InvalidSettingsXmlAttribute {
- get {
- return ResourceManager.GetString("InvalidSettingsXmlAttribute", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid settings '{0}'. Unexpected XmlElement: '{1}'..
- ///
- internal static string InvalidSettingsXmlElement {
- get {
- return ResourceManager.GetString("InvalidSettingsXmlElement", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid value '{0}' for runsettings entry '{1}', setting will be ignored..
- ///
- internal static string InvalidValue {
- get {
- return ResourceManager.GetString("InvalidValue", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter..
- ///
- internal static string LegacyScenariosNotSupportedWarning {
- get {
- return ResourceManager.GetString("LegacyScenariosNotSupportedWarning", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file..
- ///
- internal static string OlderTFMVersionFound {
- get {
- return ResourceManager.GetString("OlderTFMVersionFound", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Running tests in any of the provided sources is not supported for the selected platform.
- ///
- internal static string SourcesNotSupported {
- get {
- return ResourceManager.GetString("SourcesNotSupported", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes..
- ///
- internal static string STAIsOnlySupportedOnWindowsWarning {
- get {
- return ResourceManager.GetString("STAIsOnlySupportedOnWindowsWarning", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Failed to discover tests from assembly {0}. Reason:{1}.
- ///
- internal static string TestAssembly_AssemblyDiscoveryFailure {
- get {
- return ResourceManager.GetString("TestAssembly_AssemblyDiscoveryFailure", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to File does not exist: {0}.
- ///
- internal static string TestAssembly_FileDoesNotExist {
- get {
- return ResourceManager.GetString("TestAssembly_FileDoesNotExist", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test cleanup method '{0}.{1}' timed out after {2}ms.
- ///
- internal static string TestCleanupTimedOut {
- get {
- return ResourceManager.GetString("TestCleanupTimedOut", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test cleanup method '{0}.{1}' was canceled.
- ///
- internal static string TestCleanupWasCancelled {
- get {
- return ResourceManager.GetString("TestCleanupWasCancelled", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to TestContext cannot be Null..
- ///
- internal static string TestContextIsNull {
- get {
- return ResourceManager.GetString("TestContextIsNull", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to TestContext Messages:.
- ///
- internal static string TestContextMessageBanner {
- get {
- return ResourceManager.GetString("TestContextMessageBanner", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test initialize method '{0}.{1}' timed out after {2}ms.
- ///
- internal static string TestInitializeTimedOut {
- get {
- return ResourceManager.GetString("TestInitializeTimedOut", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test initialize method '{0}.{1}' was canceled.
- ///
- internal static string TestInitializeWasCancelled {
- get {
- return ResourceManager.GetString("TestInitializeWasCancelled", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test method {0} was not found..
- ///
- internal static string TestNotFound {
- get {
- return ResourceManager.GetString("TestNotFound", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Parallelization enabled for {0} (Workers: {1}, Scope: {2}).
- ///
- internal static string TestParallelizationBanner {
- get {
- return ResourceManager.GetString("TestParallelizationBanner", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
- ///Error: {1}.
- ///
- internal static string TypeLoadFailed {
- get {
- return ResourceManager.GetString("TypeLoadFailed", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}.
- ///
- internal static string UTA_AssemblyCleanupMethodWasUnsuccesful {
- get {
- return ResourceManager.GetString("UTA_AssemblyCleanupMethodWasUnsuccesful", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution..
- ///
- internal static string UTA_AssemblyInitMethodThrows {
- get {
- return ResourceManager.GetString("UTA_AssemblyInitMethodThrows", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}.
- ///
- internal static string UTA_ClassCleanupMethodWasUnsuccesful {
- get {
- return ResourceManager.GetString("UTA_ClassCleanupMethodWasUnsuccesful", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Class Initialization method {0}.{1} threw exception. {2}: {3}..
- ///
- internal static string UTA_ClassInitMethodThrows {
- get {
- return ResourceManager.GetString("UTA_ClassInitMethodThrows", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'..
- ///
- internal static string UTA_ClassOrAssemblyCleanupMethodHasWrongSignature {
- get {
- return ResourceManager.GetString("UTA_ClassOrAssemblyCleanupMethodHasWrongSignature", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'..
- ///
- internal static string UTA_ClassOrAssemblyInitializeMethodHasWrongSignature {
- get {
- return ResourceManager.GetString("UTA_ClassOrAssemblyInitializeMethodHasWrongSignature", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to TestCleanup method {0}.{1} threw exception. {2}..
- ///
- internal static string UTA_CleanupMethodThrows {
- get {
- return ResourceManager.GetString("UTA_CleanupMethodThrows", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Error calling Test Cleanup method for test class {0}: {1}.
- ///
- internal static string UTA_CleanupMethodThrowsGeneralError {
- get {
- return ResourceManager.GetString("UTA_CleanupMethodThrowsGeneralError", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to TestCleanup Stack Trace.
- ///
- internal static string UTA_CleanupStackTrace {
- get {
- return ResourceManager.GetString("UTA_CleanupStackTrace", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to --- End of inner exception stack trace ---.
- ///
- internal static string UTA_EndOfInnerExceptionTrace {
- get {
- return ResourceManager.GetString("UTA_EndOfInnerExceptionTrace", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2().
- ///
- internal static string UTA_ErrorIncorrectTestMethodSignature {
- get {
- return ResourceManager.GetString("UTA_ErrorIncorrectTestMethodSignature", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext..
- ///
- internal static string UTA_ErrorInValidTestContextSignature {
- get {
- return ResourceManager.GetString("UTA_ErrorInValidTestContextSignature", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0..
- ///
- internal static string UTA_ErrorInvalidTimeout {
- get {
- return ResourceManager.GetString("UTA_ErrorInvalidTimeout", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly..
- ///
- internal static string UTA_ErrorMultiAssemblyClean {
- get {
- return ResourceManager.GetString("UTA_ErrorMultiAssemblyClean", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly..
- ///
- internal static string UTA_ErrorMultiAssemblyInit {
- get {
- return ResourceManager.GetString("UTA_ErrorMultiAssemblyInit", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class..
- ///
- internal static string UTA_ErrorMultiClassClean {
- get {
- return ResourceManager.GetString("UTA_ErrorMultiClassClean", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class..
- ///
- internal static string UTA_ErrorMultiClassInit {
- get {
- return ResourceManager.GetString("UTA_ErrorMultiClassInit", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA024: {0}: Cannot define more than one method with the TestCleanup attribute..
- ///
- internal static string UTA_ErrorMultiClean {
- get {
- return ResourceManager.GetString("UTA_ErrorMultiClean", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA018: {0}: Cannot define more than one method with the TestInitialize attribute..
- ///
- internal static string UTA_ErrorMultiInit {
- get {
- return ResourceManager.GetString("UTA_ErrorMultiInit", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA001: TestClass attribute defined on non-public class {0}.
- ///
- internal static string UTA_ErrorNonPublicTestClass {
- get {
- return ResourceManager.GetString("UTA_ErrorNonPublicTestClass", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA023: {0}: Cannot define predefined property {2} on method {1}..
- ///
- internal static string UTA_ErrorPredefinedTestProperty {
- get {
- return ResourceManager.GetString("UTA_ErrorPredefinedTestProperty", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to TestClass attribute defined on generic non-abstract class {0}.
- ///
- internal static string UTA_ErrorTestClassIsGenericNonAbstract {
- get {
- return ResourceManager.GetString("UTA_ErrorTestClassIsGenericNonAbstract", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name..
- ///
- internal static string UTA_ErrorTestPropertyNullOrEmpty {
- get {
- return ResourceManager.GetString("UTA_ErrorTestPropertyNullOrEmpty", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
- ///{1}.
- ///
- internal static string UTA_ExecuteThrewException {
- get {
- return ResourceManager.GetString("UTA_ExecuteThrewException", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
- ///{2}.
- ///
- internal static string UTA_ExpectedExceptionAttributeConstructionException {
- get {
- return ResourceManager.GetString("UTA_ExpectedExceptionAttributeConstructionException", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Failed to obtain the exception thrown by test method {0}.{1}..
- ///
- internal static string UTA_FailedToGetTestMethodException {
- get {
- return ResourceManager.GetString("UTA_FailedToGetTestMethodException", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Initialization method {0}.{1} threw exception. {2}..
- ///
- internal static string UTA_InitMethodThrows {
- get {
- return ResourceManager.GetString("UTA_InitMethodThrows", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Unable to create instance of class {0}. Error: {1}..
- ///
- internal static string UTA_InstanceCreationError {
- get {
- return ResourceManager.GetString("UTA_InstanceCreationError", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Method {0}.{1} does not exist..
- ///
- internal static string UTA_MethodDoesNotExists {
- get {
- return ResourceManager.GetString("UTA_MethodDoesNotExists", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The test method {0}.{1} has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed..
- ///
- internal static string UTA_MultipleAttributesOnTestMethod {
- get {
- return ResourceManager.GetString("UTA_MultipleAttributesOnTestMethod", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor..
- ///
- internal static string UTA_NoTestResult {
- get {
- return ResourceManager.GetString("UTA_NoTestResult", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'..
- ///
- internal static string UTA_NoValidConstructor {
- get {
- return ResourceManager.GetString("UTA_NoValidConstructor", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Unable to find property {0}.TestContext. Error:{1}..
- ///
- internal static string UTA_TestContextLoadError {
- get {
- return ResourceManager.GetString("UTA_TestContextLoadError", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Unable to set TestContext property for the class {0}. Error: {1}..
- ///
- internal static string UTA_TestContextSetError {
- get {
- return ResourceManager.GetString("UTA_TestContextSetError", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The {0}.TestContext has incorrect type..
- ///
- internal static string UTA_TestContextTypeMismatchLoadError {
- get {
- return ResourceManager.GetString("UTA_TestContextTypeMismatchLoadError", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'..
- ///
- internal static string UTA_TestInitializeAndCleanupMethodHasWrongSignature {
- get {
- return ResourceManager.GetString("UTA_TestInitializeAndCleanupMethodHasWrongSignature", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test method {0}.{1} threw exception:
- ///{2}.
- ///
- internal static string UTA_TestMethodThrows {
- get {
- return ResourceManager.GetString("UTA_TestMethodThrows", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Unable to get type {0}. Error: {1}..
- ///
- internal static string UTA_TypeLoadError {
- get {
- return ResourceManager.GetString("UTA_TypeLoadError", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The called code threw an exception that was caught, but the exception value was null.
- ///
- internal static string UTA_UserCodeThrewNullValueException {
- get {
- return ResourceManager.GetString("UTA_UserCodeThrewNullValueException", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread..
- ///
- internal static string UTA_WrongThread {
- get {
- return ResourceManager.GetString("UTA_WrongThread", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to (Failed to get the message for an exception of type {0} due to an exception.).
- ///
- internal static string UTF_FailedToGetExceptionMessage {
- get {
- return ResourceManager.GetString("UTF_FailedToGetExceptionMessage", resourceCulture);
- }
- }
- }
-}
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/Resource.resx b/src/Adapter/MSTest.TestAdapter/Resources/Resource.resx
deleted file mode 100644
index 2d8bfb92aa..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/Resource.resx
+++ /dev/null
@@ -1,418 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Test '{0}' timed out after {1}ms
-
-
- Running tests in any of the provided sources is not supported for the selected platform
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
-
-
- --- End of inner exception stack trace ---
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
-
-
- Initialization method {0}.{1} threw exception. {2}.
-
-
- Unable to create instance of class {0}. Error: {1}.
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
-
-
- UTA001: TestClass attribute defined on non-public class {0}
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
-
-
- {0}: {1}
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
-
-
- File does not exist: {0}
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
-
-
- TestContext cannot be Null.
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
-
-
- Method {0}.{1} does not exist.
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
-
-
- Unable to find property {0}.TestContext. Error:{1}.
-
-
- The {0}.TestContext has incorrect type.
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
-
-
- Unable to get type {0}. Error: {1}.
-
-
- Test method {0} was not found.
-
-
- Debug Trace:
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
-
-
- Test method {0}.{1} threw exception:
-{2}
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
-
-
- MSTestAdapterV2
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
-
-
- {0} (Data Row {1})
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
-
-
- TestContext Messages:
-
-
- Error calling Test Cleanup method for test class {0}: {1}
-
-
- TestCleanup Stack Trace
-
-
- [MSTest][Discovery][{0}] {1}
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
-
-
- Test '{0}' was canceled
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
-
-
- The called code threw an exception that was caught, but the exception value was null
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
-
-
- Assembly initialize method '{0}.{1}' was canceled
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
-
-
- Class initialize method '{0}.{1}' was canceled
-
-
- TestClass attribute defined on generic non-abstract class {0}
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
-
-
- Assembly cleanup method '{0}.{1}' was canceled
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
-
-
- Class cleanup method '{0}.{1}' was canceled
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
-
-
- Test cleanup method '{0}.{1}' was canceled
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
-
-
- Test initialize method '{0}.{1}' was canceled
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
-
-
- The type of the generic parameter '{0}' could not be inferred.
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
-
-
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.cs.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.cs.xlf
deleted file mode 100644
index 53651299cc..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.cs.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- Po {2} ms vypršel časový limit metody čištění sestavení {0}.{1}.
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- Metoda čištění sestavení {0}.{1} byla zrušena.
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- Po {2} ms vypršel časový limit metody inicializace sestavení {0}.{1}.
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- Metoda inicializace sestavení {0}.{1} byla zrušena.
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- Testovací metodu {0}.{1} nejde spustit: Testovací data neodpovídají parametrům metody. Liší se počet nebo typy.
-Pro test se očekával tento počet parametrů: {2} s typy {3},
-byl však přijat tento počet argumentů: {4} s typy {5}.
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- Nelze spustit testovací metodu {0}.{1}: Metoda má parametry, ale nedefinuje žádný zdroj testu. K poskytování testovacích dat použijte zdroj dat [DataRow] nebo [DynamicData], případně vlastní zdroj dat ITestDataSource.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- Po {2} ms vypršel časový limit metody čištění třídy {0}.{1}.
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- Metoda čištění třídy {0}.{1} byla zrušena.
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- Po {2} ms vypršel časový limit metody inicializace třídy {0}.{1}.
-
-
-
- Class initialize method '{0}.{1}' was canceled
- Metoda inicializace třídy {0}.{1} byla zrušena.
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- Byly zjištěny soubory .runsettings i .testconfig.json. Vyberte prosím jenom jeden z těchto souborů konfigurace testu.
-
-
-
- Test '{0}' timed out after {1}ms
- Časový limit '{0}' testu vypršel po {1}ms.
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- Typ obecného parametru '{0}' nelze odvodit.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- Obecná testovací metoda '{0}' nemá argumenty, takže obecný parametr nelze odvodit.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- Byly nalezeny dva konfliktní typy pro obecný parametr '{0}'. Konfliktní typy jsou '{1}' a '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- Neplatná hodnota {0} pro položku runsettings {1}. Nastavení bude ignorováno.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- Položka runsettings <ExecutionApartmentState>STA</ExecutionApartmentState> se v operačních systémech jiných než Windows nepodporuje.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- Spouštění testů v některém z uvedených zdrojů se pro vybranou platformu nepodporuje.
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- Po {2} ms vypršel časový limit metody čištění testu {0}.{1}.
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- Metoda čištění testu {0}.{1} byla zrušena.
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- Po {2} ms vypršel časový limit metody inicializace testu {0}.{1}.
-
-
-
- Test initialize method '{0}.{1}' was canceled
- Metoda inicializace testu {0}.{1} byla zrušena.
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- Metoda TestCleanup {0}.{1} vyvolala výjimku. {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- Konec trasování zásobníku pro vnitřní výjimku ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: V jednom sestavení nejde definovat více jak jednu metodu s atributem AssemblyCleanup.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: V jednom sestavení nejde definovat více jak jednu metodu s atributem AssemblyInitialize.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: Uvnitř třídy nejde definovat více jak jednu metodu s atributem ClassCleanup.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: Uvnitř třídy nejde definovat více jak jednu metodu s atributem ClassInitialize.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: Nejde definovat více jak jednu metodu s atributem TestCleanup.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: Nejde definovat více jak jednu metodu s atributem TestInitialize.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- Atribut TestClass definovaný u obecné neabstraktní třídy {0}
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- Inicializační metoda {0}.{1} způsobila výjimku. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- Nepodařilo se vytvořit instanci třídy {0}. Chyba: {1}.
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- Testovací metoda {0}.{1} má definovaných více atributů odvozených od atributu {2}. Povolený je jenom jeden takový atribut.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- Nelze najít platný konstruktor pro testovací třídu {0}. Platné konstruktory jsou public a buď bez parametrů, nebo s jedním parametrem typu TestContext.
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- Pro třídu {0} se nepodařilo nastavit vlastnost TestContext. Chyba: {1}.
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (Z důvodu výjimky se nepodařilo získat zprávu o výjimce typu {0}.)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: Třída {0} nemá platnou vlastnost TestContext. Vlastnost TestContext musí být typu TestContext, musí být nestatická a musí být veřejná. Například: public TestContext TestContext
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: Atribut TestClass se definoval v neveřejné třídě {0}.
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- MSTestAdapter nezjistil v třídě {0} sestavení {1} žádný test, protože: {2}.
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- Nepovedlo se načíst typy ze zdroje testu {0}. Je možné, že se některé nebo všechny testy v tomto zdroji nezjistily.
-Chyba: {1}
-
-
-
- File does not exist: {0}
- Neexistující soubor: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: Metoda {1} definovaná ve třídě {0} nemá správný podpis. Testovací metoda označená atributem [TestMethod] nesmí být static ani public, musí mít návratový typ void a nesmí přijímat žádný parametr. Například: public void Test.Class1.Test(). Pokud navíc v testovací metodě používáte operátor async-await, musí být návratový typ Task nebo ValueTask. Například: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext nemůže být Null.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- Čisticí metoda sestavení {0}.{1} selhala. Chybová zpráva: {2}. Trasování zásobníku: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- Inicializační metoda sestavení {0}.{1} vyvolala výjimku. {2}: {3}. Přerušuje se provádění testu.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- Čisticí metoda třídy {0}.{1} selhala. Chybová zpráva: {2}. Trasování zásobníku: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- Inicializační metoda třídy {0}.{1} vyvolala výjimku. {2}: {3}.
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- Metoda Execute vyvolala neošetřenou výjimku. Nahlaste prosím tuto chybu autorovi '{0}' atributu.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- Při provádění testu došlo k chybě. Rozšíření nevrátilo žádný výsledek. Pokud používáte rozšíření třídy TestMethodAttribute, obraťte se na dodavatele.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Metoda {0}.{1} má špatný podpis. Metoda musí být static nebo public, nevrací hodnotu a nesmí přijímat žádný parametr. Pokud navíc v metodě používáte operátor async-await, musí být návratový typ Task nebo ValueTask.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Metoda {0}.{1} má špatný podpis. Metoda musí být static nebo public, nevrací hodnotu a musí přijímat jeden parametr typu TestContext. Pokud navíc v metodě používáte operátor async-await, musí být návratový typ Task nebo ValueTask.
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}.{1} má neplatný atribut Timeout. Hodnota timeline musí být celé číslo větší než 0.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: V metodě {1} nejde definovat předdefinovanou vlastnost {2}.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: V metodě {1} je definovaná vlastní vlastnost, která je null nebo je prázdná. Vlastní vlastnost musí mít platný název.
-
-
-
- Method {0}.{1} does not exist.
- Metoda {0}.{1} neexistuje.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- Nepodařilo se najít vlastnost {0}.TestContext. Chyba:{1}.
-
-
-
- The {0}.TestContext has incorrect type.
- {0}.TestContext má nesprávný typ.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Metoda {0}.{1} má špatný podpis. Metoda nesmí být static nebo public, nevrací hodnotu a nesmí přijímat žádný parametr. Pokud navíc v metodě používáte operátor async-await, musí být návratový typ Task nebo ValueTask.
-
-
-
- Unable to get type {0}. Error: {1}.
- Nepodařilo se získat typ {0}. Chyba: {1}.
-
-
-
- Test method {0} was not found.
- Testovací metoda {0} se nenašla.
-
-
-
- Debug Trace:
- Trasování ladění:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- Nepovedlo se získat výjimku vyvolanou testovací metodou {0}.{1}.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- V testovací metodě {0}.{1} došlo k výjimce:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0}. Pokud v testu používáte objekty uživatelského rozhraní, zvažte u projektů pro platformu UPW použití atributu [UITestMethod] místo atributu [TestMethod], aby se test provedl ve vlákně uživatelského rozhraní.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- Neplatné nastavení {0}. Neočekávaný XmlAttribute: {1}.
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- Neplatné nastavení {0}. Neočekávaný XmlElement: {1}.
-
-
-
- {0} (Data Row {1})
- {0} (datový řádek {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- Atribut ExpectedException definovaný u testovací metody {0}.{1} vyvolal během vytváření výjimku.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- Upozornění: Adaptér MSTest V2 nepodporuje soubor testsettings ani vsmdi.
-
-
-
- TestContext Messages:
- Zprávy pro TestContext:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- Při volání čisticí metody testu pro třídu {0} došlo k chybě: {1}
-
-
-
- TestCleanup Stack Trace
- Trasování zásobníku čištění testu
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Discovery][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- Je povolená paralelizace testu pro {0} (pracovní procesy: {1}, obor: {2}).
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- Pro Obor je zadaná neplatná hodnota {0}. Podporované obory jsou {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- Pro Pracovní procesy je zadaná neplatná hodnota {0}. Hodnota by měla být nezáporné celé číslo.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- Nepovedlo se zjistit testy ze sestavení {0}. Důvod:{1}
-
-
-
- Test '{0}' was canceled
- Testovací '{0}' se zrušila.
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- Pro classCleanupLifecycle byla zadána neplatná hodnota {0}. Podporované obory jsou {1}.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- Při vytváření výčtu atributu IDataSource došlo k výjimce. „{0}.{1}“: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- „{0}“: (Nepodařilo se získat popis výjimky z důvodu výjimky typu „{1}“.
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- Vyvolané výjimky:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- Získání vlastních atributů pro typ {0} vyvolalo výjimku (bude ignorovat a používat způsob reflexe): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- V sestavení je načtena starší verze balíčku MSTestV2. Zjišťování testů může selhat při zjišťování všech testů dat, pokud jsou závislé na souboru .runsettings.
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- Volaný kód vyvolal výjimku, která byla zachycena, ale její hodnota byla null.
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- Došlo k výjimce při rozbalování řádků IDataSource z atributu na „{0}.{1}“: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- Zobrazovaný název „{2}“ u indexů {0} a {1} je duplicitní. Zobrazované názvy by měly být jedinečné.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- Data v {0} indexu pro „{1}“ nelze serializovat. Všechna data poskytnutá prostřednictvím „IDataSource“ by měla být serializovatelná. Pokud potřebujete testovat neserializovatelné zdroje dat, nezapomeňte do testovacího sestavení přidat atribut TestDataSourceDiscovery a nastavit možnost zjišťování na „DuringExecution“.
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.de.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.de.xlf
deleted file mode 100644
index 458b366659..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.de.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- Timeout der Assemblybereinigungsmethode "{0}.{1}" nach {2} ms
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- Die Assemblybereinigungsmethode "{0}.{1}" wurde abgebrochen
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- Timeout der Assemblyinitialisierungsmethode "{0}.{1}" nach {2} ms
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- Die Assemblyinitialisierungsmethode "{0}.{1}" wurde abgebrochen
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- Die Testmethode „{0}.{1}“ kann nicht ausgeführt werden: Testdaten stimmen nicht mit Methodenparametern überein. Die Anzahl oder die Typen unterscheiden sich.
-Test erwartete {2} Parameter mit den Typen „{3}“,
-aber empfing {4} Argument(e) mit den Typen „{5}“.
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- Die Testmethode „{0}.{1}“ kann nicht ausgeführt werden: Die Methode verfügt über Parameter, definiert jedoch keine Testquelle. Verwenden Sie „[DataRow]“, „[DynamicData]“ oder eine benutzerdefinierte „ITestDataSource-Datenquelle“, um Testdaten bereitzustellen.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- Timeout der Klassenbereinigungsmethode "{0}.{1}" nach {2} ms
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- Die Klassenbereinigungsmethode "{0}.{1}" wurde abgebrochen
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- Timeout der Klasseninitialisierungsmethode "{0}.{1}" nach {2} ms
-
-
-
- Class initialize method '{0}.{1}' was canceled
- Die Initialisierungsmethode "{0}.{1}" der Klasse wurde abgebrochen
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- Es wurden sowohl die Dateien „.runsettings“ als auch „.testconfig.json“ erkannt. Wählen Sie nur eine dieser Testkonfigurationsdateien aus.
-
-
-
- Test '{0}' timed out after {1}ms
- Timeout bei test '{0}' nach {1}ms.
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- Der Typ des generischen Parameters '{0}' konnte nicht abgeleitet werden.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- Die generische Testmethode '{0}' hat keine Argumente, daher kann der generische Parameter nicht abgeleitet werden.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- Es wurden zwei in Konflikt stehende Typen für den generischen Parameter '{0}' gefunden. Die in Konflikt stehenden Typen sind '{1}' und '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- Ungültiger Wert "{0}" für runsettings-Eintrag "{1}". Die Einstellung wird ignoriert.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- Der Eintrag "<ExecutionApartmentState>STA</ExecutionApartmentState>" der Ausführungseinstellungen wird auf Nicht-Windows-Betriebssystemen nicht unterstützt.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- Das Ausführen von Tests in einer der angegebenen Quellen wird für die ausgewählte Plattform nicht unterstützt.
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- Timeout der Testbereinigungsmethode "{0}.{1}" nach {2} ms
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- Die Testbereinigungsmethode "{0}.{1}" wurde abgebrochen
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- Timeout der Testinitialisierungsmethode "{0}.{1}" nach {2} ms
-
-
-
- Test initialize method '{0}.{1}' was canceled
- Die Testinitialisierungsmethode "{0}.{1}" wurde abgebrochen
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- Die TestCleanup-Methode "{0}.{1}" hat eine Ausnahme ausgelöst. {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- Ende der internen Ausnahmestapelüberwachung ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: Es darf nur eine Methode mit dem Attribut 'AssemblyCleanup' innerhalb einer Assembly definiert werden.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: Es darf nur eine Methode mit dem Attribut 'AssemblyInitialize' innerhalb einer Assembly definiert werden.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: Es darf nur eine Methode mit dem Attribut 'ClassCleanup' innerhalb einer Klasse definiert werden.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: Es darf nur eine Methode mit dem Attribut 'ClassInitialize' innerhalb einer Klasse definiert werden.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: Es darf nur eine Methode mit dem Attribut 'TestCleanup' definiert werden.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: Es darf nur eine Methode mit dem Attribut 'TestInitialize' definiert werden.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- TestClass-Attribut für generische nicht abstrakte Klasse {0} definiert
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- Die Initialisierungsmethode '{0}.{1}' hat eine Ausnahme ausgelöst. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- Es kann keine Instanz der Klasse '{0}' erstellt werden. Fehler: {1}.
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- Für die Testmethode „{0}.{1}“ sind mehrere Attribute definiert, die von „{2}“ abgeleitet sind. Nur ein einziges solches Attribut ist zulässig.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- Es wurde kein gültiger Konstruktor für die Testklasse "{0}" gefunden. Gültige Konstruktoren sind "public" und entweder parameterlos oder mit einem Parameter vom Typ "TestContext".
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- Die Eigenschaft 'TestContext' für die Klasse '{0}' kann nicht festgelegt werden. Fehler: {1}.
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (Fehler beim Abrufen der Meldung für eine Ausnahme vom Typ "{0}" aufgrund einer Ausnahme.)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: Die Klasse {0} weist keine gültige Eigenschaft TestContext auf. TestContext muss vom Typ TestContext sein, muss nicht statisch und öffentlich sein. Beispiel: 'public TestContext TestContext'.
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: Für die nicht öffentliche Klasse '{0}' definiertes Attribut 'TestClass'.
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- Fehler von 'MSTestAdapter' beim Ermitteln von Tests in der Klasse "{0}" der Assembly "{1}". Ursache: {2}.
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- Fehler beim Laden von Typen aus der Testquelle "{0}". Möglicherweise werden einige oder alle Tests in dieser Quelle nicht ermittelt.
-Fehler: {1}
-
-
-
- File does not exist: {0}
- Die Datei ist nicht vorhanden: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: Die in der Klasse {0} definierte Methode {1} weist nicht die richtige Signatur auf. Die mit dem [TestMethod]-Attribut markierte Testmethode muss nicht statisch und öffentlich sein, muss den Rückgabetyp „void“ aufweisen und darf keine Parameter annehmen. Beispiel: public void Test.Class1.Test(). Wenn Sie außerdem in der Testmethode „async-await“ verwenden, muss der Rückgabetyp „Task“ oder „ValueTask“ sein. Beispiel: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- "TestContext" darf nicht NULL sein.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- Fehler bei der Methode "{0}.{1}" für die Assemblybereinigung. Fehlermeldung: {2}. "StackTrace": {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- Die Methode "{0}.{1}" für die Assemblyinitialisierung hat eine Ausnahme ausgelöst. {2}: {3}. Die Ausführung des Tests wird abgebrochen.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- Fehler bei der Methode "{0}.{1}" für die Klassenbereinigung. Fehlermeldung: {2}. Stapelüberwachung: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- Die Methode "{0}.{1}" für die Klasseninitialisierung hat eine Ausnahme ausgelöst. {2}: {3}.
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- Von der Methode "Execute" wurde eine nicht behandelte Ausnahme ausgelöst. Melden Sie diesen Fehler dem Autor des Attributs '{0}'.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- Fehler beim Ausführen des Tests. Von der Extension wurde kein Ergebnis zurückgegeben. Wenn Sie eine Extension von "TestMethodAttribute" verwenden, wenden Sie sich bitte an den Anbieter.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Die Methode „{0}.{1}“ weist eine falsche Signatur auf. Die Methode muss statisch und öffentlich sein. Sie darf keinen Wert zurückgeben und keinen Parameter annehmen. Wenn Sie außerdem in der Methode „async-await“ verwenden, muss der Rückgabetyp „Task“ oder „ValueTask“ sein.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Die Methode „{0}.{1}“ weist eine falsche Signatur auf. Die Methode muss statisch und öffentlich sein. Sie darf keinen Wert zurückgeben und muss einen einzigen Parameter des Typs TestContext annehmen. Wenn Sie außerdem in der Methode „async-await“ verwenden, muss der Rückgabetyp „Task“ oder „ValueTask“ sein.
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}.{1} weist ein ungültiges Attribut „Timeout“ auf. Timeout muss eine ganze Zahl größer als 0 sein.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: Die vordefinierte Eigenschaft "{2}" kann nicht für die Methode "{1}" definiert werden.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: Für die Methode "{1}" wurde eine benutzerdefinierte Eigenschaft mit dem Wert NULL oder eine benutzerdefinierte leere Eigenschaft definiert. Die benutzerdefinierte Eigenschaft muss einen gültigen Namen aufweisen.
-
-
-
- Method {0}.{1} does not exist.
- Die Methode "{0}.{1}" ist nicht vorhanden.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- Die Eigenschaft "{0}.TestContext" wurde nicht gefunden. Fehler: {1}.
-
-
-
- The {0}.TestContext has incorrect type.
- "{0}.TestContext" weist einen falschen Typ auf.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Die Methode „{0}.{1}“ weist eine falsche Signatur auf. Die Methode muss nicht statisch und öffentlich sein, und sie darf keinen Wert zurückgeben und keinen Parameter annehmen. Wenn Sie außerdem in der Methode „async-await“ verwenden, muss der Rückgabetyp „Task“ oder „ValueTask“ sein.
-
-
-
- Unable to get type {0}. Error: {1}.
- Der Typ "{0}" kann nicht abgerufen werden. Fehler: {1}.
-
-
-
- Test method {0} was not found.
- Die Testmethode "{0}" wurde nicht gefunden.
-
-
-
- Debug Trace:
- Debugablaufverfolgung:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- Fehler beim Abrufen der von der Testmethode "{0}.{1}" ausgelösten Ausnahme.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- Die Testmethode "{0}.{1}" hat eine Ausnahme ausgelöst:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0}: Erwägen Sie für UWP-Projekte bei Einsatz von UI-Objekten im Test die Verwendung des [UITestMethod]-Attributs anstelle von "[TestMethod]", um den Test im UI-Thread auszuführen.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- Ungültige Einstellungen "{0}". Unerwartetes XmlAttribute: "{1}".
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- Ungültige Einstellungen "{0}". Unerwartetes XmlElement: "{1}".
-
-
-
- {0} (Data Row {1})
- {0} (Datenzeile {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- Das für die Testmethode "{0}.{1}" definierte ExpectedException-Attribut hat während der Konstruktion eine Ausnahme ausgelöst.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- Warnung: Eine TESTSETTINGS-Datei oder eine VSMDI-Datei wird vom MSTest-V2-Adapter nicht unterstützt.
-
-
-
- TestContext Messages:
- TestContext-Meldungen:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- Fehler beim Aufruf der Testbereinigungsmethode für die Testklasse "{0}": {1}
-
-
-
- TestCleanup Stack Trace
- TestCleanup-Stapelüberwachung
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Discovery][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- Testparallelisierung aktiviert für {0} (Worker: {1}, Bereich: {2})
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- Ungültiger Wert "{0}" für "Scope" angegeben. Unterstützte Bereiche: {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- Ungültiger Wert "{0}" für "Workers" angegeben. Der Wert muss eine nicht negative Ganzzahl sein.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- Fehler beim Ermitteln von Tests aus der Assembly "{0}". Ursache:{1}
-
-
-
- Test '{0}' was canceled
- Test '{0}' wurde abgebrochen.
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- Für "ClassCleanupLifecycle" wurde ein ungültiger Wert "{0}" angegeben. Unterstützte Bereiche sind {1}.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- Ausnahme beim Auflisten des IDataSource-Attributs für "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- "{0}": (Fehler beim Abrufen der Ausnahmebeschreibung aufgrund einer Ausnahme vom Typ "{1}".
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- Ausgelöste Ausnahmen:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- Beim Abrufen von benutzerdefinierten Attributen für den Typ {0} wurde Ausnahme ausgelöst (wird ignoriert und die Reflektionsart verwendet): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- Eine ältere Version des MSTestV2-Pakets wird in die Assembly geladen. Bei der Testermittlung werden möglicherweise nicht alle Datentests ermittelt, wenn sie von der Datei ".runsettings" abhängen.
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- Der aufgerufene Code hat eine Ausnahme ausgelöst, die abgefangen wurde, aber der Ausnahmewert war NULL.
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- Ausnahme beim Erweitern von IDataSource-Zeilen aus dem Attribut auf "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- Der Anzeigename "{2}" für Indizes {0} und {1} ist doppelt vorhanden. Anzeigenamen sollten eindeutig sein.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- Daten im Index {0} für "{1}" können nicht serialisiert werden. Alle über "IDataSource" bereitgestellten Daten sollten serialisierbar sein. Wenn Sie nicht serialisierbare Datenquellen testen müssen, stellen Sie sicher, dass Sie der Testassembly das Attribut "TestDataSourceDiscovery" hinzufügen und die Ermittlungsoption auf "DuringExecution" festlegen.
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.es.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.es.xlf
deleted file mode 100644
index b629fb9322..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.es.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- Método de limpieza de ensamblado '{0}.{1}' se agotó el tiempo de espera después de {2}ms
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- Método de limpieza de ensamblado "{0}.{1}" se canceló
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- Método de inicialización de ensamblado '{0}.{1}' se agotó el tiempo de espera de después de {2}ms
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- Método de inicialización de ensamblado "{0}.{1}" se canceló
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- No se puede ejecutar el método de prueba "{0}.{1}": los datos de prueba no coinciden con los parámetros del método. El recuento o los tipos son diferentes.
-La prueba esperaba recibir {2} parámetro(s), con los tipos "{3}",
-pero recibió {4} argumento(s), con los tipos "{5}".
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- No se puede ejecutar el método de prueba "{0}.{1}": el método tiene parámetros, pero no define ningún origen de prueba. Use "[DataRow]", "[DynamicData]" o un origen de datos "ITestDataSource" personalizado para proporcionar datos de prueba.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- Método de limpieza de clases '{0}.{1}' se agotó el tiempo de espera después de {2}ms
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- Método de limpieza de clases "{0}.{1}" se canceló
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- Método de inicialización de clase '{0}.{1}' se agotó el tiempo de espera después de {2}ms
-
-
-
- Class initialize method '{0}.{1}' was canceled
- Método de inicialización de clase "{0}.{1}" se canceló
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- Se han detectado los archivos ".runsettings" y ".testconfig.json". Seleccione solo uno de estos archivos de configuración de prueba.
-
-
-
- Test '{0}' timed out after {1}ms
- Se agotó el tiempo de espera de la '{0}' de pruebas después de {1}ms
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- No se pudo inferir el tipo del parámetro genérico '{0}'.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- El método de prueba genérico '{0}' no tiene argumentos, por lo que no se puede inferir el parámetro genérico.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- Se encontraron dos tipos en conflicto para el parámetro genérico '{0}'. Los tipos en conflicto son '{1}' y '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- Valor ''{0}'' no válido para la entrada runsettings ''{1}'', se omitirá la configuración.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- La entrada runsettings "<ExecutionApartmentState>STA</ExecutionApartmentState>" no se admite en sistemas operativos que no son de Windows.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- La ejecución de pruebas en las fuentes proporcionadas no se admite para la plataforma seleccionada
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- Método de limpieza de pruebas '{0}.{1}' se agotó el tiempo de espera después de {2}ms
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- Método de limpieza de pruebas "{0}.{1}" se canceló
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- Método de inicialización de prueba '{0}.{1}' se agotó el tiempo de espera después de {2}ms
-
-
-
- Test initialize method '{0}.{1}' was canceled
- Método de inicialización de prueba "{0}.{1}" se canceló
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- El método TestCleanup {0}.{1} devolvió una excepción. {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- Fin del seguimiento de la pila de excepción interna ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: No se puede definir más de un método con el atributo AssemblyCleanup dentro de un ensamblado.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: No se puede definir más de un método con el atributo AssemblyInitialize dentro de un ensamblado.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: No se puede definir más de un método con el atributo ClassCleanup dentro de una clase.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: No se puede definir más de un método con el atributo ClassInitialize dentro de una clase.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: No se puede definir más de un método con el atributo TestCleanup.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: No se puede definir más de un método con el atributo TestInitialize.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- Atributo TestClass definido en una clase genérica no abstracta {0}
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- El método de inicialización {0}.{1} devolvió una excepción. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- No se puede crear una instancia de la clase {0}. Error: {1}.
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- El método de prueba '{0}.{1}' tiene varios atributos derivados de '{2}' definidos en él. Solo se permite un atributo de este tipo.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- No se encuentra un constructor válido para la clase de prueba '{0}'. Los constructores válidos son 'public' y sin parámetros o con un parámetro de tipo 'TestContext'.
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- No se puede establecer la propiedad TestContext para la clase {0}. Error: {1}.
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (No se pudo obtener el mensaje para una excepción del tipo {0} debido a una excepción.)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: la clase {0}no tiene la propiedad TestContext válida. TestContext debe ser de tipo TestContext, debe ser no estática y debe ser pública. Por ejemplo: public TestContext TestContext.
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: se ha definido el atributo TestClass en la clase no pública {0}
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- MSTestAdapter no detectó pruebas en la clase '{0}' del ensamblado '{1}' porque {2}.
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- No se pueden cargar tipos del origen de prueba "{0}". Puede que no se detecten algunas o ninguna de las pruebas de este origen.
-Error: {1}
-
-
-
- File does not exist: {0}
- El archivo no existe: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: El método {1} definido en la clase {0} no tiene la firma correcta. El método de prueba marcado con el atributo [TestMethod] debe ser no estático, público, con el tipo devuelto void y no debe tomar ningún parámetro. Ejemplo: public void Test.Class1.Test(). Además, si está usando async-await en el método de prueba, entonces el tipo de valor devuelto debe ser 'Task' o 'ValueTask'. Ejemplo: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext no será null.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- Error de método Cleanup de ensamblado {0}.{1}. Mensaje de error: {2}. StackTrace: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- Excepción método inicialización ensamblado {0}.{1}. {2}: {3}. Anulada ejecución de prueba.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- Error de método Cleanup de clase {0}.{1}. Mensaje error: {2}. Seguimiento de pila: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- Excepción del método inicialización clase {0}. {1}. {2}: {3}.
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- El método 'Execute' produjo una excepción no controlada. Informe de este error al autor del atributo '{0}'.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- No se pudo ejecutar prueba. Extensión no devolvió resultados. Si usa extensión TestMethodAttribute, contacte con el proveedor.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- El método {0}.{1} tiene una firma incorrecta. El método debe ser estático, público, no devolver un valor y no aceptar ningún parámetro. Además, si está usando async-await en el método entonces el tipo de valor devuelto debe ser 'Task' o 'ValueTask'.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- El método {0}.{1} tiene una firma incorrecta. El método debe ser estático, público, no devolver ningún valor y debe tomar un único parámetro de tipo TestContext. Además, si está usando async-await en el método entonces el tipo de valor devuelto debe ser 'Task' o 'ValueTask'.
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}.{1} tiene un atributo Timeout no válido. El tiempo de espera debe ser un valor entero mayor que 0.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: no se puede definir la propiedad predefinida {2} en el método {1}.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: se ha definido una propiedad personalizada nula o vacía en el método {1}. La propiedad personalizada debe tener un nombre válido.
-
-
-
- Method {0}.{1} does not exist.
- El método {0}.{1} no existe.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- No se puede encontrar la propiedad {0}.TestContext. Error:{1}.
-
-
-
- The {0}.TestContext has incorrect type.
- Tipo {0}.TestContext no es correcto.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- El método {0}.{1} tiene una firma incorrecta. Debe ser un método no estático, público, no devolver ningún valor y no debe aceptar parámetros. Además, si está usando async-await en el método entonces el tipo de valor devuelto debe ser 'Task' o 'ValueTask'.
-
-
-
- Unable to get type {0}. Error: {1}.
- No se puede obtener el tipo {0}. Error: {1}.
-
-
-
- Test method {0} was not found.
- No encontrado método prueba {0}.
-
-
-
- Debug Trace:
- Seguimiento de depuración:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- No se pudo obtener la excepción iniciada por el método de prueba {0}.{1}.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- Excepción método de prueba {0}.{1}:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0}. En proyectos de UWP, si usa objetos de interfaz de usuario en la prueba, podría usar el atributo [UITestMethod] en lugar de [TestMethod] para ejecutar la prueba en el subproceso de interfaz de usuario.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- Valor no válido '{0}'. XmlAttribute no esperado: '{1}'.
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- Valor no válido '{0}'. XmlElement no esperado: '{1}'.
-
-
-
- {0} (Data Row {1})
- {0} (Fila de datos {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- El atributo ExpectedException definido en el método de prueba {0}.{1} inició una excepción durante la construcción.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- Advertencia: No se admite un archivo testsettings o vsmdi con el adaptador de MSTest V2.
-
-
-
- TestContext Messages:
- Mensajes de TestContext:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- Error al llamar al método Test Cleanup para la clase de prueba {0}: {1}
-
-
-
- TestCleanup Stack Trace
- Seguimiento de pila de TestCleanup
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Discovery][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- Probar paralelización habilitada para {0} (Trabajos: {1}, Ámbito: {2})
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- Valor no válido "{0}" especificado para "Ámbito". Los ámbitos admitidos son {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- Valor no válido "{0}" especificado para "Trabajadores". El valor debe ser un entero no negativo.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- No se pudieron detectar pruebas desde el ensamblado {0}. Motivo:{1}
-
-
-
- Test '{0}' was canceled
- Se canceló la '{0}' de pruebas
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- Valor no válido "{0}" especificado para "ClassCleanupLifecycle". Los ámbitos admitidos son {1}.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- Excepción al enumerar el atributo IDataSource en "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- "{0}": (No se pudo obtener la descripción de la excepción debido a una excepción de tipo "{1}".
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- Excepciones devueltas:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- Al obtener atributos personalizados para el tipo {0} se produjo una excepción (se omitirá y se usará la forma de reflexión): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- Hay una versión anterior del paquete MSTestV2 cargada en el ensamblado. Es posible que la detección de pruebas no detecte todas las pruebas de datos si dependen del archivo ".runsettings".
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- El código llamado produjo una excepción que se detectó, pero el valor de la excepción era null
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- Se produjo una excepción al expandir las filas de IDataSource del atributo en "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- El nombre para mostrar "{2}" en los índices {0} y {1} están duplicados. Los nombres para mostrar deben ser únicos.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- No se pueden serializar los datos del {0} de índice para "{1}". Todos los datos proporcionados a través de "IDataSource" deben ser serializables. Si necesita probar orígenes de datos no serializables, asegúrese de agregar el atributo "TestDataSourceDiscovery" en el ensamblado de prueba y establezca la opción de detección en "DuringExecution".
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.fr.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.fr.xlf
deleted file mode 100644
index 945bc54b28..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.fr.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- La méthode de nettoyage d’assembly « {0}.{1} » a expiré après {2}ms
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- La méthode de nettoyage de l’assembly « {0}.{1} » a été annulée
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- La méthode d'initialisation de l’assembly « {0}.{1} » a expiré après {2}ms
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- La méthode d’initialisation de l’assembly « {0}.{1} » a été annulée
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- Impossible d’exécuter la méthode de test « {0}.{1} » : les données de test ne correspondent pas aux paramètres de la méthode. Le nombre ou les types sont différents.
-Tester le ou les paramètres de {2} attendus, avec les types « {3} »,
-mais a reçu {4} argument(s), avec les types « {5} ».
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- Impossible d’exécuter la méthode de test « {0}.{1} » : la méthode a des paramètres, mais ne définit aucune source de test. Utilisez « [DataRow] », « [DynamicData] » ou une source de données « ITestDataSource » personnalisée pour fournir des données de test.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- La méthode de nettoyage de classe « {0}.{1} » a expiré après {2}ms
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- La méthode de nettoyage de la classe « {0}.{1} » a été annulée
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- La méthode d'initialisation de la classe « {0}.{1} » a expiré après {2}ms
-
-
-
- Class initialize method '{0}.{1}' was canceled
- La méthode d’initialisation de la classe « {0}.{1} » a été annulée
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- Les fichiers « .runsettings » et « .testconfig.json » ont été détectés. Veuillez sélectionner un seul de ces fichiers de configuration de test.
-
-
-
- Test '{0}' timed out after {1}ms
- Délai de '{0}' de test dépassé après {1}ms
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- Impossible de déduire le type du paramètre générique '{0}'.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- La méthode de test générique '{0}' n’a pas d’arguments. Le paramètre générique ne peut donc pas être déduit.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- Deux types en conflit ont été trouvés pour le paramètre générique '{0}'. Les types en conflit sont '{1}' et '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- Valeur non valide '{0}' pour l’entrée runsettings '{1}', le paramètre sera ignoré.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- L’entrée Runsettings « <ExecutionApartmentState>STA</ExecutionApartmentState> » n’est pas prise en charge sur les systèmes d’exploitation non Windows.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- L'exécution de tests dans l'une des sources fournies n'est pas prise en charge pour la plateforme sélectionnée
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- La méthode de nettoyage de test « {0}.{1} » a expiré après {2}ms
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- La méthode de nettoyage du test « {0}.{1} » a été annulée
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- La méthode d’initialisation de test « {0}.{1} » a expiré après {2}ms
-
-
-
- Test initialize method '{0}.{1}' was canceled
- La méthode d’initialisation du test « {0}.{1} » a été annulée
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- La méthode TestCleanup {0}.{1} a levé une exception. {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- Fin de la trace de la pile d'exception interne ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014 : {0} : impossible de définir plus d'une méthode avec l'attribut AssemblyCleanup à l'intérieur d'un assembly.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013 : {0} : impossible de définir plus d'une méthode avec l'attribut AssemblyInitialize à l'intérieur d'un assembly.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026 : {0} : impossible de définir plus d'une méthode avec l'attribut ClassCleanup à l'intérieur d'une classe.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025 : {0} : impossible de définir plus d'une méthode avec l'attribut ClassInitialize à l'intérieur d'une classe.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024 : {0} : impossible de définir plus d'une méthode avec l'attribut TestCleanup.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018 : {0} : impossible de définir plus d'une méthode avec l'attribut TestInitialize.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- Attribut TestClass défini sur une classe non abstraite générique {0}
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- La méthode Initialization {0}.{1} a levé une exception. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- Impossible de créer une instance de la classe {0}. Erreur : {1}.
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- La méthode de test « {0}.{1} » possède plusieurs attributs dérivés de « {2} » qui lui sont définis. Un seul attribut de ce type est autorisé.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- Impossible de trouver un constructeur valide pour la classe de test « {0} ». Les constructeurs valides sont « publics » et sans paramètre ou avec un paramètre de type « TestContext ».
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- Impossible de définir la propriété TestContext pour la classe {0}. Erreur : {1}.
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (Échec de la réception du message pour une exception de type {0} en raison d'une exception.)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031 : la classe {0} n'a pas de propriété TestContext valide. TestContext doit être de type TestContext, doit être non statique et doit être public. Par exemple : public TestContext TestContext.
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001 : attribut TestClass défini sur la classe non publique {0}
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- MSTestAdapter n'a pas découvert de tests dans la classe '{0}' de l'assembly '{1}', car {2}.
-
-
-
- {0}: {1}
- {0} : {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- Impossible de charger les types à partir de la source de tests '{0}'. Une partie ou l'ensemble des tests de cette source ne peuvent pas être découverts.
-Erreur : {1}
-
-
-
- File does not exist: {0}
- Fichier inexistant : {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007 : la méthode {1} définie dans la classe {0} ne dispose pas d'une signature correcte. Une méthode de test marquée avec l'attribut [TestMethod] doit être non statique, doit utiliser void pour return-type et ne doit accepter aucun paramètre. Exemple : public void Test.Class1.Test(). En outre, si vous utilisez async-await dans la méthode test, return-type doit être « Task » ou « ValueTask ». Exemple : public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext ne peut pas être null.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- La méthode Cleanup d'assembly {0}.{1} a échoué. Message d'erreur : {2}. StackTrace : {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- La méthode d'assembly Initialization {0}.{1} a levé une exception. {2} : {3}. Abandon de l'exécution de tests.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- La méthode de classe Cleanup {0}.{1} a échoué. Message d'erreur : {2}. Trace de la pile : {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- La méthode de classe Initialization {0}.{1} a levé une exception. {2} : {3}.
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- Une exception non gérée a été levée par la méthode 'Execute'. Signalez cette erreur à l’auteur de l’attribut '{0}'.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- Erreur lors de l'exécution du test. L'extension n'a retourné aucun résultat. Si vous utilisez l'extension de TestMethodAttribute, contactez le fournisseur.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- La méthode {0}.{1} présente une signature incorrecte. La méthode doit être statique, publique et ne doit retourner aucune valeur ni accepter aucun paramètre. En outre, si vous utilisez async-await dans la méthode, return-type doit être « Task » ou « ValueTask ».
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- La méthode {0}.{1} présente une signature incorrecte. La méthode doit être statique, publique et ne doit retourner aucune valeur et accepter un seul paramètre de type TestContext. En outre, si vous utilisez async-await dans la méthode, return-type doit être « Task » ou « ValueTask ».
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054 : {0}.{1}possède un attribut de délai d’expiration non valide. Le délai d’expiration doit être un nombre entier supérieur à 0.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023 : {0} : Impossible de définir la propriété prédéfinie {2} sur la méthode {1}.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021 : {0} : Une propriété null ou vide personnalisée est définie sur la méthode {1}. La propriété personnalisée doit posséder un nom valide.
-
-
-
- Method {0}.{1} does not exist.
- La méthode {0}.{1} n'existe pas.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- Propriété {0}.TestContext introuvable. Erreur :{1}.
-
-
-
- The {0}.TestContext has incorrect type.
- {0}.TestContext possède un type incorrect.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- La méthode {0}.{1} présente une signature incorrecte. La méthode doit être non statique, publique et ne doit retourner aucune valeur ni accepter aucun paramètre. En outre, si vous utilisez async-await dans la méthode, return-type doit être « Task » ou « ValueTask ».
-
-
-
- Unable to get type {0}. Error: {1}.
- Impossible d'obtenir le type {0}. Erreur : {1}.
-
-
-
- Test method {0} was not found.
- Méthode de test {0} introuvable.
-
-
-
- Debug Trace:
- Trace du débogage :
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- Échec de l'obtention de l'exception levée par la méthode de test {0}.{1}.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- La méthode de test {0}.{1} a levé une exception :
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0} Pour les projets UWP, si vous utilisez des objets d'IU dans un test, utilisez l'attribut [UITestMethod] à la place de [TestMethod] pour exécuter le test dans le thread d'interface utilisateur.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- Paramètres non valides '{0}'. XmlAttribute inattendu : '{1}'.
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- Paramètres non valides '{0}'. XmlElement inattendu : '{1}'.
-
-
-
- {0} (Data Row {1})
- {0} (ligne de données {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- L'attribut ExpectedException défini dans la méthode de test {0}.{1} a levé une exception durant la construction.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- Avertissement : L'adaptateur MSTest V2 ne prend pas en charge les fichiers testsettings ou vsmdi.
-
-
-
- TestContext Messages:
- Messages TestContext :
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- Erreur lors de l'appel de la méthode Test Cleanup pour la classe de test {0} : {1}
-
-
-
- TestCleanup Stack Trace
- Trace de la pile TestCleanup
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Discovery][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- Parallélisation des tests activée pour {0} (Workers : {1}, Étendue : {2}).
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- Valeur non valide '{0}' spécifiée pour la 'Portée'. Les portées prises en charge sont {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- Valeur non valide '{0}' spécifiée pour 'Workers'. La valeur doit être un entier non négatif.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- Échec de la découverte de tests à partir de l'assembly {0}. Raison :{1}
-
-
-
- Test '{0}' was canceled
- Le test '{0}' a été annulé
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- Valeur non valide '{0}' spécifiée pour la 'ClassCleanupLifecycle'. Les portées prises en charge sont {1}.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- Une exception s’est produite lors de l’énumération de l’attribut IDataSource sur « {0}.{1} » : {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- « {0} » : (Échec de l’obtention de la description de l’exception en raison d’une exception de type « {1} ».
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- Exceptions levées/s :
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- L’obtention d’attributs personnalisés pour le type {0} a levé une exception (ignorera et utilisera la méthode de réflexion) : {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- Une version antérieure du package MSTestV2 est chargée dans l’assembly. La découverte de tests risque de ne pas découvrir tous les tests de données s’ils dépendent du fichier '.runsettings'.
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- Le code appelé a levé une exception qui a été interceptée, mais la valeur de l’exception était nul
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- Une exception s’est produite lors du développement des lignes IDataSource à partir de l’attribut sur « {0}.{1} » : {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- Le nom d’affichage « {2} » sur les index {0} et {1} est dupliqué. Les noms d’affichage doivent être uniques.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- Impossible de sérialiser les données de l’index {0} pour « {1} ». Toutes les données fournies via « IDataSource » doivent être sérialisables. Si vous devez tester des sources de données non sérialisables, veillez à ajouter l’attribut « TestDataSourceDiscovery » à votre assembly de test et définissez l’option de découverte sur « DuringExecution ».
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.it.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.it.xlf
deleted file mode 100644
index 97bff51c03..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.it.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- Metodo di pulizia dell’assembly '{0}. Time out di {1}' dopo {2} ms
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- Il metodo di pulizia dell'assembly "{0}.{1}" è stato annullato
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- Metodo di inizializzazione dell'assembly '{0}. Timeout di {1}' dopo {2} ms
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- Il metodo di inizializzazione dell'assembly "{0}.{1}" è stato annullato
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- Impossibile eseguire il metodo di test "{0}.{1}": i dati del test non corrispondono ai parametri del metodo. Il numero o il tipo è diverso.
-Il test prevedeva {2} parametri, con tipi "{3}",
-ma ha ricevuto {4} argomenti, con tipi "{5}".
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- Impossibile eseguire il metodo di test "{0}.{1}": il metodo contiene parametri, ma non definisce alcuna origine test. Usare "[DataRow]", "[DynamicData]" o un'origine dati "ITestDataSource" personalizzata per fornire i dati del test.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- Time out del metodo di pulizia della classe '{0}. Time out di {1}' dopo {2} ms
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- Il metodo di pulizia della classe "{0}.{1}" è stato annullato
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- Metodo di inizializzazione della classe '{0}. Timeout di {1}' dopo {2} ms
-
-
-
- Class initialize method '{0}.{1}' was canceled
- Il metodo di inizializzazione della classe "{0}.{1}" è stato annullato
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- Sono stati rilevati sia i file '.runsettings' sia '.testconfig.json'. Selezionare solo uno di questi file di configurazione di test.
-
-
-
- Test '{0}' timed out after {1}ms
- Timeout del '{0}' di test dopo {1}ms
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- Impossibile dedurre il tipo del parametro generico '{0}'.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- Il metodo di test generico '{0}' non contiene argomenti, di conseguenza non è possibile dedurre il parametro generico.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- Sono stati trovati due tipi in conflitto per il parametro generico '{0}'. I tipi in conflitto sono '{1}' e '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- Valore non valido '{0}' per la voce runsettings '{1}'. L'impostazione verrà ignorata.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- La voce Runsettings '<ExecutionApartmentState>STA</ExecutionApartmentState>' non è supportata nei sistemi operativi non Windows.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- L'esecuzione di test in una delle origini specificate non è supportata per la piattaforma selezionata
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- Time out del metodo di pulizia della classe dei test '{0}. Time out di {1}' dopo {2} ms
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- Il metodo di pulizia del test "{0}.{1}" è stato annullato
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- Metodo di inizializzazione del test '{0}. Timeout di {1}' dopo {2} ms
-
-
-
- Test initialize method '{0}.{1}' was canceled
- Il metodo di inizializzazione del test "{0}.{1}" è stato annullato
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- Il metodo TestCleanup {0}.{1} ha generato un'eccezione. {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- Fine dell'analisi dello stack dell'eccezione interna ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: non è possibile definire più di un metodo con l'attributo AssemblyCleanup all'interno di un assembly.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: non è possibile definire più di un metodo con l'attributo AssemblyInitialize all'interno di un assembly.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: non è possibile definire più di un metodo con l'attributo ClassCleanup all'interno di una classe.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: non è possibile definire più di un metodo con l'attributo ClassInitialize all'interno di una classe.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: non è possibile definire più di un metodo con l'attributo TestCleanup.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: non è possibile definire più di un metodo con l'attributo TestInitialize.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- Attributo TestClass definito nella classe generica non astratta {0}
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- Il metodo di inizializzazione {0}.{1} ha generato un'eccezione. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- Non è possibile creare un'istanza della classe {0}. Errore: {1}.
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- Il metodo di test '{0}.{1}' contiene più attributi derivati da '{2}' definito in esso. È consentito solo uno di tali attributi.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- Impossibile trovare un costruttore valido per la classe di test '{0}'. I costruttori validi sono 'public' e senza parametri o con un parametro di tipo 'TestContext'.
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- Non è possibile impostare la proprietà TestContext per la classe {0}. Errore: {1}.
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- Non è stato possibile ottenere il messaggio per un'eccezione di tipo {0} a causa di un'eccezione.
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: la classe {0} non dispone di una proprietà TestContext valida. La proprietà TestContext deve essere di tipo TestContext, non deve essere statica e deve essere pubblica. Ad esempio: public TestContext TestContext.
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: è stato definito l'attributo TestClass per la classe non pubblica {0}
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- MSTestAdapter non è riuscito a individuare test nella classe '{0}' dell'assembly '{1}' perché {2}.
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- Non è possibile caricare i tipi dall'origine test '{0}'. È possibile che alcuni o tutti i test non siano stati individuati in questa origine.
-Errore: {1}
-
-
-
- File does not exist: {0}
- Il file {0} non esiste
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: la firma del metodo {1} definito nella classe {0} non è corretta. Il metodo di test contrassegnato con l'attributo [TestMethod] deve essere pubblico e non statico, non deve accettare parametri e deve includere un tipo restituito void. Esempio: public void Test.Class1.Test(). Se inoltre nel metodo di test si usa async-await, il tipo restituito deve essere 'Task' o 'ValueTask'. Esempio: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext non può essere Null.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- Il metodo di pulizia assembly {0}.{1} non è riuscito. Messaggio di errore: {2}. Analisi dello stack: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- Il metodo di inizializzazione assembly {0}.{1} ha generato un'eccezione. {2}: {3}. L'esecuzione del test verrà interrotta.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- Il metodo di pulizia classi {0}.{1} non è riuscito. Messaggio di errore: {2}. Analisi dello stack: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- Il metodo di inizializzazione classi {0}.{1} ha generato un'eccezione. {2}: {3}.
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- Eccezione non gestita generata dal metodo 'Execute'. Segnalare l'errore all'autore dell'attributo '{0}'.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- Si è verificato un errore durante l'esecuzione del test. L'estensione non ha restituito alcun risultato. Se si usa l'estensione di TestMethodAttribute, contattare il fornitore.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- La firma del metodo {0}.{1}non è corretta. Il metodo deve essere statico e pubblico, non deve restituire un valore né accettare parametri. Se inoltre si usa async-await nel metodo di test, il tipo restituito deve essere 'Task' o 'ValueTask'.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- La firma del metodo {0}.{1}non è corretta. Il metodo deve essere statico e pubblico, non deve restituire un valore e deve accettare un singolo parametro di tipo TestContext. Se inoltre si usa async-await nel metodo di test, il tipo restituito deve essere 'Task' o 'ValueTask'.
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}.{1} ha un attributo Timeout non valido. Il timeout deve essere un valore intero maggiore di 0.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: non è possibile definire la proprietà predefinita {2} per il metodo {1}.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: per il metodo {1} è stata definita una proprietà personalizzata Null o vuota. Specificare un nome valido per la proprietà personalizzata.
-
-
-
- Method {0}.{1} does not exist.
- Il metodo {0}.{1} non esiste.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- La proprietà {0}.TestContext non è stata trovata. Errore: {1}.
-
-
-
- The {0}.TestContext has incorrect type.
- Il tipo di {0}.TestContext non è corretto.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- La firma del metodo {0}.{1}non è corretta. Il metodo deve essere non statico e pubblico, non deve restituire un valore né accettare parametri. Se inoltre si usa async-await nel metodo di test, il tipo restituito deve essere 'Task' o 'ValueTask'.
-
-
-
- Unable to get type {0}. Error: {1}.
- Non è possibile ottenere il tipo {0}. Errore: {1}.
-
-
-
- Test method {0} was not found.
- Il metodo di test {0} non è stato trovato.
-
-
-
- Debug Trace:
- Traccia di debug:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- Non è stato possibile ottenere l'eccezione generata dal metodo di test {0}.{1}.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- Il metodo di test {0}.{1} ha generato un'eccezione:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0}. Se, per i progetti della piattaforma UWP, nel test si usano oggetti dell'interfaccia utente, provare a specificare l'attributo [UITestMethod] invece di [TestMethod] per eseguire il test nel thread di UI.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- Le impostazioni '{0}' non sono valide. Elemento XmlAttribute imprevisto: '{1}'.
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- Le impostazioni '{0}' non sono valide. Elemento XmlElement imprevisto: '{1}'.
-
-
-
- {0} (Data Row {1})
- {0} (riga dati {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- L'attributo ExpectedException definito nel metodo di test {0}.{1} ha generato un'eccezione durante la costruzione.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- Avviso: con l'adattatore MSTest V2 non è possibile usare un file testsettings o un file vsmdi.
-
-
-
- TestContext Messages:
- Messaggi di TestContext:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- Si è verificato un errore durante la chiamata del metodo TestCleanup per la classe di test {0}: {1}
-
-
-
- TestCleanup Stack Trace
- Analisi dello stato di TestCleanup
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Individuazione][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- Parallelizzazione test abilitata per {0} (Processi di lavoro: {1}. Ambito: {2}).
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- Il valore '{0}', specificato per 'Scope', non è valido. I valori supportati per Scope sono {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- Il valore '{0}', specificato per 'Workers', non è valido. Il valore deve essere un numero intero non negativo.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- Non è stato possibile individuare i test dall'assembly {0}. Motivo: {1}
-
-
-
- Test '{0}' was canceled
- Il '{0}' di test è stato annullato
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- Il valore '{0}', specificato per 'ClassCleanupLifecycle', non è valido. I valori supportati per Scope sono {1}.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- Si è verificata un'eccezione durante l'enumerazione dell'attributo IDataSource in "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- "{0}": (non è stato possibile ottenere la descrizione dell'eccezione a causa di un'eccezione di tipo "{1}".
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- Eccezioni generate:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- Il recupero degli attributi personalizzati per il tipo {0} ha generato un'eccezione (verrà ignorata e verrà usata la modalità reflection): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- Nell'assembly è caricata una versione precedente del pacchetto MSTestV2. L'individuazione dei test potrebbe non riuscire a individuare tutti i test dei dati se dipendono dal file '.runsettings'.
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- Il codice chiamato ha generato un'eccezione che è stata rilevata, ma il valore dell'eccezione è Null
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- Si è verificata un'eccezione durante l'espansione delle righe IDataSource dall'attributo in "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- Il nome visualizzato "{2}" negli indici {0} e {1} è duplicato. I nomi visualizzati devono essere univoci.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- Non è possibile serializzare i dati nell'indice {0} per "{1}". Tutti i dati forniti tramite "IDataSource" devono essere serializzabili. Se è necessario testare origini dati non serializzabili, assicurarsi di aggiungere l'attributo "TestDataSourceDiscovery" nell'assembly di test e impostare l'opzione di individuazione su "DuringExecution".
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.ja.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.ja.xlf
deleted file mode 100644
index 0e196b3b3f..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.ja.xlf
+++ /dev/null
@@ -1,483 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- アセンブリ クリーンアップ メソッド '{0}.{1}' が {2}ms 後にタイムアウトしました
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- アセンブリ クリーンアップ メソッド '{0}.{1}' が取り消されました
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- アセンブリ初期化メソッド '{0}.{1}' が {2}ms 後にタイムアウトになりました
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- アセンブリ初期化メソッド '{0}.{1}' が取り消されました
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- テスト メソッド '{0}を実行できません。{1}': テスト データがメソッド パラメーターと一致しません。カウントまたは型が異なります。
-型 '{3}'、
- を持つ、予期された {2} パラメーターをテストします
-ただし、型 '{5}' の引数 {4} を受け取りました。
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- テスト メソッド '{0} を実行できません。{1}': メソッドにはパラメーターがありますが、テスト ソースは定義されていません。'[DataRow]'、'[DynamicData]'、カスタムの 'ITestDataSource' データ ソースを使用して、テスト データを提供します。
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- クラス クリーンアップ メソッド '{0}.{1}' が {2}ms 後にタイムアウトしました
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- クラス クリーンアップ メソッド '{0}.{1}' が取り消されました
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- クラス初期化メソッド '{0}.{1}' が {2}ms 後にタイムアウトになりました
-
-
-
- Class initialize method '{0}.{1}' was canceled
- クラス初期化メソッド '{0}.{1}' が取り消されました
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- '.runsettings' ファイルと '.testconfig.json' ファイルの両方が検出されました。これらのテスト構成ファイルのいずれか 1 つだけを選択してください。
-
-
-
- Test '{0}' timed out after {1}ms
- テスト '{0}' が {1}ミリ秒後にタイムアウトしました
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- ジェネリック パラメーター '{0}' の型を推論できませんでした。
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- '{0}' ジェネリック テスト メソッドに引数がないため、ジェネリック パラメーターを推論できません。
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- ジェネリック パラメーター '{0}' に 2 つの競合する型が見つかりました。競合する型は '{1}' で '{2}'。
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- runsettings エントリ '{1}' の値 '{0}' は無効です。設定は無視されます。
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- Runsettings エントリ '<ExecutionApartmentState>STA</ExecutionApartmentState>' は、Windows OS 以外ではサポートされていません。
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- 指定されたソースのいずれかでのテストの実行は、選択されたプラットフォームでサポートされていません
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- テスト クリーンアップ メソッド '{0}.{1}' が {2}ms 後にタイムアウトしました
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- テスト クリーンアップ メソッド '{0}.{1}' が取り消されました
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- テスト初期化メソッド '{0}.{1}' が {2}ms 後にタイムアウトになりました
-
-
-
- Test initialize method '{0}.{1}' was canceled
- テスト初期化メソッド '{0}.{1}' が取り消されました
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- TestCleanup メソッド {0}.{1} は例外をスローしました。{2}。
-
-
-
- --- End of inner exception stack trace ---
- --- 内部例外スタック トレースの終わり ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: 1 つのアセンブリ内で、AssemblyCleanup 属性を伴う 2 つ以上のメソッドを定義することはできません。
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: 1 つのアセンブリ内で、AssemblyInitialize 属性を伴う 2 つ以上のメソッドを定義することはできません。
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: 1 つのクラス内で、ClassCleanup 属性を伴う 2 つ以上のメソッドを定義することはできません。
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: 1 つのクラス内で、ClassInitialize 属性を伴う 2 つ以上のメソッドを定義することはできません。
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: TestCleanup 属性を伴う 2 つ以上のメソッドを定義することはできません。
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: TestInitialize 属性を伴う 2 つ以上のメソッドを定義することはできません。
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- 汎用の非抽象クラス {0}で定義された TestClass 属性
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- 初期化メソッド {0}.{1} は例外をスローしました。{2}。
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- クラス {0} のインスタンスを作成できません。エラー: {1}。
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- テスト メソッド '{0}.{1}' には、 '{2}' から派生した属性が複数定義されています。このような属性は 1 つしか許可されません。
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- テスト クラス '{0}' の有効なコンストラクターが見つかりません。有効なコンストラクターは、'public' で、パラメーターがないもの、または 'TestContext' 型のパラメーター 1 個を取るものです。
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- クラス {0} の TestContext プロパティを設定できません。エラー: {1}。
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (例外が発生したため、型 {0} の例外のメッセージを取得できませんでした。)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: クラス {0} に有効な TestContext プロパティがありません。TestContext は TestContext 型で、非静的である必要があり、public である必要があります。たとえば、public TestContext TestContext です。
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: TestClass 属性がパブリックでないクラス {0} で定義されています
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- MSTestAdapter でアセンブリ '{1}' のクラス '{0}' にテストが見つかりませんでした。理由 {2}。
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- テスト ソース '{0}' から型を読み込むことができません。このソース内の一部またはすべてのテストが見つからない可能性があります。
-エラー: {1}
-
-
-
- File does not exist: {0}
- ファイルが存在しません: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: クラス {0} で定義されているメソッド {1} に適切なシグネチャが含まれていません。[TestMethod] 属性でマークされたテスト メソッドは、non-static および public である必要があり、戻り値の型は void である必要があります。また、パラメーターを受け取ることはできません。例: public void Test.Class1.Test()。また、テスト メソッドで async-await を使用している場合、戻り値の型は 'Task' または 'ValueTask' である必要があります。例: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext を Null にすることはできません。
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- アセンブリ クリーンアップ メソッド {0}.{1} に失敗しました。エラー メッセージ: {2}。スタック トレース: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- アセンブリ初期化メソッド {0}.{1} は例外をスローしました。{2}: {3}。テストの実行を中止しています。
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- クラス クリーンアップ メソッド {0}.{1} に失敗しました。エラー メッセージ: {2}。スタック トレース: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- クラス初期化メソッド {0}.{1} は例外をスローしました。{2}: {3}。
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- 'Execute' メソッドによってハンドルされない例外がスローされました。属性 '{0}' の作成者にこのエラーを報告してください。
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- テストの実行中にエラーが発生しました。拡張から結果が返されませんでした。TestMethodAttribute の拡張クラスを使用している場合は、ベンダーに連絡してください。
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- メソッド {0}。{1} は不適切なシグネチャを含んでいます。メソッドは static および public である必要があり、値を返しません。また、パラメーターを受け取ることはできません。また、メソッドで async-await を使用している場合、戻り値の型は 'Task' または 'ValueTask' である必要があります。
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- メソッド {0}。{1} は不適切なシグネチャを含んでいます。メソッドは static および public である必要があり、値を返しません。また、TestContext 型の 1 つのパラメーターを受け取る必要があります。また、メソッドで async-await を使用している場合、戻り値の型は 'Task' または 'ValueTask' である必要があります。
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}。{1} に無効な Timeout 属性があります。タイムアウトには、0 より大きい整数値を指定する必要があります。
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: メソッド {1} 上の以前に定義されたプロパティ {2} を定義することはできません。
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: Null または空のカスタム プロパティが、メソッド {1} で定義されています。カスタム プロパティには有効な名前を指定しなければなりません。
-
-
-
- Method {0}.{1} does not exist.
- メソッド {0}.{1} は存在しません。
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- プロパティ {0}.TestContext が見つかりません。エラー: {1}。
-
-
-
- The {0}.TestContext has incorrect type.
- {0}.TestContext は不適切な型を含んでいます。
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- メソッド {0}。{1} は不適切なシグネチャを含んでいます。メソッドは non-static および public である必要があり、値を返しません。また、パラメーターを受け取ることはできません。また、メソッドで async-await を使用している場合、戻り値の型は 'Task' または 'ValueTask' である必要があります。
-
-
-
- Unable to get type {0}. Error: {1}.
- 型 {0} を取得できません。エラー: {1}。
-
-
-
- Test method {0} was not found.
- テスト メソッド {0} が見つかりませんでした。
-
-
-
- Debug Trace:
- デバッグ トレース:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- テスト メソッド {0}.{1} によってスローされた例外を取得できませんでした。
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- テスト メソッド {0}.{1} が例外をスローしました:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0} UWP プロジェクトについて、テスト内で UI オブジェクトを使用している場合は、[TestMethod] の代わりに [UITestMethod] 属性を使用して UI スレッド内でテストを実行することを検討してください。
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- 設定 '{0}' は無効です。予期しない XmlAttribute: '{1}'。
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- 設定 '{0}' は無効です。予期しない XmlElement: '{1}'。
-
-
-
- {0} (Data Row {1})
- {0} (データ行 {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- テスト メソッド {0}.{1} に定義されている ExpectedException 属性が、作成中に例外をスローしました。
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- 警告: testsettings ファイル、vsmdi ファイルは MSTest V2 アダプターではサポートされていません。
-
-
-
- TestContext Messages:
- TestContext メッセージ:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- テスト クラス {0} のテスト クリーンアップ メソッドの呼び出しでエラーが発生しました: {1}
-
-
-
- TestCleanup Stack Trace
- TestCleanup スタック トレース
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Discovery][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- {0} でテスト並列処理が有効にされています (Workers: {1}、Scope: {2})。
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- 無効な値 '{0}' が 'Scope' に指定されました。サポートされているスコープは {1} です。
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- 無効な値 '{0}' が 'Workers' に指定されました。値は負ではない整数である必要があります。
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- アセンブリ {0} からテストを検出できませんでした。理由:{1}
-
-
-
- Test '{0}' was canceled
- テスト '{0}' が取り消されました
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- 'ClassCleanupLifecycle' に無効な値 '{0}' が指定されました。サポートされているスコープは {1} です。
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- "{0}.{1}" で IDataSource 属性を列挙中に例外が発生しました: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- "{0}": (種類が "{1}"の例外のため、例外の説明を取得できませんでした。
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- スローされた例外:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- 型 {0} のカスタム属性を取得中に例外がスローされました (無視してリフレクションの方法を使用します): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- 古いバージョンの MSTestV2 パッケージがアセンブリに読み込まれています。`.runsettings` ファイルに依存している場合、テスト検出ですべてのデータ テストを検出できない可能性があります。
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- 呼び出されたコードはキャッチされた例外をスローしましたが、例外値が null でした
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- "{0}.{1}" の属性から IDataSource 行を展開中に例外が発生しました: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- インデックス {0} と {1} の表示名 "{2}" が重複しています。表示名は一意である必要があります。
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- "{1}" のインデックス {0} のデータをシリアル化できません。"IDataSource" を介して提供されるすべてのデータはシリアル化可能である必要があります。シリアル化できないデータ ソースをテストする必要がある場合は、テスト アセンブリに "TestDataSourceDiscovery" 属性を追加し、検出オプションを "DuringExecution" に設定してください。
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.ko.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.ko.xlf
deleted file mode 100644
index b652734ad5..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.ko.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- {2}밀리초 후 어셈블리 정리 메서드 '{0}.{1}'이(가) 시간 초과되었습니다.
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- 어셈블리 정리 메서드 '{0}.{1}'이(가) 취소되었습니다.
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- {2}밀리초 후 '{0}.{1}' 어셈블리 초기화 메서드의 시간이 초과되었습니다.
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- 어셈블리 초기화 메서드 '{0}.{1}'(이)가 취소되었습니다.
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- 테스트 메서드 '{0}{1}'을(를) 실행할 수 없음: 테스트 데이터가 메서드 매개 변수와 일치하지 않습니다. 개수 또는 형식이 다릅니다.
-테스트에 {2} 매개 변수로 ‘{3}’ 형식이 필요하지만,
-{4} 인수의 ‘{5}’ 형식을 받았습니다.
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- 테스트 메서드 '{0}{1}'을(를) 실행할 수 없음: 메서드에 매개 변수가 있지만 테스트 원본을 정의하지 않습니다. '[DataRow]', '[DynamicData]' 또는 사용자 지정 'ITestDataSource' 데이터 원본을 사용하여 테스트 데이터를 제공합니다.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- {2}밀리초 후 클래스 정리 메서드 '{0}.{1}'이(가) 시간 초과되었습니다.
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- 클래스 정리 메서드 '{0}.{1}'이(가) 취소되었습니다.
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- {2}밀리초 후 '{0}.{1}' 클래스 초기화 메서드의 시간이 초과되었습니다.
-
-
-
- Class initialize method '{0}.{1}' was canceled
- '클래스 초기화 메서드 '{0}.{1}'이(가) 취소되었습니다.
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- '.runsettings' 및 '.testconfig.json' 파일이 모두 검색되었습니다. 이러한 테스트 구성 파일 중 하나만 선택하세요.
-
-
-
- Test '{0}' timed out after {1}ms
- 테스트 '{0}' {1}밀리초 후에 시간 초과되었습니다.
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- 제네릭 매개 변수 '{0}' 형식을 유추할 수 없습니다.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- 제네릭 테스트 메서드 '{0}' 인수가 없으므로 제네릭 매개 변수를 유추할 수 없습니다.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- 제네릭 매개 변수 '{0}' 충돌하는 두 가지 형식을 찾았습니다. 충돌하는 형식은 '{1}' '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- runsettings 항목 '{1}'에 대해 '{0}' 값이 잘못되었습니다. 설정은 무시됩니다.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- Runsettings 항목 '<ExecutionApartmentState>STA</ExecutionApartmentState>'는 Windows 이외의 OS에서는 지원되지 않습니다.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- 선택된 플랫폼의 경우 제공된 소스에서 테스트를 실행할 수 없습니다.
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- {2}밀리초 후 테스트 정리 메서드 '{0}.{1}'이(가) 시간 초과되었습니다.
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- 테스트 정리 메서드 '{0}.{1}'이(가) 취소되었습니다.
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- {2}밀리초 후 '{0}.{1}' 테스트 초기화 메서드의 시간이 초과되었습니다.
-
-
-
- Test initialize method '{0}.{1}' was canceled
- 테스트 초기화 메서드 '{0}.{1}'이(가) 취소되었습니다.
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- TestCleanup 메서드 {0}.{1}에서 예외가 발생했습니다. {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- 내부 예외 스택 추적의 끝 ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: 어셈블리 내부에서 AssemblyCleanup 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: 어셈블리 내부에서 AssemblyInitialize 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: 클래스 내부에서 ClassCleanup 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: 클래스 내부에서 ClassInitialize 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: TestCleanup 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: TestInitialize 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- 일반 비추상 클래스 {0}에 정의된 TestClass 속성
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- 초기화 메서드 {0}.{1}에서 예외를 throw했습니다. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- {0} 클래스의 인스턴스를 만들 수 없습니다. 오류: {1}
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- 테스트 메서드 '{0}.{1}'에 {2}에서 파생된 여러 특성이 정의되어 있습니다. 이러한 특성은 하나만 허용됩니다.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- 테스트 클래스 '{0}'에 대한 유효한 생성자를 찾을 수 없습니다. 유효한 생성자는 'public'이며 매개 변수가 없거나 'TestContext' 유형의 매개 변수가 하나 있습니다.
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- {0} 클래스에 대해 TestContext 속성을 설정할 수 없습니다. 오류: {1}
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (예외로 인해 {0} 형식의 예외에 대한 메시지를 가져오지 못했습니다.)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: {0} 클래스에 유효한 TestContext 속성이 없습니다. TestContext는 TestContext 유형이어야 하고, 정적이 아니어야 하며, 일반적이어야 합니다. 예: public TestContext TestContext.
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: public이 아닌 클래스 {0}에서 TestClass 특성을 정의했습니다.
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- MSTestAdapter가 {2} 때문에 어셈블리 '{1}'의 클래스 '{0}'에서 테스트를 검색하지 못했습니다.
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- 테스트 소스 '{0}'에서 형식을 로드할 수 없습니다. 이 소스의 일부 또는 모든 테스트를 검색할 수 없습니다.
-오류: {1}
-
-
-
- File does not exist: {0}
- 파일이 없습니다. {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: 클래스 {0}에 정의된 메서드 {1}에 올바른 서명이 없습니다. [TestMethod] 특성으로 표시된 테스트 메서드는 non-static, public, return-type이 void여야 하며 매개 변수를 사용하지 않아야 합니다. 예: public void Test.Class1.Test(). 또한 테스트 메서드에서 비동기 대기를 사용하는 경우 반환 형식은 Task여야 합니다. 예: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext는 null일 수 없습니다.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- 어셈블리 정리 메서드 {0}.{1}이(가) 실패했습니다. 오류 메시지: {2}. StackTrace: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- 어셈블리 초기화 메서드 {0}.{1}에서 예외를 throw했습니다. {2}: {3}. 테스트 실행을 중단합니다.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- 클래스 정리 메서드 {0}.{1}이(가) 실패했습니다. 오류 메시지: {2}. 스택 추적: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- 클래스 초기화 메서드 {0}.{1}에서 예외를 throw했습니다. {2}: {3}
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- 'Execute' 메서드에서 처리되지 않은 예외가 throw되었습니다. 특성 '{0}' 만든 이에게 이 오류를 보고하십시오.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- 테스트를 실행하는 중에 오류가 발생했습니다. 확장에서 결과가 반환되지 않았습니다. TestMethodAttribute 확장을 사용하는 경우 공급업체에 문의하세요.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- {0}.{1} 메서드의 서명이 잘못되었습니다. 메서드는 정적이고 공용이어야 하며, 값을 반환하거나 매개 변수를 취하지 않습니다. 또한 메서드에서 비동기 대기를 사용하는 경우 반환 형식은 'Task' 또는 'ValueTask'여야 합니다.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- {0}.{1} 메서드의 서명이 잘못되었습니다. 메서드는 static, public이어야 하고, 값을 반환하지 않으며, TestContext 형식의 단일 매개 변수를 사용해야 합니다. 또한 메서드에서 비동기 대기를 사용하는 경우 반환 형식은 'Task' 또는 'ValueTask'여야 합니다.
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}.{1}에 잘못된 Timeout 특성이 있습니다. 시간 제한 값은 0보다 큰 정수여야 합니다.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: {1} 메서드에서 미리 정의된 속성 {2}을(를) 정의할 수 없습니다.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: {1} 메서드에서 Null 또는 빈 사용자 지정 속성을 정의했습니다. 사용자 지정 속성에는 올바른 이름이 지정되어 있어야 합니다.
-
-
-
- Method {0}.{1} does not exist.
- {0}.{1} 메서드가 없습니다.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- {0}.TestContext 속성을 찾을 수 없습니다. 오류: {1}
-
-
-
- The {0}.TestContext has incorrect type.
- {0}.TestContext의 형식이 잘못되었습니다.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- {0}.{1} 메서드의 서명이 잘못되었습니다. 메서드는 정적이 아니고 공용이어야 하며, 값을 반환하거나 매개 변수를 사용할 수 없습니다. 또한 메서드에서 비동기 대기를 사용하는 경우 반환 형식은 'Task' 또는 'ValueTask'여야 합니다.
-
-
-
- Unable to get type {0}. Error: {1}.
- {0} 형식을 가져올 수 없습니다. 오류: {1}
-
-
-
- Test method {0} was not found.
- {0} 테스트 메서드를 찾을 수 없습니다.
-
-
-
- Debug Trace:
- 디버그 추적:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- 테스트 메서드 {0}.{1}에서 throw한 예외를 가져오지 못했습니다.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- 테스트 메서드 {0}.{1}에서 예외를 throw했습니다.
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0} UWP 프로젝트의 경우 테스트에서 UI 개체를 사용 중이면 [TestMethod] 대신 [UITestMethod] 특성을 사용하여 UI 스레드에서 테스트를 실행하세요.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- '{0}' 설정이 잘못되었습니다. 예기치 않은 XmlAttribute '{1}'이(가) 있습니다.
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- '{0}' 설정이 잘못되었습니다. 예기치 않은 XmlElement '{1}'이(가) 있습니다.
-
-
-
- {0} (Data Row {1})
- {0}(데이터 행 {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- 테스트 메서드 {0}.{1}에 정의된 ExpectedException 특성이 생성하는 동안 예외를 throw했습니다.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- 경고: MSTest V2 어댑터에서는 testsettings 파일 또는 vsmdi 파일이 지원되지 않습니다.
-
-
-
- TestContext Messages:
- TestContext 메시지:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- 테스트 클래스 {0}에 대한 테스트 정리 메서드를 호출하는 오류: {1}
-
-
-
- TestCleanup Stack Trace
- TestCleanup 스택 추적
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][검색][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- {0}에 대해 테스트 병렬 처리를 사용합니다(Workers: {1}, Scope: {2}).
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- 'Scope'에 대해 잘못된 값 '{0}'이(가) 지정되었습니다. 지원되는 범위는 {1}입니다.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- 'Workers'에 대해 잘못된 값 '{0}'이(가) 지정되었습니다. 이 값은 음수가 아닌 정수여야 합니다.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- 어셈블리 {0}에서 테스트를 검색하지 못했습니다. 이유:{1}
-
-
-
- Test '{0}' was canceled
- 테스트 '{0}' 취소되었습니다.
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- 'ClassCleanupLifecycle'에 대해 '{0}' 잘못된 값이 지정되었습니다. 지원되는 범위는 {1}입니다.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- "{0}.{1}"에서 IDataSource 특성을 열거하는 동안 예외가 발생했습니다. {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- "{0}": ("{1}" 형식의 예외로 인해 예외 설명을 가져오지 못했습니다.
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- 예외 발생:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- {0} 형식에 대한 사용자 지정 특성을 가져오는 데 예외가 발생했습니다(무시하고 리플렉션 방법 사용). {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- 이전 버전 MSTestV2 패키지가 어셈블리에 로드되어 테스트 검색이 '.runsettings' 파일에 종속된 경우 모든 데이터 테스트를 검색하지 못할 수 있습니다.
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- 호출된 코드에서 확인된 예외가 발생했지만 예외 값이 null입니다.
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- "{0}.{1}"의 특성에서 IDataSource 행을 확장하는 동안 예외가 발생했습니다. {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- {0} 및 {1} 인덱스의 "{2}" 표시 이름이 중복됩니다. 표시 이름은 고유해야 합니다.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- "{1}"에 대한 {0} 인덱스의 데이터를 직렬화할 수 없습니다. "IDataSource"를 통해 제공된 모든 데이터를 직렬화할 수 있어야 합니다. 직렬화할 수 없는 데이터 원본을 테스트해야 하는 경우 테스트 어셈블리에 "TestDataSourceDiscovery" 특성을 추가하고 검색 옵션을 "DuringExecution"으로 설정하세요.
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.pl.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.pl.xlf
deleted file mode 100644
index e229b5db52..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.pl.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- Metoda oczyszczania zestawu „{0}.{1}” przekroczyła limit czasu po {2}ms
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- Anulowano metodę oczyszczania zestawu „{0}.{1}”
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- Metoda inicjalizacji zestawu „{0}.{1}” przekroczyła limit czasu po {2}ms
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- Anulowano metodę inicjowania zestawu „{0}.{1}”
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- Nie można uruchomić metody testowej „{0}.{1}”: dane testowe nie są zgodne z parametrami metody. Liczba lub typy są różne.
-Testowanie oczekiwanych {2} parametrów z typami „{3}”,
-ale liczba odebranych argumentów to {4} z typami „{5}”.
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- Nie można uruchomić metody testowej „{0}.{1}”: metoda ma parametry, ale nie definiuje żadnego źródła testu. Użyj źródła danych „[DataRow]”, „[DynamicData]” lub niestandardowego źródła danych „ITestDataSource”, aby dostarczyć dane testowe.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- Metoda oczyszczania klasy „{0}.{1}” przekroczyła limit czasu po {2}ms
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- Anulowano metodę oczyszczania klasy „{0}.{1}”
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- Metoda inicjalizacji klasy „{0}.{1}” przekroczyła limit czasu po {2}ms
-
-
-
- Class initialize method '{0}.{1}' was canceled
- Anulowano metodę inicjowania klasy „{0}.{1}”
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- Wykryto zarówno pliki „.runsettings”, jak i „.testconfig.json”. Wybierz tylko jeden z tych plików konfiguracji testu.
-
-
-
- Test '{0}' timed out after {1}ms
- Upłynął limit czasu '{0}' testu po {1}ms
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- Nie można wywnioskować typu '{0}' parametru ogólnego.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- Ogólna metoda testowa '{0}' nie ma argumentów, więc nie można wywnioskować parametru ogólnego.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- Znaleziono dwa typy powodujące konflikt dla parametru ogólnego '{0}'. Typy powodujące konflikty są '{1}' i '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- Nieprawidłowa wartość „{0}” dla wpisu runsettings „{1}”. Ustawienie zostanie zignorowane.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- Wpis runsettings „<ExecutionApartmentState>STA</ExecutionApartmentState>” nie jest obsługiwany w systemach operacyjnych innych niż Windows.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- Uruchamianie testów w żadnym z podanych źródeł nie jest obsługiwane dla wybranej platformy
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- Metoda oczyszczania testu „{0}.{1}” przekroczyła limit czasu po {2}ms
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- Anulowano metodę oczyszczania testu „{0}.{1}”
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- Metoda inicjalizacji testu „{0}.{1}” przekroczyła limit czasu po {2}ms
-
-
-
- Test initialize method '{0}.{1}' was canceled
- Anulowano metodę inicjowania testu „{0}.{1}”
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- Metoda TestCleanup {0}.{1} zgłosiła wyjątek {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- Koniec śledzenia stosu wyjątku wewnętrznego ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: W zestawie nie można zdefiniować więcej niż jednej metody z atrybutem AssemblyCleanup.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: W zestawie nie można zdefiniować więcej niż jednej metody z atrybutem AssemblyInitialize.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: W klasie nie można zdefiniować więcej niż jednej metody z atrybutem ClassCleanup.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: W klasie nie można zdefiniować więcej niż jednej metody z atrybutem ClassInitialize.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: Nie można zdefiniować więcej niż jednej metody z atrybutem TestCleanup.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: Nie można zdefiniować więcej niż jednej metody z atrybutem TestInitialize.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- Atrybut TestClass zdefiniowany w ogólnej klasie nieabstrakcyjnej {0}
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- Metoda inicjowania {0}.{1} zgłosiła wyjątek. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- Nie można utworzyć wystąpienia klasy {0}. Błąd: {1}.
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- Metoda testowa "{0}.{1}” ma zdefiniowanych wiele atrybutów pochodzących z „{2}”. Dozwolony jest tylko jeden taki atrybut.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- Nie można odnaleźć prawidłowego konstruktora dla klasy testowej „{0}”. Prawidłowe konstruktory są „publiczne” i albo bez parametrów, albo z jednym parametrem typu „TestContext”.
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- Nie można ustawić właściwości TestContext w klasie {0}. Błąd: {1}.
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (Nie można pobrać komunikatu dotyczącego wyjątku typu {0} z powodu wyjątku).
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: Klasa {0}nie ma prawidłowej właściwości TestContext. Element TestContext musi być typu TestContext, musi być niestatyczny i musi być publiczny. Na przykład : public TestContext TestContext.
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: Atrybut TestClass zdefiniowany dla niepublicznej klasy {0}
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- Adapter MSTestAdapter nie mógł odnaleźć testów w klasie „{0}” zestawu „{1}”, przyczyna: {2}.
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- Nie można załadować typów ze źródła testów „{0}”. Niektóre lub wszystkie testy w tym źródle mogły nie zostać odnalezione.
-Błąd: {1}
-
-
-
- File does not exist: {0}
- Plik nie istnieje: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: metoda {1} zdefiniowana w klasie {0}nie ma poprawnej sygnatury. Metoda testowa oznaczona przez atrybut [TestMethod] musi być niestatyczna, publiczna, zwracać wartość typu void i nie powinna przyjmować żadnego parametru. Przykład: public void Test.Class1.Test(). Ponadto, jeśli używasz oczekiwanie asynchroniczne w metodzie testowej, wtedy zwracanym typem musi być „Task” lub „ValueTask”. Przykład: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- Wartość TestContext nie może być równa null.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- Metoda czyszczenia zestawu {0}.{1} nie powiodła się. Komunikat o błędzie: {2}. Ślad stosu: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- Metoda inicjująca zestaw {0}.{1} nie powiodła się. {2}: {3}. Przerywanie wykonywania testu.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- Metoda czyszczenia klasy {0}.{1} nie powiodła się. Komunikat o błędzie: {2}. Ślad stosu: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- Metoda inicjowania klasy {0}.{1} zgłosiła wyjątek. {2}: {3}.
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- Metoda Execute zgłosiła nieobsługiwany wyjątek. Zgłoś ten błąd autorowi atrybutu '{0}'.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- Błąd podczas wykonywania testu. Rozszerzenie nie zwróciło żadnego wyniku. W przypadku korzystania z rozszerzenia atrybutu TestMethodAttribute należy skontaktować się z dostawcą.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Metoda {0}.{1}ma nieprawidłową sygnaturę. Metoda musi być statyczna, publiczna, nie może zwracać wartości i nie powinna przyjmować żadnego parametru. Ponadto jeśli w metodzie jest używane oczekiwanie asynchroniczne, wtedy zwracanym typem musi być typ „Task” lub „ValueTask”.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Metoda {0}.{1}ma nieprawidłową sygnaturę. Metoda musi być statyczna, publiczna, nie może zwracać wartości i powinna mieć jeden parametr typu TestContext. Ponadto jeśli w metodzie jest używane oczekiwanie asynchroniczne, wtedy zwracanym typem musi być typ „Task” lub „ValueTask”.
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}.{1} ma nieprawidłowy atrybut Timeout. Limit czasu musi być liczbą całkowitą większą niż 0.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: Nie można zdefiniować wstępnie zdefiniowanej właściwości {2} dla metody {1}.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: Zerowa lub pusta niestandardowa właściwość została zdefiniowana dla metody {1}. Niestandardowa właściwość musi mieć prawidłową nazwę.
-
-
-
- Method {0}.{1} does not exist.
- Metoda {0}.{1} nie istnieje.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- Nie można znaleźć właściwości {0}.TestContext. Błąd:{1}.
-
-
-
- The {0}.TestContext has incorrect type.
- Element {0}.TestContext ma niepoprawny typ.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Metoda {0}.{1}ma nieprawidłową sygnaturę. Metoda musi być niestatyczna, publiczna, nie może zwracać wartości i nie powinna przyjmować żadnego parametru. Ponadto jeśli w metodzie jest używane oczekiwanie asynchroniczne, wtedy zwracanym typem musi być typ „Task” lub „ValueTask”.
-
-
-
- Unable to get type {0}. Error: {1}.
- Nie można uzyskać typu {0}. Błąd: {1}.
-
-
-
- Test method {0} was not found.
- Nie znaleziono metody testowej {0}.
-
-
-
- Debug Trace:
- Ślad debugowania:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- Nie powiodło się uzyskanie wyjątku zgłoszonego przez metodę testową {0}.{1}.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- Metoda testowa {0}.{1} zgłosiła wyjątek:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0} Jeśli w projektach UWP korzystasz z obiektów interfejsu użytkownika podczas testowania, rozważ użycie atrybutu [UITestMethod] zamiast atrybutu [TestMethod], aby wykonywać test w wątku interfejsu użytkownika.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- Nieprawidłowe ustawienia „{0}”. Nieoczekiwany atrybut XmlAttribute: „{1}”.
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- Nieprawidłowe ustawienia „{0}”. Nieoczekiwany atrybut XmlElement: „{1}”.
-
-
-
- {0} (Data Row {1})
- {0} (wiersz danych {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- Atrybut ExpectedException zdefiniowany dla metody testowej {0}.{1} zgłosił wyjątek w trakcie konstruowania.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- Ostrzeżenie: Plik testsettings lub plik vsmdi nie jest obsługiwany przez adapter MSTest w wersji 2.
-
-
-
- TestContext Messages:
- Komunikaty TestContext:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- Błąd podczas wywoływania metody czyszczącej testu dla klasy testowej {0}: {1}
-
-
-
- TestCleanup Stack Trace
- Ślad stosu dla TestCleanup
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Discovery][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- Przetwarzanie równoległe testów włączono dla {0} (procesy robocze: {1}, zakres: {2})
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- Określono nieprawidłową wartość „{0}” dla właściwości „Scope”. Obsługiwane zakresy to {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- Określono nieprawidłową wartość „{0}” dla właściwości „Workers”. Wartość musi być nieujemną liczbą całkowitą.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- Nie można odnaleźć testów z zestawu {0}. Przyczyna:{1}
-
-
-
- Test '{0}' was canceled
- Anulowano '{0}' testowe
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- Dla ustawienia „ClassCleanupLifecycle” określono nieprawidłową wartość „{0}”. Obsługiwane zakresy to {1}.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- Wystąpił wyjątek podczas wyliczania atrybutu IDataSource w przestrzeni nazwy „{0}.{1}”: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- „{0}”: (Nie można uzyskać opisu wyjątku z powodu wyjątku typu „{1}”.
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- Zgłoszone wyjątki:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- Pobieranie atrybutów niestandardowych dla typu {0} zgłosiło wyjątek (zignoruje i użyje sposobu odbicia): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- Starsza wersja pakietu MSTestV2 jest załadowana do zestawu. Odnajdywanie testów może nie odnaleźć wszystkich testów danych, jeśli zależą od pliku „.runsettings”.
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- Wywołany kod zgłosił wyjątek, który został przechwycony, ale wartość wyjątku miała wartość null
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- Wystąpił wyjątek podczas rozwijania wierszy IDataSource z atrybutu w przestrzeni nazw „{0}.{1}”: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- Nazwa wyświetlana „{2}” w indeksach {0} i {1} jest duplikatem. Nazwy wyświetlane powinny być unikatowe.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- Nie można serializować danych w indeksie {0} dla „{1}”. Wszystkie dane dostarczane za pomocą źródła „IDataSource” powinny być możliwe do serializacji. Jeśli chcesz przetestować nieserializowalne źródła danych, upewnij się, że dodasz atrybut „ TestDataSourceDiscovery” w zestawie testowym i ustaw opcję odnajdywania na wartość „DuringExecution”.
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.pt-BR.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.pt-BR.xlf
deleted file mode 100644
index fbd82fe886..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.pt-BR.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- O método de limpeza da montagem '{0}.{1}' atingiu o tempo limite após {2}ms
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- O método de limpeza do assembly "{0}.{1}" foi cancelado
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- O método de inicialização da montagem '{0}.{1}' atingiu o tempo limite após {2}ms
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- O método de inicialização do assembly "{0}.{1}" foi cancelado
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- Não é possível executar o método de teste '{0}.{1}': Os dados de teste não correspondem aos parâmetros do método. A contagem ou os tipos são diferentes.
-Testar {2} parâmetros esperados, com tipos '{3}',
-mas {4} argumentos recebidos, com tipos '{5}'.
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- Não é possível executar o método de teste '{0}.{1}': o método tem parâmetros, mas não define nenhuma fonte de teste. Use '[DataRow]', '[DynamicData]' ou uma fonte de dados 'ITestDataSource' personalizada para fornecer dados de teste.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- O método de limpeza da classe '{0}.{1}' atingiu o tempo limite após {2}ms
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- O método de limpeza de classe "{0}.{1}" foi cancelado
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- O método de inicialização da classe '{0}.{1}' atingiu o tempo limite após {2}ms
-
-
-
- Class initialize method '{0}.{1}' was canceled
- O método de inicialização de classe "{0}.{1}" foi cancelado
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- Ambos os arquivos '.runsettings' e '.testconfig.json' foram detectados. Selecione apenas um desses arquivos de configuração de teste.
-
-
-
- Test '{0}' timed out after {1}ms
- Tempo '{0}' tempo limite do teste após {1}ms
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- Não foi possível inferir o tipo '{0}' parâmetro genérico.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- O método de teste genérico '{0}' não tem argumentos, portanto, o parâmetro genérico não pode ser inferido.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- Foram encontrados dois tipos conflitativos para parâmetro genérico '{0}'. Os tipos conflitativos são '{1}' e '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- Valor inválido "{0}" para a entrada runsettings "{1}", a configuração será ignorada.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- Não há suporte para a entrada runsettings "<ExecutionApartmentState>STA</ExecutionApartmentState>" em sistemas operacionais que não sejam Windows.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- Não há suporte para execução de teste em qualquer uma das origens fontes fornecidas para a plataforma selecionada
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- O método de limpeza do teste '{0}.{1}' atingiu o tempo limite após {2}ms
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- O método de limpeza de teste "{0}.{1}" foi cancelado
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- O método de inicialização do teste '{0}.{1}' atingiu o tempo limite após {2}ms
-
-
-
- Test initialize method '{0}.{1}' was canceled
- O método de inicialização de teste "{0}.{1}" foi cancelado
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- O método TestCleanup {0}.{1} gerou a exceção. {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- Fim do rastreamento de pilha de exceção interna ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: não é possível definir mais de um método com o atributo AssemblyCleanup em um assembly.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: não é possível definir mais de um método com o atributo AssemblyInitialize dentro de um assembly.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: não é possível definir mais de um método com o atributo ClassCleanup dentro de uma classe.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: não é possível definir mais de um método com o atributo ClassInitialize em uma classe.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: não é possível definir mais de um método com o atributo TestCleanup.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: não é possível definir mais de um método com o atributo TestInitialize.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- Atributo TestClass definido em uma classe genérica não abstrata {0}
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- O método de inicialização {0}.{1} gerou exceção. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- Não é possível criar instância da classe {0}. Erro: {1}.
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- O método de teste '{0}.{1}' tem várias características derivadas de '{2}' definidas nele. Apenas uma dessas características tem permissão.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- Não é possível localizar um construtor válido para a classe de teste '{0}'. Construtores válidos são 'public' e sem parâmetros ou com um parâmetro do tipo 'TestContext'.
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- Não é definir a propriedade TestContext para a classe {0}. Erro: {1}.
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (Falha ao obter a mensagem para uma exceção do tipo {0} devido a uma exceção.)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: a classe {0} não tem uma propriedade TestContext válida. TestContext deve ser do tipo TestContext, não deve ser estático e deve ser público. Por exemplo: public TestContext TestContext.
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: atributo TestClass definido em classe não pública {0}
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- O MSTestAdapter não conseguiu descobrir testes na classe '{0}' do assembly '{1}' devido a {2}.
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- Não é possível carregar tipos da fonte de teste '{0}'. Alguns ou todos os testes nessa fonte podem não ser descobertos.
-Erro: {1}
-
-
-
- File does not exist: {0}
- O arquivo não existe: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: o método {1} definido na classe {0} não tem a assinatura correta. O método de teste marcado com o atributo [TestMethod] deve ser não estático, público, com tipo de retorno nulo e não deve receber parâmetros. Exemplo: Test.Class1.Test() público nulo. Além disso, se você estiver usando async-await no método de teste, return-type deverá ser "Task" ou "ValueTask". Exemplo: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext não pode ser Nulo.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- Falha no método de Limpeza de Assembly {0}.{1}. Mensagem de Erro: {2}. StackTrace: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- O método de Inicialização de Assembly {0}.{1} lançou uma exceção. {2}: {3}. Anulando execução de teste.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- Falha no método de Limpeza de Classe {0}.{1}. Mensagem de Erro: {2}. Rastreamento de Pilha: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- O método de Inicialização de Classe {0}.{1} lançou uma exceção. {2}: {3}.
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- Uma exceção sem tratamento foi lançada pelo método 'Execute'. Relate este erro ao autor do atributo '{0}'.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- Erro ao executar o teste. Nenhum resultado retornado pela extensão. Se usar a extensão de TestMethodAttribute, entre em contato com o fornecedor.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- O método {0}.{1} tem a assinatura incorreta. O método deve ser estático, público, não deve retornar um valor nem receber parâmetro. Além disso, se você estiver usando async-await no método, o return-type deverá ser "Task" ou "ValueTask".
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- O método {0}.{1} tem a assinatura incorreta. O método deve ser estático, público, não retornar um valor e deve usar um único parâmetro do tipo TestContext. Além disso, se você estiver usando async-await no método, o return-type deverá ser "Task" ou "ValueTask".
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}.{1} tem atributo Timeout inválido. O tempo limite deve ser um valor inteiro maior que 0.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: não é possível definir a propriedade predefinida {2} no método {1}.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: Propriedade personalizada nula ou vazia definida no método {1}. A propriedade personalizada deve ter um nome válido.
-
-
-
- Method {0}.{1} does not exist.
- O método {0}.{1} não existe.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- Não é possível encontrar propriedade {0}.TestContext. Erro:{1}.
-
-
-
- The {0}.TestContext has incorrect type.
- O {0}.TestContext é do tipo incorreto.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- O método {0}.{1} tem a assinatura incorreta. O método deve ser não estático, público, não deve retornar um valor e não deve receber nenhum parâmetro. Além disso, se você estiver usando async-await no método, o return-type deverá ser "Task" ou "ValueTask".
-
-
-
- Unable to get type {0}. Error: {1}.
- Não é possível obter o tipo {0}. Erro: {1}.
-
-
-
- Test method {0} was not found.
- O método de teste {0} não foi encontrado.
-
-
-
- Debug Trace:
- Rastreamento de Depuração:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- Falha ao obter a exceção lançada pelo método de teste {0}.{1}.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- O método de teste {0}.{1} lançou a exceção:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0} Para projetos UWP, se você está usando objetos de IU no teste, considere usar o atributo [UITestMethod] em vez de [TestMethod] para executar o teste no thread da IU.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- Configurações inválidas '{0}'. XmlAttribute inesperado: '{1}'.
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- Configurações inválidas '{0}'. XmlElement inesperado: '{1}'.
-
-
-
- {0} (Data Row {1})
- {0} (Linha de Dados {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- O atributo ExpectedException definido no método de teste {0}.{1} emitiu uma exceção durante a construção.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- Aviso: um arquivo testsettings ou um arquivo vsmdi não tem suporte no MSTest V2 Adapter.
-
-
-
- TestContext Messages:
- Mensagens TestContext:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- Erro ao chamar o método Test Cleanup para a classe de teste {0}: {1}
-
-
-
- TestCleanup Stack Trace
- Rastreamento de pilha TestCleanup
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Descoberta][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- Paralelização de Teste habilitada para {0} (Trabalhos: {1}, Escopo: {2})
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- Valor inválido '{0}' especificado para 'Scope'. Os escopos compatíveis são {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- Valor inválido '{0}' especificado para 'Workers'. O valor deve ser um inteiro não negativo.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- Falha ao descobrir testes por meio do assembly {0}. Motivo: {1}
-
-
-
- Test '{0}' was canceled
- O '{0}' teste foi cancelado
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- Valor inválido '{0}' especificado para 'ClassCleanupLifecycle'. Os escopos suportados são {1}.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- Ocorreu uma exceção ao enumerar o atributo IDataSource em "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- "{0}": (Falha ao obter a descrição da exceção devido a uma exceção do tipo "{1}".
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- Exceções lançadas:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- A obtenção de atributos personalizados para o tipo {0} gerou uma exceção (irá ignorar e usar o modo de reflexão): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- Uma versão mais antiga do pacote MSTestV2 é carregada no assembly, a descoberta de teste pode falhar ao descobrir todos os testes de dados se eles dependerem do arquivo `.runsettings`.
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- O código chamado lançou uma exceção que foi capturada, mas o valor da exceção era nulo
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- Ocorreu uma exceção ao expandir as linhas IDataSource do atributo em "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- O nome de exibição "{2}" nos índices {0} e {1} são duplicados. Os nomes de exibição devem ser exclusivos.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- Os dados no índice {0} para "{1}" não podem ser serializados. Todos os dados fornecidos por meio de "IDataSource" devem ser serializáveis. Se você precisar testar fontes de dados não serializáveis, certifique-se de adicionar o atributo "TestDataSourceDiscovery" em seu assembly de teste e defina a opção de descoberta como "DuringExecution".
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.ru.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.ru.xlf
deleted file mode 100644
index 058011a770..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.ru.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- Время ожидания метода очистки сборки "{0}.{1}" истекло через {2} мс
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- Метод очистки сборки "{0}.{1}" отменен
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- Время ожидания метода инициализации сборки "{0}.{1}" истекло через {2} мс
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- Метод инициализации сборки "{0}.{1}" отменен
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- Не удается запустить метод теста "{0}.{1}": тестовые данные не соответствуют параметрам метода. Количество или типы отличаются.
-Число ожидаемых для теста параметров: {2} с типами "{3}",
-но число полученных аргументов: {4} с типами "{5}".
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- Не удается запустить метод теста "{0}.{1}": метод имеет параметры, но не определяет источник теста. Используйте "[DataRow]", "[DynamicData]" или настраиваемый источник данных "ITestDataSource" для предоставления тестовых данных.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- Время ожидания метода очистки класса "{0}.{1}" истекло через {2} мс
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- Метод очистки класса "{0}.{1}" отменен
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- Время ожидания метода инициализации класса "{0}.{1}" истекло через {2} мс
-
-
-
- Class initialize method '{0}.{1}' was canceled
- Метод инициализации класса "{0}.{1}" отменен
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- Обнаружены файлы ".runsettings" и ".testconfig.json". Выберите только один из этих файлов тестовой конфигурации.
-
-
-
- Test '{0}' timed out after {1}ms
- Время ожидания '{0}' истекло через {1}мс
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- Не удалось определить тип универсального '{0}' параметра.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- Универсальный метод '{0}' не имеет аргументов, поэтому невозможно вывести универсальный параметр.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- Обнаружены два конфликтующих типа для универсального параметра '{0}'. Конфликтуют типы '{1}' и '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- Недопустимое значение "{0}" для записи runsettings "{1}", параметр будет пропущен.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- Запись Runsettings "<ExecutionApartmentState>STA</ExecutionApartmentState>" не поддерживается в ОС, отличных от Windows.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- Запуск тестов в любом из предоставленных источников не поддерживается на выбранной платформе
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- Время ожидания метода очистки теста "{0}.{1}" истекло через {2} мс
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- Метод очистки теста "{0}.{1}" отменен
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- Время ожидания метода инициализации теста "{0}.{1}" истекло через {2} мс
-
-
-
- Test initialize method '{0}.{1}' was canceled
- Метод инициализации теста "{0}.{1}" отменен
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- Метод TestCleanup {0}.{1} создал исключение. {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- Конец трассировки стека внутренних исключений ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: в сборке невозможно определить несколько методов с атрибутом AssemblyCleanup.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: в сборке невозможно определить несколько методов с атрибутом AssemblyInitialize.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: в классе невозможно определить несколько методов с атрибутом ClassCleanup.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: в классе невозможно определить несколько методов с атрибутом ClassInitialize.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: невозможно определить несколько методов с атрибутом TestCleanup.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: невозможно определить несколько методов с атрибутом TestInitialize.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- Атрибут TestClass, определенный в универсальном не абстрактном классе {0}
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- Метод инициализации {0}.{1} вызвал исключение. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- Не удалось создать экземпляр класса {0}. Ошибка: {1}.
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- У метода тестирования "{0}.{1}" есть несколько атрибутов, производных от заданного в нем "{2}". Допускается только один такой атрибут.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- Не удается найти допустимый конструктор для тестового класса "{0}". Допустимые конструкторы : "public" и конструкторы без параметров или с одним параметром типа "TestContext".
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- Не удалось задать свойство TestContext для класса {0}. Ошибка: {1}.
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (Не удалось получить сообщение для исключения с типом {0} в связи с возникновением исключения.)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: в классе {0} отсутствует допустимое свойство TestContext. Свойство TestContext должно относиться к типу TestContext, быть нестатическим и открытым. Например: public TestContext TestContext.
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: атрибут TestClass определен в классе {0}, не являющемся открытым
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- Средству MSTestAdapter не удалось обнаружить тесты в классе "{0}" сборки "{1}", так как {2}.
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- Не удалось загрузить типы из тестового источника "{0}". В этом источнике могут быть не обнаружены некоторые или все тесты.
-Ошибка: {1}
-
-
-
- File does not exist: {0}
- Файл не существует: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: метод {1}, определенный в классе {0}, имеет неправильную сигнатуру. Метод теста, помеченный атрибутом [TestMethod], должен быть нестатическим, открытым и иметь тип возвращаемого значения void; он также не должен принимать параметры. Пример: public void Test.Class1.Test(). Кроме того, при использовании async-await в методе теста возвращаемое значение должно иметь тип "Task" или "ValueTask". Пример: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext не может иметь значение NULL.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- Не удалось применить метод очистки сборки {0}.{1}. Сообщение об ошибке: {2}. Трассировка стека (StackTrace): {3}.
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- Методом инициализации сборки {0}.{1} создано исключение. {2}: {3}. Выполнение теста прекращается.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- Не удалось применить метод очистки класса {0}.{1}. Сообщение об ошибке: {2}. Трассировка стека: {3}.
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- Методом инициализации класса {0}.{1} создано исключение. {2}: {3}.
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- Необработанное исключение вызвано методом Execute. Сообщить об этой ошибке автору атрибута '{0}'.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- Ошибка при выполнении теста. Расширение не возвратило результаты. Если используется расширение атрибута TestMethodAttribute, обратитесь к поставщику.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Метод {0}.{1} имеет неправильную сигнатуру. Метод должен быть статическим и открытым, не должен возвращать значение и принимать параметры. Кроме того, при использовании async-await в методе возвращаемое значение должно иметь тип "Task" или "ValueTask".
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Метод {0}.{1} имеет неправильную сигнатуру. Метод должен быть статическим и открытым, не должен возвращать значение и должен принимать один параметр, имеющий тип TestContext. Кроме того, при использовании async-await в методе возвращаемое значение должно иметь тип "Task" или "ValueTask".
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}. {1} имеет недопустимый атрибут времени ожидания. Значение времени ожидания должно быть положительным целым числом.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: не удается определить предопределенное свойство {2} в методе {1}.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: в методе {1} определено пользовательское свойство, имя которого имеет значение NULL или пусто. Пользовательское свойство должно иметь допустимое имя.
-
-
-
- Method {0}.{1} does not exist.
- Метод {0}.{1} не существует.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- Не удается найти свойство {0}.TestContext. Ошибка: {1}.
-
-
-
- The {0}.TestContext has incorrect type.
- Для свойства {0}.TestContext указан неправильный тип.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- Метод {0}.{1} имеет неправильную сигнатуру. Метод должен быть нестатическим и открытым, не должен возвращать значение и принимать параметры. Кроме того, при использовании async-await в методе возвращаемое значение должно иметь тип "Task" или "ValueTask".
-
-
-
- Unable to get type {0}. Error: {1}.
- Не удается получить тип {0}. Ошибка: {1}.
-
-
-
- Test method {0} was not found.
- Метод теста {0} не найден.
-
-
-
- Debug Trace:
- Трассировка отладки:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- Не удалось получить исключение, созданное методом теста {0}.{1}.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- Метод теста {0}.{1} создал исключение:
-{2}.
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0} В проектах UWP, если в тесте используются объекты пользовательского интерфейса, рассмотрите возможность использования атрибута [UITestMethod] вместо атрибута [TestMethod] для выполнения теста в потоке пользовательского интерфейса.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- Недопустимые параметры "{0}". Непредвиденный атрибут XmlAttribute: "{1}".
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- Недопустимые параметры "{0}". Непредвиденный элемент XmlElement: "{1}".
-
-
-
- {0} (Data Row {1})
- {0} (строка данных {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- Атрибут ExpectedException, определенный в методе теста {0}.{1}, породил исключение во время создания.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- Внимание! Адаптер MSTest версии 2 не поддерживает файл TESTSETTINGS или VSMDI.
-
-
-
- TestContext Messages:
- Сообщения TestContext:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- Ошибка при вызове метода TestCleanup для тестового класса {0}: {1}
-
-
-
- TestCleanup Stack Trace
- Трассировка стека TestCleanup
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Discovery][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- Включена параллелизация тестов для {0} (рабочие роли: {1}, область: {2})
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- В поле "Область" указано недопустимое значение "{0}". Поддерживаемые области: {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- В поле "Рабочие роли" указано недопустимое значение "{0}". Оно должно быть неотрицательным целым числом.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- Не удалось обнаружить тесты из сборки {0}. Причина:{1}
-
-
-
- Test '{0}' was canceled
- Проверка '{0}' отменена
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- Для параметра "ClassCleanupLifecycle" указано недопустимое значение "{0}". Поддерживаемые области: {1}.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- Возникло исключение при перечислении атрибута IDataSource в "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- "{0}": (Не удалось получить описание исключения из-за исключения типа "{1}".
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- Выданные исключения:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- При получении настраиваемых атрибутов для типа {0} возникло исключение (оно будет проигнорировано и будет использовано отражение): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- В сборку загружена старая версия пакета MSTestV2. При обнаружении тестов могут быть обнаружены не все тесты данных, если они зависят от файла ".runsettings".
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- Вызванный код вызвал исключение, которое было перехвачено, но значение исключения было равно NULL
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- Возникло исключение при развертывании строк IDataSource из атрибута "{0}.{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- Отображаемые имена "{2}" в индексах {0} и {1} дублируются. Отображаемые имена должны быть уникальными.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- Не удается сериализовать данные в индексе {0} для "{1}". Все данные, предоставленные через IDataSource, должны быть сериализуемыми. Если необходимо протестировать несериализуемые источники данных, добавьте атрибут "TestDataSourceDiscovery" в тестовую сборку и установите для параметра обнаружения значение "DuringExecution".
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.tr.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.tr.xlf
deleted file mode 100644
index 5713804864..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.tr.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- '{0}.{1}' derleme temizleme yöntemi {2}ms sonra zaman aşımına uğradı
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- '{0}.{1}' bütünleştirilmiş kod temizleme yöntemi iptal edildi
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- '{0}.{1}' derleme başlatma yöntemi {2}ms sonra zaman aşımına uğradı
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- '{0}.{1}' derleme başlatma yöntemi iptal edildi
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- '{0}.{1}' test yöntemi çalıştırılamıyor: Test verileri yöntem parametreleriyle eşleşmiyor. Ya sayı ya da türler farklıdır.
-Test '{3}' türüyle {2} parametre bekledi,
-ancak, '{5}' türüyle {4} argüman aldı.
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- '{0}.{1}' test yöntemi çalıştırılamıyor: Yöntemin parametreleri var ancak herhangi bir test kaynağı tanımlamıyor. Test verilerini sağlamak için '[DataRow]', '[DynamicData]' veya özel bir 'ITestDataSource' veri kaynağı kullanın.
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- '{0}.{1}' sınıf temizleme yöntemi {2}ms sonra zaman aşımına uğradı
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- '{0}.{1}' sınıf temizleme yöntemi iptal edildi
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- '{0}.{1}' sınıf başlatma yöntemi {2}ms sonra zaman aşımına uğradı
-
-
-
- Class initialize method '{0}.{1}' was canceled
- '{0}.{1}' sınıf başlatma yöntemi iptal edildi
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- Hem '.runsettings' hem de '.testconfig.json' dosyaları algılandı. Lütfen bu test yapılandırma dosyalarından yalnızca birini seçin.
-
-
-
- Test '{0}' timed out after {1}ms
- Test '{0}' ms sonra zaman aşımına {1}oldu
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- Genel parametre türü '{0}' çıkarsanamadı.
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- Genel test '{0}' bağımsız değişkene sahip olmadığından genel parametre çıkarsanamıyor.
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- Genel parametre türü için iki çakışan tür '{0}'. Çakışan türler '{1}' '{2}'.
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- '{1}' çalıştırma ayarları girişi için '{0}' değeri geçersiz, ayar yoksayılacak.
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- '<ExecutionApartmentState>STA</ExecutionApartmentState>' çalışma ayarları girişi Windows dışı işletim sistemlerinde desteklenmiyor.
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- Testlerin sağlanan kaynakların herhangi birinde çalıştırılması seçili platformda desteklenmiyor
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- '{0}.{1}' test temizleme yöntemi {2}ms sonra zaman aşımına uğradı
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- '{0}.{1}' test temizleme yöntemi iptal edildi
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- '{0}.{1}' test başlatma yöntemi {2}ms sonra zaman aşımına uğradı
-
-
-
- Test initialize method '{0}.{1}' was canceled
- '{0}.{1}' test başlatma yöntemi iptal edildi
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- TestCleanup metodu {0}.{1} özel durum oluşturdu. {2}.
-
-
-
- --- End of inner exception stack trace ---
- --- İç özel durum yığın izlemesinin sonu ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: Bir bütünleştirilmiş kod içinde AssemblyCleanup özniteliği ile birden fazla metot tanımlanamaz.
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: Bir bütünleştirilmiş kod içinde AssemblyInitialize özniteliği ile birden fazla metot tanımlanamaz.
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: Bir sınıf içinde ClassCleanup özniteliği ile birden fazla metot tanımlanamaz.
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: Bir sınıf içinde ClassInitialize özniteliği ile birden fazla metot tanımlanamaz.
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: TestCleanup özniteliği ile birden fazla metot tanımlanamaz.
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: TestInitialize özniteliği ile birden fazla metot tanımlanamaz.
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- {0} genel soyut olmayan sınıf üzerinde tanımlanan TestClass özniteliği
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- Başlatma metodu {0}.{1} özel durum oluşturdu. {2}.
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- {0} sınıfının örneği oluşturulamıyor. Hata: {1}.
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- “{0}.{1}” test yöntemi, üzerinde tanımlanan “{2}” öğesinden türetilmiş birden fazla öznitelik içeriyor. Bu türde yalnızca bir tane özniteliğe izin verilir.
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- '{0}' test sınıfı için geçerli bir oluşturucu bulunamıyor. Geçerli oluşturucular 'public' ve parametresiz veya 'TestContext' türünde tek bir parametre içeriyor.
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- {0} sınıfı için TestContext özelliği ayarlanamıyor. Hata: {1}.
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (Bir özel durum nedeniyle, {0} türündeki özel durum iletisi alınamadı.)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: {0}sınıfı geçerli bir TestContext özelliğine sahip değil. TestContext, TestContext türünde olmalı, static olmamalı ve public olmalıdır. Örnek: public TestContext TestContext.
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: TestClass özniteliği genel olmayan {0} sınıfında tanımlanmış
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- MSTestAdapter, '{1}' bütünleştirilmiş kodunun '{0}' sınıfındaki testleri bulamadı. Nedeni: {2}.
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- '{0}' test kaynağından türler yüklenemiyor. Kaynaktaki testlerin bazıları veya tümü bulunamayabilir.
-Hata: {1}
-
-
-
- File does not exist: {0}
- Dosya yok: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: {0} sınıfında tanımlanan {1} yönteminin imzası doğru değil. [TestMethod] özniteliğiyle işaretlenmiş test yöntemi statik olmayan, genel, dönüş türü void olan bir yöntem olmalıdır ve hiçbir parametre almamalıdır. Örnek: public void Test.Class1.Test(). Bunlara ek olarak, test metodunda async-await kullanıyorsanız return-type değeri 'Task' veya 'ValueTask' olmalıdır. Örnek: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext, Null olamaz.
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- Bütünleştirilmiş Kod Temizleme metodu ({0}.{1}) başarısız oldu. Hata İletisi: {2}. StackTrace: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- Bütünleştirilmiş Kod Başlatma metodu ({0}.{1}) özel durum oluşturdu. {2}: {3}. Test yürütmesi durduruluyor.
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- Sınıf Temizleme metodu ({0}.{1}) başarısız oldu. Hata İletisi: {2}. Yığın İzlemesi: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- Sınıf Başlatma metodu ({0}.{1}) özel durum oluşturdu. {2}: {3}.
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- 'Execute' metodu tarafından işlenmeyen bir özel durum oluşturuldu. Lütfen bu hatayı özniteliğin yazarına '{0}'.
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- Test yürütülürken hata oluştu. Uzantı tarafından hiç sonuç döndürülmedi. TestMethodAttribute uzantısı kullanılıyorsa, lütfen satıcıya başvurun.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- {0}.{1} yönteminin imzası yanlış. Yöntem statik, genel, değer döndürmeyen bir yöntem olmalı, hiçbir parametre almamalıdır. Bunlara ek olarak, yöntemde async-await kullanıyorsanız return-type değeri 'Task' veya 'ValueTask' olmalıdır.
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- {0}.{1} yönteminin imzası yanlış. Yöntem statik, genel, değer döndürmeyen bir yöntem olmalı ve TestContext türünde tek bir parametre almalıdır. Bunlara ek olarak, yöntemde async-await kullanıyorsanız return-type değeri 'Task' veya 'ValueTask' olmalıdır.
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}.{1} Timeout özniteliği geçersiz. Zaman aşımı değeri 0'dan büyük bir tamsayı olmalıdır.
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: Önceden tanımlanmış {2} özelliği {1} metodunda tanımlanamaz.
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: {1} metodunda null veya boş özel özellik tanımlanmış. Özel özellik geçerli bir ada sahip olmalıdır.
-
-
-
- Method {0}.{1} does not exist.
- {0}.{1} metodu yok.
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- {0}.TestContext özelliği bulunamıyor. Hata:{1}.
-
-
-
- The {0}.TestContext has incorrect type.
- {0}.TestContext yanlış türe sahip.
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- {0}.{1} yönteminin imzası yanlış. Yöntem statik olmayan, genel, değer döndürmeyen bir yöntem olmalı, hiçbir parametre almamalıdır. Bunlara ek olarak, yöntemde async-await kullanıyorsanız return-type değeri 'Task' veya 'ValueTask' olmalıdır.
-
-
-
- Unable to get type {0}. Error: {1}.
- {0} türü alınamıyor. Hata: {1}.
-
-
-
- Test method {0} was not found.
- {0} test metodu bulunamadı.
-
-
-
- Debug Trace:
- Hata Ayıklama İzleyici:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- {0}.{1} metodu tarafından oluşturulan özel durum alınamadı.
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- {0}.{1} test metodu özel durum oluşturdu:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0} UWP projeleri için testte UI nesneleri kullanıyorsanız, testi UI iş parçacığında yürütmek için [TestMethod] yerine [UITestMethod] özniteliğini kullanabilirsiniz.
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- Geçersiz '{0}' ayarları. Beklenmeyen XmlAttribute: '{1}'.
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- Geçersiz '{0}' ayarları. Beklenmeyen XmlElement: '{1}'.
-
-
-
- {0} (Data Row {1})
- {0} (Veri Satırı {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- {0}.{1} test yöntemi üzerinde tanımlanan ExpectedException özniteliği, oluşturma sırasında bir özel durum oluşturdu.
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- Uyarı : MSTest V2 Adapter ile bir testsettings dosyası veya bir vsmdi dosyası desteklenmez.
-
-
-
- TestContext Messages:
- TestContext İletileri:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- {0} test sınıfı için Test Temizleme metodu çağrılırken hata oluştu: {1}
-
-
-
- TestCleanup Stack Trace
- TestCleanup Yığın İzleme
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Discovery][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- {0} için Test Paralelleştirme etkin (Çalışanlar: {1}, Kapsam: {2}).
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- 'Scope' için geçersiz '{0}' değeri belirtildi. Desteklenen kapsamlar {1}.
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- 'Workers' için geçersiz '{0}' değeri belirtildi. Değer negatif olmayan bir tamsayı olmalıdır.
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- {0} bütünleştirilmiş kodundan testler bulunamadı. Neden:{1}
-
-
-
- Test '{0}' was canceled
- Test '{0}' iptal edildi
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- 'ClassCleanupLifecycle' için geçersiz '{0}' değeri belirtildi. Desteklenen kapsamlar {1}'dir.
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- "{0}.{1} " üzerinde IDataSource özniteliği numaralandırılırken özel durum oluştu: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- "{0}": ("{1}" türündeki bir istisna nedeniyle özel durum açıklaması alınamadı.
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- Oluşturulan özel durumlar:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- {0} tipi için özel niteliklerin alınması özel durum oluşturdu (yok sayar ve yansıma yolunu kullanır): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- Montaja MSTestV2 paketinin daha eski bir sürümü yüklenir, test keşfi, `.runsettings` dosyasına bağlılarsa tüm veri testlerini keşfetmede başarısız olabilir.
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- Çağrılan kod, yakalanan bir özel durum yarattı, ancak özel durum değeri boştu
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- "{0}. {1}" üzerindeki öznitelikten IDataSource satırları genişletilirken özel durum oluştu: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- {0} ve {1}dizinlerinde görünen ad " {2}" yineleniyor. Görünen adlar benzersiz olmalıdır.
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- "{1}" için {0} indeksindeki veriler serileştirilemez. "IDataSource" aracılığıyla sağlanan tüm veriler serileştirilebilir olmalıdır. Serileştirilemeyen veri kaynaklarını test etmeniz gerekiyorsa, lütfen test derlemenize "TestDataSourceDiscovery" özniteliğini eklediğinizden ve keşif seçeneğini "DuringExecution" olarak ayarladığınızdan emin olun.
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.zh-Hans.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.zh-Hans.xlf
deleted file mode 100644
index 0e0b87553b..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.zh-Hans.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- 程序集清理方法“{0}.{1}”在 {2} ms 后超时
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- 已取消程序集清理方法“{0}.{1}”
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- 程序集初始化方法“{0}.{1}”在 {2} ms 后超时
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- 已取消程序集初始化方法“{0}.{1}”
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- 无法运行测试方法“{0}.{1}”: 测试数据与方法参数不匹配。计数或类型不同。
-测试需要类型为“{3}”的 {2} 参数,
-但收到了类型为“{5}”的 {4} 参数。
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- 无法运行测试方法“{0}.{1}”: 方法具有参数,但未定义任何测试源。使用 “[DataRow]”、“[DynamicData]” 或自定义 “ITestDataSource” 数据源提供测试数据。
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- 类清理方法“{0}.{1}”在 {2} ms 后超时
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- 已取消类清理方法“{0}.{1}”
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- 类初始化方法“{0}.{1}”在 {2} ms 后超时
-
-
-
- Class initialize method '{0}.{1}' was canceled
- 已取消类初始化方法“{0}.{1}”
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- 检测到 ".runsettings" 和 ".testconfig.json" 文件。请仅选择其中一个测试配置文件。
-
-
-
- Test '{0}' timed out after {1}ms
- 测试 '{0}' 在 {1}毫秒后超时
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- 无法推断 '{0}' 泛型参数的类型。
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- 泛型测试方法 '{0}' 没有参数,因此无法推断泛型参数。
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- 发现泛型参数 '{0}' 的两个冲突类型。冲突类型 '{1}' 和 '{2}'。
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- runsettings 项“{0}”的值“{1}”无效,将忽略设置。
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- 非 Windows 操作系统不支持 Runsettings 条目 "<ExecutionApartmentState>STA</ExecutionApartmentState>"。
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- 选定的平台不支持在任何提供的源中运行测试
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- 测试清理方法“{0}.{1}”在 {2} ms 后超时
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- 已取消测试清理方法“{0}.{1}”
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- 测试初始化方法“{0}.{1}”在 {2} ms 后超时
-
-
-
- Test initialize method '{0}.{1}' was canceled
- 已取消测试初始化方法“{0}.{1}”
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- TestCleanup 方法 {0}.{1} 引发异常。{2}。
-
-
-
- --- End of inner exception stack trace ---
- ---内部异常堆栈跟踪结束---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: 在一个程序集内部,不能定义多个具有 AssemblyCleanup 特性的方法。
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: 在一个程序集内部,不能定义多个具有 AssemblyInitialize 特性的方法。
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: 在一个类内部,不能定义多个具有 ClassCleanup 特性的方法。
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: 在一个类内部,不能定义多个具有 ClassInitialize 特性的方法。
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: 不能定义多个具有 TestCleanup 特性的方法。
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: 不能定义多个具有 TestInitialize 特性的方法。
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- 在泛型非抽象类 {0} 上定义的 TestClass 特性
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- 初始化方法 {0}.{1} 引发异常。{2}。
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- 无法创建类 {0} 的实例。错误: {1}。
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- 测试方法“{0}.{1}”具有多个在其上定义的“{2}”的派生属性。仅允许一个此类属性。
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- 找不到测试类“{0}”的有效构造函数。有效的构造函数为 “public”,但该构造函数无参数或具有一个类型为 “TestContext” 的参数。
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- 无法设置类 {0} 的 TestContext 属性。错误: {1}。
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (因异常而未能获取类型为 {0} 的异常的消息。)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: 类 {0} 没有有效的 TestContext 属性。TestContext 必须是 TestContext 类型并且必须是非静态和公共的。例如: public TestContext TestContext。
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: 在非公共类 {0} 上定义的 TestClass 特性
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- 由于 {2},MSTestAdapter 未能在程序集“{1}”的类“{0}”中发现测试。
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- 无法从测试源“{0}”加载类型。可能无法发现此源中的部分或所有测试。
-错误: {1}
-
-
-
- File does not exist: {0}
- 文件不存在: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: 在类 {0} 中定义的方法 {1} 没有正确的签名。用 [TestMethod] 特性标记的测试方法必须是返回类型为 void 的非静态的公共方法,并且不应采用任何参数。示例: public void Test.Class1.Test()。此外,如果在测试方法中使用同步等待,则返回类型必须为“Task”或“Value Task”。示例: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext 不能为 NULL。
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- 程序集清理方法 {0}.{1} 失败。错误消息: {2}。StackTrace: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- 程序集初始化方法 {0}.{1} 引发异常。{2}: {3}。正在中止测试的执行。
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- 类清理方法 {0}.{1} 失败。错误消息: {2}。堆栈跟踪: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- 类初始化方法 {0}.{1} 引发异常。{2}: {3}。
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- “Execute”方法引发了未经处理的异常。请将此错误报告给属性 '{0}' 的作者。
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- 执行测试时出错。扩展未返回任何结果。如果使用的是扩展 TestMethodAttribute ,请与供应商联系。
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- 方法 {0}。{1}的签名错误。该方法必须是静态的公共方法、不返回值并且不应采用任何参数。此外,如果在方法中使用同步等待,则返回类型必须为“Task”或“Value Task”。
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- 方法 {0}。{1}的签名错误。该方法必须是静态的公共方法,不返回值,并且应采用一个 TestContext 类型的参数。此外,如果在方法中使用同步等待,则返回类型必须为“Task”或“Value Task”。
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}。{1} 的超时属性无效。“超时”必须是大于零的整数值。
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: 不能在方法 {1} 上定义预定义属性 {2}。
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: 对方法 {1} 定义了为 NULL 或为空的自定义属性。自定义属性必须具有有效名称。
-
-
-
- Method {0}.{1} does not exist.
- 方法 {0}.{1} 不存在。
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- 无法找到属性 {0}.TestContext。错误: {1}。
-
-
-
- The {0}.TestContext has incorrect type.
- {0}.TestContext 的类型不正确。
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- 方法 {0}。{1}的签名错误。该方法必须是非静态的公共方法、不返回值并且不应采用任何参数。此外,如果在方法中使用同步等待,则返回类型必须为“Task”或“Value Task”。
-
-
-
- Unable to get type {0}. Error: {1}.
- 无法获取类型 {0}。错误: {1}。
-
-
-
- Test method {0} was not found.
- 未找到测试方法 {0}。
-
-
-
- Debug Trace:
- 调试跟踪:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- 未能获取测试方法 {0}.{1} 引发的异常。
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- 测试方法 {0}.{1} 引发了异常:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0} 对于 UWP 项目,如果在测试中使用 UI 对象,请考虑使用 [UITestMethod] 属性代替 [TestMethod] 属性在 UI 线程中执行测试。
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- 设置“{0}”无效。意外的 XmlAttribute:“{1}”。
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- 设置“{0}”无效。意外的 XmlElement:“{1}”。
-
-
-
- {0} (Data Row {1})
- {0} (数据行 {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- 测试方法 {0}.{1} 上定义的 ExpectedException 属性在构造过程中引发了一个异常。
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- 警告: MSTest V2 适配器不支持 testsettings 文件或 vsmdi 文件。
-
-
-
- TestContext Messages:
- TestContext 消息:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- 为测试类 {0} 调用 Test Cleanup 方法时出错: {1}
-
-
-
- TestCleanup Stack Trace
- TestCleanup 堆栈跟踪
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][发现][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- 已为 {0} 启用测试并行化(工作线程: {1},范围: {2})
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- 为“范围”指定的值“{0}”无效。受支持的范围为 {1}。
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- 为“辅助角色”指定的值“{0}”无效。该值应为非负整数。
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- 未能发现程序集 {0} 中的测试。原因: {1}
-
-
-
- Test '{0}' was canceled
- 测试 '{0}' 已取消
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- 为“ClassCleanupLifecycle”指定的值“{0}”无效。支持的作用域为 {1}。
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- 枚举 {0} 上的 IDataSource 属性时发生异常。{1}": {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- “{0}”:(由于类型“{1}”异常,无法获取异常说明。
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- 引发的异常:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- 获取类型 {0} 自定义属性引发异常(将忽略并使用反射方式): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- 程序集中加载了 MSTestV2 包的较旧版本,如果测试发现依赖于“.runsettings”文件,则它们可能无法发现所有数据测试。
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- 调用的代码引发了捕获的异常,但异常值为 null
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- 从“{0}.{1}”上的属性扩展 IDataSource 行时出现异常: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- 索引 {0} 和 {1} 上的显示名称“{2}”重复。显示名称应是唯一的。
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- 无法序列化“{1}”的索引 {0} 上的数据。通过“IDataSource”提供的所有数据都应可序列化。如果需要测试不可序列化的数据源,请确保在测试程序集上添加“TestDataSourceDiscovery”属性,并将发现选项设置为“DuringExecution”。
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.zh-Hant.xlf b/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.zh-Hant.xlf
deleted file mode 100644
index d247e040da..0000000000
--- a/src/Adapter/MSTest.TestAdapter/Resources/xlf/Resource.zh-Hant.xlf
+++ /dev/null
@@ -1,482 +0,0 @@
-
-
-
-
-
- Assembly cleanup method '{0}.{1}' timed out after {2}ms
- 組件清理方法 '{0}.{1}' 在 {2} 毫秒後已逾時
-
-
-
- Assembly cleanup method '{0}.{1}' was canceled
- 已取消組件清理方法 '{0}.{1}'
-
-
-
- Assembly initialize method '{0}.{1}' timed out after {2}ms
- 組件初始化方法 '{0}.{1}' 在 {2} 毫秒後已逾時
-
-
-
- Assembly initialize method '{0}.{1}' was canceled
- 已取消組件初始化方法 '{0}.{1}'
-
-
-
- Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
-Test expected {2} parameter(s), with types '{3}',
-but received {4} argument(s), with types '{5}'.
- 無法執行測試方法 '{0}.{1}': 測試資料不符合方法參數。計數或類型不同。
-測試預期的 {2} 參數,類型為 '{3}',
-但收到 {4} 引數,類型為 '{5}'。
-
-
-
- Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
- 無法執行測試方法 '{0}.{1}': 方法具有參數,但未定義任何測試來源。使用 '[DataRow]'、'[DynamicData]' 或自訂 'ITestDataSource' 資料來源來提供測試資料。
-
-
-
- Class cleanup method '{0}.{1}' timed out after {2}ms
- 類別清理方法 '{0}.{1}' 在 {2} 毫秒後已逾時
-
-
-
- Class cleanup method '{0}.{1}' was canceled
- 已取消類別清理方法 '{0}.{1}'
-
-
-
- Class initialize method '{0}.{1}' timed out after {2}ms
- 類別初始化方法 '{0}.{1}' 在 {2} 毫秒後已逾時
-
-
-
- Class initialize method '{0}.{1}' was canceled
- 已取消類別初始化方法 '{0}.{1}'
-
-
-
- Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
- 偵測到 '.runsettings' 和 '.testconfig.json' 檔案。請只選取其中一個測試設定檔。
-
-
-
- Test '{0}' timed out after {1}ms
- 測試 '{0}' 在 {1}毫秒後逾時
-
-
-
- The type of the generic parameter '{0}' could not be inferred.
- 無法推斷泛型參數 '{0}' 的類型。
-
-
-
- The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
- 泛型測試方法 '{0}' 沒有自變數,因此無法推斷泛型參數。
-
-
-
- Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
- 發現兩個衝突的泛型參數類型 '{0}'。衝突的類型 '{1}' 且 '{2}'。
-
-
-
- Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
- runsettings 項目 '{1}' 的值 '{0}' 無效,將忽略設定。
-
-
-
- Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
- 非 Windows OS 不支援 Runsettings 項目 '<ExecutionApartmentState>STA</ExecutionApartmentState>'。
-
-
-
- Running tests in any of the provided sources is not supported for the selected platform
- 所選取的平台不支援在任何提供的來源中執行測試
-
-
-
- Test cleanup method '{0}.{1}' timed out after {2}ms
- 測試清理方法 '{0}.{1}' 在 {2} 毫秒後已逾時
-
-
-
- Test cleanup method '{0}.{1}' was canceled
- 已取消測試清理方法 '{0}.{1}'
-
-
-
- Test initialize method '{0}.{1}' timed out after {2}ms
- 測試初始化方法 '{0}.{1}' 在 {2} 毫秒後已逾時
-
-
-
- Test initialize method '{0}.{1}' was canceled
- 已取消測試初始化方法 '{0}.{1}'
-
-
-
- TestCleanup method {0}.{1} threw exception. {2}.
- TestCleanup 方法 {0}.{1} 擲回例外狀況。{2}。
-
-
-
- --- End of inner exception stack trace ---
- --- 已到達內部例外狀況堆疊追蹤的結尾 ---
-
-
-
- UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
- UTA014: {0}: 組件內不可定義一個以上具有 AssemblyCleanup 屬性的方法。
-
-
-
- UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
- UTA013: {0}: 組件內不可定義一個以上具有 AssemblyInitialize 屬性的方法。
-
-
-
- UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
- UTA026: {0}: 類別內不可定義一個以上具有 ClassCleanup 屬性的方法。
-
-
-
- UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
- UTA025: {0}: 類別內不可定義一個以上具有 ClassInitialize 屬性的方法。
-
-
-
- UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
- UTA024: {0}: 不可定義一個以上具有 TestCleanup 屬性的方法。
-
-
-
- UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
- UTA018: {0}: 不可定義一個以上具有 TestInitialize 屬性的方法。
-
-
-
- TestClass attribute defined on generic non-abstract class {0}
- 在一般非抽象類別上定義的 TestClass 屬性 {0}
-
-
-
- Initialization method {0}.{1} threw exception. {2}.
- 初始設定方法 {0}.{1} 擲回例外狀況。{2}。
-
-
-
- Unable to create instance of class {0}. Error: {1}.
- 無法建立類別 {0} 的執行個體。錯誤: {1}。
-
-
-
- The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
- 測試方法 '{0}.{1}' 具有多個衍生自 '{2}' 的屬性根據其定義。只允許一個此類屬性。
-
-
-
- Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
- 找不到測試類別 '{0}' 的有效建構函式。有效的建構函式為 'public' 且無參數或具有一個類型為 'TestContext' 的參數。
-
-
-
- Unable to set TestContext property for the class {0}. Error: {1}.
- 無法設定類別 {0} 的 TestContext 屬性。錯誤: {1}。
-
-
-
- (Failed to get the message for an exception of type {0} due to an exception.)
- (因為發生例外狀況,所以無法取得類型 {0} 之例外狀況的訊息。)
-
-
-
- UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
- UTA031: 類別 {0}不具備有效的 TestContext 屬性。TestContext 必須是 TestContext 類型、必須是非靜態的,而且必須是公用的。例如: public TestContext TestContext。
-
-
-
- UTA001: TestClass attribute defined on non-public class {0}
- UTA001: 在非公用類別 {0} 上定義了 TestClass 屬性
-
-
-
- MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
- MSTestAdapter 無法在組件 '{1}' 的類別 '{0}' 中探索測試,因為 {2}。
-
-
-
- {0}: {1}
- {0}: {1}
-
-
-
- Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
-Error: {1}
- 無法從測試來源 '{0}' 載入類型。有可能無法探索此來源中的部分或所有測試。
-錯誤: {1}
-
-
-
- File does not exist: {0}
- 檔案不存在: {0}
-
-
-
- UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
- UTA007: 類別 {0} 中定義的方法 {1} 沒有正確的簽章。標記 [TestMethod] 屬性的測試方法必須為非靜態、公用、傳回類型為 void,而且不應該接受任何參數。範例: public void Test.Class1.Test()。此外,如果您在測試方法中使用 async-await,則傳回類型必須是 'Task' 或 'ValueTask'。範例: public async Task Test.Class1.Test2()
-
-
-
- TestContext cannot be Null.
- TestContext 不可為 Null。
-
-
-
- Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
- 組件清除方法 {0}.{1} 失敗。錯誤訊息: {2}。堆疊追蹤: {3}
-
-
-
- Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
- 組件初始設定方法 {0}.{1} 擲回例外狀況。{2}: {3}。正在中止測試執行。
-
-
-
- Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
- 類別清除方法 {0}.{1} 失敗。錯誤訊息: {2}。堆疊追蹤: {3}
-
-
-
- Class Initialization method {0}.{1} threw exception. {2}: {3}.
- 類別初始設定方法 {0}.{1} 擲回例外狀況。{2}: {3}。
-
-
-
- An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
-{1}
- 'Execute' 方法擲回未處理的例外狀況。請將此錯誤回報給屬性 '{0}' 的作者。
-{1}
-
-
-
- Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
- 執行測試時發生錯誤。擴充功能未傳回任何結果。如果您使用 TestMethodAttribute 的擴充功能,請連絡廠商。
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- 方法 {0}.{1} 有錯誤的簽章。方法必須為靜態、公用、不傳回值,並且不應該接受任何參數。此外,如果您在方法中使用 async-await,則傳回類型必須是 'Task' 或 'ValueTask'。
-
-
-
- Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- 方法 {0}.{1} 有錯誤的簽章。方法必須為靜態、公用、不傳回值,並且應接受類型為 TestContext 的單一參數。此外,如果您在方法中使用 async-await,則傳回類型必須是 'Task' 或 'ValueTask'。
-
-
-
- UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
- UTA054: {0}。{1} 中具有無效的 Timeout 屬性。逾時必須為大於 0 的整數值。
-
-
-
- UTA023: {0}: Cannot define predefined property {2} on method {1}.
- UTA023: {0}: 不可在方法 {1} 上定義預先定義的屬性 {2}。
-
-
-
- UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
- UTA021: {0}: 在方法 {1} 上定義了 Null 或空白的自訂屬性。自訂屬性的名稱必須有效。
-
-
-
- Method {0}.{1} does not exist.
- 方法 {0}.{1} 不存在。
-
-
-
- Unable to find property {0}.TestContext. Error:{1}.
- 找不到屬性 {0}.TestContext。錯誤: {1}。
-
-
-
- The {0}.TestContext has incorrect type.
- {0}.TestContext 有不正確的類型。
-
-
-
- Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
- 方法 {0}.{1} 有錯誤的簽章。方法必須為非靜態、公用、不傳回值,並且不應該接受任何參數。此外,如果您在方法中使用 async-await,則傳回類型必須是 'Task' 或 'ValueTask'。
-
-
-
- Unable to get type {0}. Error: {1}.
- 無法取得類型 {0}。錯誤: {1}。
-
-
-
- Test method {0} was not found.
- 找不到測試方法 {0}。
-
-
-
- Debug Trace:
- 偵錯追蹤:
-
-
-
- Failed to obtain the exception thrown by test method {0}.{1}.
- 無法取得測試方法 {0}.{1} 所擲回的例外狀況。
-
-
-
- Test method {0}.{1} threw exception:
-{2}
- 測試方法 {0}.{1} 擲回例外狀況:
-{2}
-
-
-
- {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
- {0} 針對 UWP 專案,如果您在測試中使用 UI 物件,請考慮使用 [UITestMethod] 屬性取代 [TestMethod] 在 UI 執行緒中執行測試。
-
-
-
- MSTestAdapterV2
- MSTestAdapterV2
-
-
-
- Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
- 設定 '{0}' 無效。未預期的 XmlAttribute: '{1}'。
-
-
-
- Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
- 設定 '{0}' 無效。未預期的 XmlElement: '{1}'。
-
-
-
- {0} (Data Row {1})
- {0} (資料列 {1})
-
-
-
- The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
-{2}
- 測試方法 {0} 上定義的 ExpectedException 屬性。{1} 在建構期間擲回例外狀況。
-{2}
-
-
-
- Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
- 警告: MSTest V2 配接器不支援 testsettings 檔案 vsmdi 檔案。
-
-
-
- TestContext Messages:
- TestContext 訊息:
-
-
-
- Error calling Test Cleanup method for test class {0}: {1}
- 呼叫測試類別 {0} 的測試清除方法時發生錯誤: {1}
-
-
-
- TestCleanup Stack Trace
- TestCleanup 堆疊追蹤
-
-
-
- [MSTest][Discovery][{0}] {1}
- [MSTest][Discovery][{0}] {1}
-
-
-
- Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
- 已為 {0} 啟用平行測試 (背景工作角色: {1},範圍: {2})
- `Workers` is a setting name that shouldn't be localized. 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
- 為 'Scope' 指定的值 '{0}' 無效。支援的範圍為 {1}。
- 'Scope' is a setting name that shouldn't be localized.
-
-
- Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
- 為 'Workers' 的值 '{0}' 無效。值應為非負整數。
- `Workers` is a setting name that shouldn't be localized.
-
-
- Failed to discover tests from assembly {0}. Reason:{1}
- 無法從組件 {0} 中探索測試。原因:{1}
-
-
-
- Test '{0}' was canceled
- 已取消測試 '{0}'
-
-
-
- Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
- 為 'ClassCleanupLifecycle' 指定的值 '{0}' 無效。支援的範圍為 {1}。
- 'ClassCleanupLifecycle' is a setting name that shouldn't be localized.
-
-
- Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
- 列舉「{0}.{1}」上的 IDataSource 屬性時發生例外狀況: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: Exception details
-
-
- "{0}": (Failed to get exception description due to an exception of type "{1}".
- 「{0}」: (因為類型「{1}」的例外狀況而無法取得例外狀況描述。
- {0}: Type of the original exception that we're trying to get the description of.
-{1}: Thrown exception
-
-
- Exceptions thrown:
- 擲回的例外狀況數:
- This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
-
-
- Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
- 取得類型 {0} 擲回例外狀況的自訂屬性 (將會略過並使用反映方式): {1}
- {0}: Attribute full type name.
-{1}: Exception description
-
-
- An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
- 元件中已載入舊版的 MSTestV2 套件,如果測試探索相依於 '.runsettings' 檔案,則測試探索可能無法探索所有資料測試。
-
-
-
- The called code threw an exception that was caught, but the exception value was null
- 被呼叫的程式碼擲回攔截到的例外狀況,但例外狀況值為 Null
-
-
-
- Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
- 從「{0}.{1}」上的屬性展開 IDataSource 資料列時發生例外狀況: {2}
- {0}: TypeName with namespace,
-{1}: Method name,
-{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
-
-
- Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
- 索引 {0} 和 {1} 上的顯示名稱「{2}」重複。顯示名稱必須是唯一的。
- {0}, {1}: Zero based index if an element inside of an array
-{2}: Test display name.
-
-
- Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
- 無法序列化「{1}"」索引 {0} 上的資料。透過「IDataSource」提供的所有資料應可序列化。如果您需要測試不可序列化的資料來源,請務必在測試元件上新增「TestDataSourceDiscovery」屬性,並將探索選項設定為「DuringExecution」。
- {0}: Zero based index if an element inside of an array,
-{1}: Test name
-
-
-
-
\ No newline at end of file
diff --git a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/BridgedTraceLogger.cs b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/BridgedTraceLogger.cs
index e5332169f0..86cdf28df1 100644
--- a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/BridgedTraceLogger.cs
+++ b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/BridgedTraceLogger.cs
@@ -16,12 +16,27 @@ public BridgedTraceLogger(ILogger logger)
=> _logger = logger;
public void LogError(string format, params object?[] args)
- => _logger.LogError(string.Format(CultureInfo.CurrentCulture, format, args));
+ {
+ if (_logger.IsEnabled(LogLevel.Error))
+ {
+ _logger.LogError(string.Format(CultureInfo.CurrentCulture, format, args));
+ }
+ }
public void LogInfo(string format, params object?[] args)
- => _logger.LogInformation(string.Format(CultureInfo.CurrentCulture, format, args));
+ {
+ if (_logger.IsEnabled(LogLevel.Information))
+ {
+ _logger.LogInformation(string.Format(CultureInfo.CurrentCulture, format, args));
+ }
+ }
public void LogWarning(string format, params object?[] args)
- => _logger.LogWarning(string.Format(CultureInfo.CurrentCulture, format, args));
+ {
+ if (_logger.IsEnabled(LogLevel.Warning))
+ {
+ _logger.LogWarning(string.Format(CultureInfo.CurrentCulture, format, args));
+ }
+ }
}
#endif
diff --git a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestBannerCapability.cs b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestBannerCapability.cs
index 3ebc32ee6d..f00335287c 100644
--- a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestBannerCapability.cs
+++ b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestBannerCapability.cs
@@ -7,8 +7,6 @@
namespace Microsoft.VisualStudio.TestTools.UnitTesting;
-#pragma warning disable TPEXP // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
-
[SuppressMessage("ApiDesign", "RS0030:Do not use banned APIs", Justification = "We can use MTP from this folder")]
internal sealed class MSTestBannerCapability : IBannerMessageOwnerCapability
{
diff --git a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestBridgedTestFramework.cs b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestBridgedTestFramework.cs
index e529cae9cb..d09665cf53 100644
--- a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestBridgedTestFramework.cs
+++ b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestBridgedTestFramework.cs
@@ -53,7 +53,7 @@ protected override async Task SynchronizedRunTestsAsync(VSTestRunTestExecutionRe
PlatformServiceProvider.Instance.AdapterTraceLogger = new BridgedTraceLogger(_loggerFactory.CreateLogger("mstest-trace"));
MSTestExecutor testExecutor = new(cancellationToken);
- await testExecutor.RunTestsAsync(request.AssemblyPaths, request.RunContext, request.FrameworkHandle, _configuration);
+ await testExecutor.RunTestsAsync(request.AssemblyPaths, request.RunContext, request.FrameworkHandle, _configuration).ConfigureAwait(false);
}
}
#endif
diff --git a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestGracefulStopTestExecutionCapability.cs b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestGracefulStopTestExecutionCapability.cs
index ea80488cb6..01bce0f496 100644
--- a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestGracefulStopTestExecutionCapability.cs
+++ b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/MSTestGracefulStopTestExecutionCapability.cs
@@ -7,11 +7,8 @@
namespace Microsoft.VisualStudio.TestTools.UnitTesting;
-#pragma warning disable TPEXP // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
-
[SuppressMessage("ApiDesign", "RS0030:Do not use banned APIs", Justification = "We can use MTP from this folder")]
internal sealed class MSTestGracefulStopTestExecutionCapability : IGracefulStopTestExecutionCapability
-#pragma warning restore TPEXP // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
{
private MSTestGracefulStopTestExecutionCapability()
{
diff --git a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/TestApplicationBuilderExtensions.cs b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/TestApplicationBuilderExtensions.cs
index 326c85f88f..4166a55daa 100644
--- a/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/TestApplicationBuilderExtensions.cs
+++ b/src/Adapter/MSTest.TestAdapter/TestingPlatformAdapter/TestApplicationBuilderExtensions.cs
@@ -39,17 +39,13 @@ public static void AddMSTest(this ITestApplicationBuilder testApplicationBuilder
testApplicationBuilder.AddRunSettingsService(extension);
testApplicationBuilder.AddTestCaseFilterService(extension);
testApplicationBuilder.AddTestRunParametersService(extension);
-#pragma warning disable TPEXP // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
testApplicationBuilder.AddMaximumFailedTestsService(extension);
-#pragma warning restore TPEXP // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
testApplicationBuilder.AddRunSettingsEnvironmentVariableProvider(extension);
testApplicationBuilder.RegisterTestFramework(
serviceProvider => new TestFrameworkCapabilities(
new MSTestCapabilities(),
-#pragma warning disable TPEXP // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
new MSTestBannerCapability(serviceProvider.GetRequiredService()),
MSTestGracefulStopTestExecutionCapability.Instance),
-#pragma warning restore TPEXP // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
(capabilities, serviceProvider) => new MSTestBridgedTestFramework(extension, getTestAssemblies, serviceProvider, capabilities));
}
}
diff --git a/src/Adapter/MSTest.TestAdapter/VSTestAdapter/MSTestDiscoverer.cs b/src/Adapter/MSTest.TestAdapter/VSTestAdapter/MSTestDiscoverer.cs
index 7fcb8c825d..27fe223424 100644
--- a/src/Adapter/MSTest.TestAdapter/VSTestAdapter/MSTestDiscoverer.cs
+++ b/src/Adapter/MSTest.TestAdapter/VSTestAdapter/MSTestDiscoverer.cs
@@ -11,15 +11,15 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
///
/// Contains the discovery logic for this adapter.
///
-[DefaultExecutorUri(Constants.ExecutorUriString)]
+[DefaultExecutorUri(MSTestAdapter.PlatformServices.EngineConstants.ExecutorUriString)]
[FileExtension(".xap")]
[FileExtension(".appx")]
[FileExtension(".dll")]
[FileExtension(".exe")]
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class MSTestDiscoverer : ITestDiscoverer
{
diff --git a/src/Adapter/MSTest.TestAdapter/VSTestAdapter/MSTestExecutor.cs b/src/Adapter/MSTest.TestAdapter/VSTestAdapter/MSTestExecutor.cs
index 35f125d683..7f041e0559 100644
--- a/src/Adapter/MSTest.TestAdapter/VSTestAdapter/MSTestExecutor.cs
+++ b/src/Adapter/MSTest.TestAdapter/VSTestAdapter/MSTestExecutor.cs
@@ -2,21 +2,24 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution;
+using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
+using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Resources;
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
///
/// Contains the execution logic for this adapter.
///
-[ExtensionUri(Constants.ExecutorUriString)]
+[ExtensionUri(EngineConstants.ExecutorUriString)]
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class MSTestExecutor : ITestExecutor
{
@@ -47,6 +50,20 @@ internal MSTestExecutor(CancellationToken cancellationToken)
///
public TestExecutionManager TestExecutionManager { get; protected set; }
+#pragma warning disable CA2255 // The 'ModuleInitializer' attribute should not be used in libraries
+ [ModuleInitializer]
+#pragma warning restore CA2255 // The 'ModuleInitializer' attribute should not be used in libraries
+ internal static void EnsureAdapterAndFrameworkVersions()
+ {
+ string? adapterVersion = typeof(MSTestExecutor).Assembly.GetCustomAttribute()?.InformationalVersion;
+ string? frameworkVersion = typeof(TestMethodAttribute).Assembly.GetCustomAttribute()?.InformationalVersion;
+ if (adapterVersion is not null && frameworkVersion is not null
+ && adapterVersion != frameworkVersion)
+ {
+ throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, Resource.VersionMismatchBetweenAdapterAndFramework, adapterVersion, frameworkVersion));
+ }
+ }
+
///
/// Runs the tests.
///
@@ -82,7 +99,7 @@ internal async Task RunTestsAsync(IEnumerable? tests, IRunContext? run
return;
}
- await RunTestsFromRightContextAsync(frameworkHandle, async testRunToken => await TestExecutionManager.RunTestsAsync(tests, runContext, frameworkHandle, testRunToken));
+ await RunTestsFromRightContextAsync(frameworkHandle, async testRunToken => await TestExecutionManager.RunTestsAsync(tests, runContext, frameworkHandle, testRunToken).ConfigureAwait(false)).ConfigureAwait(false);
}
internal async Task RunTestsAsync(IEnumerable? sources, IRunContext? runContext, IFrameworkHandle? frameworkHandle, IConfiguration? configuration)
@@ -96,7 +113,7 @@ internal async Task RunTestsAsync(IEnumerable? sources, IRunContext? run
}
sources = PlatformServiceProvider.Instance.TestSource.GetTestSources(sources);
- await RunTestsFromRightContextAsync(frameworkHandle, async testRunToken => await TestExecutionManager.RunTestsAsync(sources, runContext, frameworkHandle, testRunToken));
+ await RunTestsFromRightContextAsync(frameworkHandle, async testRunToken => await TestExecutionManager.RunTestsAsync(sources, runContext, frameworkHandle, testRunToken).ConfigureAwait(false)).ConfigureAwait(false);
}
///
@@ -126,7 +143,7 @@ private async Task RunTestsFromRightContextAsync(IFrameworkHandle frameworkHandl
try
{
var threadTask = Task.Run(entryPointThread.Join, _cancellationToken);
- await threadTask;
+ await threadTask.ConfigureAwait(false);
}
catch (Exception ex)
{
@@ -142,7 +159,7 @@ private async Task RunTestsFromRightContextAsync(IFrameworkHandle frameworkHandl
frameworkHandle.SendMessage(TestMessageLevel.Warning, Resource.STAIsOnlySupportedOnWindowsWarning);
}
- await DoRunTestsAsync();
+ await DoRunTestsAsync().ConfigureAwait(false);
}
// Local functions
@@ -152,8 +169,8 @@ async Task DoRunTestsAsync()
{
try
{
- _testRunCancellationToken = new TestRunCancellationToken();
- await runTestsAction(_testRunCancellationToken);
+ _testRunCancellationToken = new TestRunCancellationToken(_cancellationToken);
+ await runTestsAction(_testRunCancellationToken).ConfigureAwait(false);
}
finally
{
diff --git a/src/Adapter/MSTest.TestAdapter/buildTransitive/common/MSTest.TestAdapter.props b/src/Adapter/MSTest.TestAdapter/buildTransitive/common/MSTest.TestAdapter.props
index 639ce61536..1e14ef753e 100644
--- a/src/Adapter/MSTest.TestAdapter/buildTransitive/common/MSTest.TestAdapter.props
+++ b/src/Adapter/MSTest.TestAdapter/buildTransitive/common/MSTest.TestAdapter.props
@@ -2,6 +2,7 @@
true
+ true
diff --git a/src/Adapter/MSTest.TestAdapter/buildTransitive/common/MSTest.TestAdapter.targets b/src/Adapter/MSTest.TestAdapter/buildTransitive/common/MSTest.TestAdapter.targets
index 63ad3b5b08..06b5afe773 100644
--- a/src/Adapter/MSTest.TestAdapter/buildTransitive/common/MSTest.TestAdapter.targets
+++ b/src/Adapter/MSTest.TestAdapter/buildTransitive/common/MSTest.TestAdapter.targets
@@ -1,4 +1,10 @@
-
+
+
+
+
+
@@ -45,6 +51,10 @@
+
+
+
+
diff --git a/src/Adapter/MSTest.TestAdapter/buildTransitive/uwp/MSTest.TestAdapter.props b/src/Adapter/MSTest.TestAdapter/buildTransitive/uwp/MSTest.TestAdapter.props
index 259e47a969..d38f1c2bdf 100644
--- a/src/Adapter/MSTest.TestAdapter/buildTransitive/uwp/MSTest.TestAdapter.props
+++ b/src/Adapter/MSTest.TestAdapter/buildTransitive/uwp/MSTest.TestAdapter.props
@@ -2,6 +2,7 @@
true
+ true
diff --git a/src/Adapter/MSTest.TestAdapter/buildTransitive/uwp/MSTest.TestAdapter.targets b/src/Adapter/MSTest.TestAdapter/buildTransitive/uwp/MSTest.TestAdapter.targets
index e8d37601f3..46bf3f788d 100644
--- a/src/Adapter/MSTest.TestAdapter/buildTransitive/uwp/MSTest.TestAdapter.targets
+++ b/src/Adapter/MSTest.TestAdapter/buildTransitive/uwp/MSTest.TestAdapter.targets
@@ -27,6 +27,10 @@
+
+
+
+
@@ -40,15 +40,16 @@
+
-
-
- true
-
-
+
+
+
+
+
@@ -60,22 +61,9 @@
-
-
- True
- True
- Resource.resx
-
-
- ResXFileCodeGenerator
- Resource.Designer.cs
- Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices
- Designer
-
-
-
+
diff --git a/src/Adapter/MSTest.TestAdapter/MSTestSettings.cs b/src/Adapter/MSTestAdapter.PlatformServices/MSTestSettings.cs
similarity index 97%
rename from src/Adapter/MSTest.TestAdapter/MSTestSettings.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/MSTestSettings.cs
index 65381bcc72..1637d7f3f0 100644
--- a/src/Adapter/MSTest.TestAdapter/MSTestSettings.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/MSTestSettings.cs
@@ -2,15 +2,17 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
-using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
#if !WINDOWS_UWP
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
#endif
+using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities;
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using ExecutionScope = Microsoft.VisualStudio.TestTools.UnitTesting.ExecutionScope;
+
namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
///
@@ -18,9 +20,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
///
[Serializable]
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class MSTestSettings
{
@@ -260,9 +262,6 @@ public static void PopulateSettings(MSTestSettings settings)
#if !WINDOWS_UWP
private static bool IsRunSettingsFileHasMSTestSettings(string? runSettingsXml)
- => IsRunSettingsFileHasSettingName(runSettingsXml, SettingsName) || IsRunSettingsFileHasSettingName(runSettingsXml, SettingsNameAlias);
-
- private static bool IsRunSettingsFileHasSettingName(string? runSettingsXml, string SettingName)
{
if (StringEx.IsNullOrWhiteSpace(runSettingsXml))
{
@@ -277,7 +276,8 @@ private static bool IsRunSettingsFileHasSettingName(string? runSettingsXml, stri
reader.ReadToNextElement();
// Read till we reach nodeName element or reach EOF
- while (!string.Equals(reader.Name, SettingName, StringComparison.OrdinalIgnoreCase)
+ while (!string.Equals(reader.Name, SettingsName, StringComparison.OrdinalIgnoreCase)
+ && !string.Equals(reader.Name, SettingsNameAlias, StringComparison.OrdinalIgnoreCase)
&& !reader.EOF)
{
reader.SkipToNextElement();
@@ -308,6 +308,8 @@ internal static void PopulateSettings(IDiscoveryContext? context, IMessageLogger
var settings = new MSTestSettings();
var runConfigurationSettings = RunConfigurationSettings.PopulateSettings(context);
+ // We have runsettings, but we don't have testconfig.
+ // Just use runsettings.
#if !WINDOWS_UWP
if (!StringEx.IsNullOrEmpty(context?.RunSettings?.SettingsXml)
&& configuration?["mstest"] is null)
@@ -495,7 +497,7 @@ private static MSTestSettings ToSettings(XmlReader reader, IMessageLogger? logge
CultureInfo.CurrentCulture,
Resource.InvalidClassCleanupLifecycleValue,
value,
- string.Join(", ", EnumPolyfill.GetNames())));
+ string.Join(", ", Enum.GetNames())));
break;
}
@@ -822,7 +824,7 @@ private static void SetParallelSettings(XmlReader reader, MSTestSettings setting
CultureInfo.CurrentCulture,
Resource.InvalidParallelScopeValue,
value,
- string.Join(", ", EnumPolyfill.GetNames())));
+ string.Join(", ", Enum.GetNames())));
break;
}
@@ -833,8 +835,8 @@ private static void SetParallelSettings(XmlReader reader, MSTestSettings setting
string.Format(
CultureInfo.CurrentCulture,
Resource.InvalidSettingsXmlElement,
- ParallelizeSettingsName,
- reader.Name));
+ reader.Name,
+ ParallelizeSettingsName));
}
}
}
@@ -849,7 +851,7 @@ private static void SetParallelSettings(XmlReader reader, MSTestSettings setting
private static bool TryParseEnum(string value, out T result)
where T : struct, Enum
=> Enum.TryParse(value, true, out result)
- && EnumPolyfill.IsDefined(result);
+ && Enum.IsDefined(result);
private static void SetGlobalSettings(
[StringSyntax(StringSyntaxAttribute.Xml, nameof(runsettingsXml))] string runsettingsXml,
@@ -978,7 +980,7 @@ internal static void SetSettingsFromConfig(IConfiguration configuration, IMessag
CultureInfo.CurrentCulture,
Resource.InvalidClassCleanupLifecycleValue,
classCleanupLifecycle,
- string.Join(", ", EnumPolyfill.GetNames())));
+ string.Join(", ", Enum.GetNames())));
}
settings.ClassCleanupLifecycle = lifecycle;
@@ -992,9 +994,9 @@ internal static void SetSettingsFromConfig(IConfiguration configuration, IMessag
: parallelWorkers > 0
? parallelWorkers
: throw new AdapterSettingsException(string.Format(
- CultureInfo.CurrentCulture,
- Resource.InvalidParallelWorkersValue,
- workers))
+ CultureInfo.CurrentCulture,
+ Resource.InvalidParallelWorkersValue,
+ workers))
: throw new AdapterSettingsException(string.Format(
CultureInfo.CurrentCulture,
Resource.InvalidParallelWorkersValue,
@@ -1011,7 +1013,7 @@ internal static void SetSettingsFromConfig(IConfiguration configuration, IMessag
CultureInfo.CurrentCulture,
Resource.InvalidParallelScopeValue,
value,
- string.Join(", ", EnumPolyfill.GetNames())));
+ string.Join(", ", Enum.GetNames())));
}
settings.ParallelizationScope = scope;
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/AdapterSettingsException.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/AdapterSettingsException.cs
similarity index 100%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/AdapterSettingsException.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/AdapterSettingsException.cs
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/DynamicDataType.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/DynamicDataType.cs
similarity index 75%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/DynamicDataType.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/DynamicDataType.cs
index 572a628955..6046f3dfd8 100644
--- a/src/Adapter/MSTest.TestAdapter/ObjectModel/DynamicDataType.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/DynamicDataType.cs
@@ -13,13 +13,8 @@ internal enum DynamicDataType : int
///
None = 0,
- ///
- /// Dynamic data from .
- ///
- DataSourceAttribute = 1,
-
///
/// Dynamic data from .
///
- ITestDataSource = 2,
+ ITestDataSource = 1,
}
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/FixtureTestResult.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/FixtureTestResult.cs
similarity index 100%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/FixtureTestResult.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/FixtureTestResult.cs
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/StackTraceInformation.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/StackTraceInformation.cs
similarity index 100%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/StackTraceInformation.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/StackTraceInformation.cs
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/TestAssemblySettings.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TestAssemblySettings.cs
similarity index 92%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/TestAssemblySettings.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TestAssemblySettings.cs
index 5e9a68270d..8854d53de3 100644
--- a/src/Adapter/MSTest.TestAdapter/ObjectModel/TestAssemblySettings.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TestAssemblySettings.cs
@@ -3,6 +3,8 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using ExecutionScope = Microsoft.VisualStudio.TestTools.UnitTesting.ExecutionScope;
+
namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
[Serializable]
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/TestFailedException.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TestFailedException.cs
similarity index 100%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/TestFailedException.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TestFailedException.cs
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/TestMethod.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TestMethod.cs
similarity index 90%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/TestMethod.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TestMethod.cs
index 2bb1e1a1b6..a9c0f1e450 100644
--- a/src/Adapter/MSTest.TestAdapter/ObjectModel/TestMethod.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TestMethod.cs
@@ -16,9 +16,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
/// TestMethod contains information about a unit test method that needs to be executed.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
[Serializable]
public sealed class TestMethod : ITestMethod
@@ -89,7 +89,7 @@ internal TestMethod(string? managedTypeName, string? managedMethodName, string?[
///
public string? DeclaringAssemblyName
{
- get => field;
+ get;
set
{
@@ -106,7 +106,7 @@ public string? DeclaringAssemblyName
///
public string? DeclaringClassFullName
{
- get => field;
+ get;
set
{
@@ -147,6 +147,15 @@ public string? DeclaringClassFullName
///
internal string?[]? SerializedData { get; set; }
+ // This holds user types that may not be serializable.
+ // If app domains are enabled, we have no choice other than losing the original data.
+ // In that case, we fallback to deserializing the SerializedData.
+ [field: NonSerialized]
+ internal object?[]? ActualData { get; set; }
+
+ [field: NonSerialized]
+ internal MethodInfo? MethodInfo { get; set; }
+
///
/// Gets or sets the test data source ignore message.
///
@@ -161,14 +170,9 @@ public string? DeclaringClassFullName
internal string? TestGroup { get; set; }
///
- /// Gets the display name set during discovery.
+ /// Gets or sets the display name set during discovery.
///
- internal string DisplayName { get; }
-
- internal string UniqueName
- => HasManagedMethodAndTypeProperties
- ? $"{ManagedTypeName}.{ManagedMethodName}->{string.Join(", ", SerializedData ?? [])}"
- : $"{FullClassName}.{Name}->{string.Join(", ", SerializedData ?? [])}";
+ internal string DisplayName { get; set; }
internal TestMethod Clone() => (TestMethod)MemberwiseClone();
}
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/TypeInspectionException.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TypeInspectionException.cs
similarity index 100%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/TypeInspectionException.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/TypeInspectionException.cs
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/UnitTestElement.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/UnitTestElement.cs
similarity index 82%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/UnitTestElement.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/UnitTestElement.cs
index 54bcc8fb98..a84baae914 100644
--- a/src/Adapter/MSTest.TestAdapter/ObjectModel/UnitTestElement.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/UnitTestElement.cs
@@ -3,6 +3,7 @@
using Microsoft.TestPlatform.AdapterUtilities;
using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions;
+using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -61,6 +62,7 @@ public UnitTestElement(TestMethod testMethod)
///
/// Gets or sets the DisplayName.
///
+ // TODO: Remove this property and simply use TestMethod.DisplayName
public string? DisplayName { get; set; }
///
@@ -103,48 +105,49 @@ internal TestCase ToTestCase()
{
// This causes compatibility problems with older runners.
// string testFullName = this.TestMethod.HasManagedMethodAndTypeProperties
- // ? string.Format(CultureInfo.InvariantCulture, "{0}.{1}", this.TestMethod.ManagedTypeName, this.TestMethod.ManagedMethodName)
- // : string.Format(CultureInfo.InvariantCulture, "{0}.{1}", this.TestMethod.FullClassName, this.TestMethod.Name);
- string testFullName = string.Format(CultureInfo.InvariantCulture, "{0}.{1}", TestMethod.FullClassName, TestMethod.Name);
+ // ? $"{TestMethod.ManagedTypeName}.{TestMethod.ManagedMethodName}"
+ // : $"{TestMethod.FullClassName}.{TestMethod.Name}";
+ string testFullName = $"{TestMethod.FullClassName}.{TestMethod.Name}";
- TestCase testCase = new(testFullName, Constants.ExecutorUri, TestMethod.AssemblyName)
+ TestCase testCase = new(testFullName, EngineConstants.ExecutorUri, TestMethod.AssemblyName)
{
DisplayName = GetDisplayName(),
+ LocalExtensionData = this,
};
if (TestMethod.HasManagedMethodAndTypeProperties)
{
testCase.SetPropertyValue(TestCaseExtensions.ManagedTypeProperty, TestMethod.ManagedTypeName);
testCase.SetPropertyValue(TestCaseExtensions.ManagedMethodProperty, TestMethod.ManagedMethodName);
- testCase.SetPropertyValue(Constants.TestClassNameProperty, TestMethod.ManagedTypeName);
+ testCase.SetPropertyValue(EngineConstants.TestClassNameProperty, TestMethod.ManagedTypeName);
}
else
{
- testCase.SetPropertyValue(Constants.TestClassNameProperty, TestMethod.FullClassName);
+ testCase.SetPropertyValue(EngineConstants.TestClassNameProperty, TestMethod.FullClassName);
}
IReadOnlyCollection hierarchy = TestMethod.Hierarchy;
if (hierarchy is { Count: > 0 })
{
- testCase.SetHierarchy(hierarchy.ToArray());
+ testCase.SetHierarchy([.. hierarchy]);
}
// Set declaring type if present so the correct method info can be retrieved
if (TestMethod.DeclaringClassFullName != null)
{
- testCase.SetPropertyValue(Constants.DeclaringClassNameProperty, TestMethod.DeclaringClassFullName);
+ testCase.SetPropertyValue(EngineConstants.DeclaringClassNameProperty, TestMethod.DeclaringClassFullName);
}
// Set only if some test category is present
if (TestCategory is { Length: > 0 })
{
- testCase.SetPropertyValue(Constants.TestCategoryProperty, TestCategory);
+ testCase.SetPropertyValue(EngineConstants.TestCategoryProperty, TestCategory);
}
// Set priority if present
if (Priority != null)
{
- testCase.SetPropertyValue(Constants.PriorityProperty, Priority.Value);
+ testCase.SetPropertyValue(EngineConstants.PriorityProperty, Priority.Value);
}
if (Traits is { Length: > 0 })
@@ -154,34 +157,29 @@ internal TestCase ToTestCase()
if (!StringEx.IsNullOrEmpty(CssIteration))
{
- testCase.SetPropertyValue(Constants.CssIterationProperty, CssIteration);
+ testCase.SetPropertyValue(EngineConstants.CssIterationProperty, CssIteration);
}
if (!StringEx.IsNullOrEmpty(CssProjectStructure))
{
- testCase.SetPropertyValue(Constants.CssProjectStructureProperty, CssProjectStructure);
- }
-
- if (!StringEx.IsNullOrEmpty(Description))
- {
- testCase.SetPropertyValue(Constants.DescriptionProperty, Description);
+ testCase.SetPropertyValue(EngineConstants.CssProjectStructureProperty, CssProjectStructure);
}
if (WorkItemIds != null)
{
- testCase.SetPropertyValue(Constants.WorkItemIdsProperty, WorkItemIds);
+ testCase.SetPropertyValue(EngineConstants.WorkItemIdsProperty, WorkItemIds);
}
// The list of items to deploy before running this test.
if (DeploymentItems is { Length: > 0 })
{
- testCase.SetPropertyValue(Constants.DeploymentItemsProperty, DeploymentItems);
+ testCase.SetPropertyValue(EngineConstants.DeploymentItemsProperty, DeploymentItems);
}
// Set the Do not parallelize state if present
if (DoNotParallelize)
{
- testCase.SetPropertyValue(Constants.DoNotParallelizeProperty, DoNotParallelize);
+ testCase.SetPropertyValue(EngineConstants.DoNotParallelizeProperty, DoNotParallelize);
}
// Store resolved data if any
@@ -189,12 +187,12 @@ internal TestCase ToTestCase()
{
string?[]? data = TestMethod.SerializedData;
- testCase.SetPropertyValue(Constants.TestDynamicDataTypeProperty, (int)TestMethod.DataType);
- testCase.SetPropertyValue(Constants.TestDynamicDataProperty, data);
+ testCase.SetPropertyValue(EngineConstants.TestDynamicDataTypeProperty, (int)TestMethod.DataType);
+ testCase.SetPropertyValue(EngineConstants.TestDynamicDataProperty, data);
// VSTest serialization doesn't handle null so instead don't set the property so that it's deserialized as null
if (TestMethod.TestDataSourceIgnoreMessage is not null)
{
- testCase.SetPropertyValue(Constants.TestDataSourceIgnoreMessageProperty, TestMethod.TestDataSourceIgnoreMessage);
+ testCase.SetPropertyValue(EngineConstants.TestDataSourceIgnoreMessageProperty, TestMethod.TestDataSourceIgnoreMessage);
}
}
@@ -205,7 +203,7 @@ internal TestCase ToTestCase()
private void SetTestCaseId(TestCase testCase, string testFullName)
{
- testCase.SetPropertyValue(Constants.TestIdGenerationStrategyProperty, (int)TestMethod.TestIdGenerationStrategy);
+ testCase.SetPropertyValue(EngineConstants.TestIdGenerationStrategyProperty, (int)TestMethod.TestIdGenerationStrategy);
switch (TestMethod.TestIdGenerationStrategy)
{
@@ -277,7 +275,7 @@ private Guid GenerateSerializedDataStrategyTestId(string testFullName)
{
var idProvider = new TestIdProvider();
- idProvider.AppendString(Constants.ExecutorUriString);
+ idProvider.AppendString(EngineConstants.ExecutorUriString);
// Below comment is copied over from Test Platform.
// If source is a file name then just use the filename for the identifier since the file might have moved between
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/UnitTestOutcome.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/UnitTestOutcome.cs
similarity index 89%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/UnitTestOutcome.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/UnitTestOutcome.cs
index a519c454eb..4b8eaddc68 100644
--- a/src/Adapter/MSTest.TestAdapter/ObjectModel/UnitTestOutcome.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/UnitTestOutcome.cs
@@ -7,9 +7,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
/// Outcome of a test.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public enum UnitTestOutcome : int
{
diff --git a/src/Adapter/MSTest.TestAdapter/ObjectModel/UnitTestResult.cs b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/UnitTestResult.cs
similarity index 96%
rename from src/Adapter/MSTest.TestAdapter/ObjectModel/UnitTestResult.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/UnitTestResult.cs
index c317fa9dde..251e6df0e9 100644
--- a/src/Adapter/MSTest.TestAdapter/ObjectModel/UnitTestResult.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/ObjectModel/UnitTestResult.cs
@@ -11,9 +11,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel;
[Serializable]
[DebuggerDisplay("{DisplayName} ({Outcome})")]
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class UnitTestResult
{
diff --git a/src/Adapter/MSTest.TestAdapter/PlatformServiceProvider.cs b/src/Adapter/MSTestAdapter.PlatformServices/PlatformServiceProvider.cs
similarity index 92%
rename from src/Adapter/MSTest.TestAdapter/PlatformServiceProvider.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/PlatformServiceProvider.cs
index 21b7acea5b..755127a1eb 100644
--- a/src/Adapter/MSTest.TestAdapter/PlatformServiceProvider.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/PlatformServiceProvider.cs
@@ -15,8 +15,6 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
///
internal sealed class PlatformServiceProvider : IPlatformServiceProvider
{
- private static readonly Action CancelDelegate = static state => ((TestContextImplementation)state!).Context.CancellationTokenSource.Cancel();
-
///
/// Initializes a new instance of the class - a singleton.
///
@@ -194,9 +192,6 @@ public ITestSourceHost CreateTestSourceHost(
///
/// The test method.
///
- ///
- /// The writer instance for logging.
- ///
///
/// The default set of properties the test context needs to be filled with.
///
@@ -208,10 +203,9 @@ public ITestSourceHost CreateTestSourceHost(
///
/// This was required for compatibility reasons since the TestContext object that the V1 adapter had for desktop is not .Net Core compliant.
///
- public ITestContext GetTestContext(ITestMethod testMethod, StringWriter writer, IDictionary properties, IMessageLogger messageLogger, UTF.UnitTestOutcome outcome)
+ public ITestContext GetTestContext(ITestMethod testMethod, IDictionary properties, IMessageLogger messageLogger, UTF.UnitTestOutcome outcome)
{
- var testContextImplementation = new TestContextImplementation(testMethod, writer, properties, messageLogger);
- TestRunCancellationToken?.Register(CancelDelegate, testContextImplementation);
+ var testContextImplementation = new TestContextImplementation(testMethod, properties, messageLogger, TestRunCancellationToken);
testContextImplementation.SetOutcome(outcome);
return testContextImplementation;
}
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/PublicAPI/PublicAPI.Shipped.txt b/src/Adapter/MSTestAdapter.PlatformServices/PublicAPI/PublicAPI.Shipped.txt
index 6a36504523..d60473368b 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/PublicAPI/PublicAPI.Shipped.txt
+++ b/src/Adapter/MSTestAdapter.PlatformServices/PublicAPI/PublicAPI.Shipped.txt
@@ -1,4 +1,132 @@
#nullable enable
+const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.TimeoutWhenNotSet = 0 -> int
+const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.SettingsName = "MSTest" -> string!
+const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.SettingsNameAlias = "MSTestV2" -> string!
+const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.TotalHierarchyLevels = 4 -> int
+const Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.SettingsName = "RunConfiguration" -> string!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.DebugTrace.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.Dispose() -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.GetAndClearDebugTrace() -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.GetAndClearStandardError() -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.GetAndClearStandardOutput() -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.LogMessageListener(bool captureDebugTraces) -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.StandardError.get -> string!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.LogMessageListener.StandardOutput.get -> string!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.AssemblyCleanupMethod.get -> System.Reflection.MethodInfo?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.AssemblyInitializationException.get -> System.Exception?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.AssemblyInitializeMethod.get -> System.Reflection.MethodInfo?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.HasExecutableCleanupMethod.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.IsAssemblyInitializeExecuted.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.RunAssemblyCleanup() -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo.RunAssemblyInitialize(Microsoft.VisualStudio.TestTools.UnitTesting.TestContext! testContext) -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseClassCleanupMethodsStack.get -> System.Collections.Generic.Stack!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseClassInitAndCleanupMethods.get -> System.Collections.Generic.Queue!>!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseTestCleanupMethodsQueue.get -> System.Collections.Generic.Queue!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.BaseTestInitializeMethodsQueue.get -> System.Collections.Generic.Queue!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassAttribute.get -> Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassCleanupException.get -> System.Exception?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassCleanupMethod.get -> System.Reflection.MethodInfo?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassInitializationException.get -> System.Exception?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassInitializeMethod.get -> System.Reflection.MethodInfo?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.ClassType.get -> System.Type!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.Constructor.get -> System.Reflection.ConstructorInfo!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.HasExecutableCleanupMethod.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.IsClassCleanupExecuted.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.IsClassInitializeExecuted.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.Parent.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestAssemblyInfo!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.RunClassCleanup(Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior classCleanupLifecycle = Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior.EndOfAssembly) -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.RunClassInitialize(Microsoft.VisualStudio.TestTools.UnitTesting.TestContext! testContext) -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.TestCleanupMethod.get -> System.Reflection.MethodInfo?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.TestContextProperty.get -> System.Reflection.PropertyInfo?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestClassInfo.TestInitializeMethod.get -> System.Reflection.MethodInfo?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager.RunTests(System.Collections.Generic.IEnumerable! tests, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IRunContext? runContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IFrameworkHandle! frameworkHandle, Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken! runCancellationToken) -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager.RunTests(System.Collections.Generic.IEnumerable! sources, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IRunContext? runContext, Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IFrameworkHandle! frameworkHandle, Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken! cancellationToken) -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestExecutionManager.TestExecutionManager() -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.Arguments.get -> object?[]?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.GetAllAttributes(bool inherit) -> System.Attribute![]?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.GetAttributes(bool inherit) -> TAttributeType![]!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.IsRunnable.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.IsTimeoutSet.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.MethodInfo.get -> System.Reflection.MethodInfo!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.NotRunnableReason.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.ParameterTypes.get -> System.Reflection.ParameterInfo![]!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.ReturnType.get -> System.Type!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.TestClassName.get -> string!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.TestMethodName.get -> string!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.TestResultExtensions
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.UnitTestOutcomeExtensions
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.CaptureDebugTraces.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ClassCleanupLifecycle.get -> Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupBehavior?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.DisableParallelization.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.EnableBaseClassTestMethodsFromOtherAssemblies.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ForcedLegacyMode.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.MapInconclusiveToFailed.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.MapNotRunnableToFailed.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.MSTestSettings() -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ParallelizationScope.get -> Microsoft.VisualStudio.TestTools.UnitTesting.ExecutionScope?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.ParallelizationWorkers.get -> int?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TestSettingsFile.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TestTimeout.get -> int
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TreatClassAndAssemblyCleanupWarningsAsErrors.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.TreatDiscoveryWarningsAsErrors.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.AssemblyName.get -> string!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringAssemblyName.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringAssemblyName.set -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringClassFullName.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.DeclaringClassFullName.set -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.FullClassName.get -> string!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.HasManagedMethodAndTypeProperties.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.Hierarchy.get -> System.Collections.Generic.IReadOnlyCollection!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.IsAsync.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.ManagedMethodName.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.ManagedTypeName.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.Name.get -> string!
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.TestIdGenerationStrategy.get -> Microsoft.VisualStudio.TestTools.UnitTesting.TestIdGenerationStrategy
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.TestMethod.TestMethod(string! name, string! fullClassName, string! assemblyName, bool isAsync) -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Error = 0 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Failed = 1 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Ignored = 4 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Inconclusive = 3 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.InProgress = 8 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.NotFound = 7 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.NotRunnable = 5 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Passed = 6 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome.Timeout = 2 -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.DatarowIndex.get -> int
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.DebugTrace.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.DisplayName.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.Duration.get -> System.TimeSpan
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorColumnNumber.get -> int
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorFilePath.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorLineNumber.get -> int
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorMessage.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ErrorStackTrace.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ExecutionId.get -> System.Guid
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.InnerResultsCount.get -> int
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.Outcome.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ParentExecId.get -> System.Guid
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.ResultFiles.get -> System.Collections.Generic.IList?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.StandardError.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.StandardOut.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult.TestContextMessages.get -> string?
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.CollectSourceInformation.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.RunConfigurationSettings() -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Cancel() -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Canceled.get -> bool
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Register(System.Action! callback) -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.TestRunCancellationToken() -> void
+Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.TestRunCancellationToken.Unregister() -> void
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.AdapterTraceLogger
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.AdapterTraceLogger.AdapterTraceLogger() -> void
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.AdapterTraceLogger.LogError(string! format, params object?[]! args) -> void
@@ -11,7 +139,7 @@ Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.FileOperation
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.FileOperations.FileOperations() -> void
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.FileOperations.GetAssemblyPath(System.Reflection.Assembly! assembly) -> string?
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.FileOperations.GetFullFilePath(string! assemblyFileName) -> string!
-Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.FileOperations.GetNavigationData(object! navigationSession, string! className, string! methodName, out int minLineNumber, out string? fileName) -> void
+Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.FileOperations.GetNavigationData(object? navigationSession, string! className, string! methodName, out int minLineNumber, out string? fileName) -> void
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.FileOperations.LoadAssembly(string! assemblyName, bool isReflectionOnly) -> System.Reflection.Assembly!
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface.IAdapterTraceLogger
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface.IAdapterTraceLogger.LogError(string! format, params object?[]! args) -> void
@@ -81,7 +209,7 @@ Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface.Obj
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface.ObjectModel.ITestMethod.Name.get -> string!
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface.ObjectModel.ITestMethod.TestIdGenerationStrategy.get -> Microsoft.VisualStudio.TestTools.UnitTesting.TestIdGenerationStrategy
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.MSTestSettingsProvider
-Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.MSTestSettingsProvider.GetProperties(string! source) -> System.Collections.Generic.IDictionary!
+Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.MSTestSettingsProvider.GetProperties(string? source) -> System.Collections.Generic.IDictionary!
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.MSTestSettingsProvider.Load(System.Xml.XmlReader! reader) -> void
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.MSTestSettingsProvider.MSTestSettingsProvider() -> void
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.ReflectionOperations
@@ -93,6 +221,7 @@ Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextIm
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextImplementation.AddProperty(string! propertyName, string! propertyValue) -> void
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextImplementation.ClearDiagnosticMessages() -> void
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextImplementation.Context.get -> Microsoft.VisualStudio.TestTools.UnitTesting.TestContext!
+Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextImplementation.Dispose() -> void
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextImplementation.GetDiagnosticMessages() -> string?
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextImplementation.GetResultFiles() -> System.Collections.Generic.IList?
Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextImplementation.SetDataConnection(object? dbConnection) -> void
@@ -150,3 +279,14 @@ override Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Thre
override Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.ThreadSafeStringWriter.Write(char[]! buffer, int index, int count) -> void
override Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.ThreadSafeStringWriter.Write(string? value) -> void
override Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.ThreadSafeStringWriter.WriteLine(string? value) -> void
+static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.TestResultExtensions.ToUnitTestResults(this Microsoft.VisualStudio.TestTools.UnitTesting.TestResult![]! testResults) -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestResult![]!
+static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Extensions.UnitTestOutcomeExtensions.ToUnitTestOutcome(this Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome frameworkTestOutcome) -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.ObjectModel.UnitTestOutcome
+static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.CurrentSettings.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings!
+static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.IsLegacyScenario(Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging.IMessageLogger! logger) -> bool
+static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.PopulateSettings(Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings! settings) -> void
+static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.PopulateSettings(Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IDiscoveryContext? context) -> void
+static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.MSTestSettings.RunConfigurationSettings.get -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings!
+static Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings.PopulateSettings(Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter.IDiscoveryContext? context) -> Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.RunConfigurationSettings!
+virtual Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.Invoke(object?[]? arguments) -> Microsoft.VisualStudio.TestTools.UnitTesting.TestResult!
+virtual Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.Execution.TestMethodInfo.InvokeAsync(object?[]? arguments) -> System.Threading.Tasks.Task!
+virtual Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextImplementation.Dispose(bool disposing) -> void
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/PublicAPI/PublicAPI.Unshipped.txt b/src/Adapter/MSTestAdapter.PlatformServices/PublicAPI/PublicAPI.Unshipped.txt
index 6a828f7e91..07e3531963 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/PublicAPI/PublicAPI.Unshipped.txt
+++ b/src/Adapter/MSTestAdapter.PlatformServices/PublicAPI/PublicAPI.Unshipped.txt
@@ -1,5 +1,2 @@
#nullable enable
-*REMOVED*Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.FileOperations.GetNavigationData(object! navigationSession, string! className, string! methodName, out int minLineNumber, out string? fileName) -> void
-Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.FileOperations.GetNavigationData(object? navigationSession, string! className, string! methodName, out int minLineNumber, out string? fileName) -> void
-*REMOVED*Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.MSTestSettingsProvider.GetProperties(string! source) -> System.Collections.Generic.IDictionary!
-Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.MSTestSettingsProvider.GetProperties(string? source) -> System.Collections.Generic.IDictionary!
+*REMOVED*virtual Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.TestContextImplementation.Dispose(bool disposing) -> void
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/RecursiveDirectoryPath.cs b/src/Adapter/MSTestAdapter.PlatformServices/RecursiveDirectoryPath.cs
index c91bf7ed34..5593828ee9 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/RecursiveDirectoryPath.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/RecursiveDirectoryPath.cs
@@ -20,9 +20,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
///
[Serializable]
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
[SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1603:DocumentationMustContainValidXml", Justification = "Reviewed. Suppression is ok here.")]
public class RecursiveDirectoryPath : MarshalByRefObject
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/Resource.Designer.cs b/src/Adapter/MSTestAdapter.PlatformServices/Resources/Resource.Designer.cs
deleted file mode 100644
index 33f4d030e6..0000000000
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/Resource.Designer.cs
+++ /dev/null
@@ -1,271 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resource {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resource() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Resources.Reso" +
- "urce", typeof(Resource).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized string similar to Could not find file '{0}'..
- ///
- internal static string CannotFindFile {
- get {
- return ResourceManager.GetString("CannotFindFile", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The parameter should not be null or empty..
- ///
- internal static string Common_CannotBeNullOrEmpty {
- get {
- return ResourceManager.GetString("Common_CannotBeNullOrEmpty", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed..
- ///
- internal static string DeploymentErrorBadDeploymentItem {
- get {
- return ResourceManager.GetString("DeploymentErrorBadDeploymentItem", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Run deployment issue: Failed to access output directory '{1}' specified by deployment item '{0}', the item will not be deployed: {2}: {3}.
- ///
- internal static string DeploymentErrorFailedToAccesOutputDirectory {
- get {
- return ResourceManager.GetString("DeploymentErrorFailedToAccesOutputDirectory", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Run deployment issue: Failed to access the file '{0}': {1}: {2}.
- ///
- internal static string DeploymentErrorFailedToAccessFile {
- get {
- return ResourceManager.GetString("DeploymentErrorFailedToAccessFile", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Run deployment issue: Failed to copy file '{0}' to '{1}': {2}: {3}.
- ///
- internal static string DeploymentErrorFailedToCopyWithOverwrite {
- get {
- return ResourceManager.GetString("DeploymentErrorFailedToCopyWithOverwrite", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Run deployment issue: Failed to deploy dependencies for test storage '{0}': {1}.
- ///
- internal static string DeploymentErrorFailedToDeployDependencies {
- get {
- return ResourceManager.GetString("DeploymentErrorFailedToDeployDependencies", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Run deployment issue: Failed to get the file for {0}: {1}: {2}.
- ///
- internal static string DeploymentErrorFailedToGetFileForDeploymentItem {
- get {
- return ResourceManager.GetString("DeploymentErrorFailedToGetFileForDeploymentItem", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Run deployment issue: an error occurred while getting satellite assemblies for {0}: {1}: {2}.
- ///
- internal static string DeploymentErrorGettingSatellite {
- get {
- return ResourceManager.GetString("DeploymentErrorGettingSatellite", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to deployment item '{0}'.
- ///
- internal static string DeploymentItem {
- get {
- return ResourceManager.GetString("DeploymentItem", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid deployment item: the specified path '{0}' or output directory '{1}' contains illegal characters..
- ///
- internal static string DeploymentItemContainsInvalidCharacters {
- get {
- return ResourceManager.GetString("DeploymentItemContainsInvalidCharacters", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid deployment item: the output directory cannot be null..
- ///
- internal static string DeploymentItemOutputDirectoryCannotBeNull {
- get {
- return ResourceManager.GetString("DeploymentItemOutputDirectoryCannotBeNull", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid deployment item: the specified output directory '{0}' is not relative..
- ///
- internal static string DeploymentItemOutputDirectoryMustBeRelative {
- get {
- return ResourceManager.GetString("DeploymentItemOutputDirectoryMustBeRelative", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid deployment item: the path must contain at least one character..
- ///
- internal static string DeploymentItemPathCannotBeNullOrEmpty {
- get {
- return ResourceManager.GetString("DeploymentItemPathCannotBeNullOrEmpty", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to deployment item '{0}' (output directory '{1}').
- ///
- internal static string DeploymentItemWithOutputDirectory {
- get {
- return ResourceManager.GetString("DeploymentItemWithOutputDirectory", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again..
- ///
- internal static string InvalidSettingsXmlElement {
- get {
- return ResourceManager.GetString("InvalidSettingsXmlElement", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Invalid value '{0}' for runsettings entry '{1}', setting will be ignored..
- ///
- internal static string InvalidValue {
- get {
- return ResourceManager.GetString("InvalidValue", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}.
- ///
- internal static string MissingDeploymentDependency {
- get {
- return ResourceManager.GetString("MissingDeploymentDependency", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test Run deployment issue: The assembly or module '{0}' was not found..
- ///
- internal static string MissingDeploymentDependencyWithoutReason {
- get {
- return ResourceManager.GetString("MissingDeploymentDependencyWithoutReason", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to {0}_{1} {2}.
- ///
- internal static string TestRunName {
- get {
- return ResourceManager.GetString("TestRunName", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Data source '{0}' cannot be found in the test configuration settings.
- ///
- internal static string UTA_DataSourceConfigurationSectionMissing {
- get {
- return ResourceManager.GetString("UTA_DataSourceConfigurationSectionMissing", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}.
- ///
- internal static string UTA_ErrorDataConnectionFailed {
- get {
- return ResourceManager.GetString("UTA_ErrorDataConnectionFailed", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Wrong number of objects for permutation. Should be greater than zero..
- ///
- internal static string WrongNumberOfObjects {
- get {
- return ResourceManager.GetString("WrongNumberOfObjects", resourceCulture);
- }
- }
- }
-}
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/Resource.resx b/src/Adapter/MSTestAdapter.PlatformServices/Resources/Resource.resx
index 414073c307..01a75aa4da 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/Resource.resx
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/Resource.resx
@@ -186,4 +186,305 @@
Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+
+
+ MSTestAdapterV2
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+
+
+ Class cleanup method '{0}.{1}' was canceled
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+
+
+ Class initialize method '{0}.{1}' was canceled
+
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+
+
+ {0} (Data Row {1})
+
+
+ Debug Trace:
+
+
+ [MSTest][Discovery][{0}] {1}
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+
+
+ {0}: {1}
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+
+
+ Test '{0}' timed out after {1}ms
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+
+
+ File does not exist: {0}
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+
+
+ Test cleanup method '{0}.{1}' was canceled
+
+
+ TestContext cannot be Null.
+
+
+ TestContext Messages:
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+
+
+ Test initialize method '{0}.{1}' was canceled
+
+
+ Test method {0} was not found.
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+
+
+ TestCleanup Stack Trace
+
+
+ --- End of inner exception stack trace ---
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+
+
+ Unable to create instance of class {0}. Error: {1}.
+
+
+ Method {0}.{1} does not exist.
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+
+
+ The {0}.TestContext has incorrect type.
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+
+
+ Test method {0}.{1} threw exception:
+{2}
+
+
+ Unable to get type {0}. Error: {1}.
+
+
+ The called code threw an exception that was caught, but the exception value was null
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+
\ No newline at end of file
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.cs.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.cs.xlf
index b82c787000..b8b854815b 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.cs.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.cs.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ Po {2} ms vypršel časový limit metody čištění sestavení {0}.{1}.
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ Metoda čištění sestavení {0}.{1} byla zrušena.
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ Po {2} ms vypršel časový limit metody inicializace sestavení {0}.{1}.
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ Metoda inicializace sestavení {0}.{1} byla zrušena.
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ Při vytváření výčtu atributu IDataSource došlo k výjimce. „{0}.{1}“: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ Došlo k výjimce při rozbalování řádků IDataSource z atributu na „{0}.{1}“: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ Data v {0} indexu pro „{1}“ nelze serializovat. Všechna data poskytnutá prostřednictvím „IDataSource“ by měla být serializovatelná. Pokud potřebujete testovat neserializovatelné zdroje dat, nezapomeňte do testovacího sestavení přidat atribut TestDataSourceDiscovery a nastavit možnost zjišťování na „DuringExecution“.
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ Zobrazovaný název „{2}“ u indexů {0} a {1} je duplicitní. Zobrazované názvy by měly být jedinečné.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.Soubor {0} se nenašel.
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ Testovací metodu {0}.{1} nejde spustit: Testovací data neodpovídají parametrům metody. Liší se počet nebo typy.
+Pro test se očekával tento počet parametrů: {2} s typy {3},
+byl však přijat tento počet argumentů: {4} s typy {5}.
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ Nelze spustit testovací metodu {0}.{1}: Metoda má parametry, ale nedefinuje žádný zdroj testu. K poskytování testovacích dat použijte zdroj dat [DataRow] nebo [DynamicData], případně vlastní zdroj dat ITestDataSource.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ Po {2} ms vypršel časový limit metody čištění třídy {0}.{1}.
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ Metoda čištění třídy {0}.{1} byla zrušena.
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ Po {2} ms vypršel časový limit metody inicializace třídy {0}.{1}.
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ Metoda inicializace třídy {0}.{1} byla zrušena.
+
+ The parameter should not be null or empty.Parametr nemůže být null nebo prázdný.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ MSTestAdapter nezjistil v třídě {0} sestavení {1} žádný test, protože: {2}.
+
+
+
+ {0} (Data Row {1})
+ {0} (datový řádek {1})
+
+
+
+ Debug Trace:
+ Trasování ladění:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.Problém nasazení testovacího běhu: Chybná položka nasazení: {0}: výstupní adresář {1} určuje položku, která se má nasadit mimo kořenový adresář nasazení, což není povolené.
@@ -77,16 +177,108 @@
položka nasazení {0} (adresář výstupu {1})
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Discovery][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ Byly zjištěny soubory .runsettings i .testconfig.json. Vyberte prosím jenom jeden z těchto souborů konfigurace testu.
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ „{0}“: (Nepodařilo se získat popis výjimky z důvodu výjimky typu „{1}“.
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ Vyvolané výjimky:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ Test {0} byl zrušen.
+
+
+
+ Test '{0}' timed out after {1}ms
+ Časový limit testu {0} vypršel po {1} ms.
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ Získání vlastních atributů pro typ {0} vyvolalo výjimku (bude ignorovat a používat způsob reflexe): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ Typ obecného parametru {0} nelze odvodit.
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ Obecná testovací metoda {0}'nemá argumenty, takže nelze odvodit obecný parametr.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ Byly nalezeny dva konfliktní typy pro obecný parametr {0}. Konfliktní typy jsou {1} a {2}.
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ Pro 'ClassCleanupLifecycle' byla zadána neplatná hodnota {0}. Podporované obory jsou {1}.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ Pro procesy 'Scope' je zadaná neplatná hodnota {0}. Podporované obory jsou {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ Pro procesy 'Workers' je zadaná neplatná hodnota {0}. Hodnota by měla být nezáporné celé číslo.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ Neplatné nastavení {0}. Neočekávaný XmlAttribute: {1}.
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.Nástroj MSTestAdapter zjistil neočekávaný prvek {0} v nastavení {1}. Odeberte tento prvek a zkuste to znovu.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ Neplatné nastavení {0}. Neočekávaný XmlElement: {1}.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.Neplatná hodnota {0} pro položku runsettings {1}. Nastavení bude ignorováno.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ Neplatná hodnota {0} pro položku runsettings {1}. Nastavení bude ignorováno.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ Upozornění: Adaptér MSTest V2 nepodporuje soubor testsettings ani vsmdi.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}Problém nasazení testovacího běhu: Sestavení nebo modul {0} se nenašly. Důvod: {1}
@@ -97,21 +289,309 @@
Problém nasazení testovacího běhu: Sestavení nebo modul {0} se nenašly.
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ V sestavení je načtena starší verze balíčku MSTestV2. Zjišťování testů může selhat při zjišťování všech testů dat, pokud jsou závislé na souboru .runsettings.
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ Položka runsettings <ExecutionApartmentState>STA</ExecutionApartmentState> se v operačních systémech jiných než Windows nepodporuje.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ Spouštění testů v některém z uvedených zdrojů se pro vybranou platformu nepodporuje.
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ Nepovedlo se zjistit testy ze sestavení {0}. Důvod:{1}
+
+
+
+ File does not exist: {0}
+ Neexistující soubor: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ Po {2} ms vypršel časový limit metody čištění testu {0}.{1}.
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ Metoda čištění testu {0}.{1} byla zrušena.
+
+
+
+ TestContext cannot be Null.
+ TestContext nemůže být Null.
+
+
+
+ TestContext Messages:
+ Zprávy pro TestContext:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ Po {2} ms vypršel časový limit metody inicializace testu {0}.{1}.
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ Metoda inicializace testu {0}.{1} byla zrušena.
+
+
+
+ Test method {0} was not found.
+ Testovací metoda {0} se nenašla.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ Je povolená paralelizace testu pro {0} (Workers: {1}, Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ Nepovedlo se načíst typy ze zdroje testu {0}. Je možné, že se některé nebo všechny testy v tomto zdroji nezjistily.
+Chyba: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ Čisticí metoda sestavení {0}.{1} selhala. Chybová zpráva: {2}. Trasování zásobníku: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ Inicializační metoda sestavení {0}.{1} vyvolala výjimku. {2}: {3}. Přerušuje se provádění testu.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ Čisticí metoda třídy {0}.{1} selhala. Chybová zpráva: {2}. Trasování zásobníku: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ Inicializační metoda třídy {0}.{1} vyvolala výjimku. {2}: {3}.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Metoda {0}.{1} má špatný podpis. Metoda musí být static nebo public, nevrací hodnotu a nesmí přijímat žádný parametr. Pokud navíc v metodě používáte operátor async-await, musí být návratový typ Task nebo ValueTask.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Metoda {0}.{1} má špatný podpis. Metoda musí být static nebo public, nevrací hodnotu a musí přijímat jeden parametr typu TestContext. Pokud navíc v metodě používáte operátor async-await, musí být návratový typ Task nebo ValueTask.
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ Metoda TestCleanup {0}.{1} vyvolala výjimku. {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ Při volání čisticí metody testu pro třídu {0} došlo k chybě: {1}
+
+
+
+ TestCleanup Stack Trace
+ Trasování zásobníku čištění testu
+
+ Data source '{0}' cannot be found in the test configuration settingsZdroj dat {0} se v nastavení konfigurace testu nenašel.
+
+ --- End of inner exception stack trace ---
+ --- Konec trasování zásobníku pro vnitřní výjimku ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}Adaptéru testování částí se buď nepodařilo připojit ke zdroji dat, nebo přečíst data. Další informace o odstraňování této chyby najdete v knihovně MSDN v tématu Troubleshooting Data-Driven Unit Tests (http://go.microsoft.com/fwlink/?LinkId=62412). Podrobnosti o chybě: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: Třída {0} nemá platnou vlastnost TestContext. Vlastnost TestContext musí být typu TestContext, musí být nestatická a musí být veřejná. Například: public TestContext TestContext
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: Metoda {1} definovaná ve třídě {0} nemá správný podpis. Testovací metoda označená atributem [TestMethod] nesmí být static ani public, musí mít návratový typ void a nesmí přijímat žádný parametr. Například: public void Test.Class1.Test(). Pokud navíc v testovací metodě používáte operátor async-await, musí být návratový typ Task nebo ValueTask. Například: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}.{1} má neplatný atribut Timeout. Hodnota timeline musí být celé číslo větší než 0.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: V jednom sestavení nejde definovat více jak jednu metodu s atributem AssemblyCleanup.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: V jednom sestavení nejde definovat více jak jednu metodu s atributem AssemblyInitialize.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: Uvnitř třídy nejde definovat více jak jednu metodu s atributem ClassCleanup.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: Uvnitř třídy nejde definovat více jak jednu metodu s atributem ClassInitialize.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: Nejde definovat více jak jednu metodu s atributem TestCleanup.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: Nejde definovat více jak jednu metodu s atributem TestInitialize.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: Atribut TestClass se definoval v neveřejné třídě {0}.
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: V metodě {1} nejde definovat předdefinovanou vlastnost {2}.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ Atribut TestClass definovaný u obecné neabstraktní třídy {0}
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: V metodě {1} je definovaná vlastní vlastnost, která je null nebo je prázdná. Vlastní vlastnost musí mít platný název.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ Metoda Execute vyvolala neošetřenou výjimku. Nahlaste prosím tuto chybu autorovi atributu {0}.
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ Atribut ExpectedException definovaný u testovací metody {0}.{1} vyvolal během vytváření výjimku.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ Nepovedlo se získat výjimku vyvolanou testovací metodou {0}.{1}.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ Inicializační metoda {0}.{1} způsobila výjimku. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ Nepodařilo se vytvořit instanci třídy {0}. Chyba: {1}.
+
+
+
+ Method {0}.{1} does not exist.
+ Metoda {0}.{1} neexistuje.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ Testovací metoda {0}.{1} má definovaných více atributů odvozených od atributu {2}. Povolený je jenom jeden takový atribut.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ Při provádění testu došlo k chybě. Rozšíření nevrátilo žádný výsledek. Pokud používáte rozšíření třídy TestMethodAttribute, obraťte se na dodavatele.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ Nelze najít platný konstruktor pro testovací třídu {0}. Platné konstruktory jsou public a buď bez parametrů, nebo s jedním parametrem typu TestContext.
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ Nepodařilo se najít vlastnost {0}.TestContext. Chyba:{1}.
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ Pro třídu {0} se nepodařilo nastavit vlastnost TestContext. Chyba: {1}.
+
+
+
+ The {0}.TestContext has incorrect type.
+ {0}.TestContext má nesprávný typ.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Metoda {0}.{1} má špatný podpis. Metoda nesmí být static nebo public, nevrací hodnotu a nesmí přijímat žádný parametr. Pokud navíc v metodě používáte operátor async-await, musí být návratový typ Task nebo ValueTask.
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ V testovací metodě {0}.{1} došlo k výjimce:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ Nepodařilo se získat typ {0}. Chyba: {1}.
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ Volaný kód vyvolal výjimku, která byla zachycena, ale její hodnota byla null.
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0}. Pokud v testu používáte objekty uživatelského rozhraní, zvažte u projektů pro platformu UPW použití atributu [UITestMethod] místo atributu [TestMethod], aby se test provedl ve vlákně uživatelského rozhraní.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (Z důvodu výjimky se nepodařilo získat zprávu o výjimce typu {0}.)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ MSTest.TestAdapter a MSTest.TestFramework musí mít stejnou verzi. Byla nalezena verze MSTest.TestAdapter {0} a verze MSTest.TestFramework {1}. Ujistěte se prosím, že verze balíčků NuGet MSTest.TestAdapter a MSTest.TestFramework jsou shodné.
+
+ Wrong number of objects for permutation. Should be greater than zero.Chybný počet objektů pro permutaci. Počet musí být větší než nula.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.de.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.de.xlf
index a2fe24f8c5..34d0461b6d 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.de.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.de.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ Timeout der Assemblybereinigungsmethode "{0}.{1}" nach {2} ms
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ Die Assemblybereinigungsmethode "{0}.{1}" wurde abgebrochen
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ Timeout der Assemblyinitialisierungsmethode "{0}.{1}" nach {2} ms
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ Die Assemblyinitialisierungsmethode "{0}.{1}" wurde abgebrochen
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ Ausnahme beim Auflisten des IDataSource-Attributs für "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ Ausnahme beim Erweitern von IDataSource-Zeilen aus dem Attribut auf "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ Daten im Index {0} für "{1}" können nicht serialisiert werden. Alle über "IDataSource" bereitgestellten Daten sollten serialisierbar sein. Wenn Sie nicht serialisierbare Datenquellen testen müssen, stellen Sie sicher, dass Sie der Testassembly das Attribut "TestDataSourceDiscovery" hinzufügen und die Ermittlungsoption auf "DuringExecution" festlegen.
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ Der Anzeigename "{2}" für Indizes {0} und {1} ist doppelt vorhanden. Anzeigenamen sollten eindeutig sein.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.Die Datei "{0}" konnte nicht gefunden werden.
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ Die Testmethode „{0}.{1}“ kann nicht ausgeführt werden: Testdaten stimmen nicht mit Methodenparametern überein. Die Anzahl oder die Typen unterscheiden sich.
+Test erwartete {2} Parameter mit den Typen „{3}“,
+aber empfing {4} Argument(e) mit den Typen „{5}“.
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ Die Testmethode „{0}.{1}“ kann nicht ausgeführt werden: Die Methode verfügt über Parameter, definiert jedoch keine Testquelle. Verwenden Sie „[DataRow]“, „[DynamicData]“ oder eine benutzerdefinierte „ITestDataSource-Datenquelle“, um Testdaten bereitzustellen.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ Timeout der Klassenbereinigungsmethode "{0}.{1}" nach {2} ms
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ Die Klassenbereinigungsmethode "{0}.{1}" wurde abgebrochen
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ Timeout der Klasseninitialisierungsmethode "{0}.{1}" nach {2} ms
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ Die Initialisierungsmethode "{0}.{1}" der Klasse wurde abgebrochen
+
+ The parameter should not be null or empty.Der Parameter darf nicht NULL oder leer sein.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ Fehler von 'MSTestAdapter' beim Ermitteln von Tests in der Klasse "{0}" der Assembly "{1}". Ursache: {2}.
+
+
+
+ {0} (Data Row {1})
+ {0} (Datenzeile {1})
+
+
+
+ Debug Trace:
+ Debugablaufverfolgung:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.Problem bei der Testlaufbereitstellung: Ungültiges Bereitstellungselement: "{0}". Das Ausgabeverzeichnis "{1}" gibt das unzulässige Element an, das außerhalb des Bereitstellungsstammverzeichnisses bereitgestellt werden soll.
@@ -77,16 +177,108 @@
Bereitstellungselement "{0}" (Ausgabeverzeichnis "{1}")
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Discovery][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ Es wurden sowohl die Dateien „.runsettings“ als auch „.testconfig.json“ erkannt. Wählen Sie nur eine dieser Testkonfigurationsdateien aus.
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ "{0}": (Fehler beim Abrufen der Ausnahmebeschreibung aufgrund einer Ausnahme vom Typ "{1}".
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ Ausgelöste Ausnahmen:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ Test „{0}“ wurde abgebrochen
+
+
+
+ Test '{0}' timed out after {1}ms
+ Timeout bei Test „{0}“ nach {1} ms
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ Beim Abrufen von benutzerdefinierten Attributen für den Typ {0} wurde Ausnahme ausgelöst (wird ignoriert und die Reflektionsart verwendet): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ Der Typ des generischen Parameters „{0}“ konnte nicht abgeleitet werden.
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ Die generische Testmethode „{0}“ hat keine Argumente, daher kann der generische Parameter nicht abgeleitet werden.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ Es wurden zwei in Konflikt stehende Typen für den generischen Parameter „{0}“ gefunden. Die in Konflikt stehenden Typen sind „{1}“ und „{2}“.
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ Für "ClassCleanupLifecycle" wurde ein ungültiger Wert "{0}" angegeben. Unterstützte Bereiche sind {1}.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ Ungültiger Wert "{0}" für "Scope" angegeben. Unterstützte Bereiche: {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ Ungültiger Wert "{0}" für "Workers" angegeben. Der Wert muss eine nicht negative Ganzzahl sein.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ Ungültige Einstellungen "{0}". Unerwartetes XmlAttribute: "{1}".
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again."MSTestAdapter" hat ein unerwartetes Element "{0}" in den Einstellungen "{1}" ermittelt. Entfernen Sie dieses Element, und versuchen Sie es erneut.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ Ungültige Einstellungen "{0}". Unerwartetes XmlElement: "{1}".
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.Ungültiger Wert "{0}" für runsettings-Eintrag "{1}". Die Einstellung wird ignoriert.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ Ungültiger Wert "{0}" für runsettings-Eintrag "{1}". Die Einstellung wird ignoriert.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ Warnung: Eine TESTSETTINGS-Datei oder eine VSMDI-Datei wird vom MSTest-V2-Adapter nicht unterstützt.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}Problem bei der Testlaufbereitstellung: Die Assembly oder das Modul "{0}" wurde nicht gefunden. Ursache: {1}
@@ -97,21 +289,309 @@
Problem bei der Testlaufbereitstellung: Die Assembly oder das Modul "{0}" wurde nicht gefunden.
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ Eine ältere Version des MSTestV2-Pakets wird in die Assembly geladen. Bei der Testermittlung werden möglicherweise nicht alle Datentests ermittelt, wenn sie von der Datei ".runsettings" abhängen.
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ Der Eintrag "<ExecutionApartmentState>STA</ExecutionApartmentState>" der Ausführungseinstellungen wird auf Nicht-Windows-Betriebssystemen nicht unterstützt.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ Das Ausführen von Tests in einer der angegebenen Quellen wird für die ausgewählte Plattform nicht unterstützt.
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ Fehler beim Ermitteln von Tests aus der Assembly "{0}". Ursache:{1}
+
+
+
+ File does not exist: {0}
+ Die Datei ist nicht vorhanden: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ Timeout der Testbereinigungsmethode "{0}.{1}" nach {2} ms
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ Die Testbereinigungsmethode "{0}.{1}" wurde abgebrochen
+
+
+
+ TestContext cannot be Null.
+ "TestContext" darf nicht NULL sein.
+
+
+
+ TestContext Messages:
+ TestContext-Meldungen:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ Timeout der Testinitialisierungsmethode "{0}.{1}" nach {2} ms
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ Die Testinitialisierungsmethode "{0}.{1}" wurde abgebrochen
+
+
+
+ Test method {0} was not found.
+ Die Testmethode "{0}" wurde nicht gefunden.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ Testparallelisierung aktiviert für {0} (Workers: {1}, Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ Fehler beim Laden von Typen aus der Testquelle "{0}". Möglicherweise werden einige oder alle Tests in dieser Quelle nicht ermittelt.
+Fehler: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ Fehler bei der Methode "{0}.{1}" für die Assemblybereinigung. Fehlermeldung: {2}. "StackTrace": {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ Die Methode "{0}.{1}" für die Assemblyinitialisierung hat eine Ausnahme ausgelöst. {2}: {3}. Die Ausführung des Tests wird abgebrochen.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ Fehler bei der Methode "{0}.{1}" für die Klassenbereinigung. Fehlermeldung: {2}. Stapelüberwachung: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ Die Methode "{0}.{1}" für die Klasseninitialisierung hat eine Ausnahme ausgelöst. {2}: {3}.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Die Methode „{0}.{1}“ weist eine falsche Signatur auf. Die Methode muss statisch und öffentlich sein. Sie darf keinen Wert zurückgeben und keinen Parameter annehmen. Wenn Sie außerdem in der Methode „async-await“ verwenden, muss der Rückgabetyp „Task“ oder „ValueTask“ sein.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Die Methode „{0}.{1}“ weist eine falsche Signatur auf. Die Methode muss statisch und öffentlich sein. Sie darf keinen Wert zurückgeben und muss einen einzigen Parameter des Typs TestContext annehmen. Wenn Sie außerdem in der Methode „async-await“ verwenden, muss der Rückgabetyp „Task“ oder „ValueTask“ sein.
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ Die TestCleanup-Methode "{0}.{1}" hat eine Ausnahme ausgelöst. {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ Fehler beim Aufruf der Testbereinigungsmethode für die Testklasse "{0}": {1}
+
+
+
+ TestCleanup Stack Trace
+ TestCleanup-Stapelüberwachung
+
+ Data source '{0}' cannot be found in the test configuration settingsDie Datenquelle "{0}" wurde in den Testkonfigurationseinstellungen nicht gefunden.
+
+ --- End of inner exception stack trace ---
+ --- Ende der internen Ausnahmestapelüberwachung ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}Der Komponententestadapter konnte keine Verbindung mit der Datenquelle herstellen bzw. die Daten nicht lesen. Weitere Informationen zur Problembehandlung dieses Fehlers finden Sie unter "Problembehandlung von datengesteuerten Komponententests" (http://go.microsoft.com/fwlink/?LinkId=62412) in der MSDN Library. Fehlerdetails: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: Die Klasse {0} weist keine gültige Eigenschaft TestContext auf. TestContext muss vom Typ TestContext sein, muss nicht statisch und öffentlich sein. Beispiel: 'public TestContext TestContext'.
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: Die in der Klasse {0} definierte Methode {1} weist nicht die richtige Signatur auf. Die mit dem [TestMethod]-Attribut markierte Testmethode muss nicht statisch und öffentlich sein, muss den Rückgabetyp „void“ aufweisen und darf keine Parameter annehmen. Beispiel: public void Test.Class1.Test(). Wenn Sie außerdem in der Testmethode „async-await“ verwenden, muss der Rückgabetyp „Task“ oder „ValueTask“ sein. Beispiel: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}.{1} weist ein ungültiges Attribut „Timeout“ auf. Timeout muss eine ganze Zahl größer als 0 sein.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: Es darf nur eine Methode mit dem Attribut 'AssemblyCleanup' innerhalb einer Assembly definiert werden.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: Es darf nur eine Methode mit dem Attribut 'AssemblyInitialize' innerhalb einer Assembly definiert werden.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: Es darf nur eine Methode mit dem Attribut 'ClassCleanup' innerhalb einer Klasse definiert werden.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: Es darf nur eine Methode mit dem Attribut 'ClassInitialize' innerhalb einer Klasse definiert werden.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: Es darf nur eine Methode mit dem Attribut 'TestCleanup' definiert werden.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: Es darf nur eine Methode mit dem Attribut 'TestInitialize' definiert werden.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: Für die nicht öffentliche Klasse '{0}' definiertes Attribut 'TestClass'.
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: Die vordefinierte Eigenschaft "{2}" kann nicht für die Methode "{1}" definiert werden.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ TestClass-Attribut für generische nicht abstrakte Klasse {0} definiert
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: Für die Methode "{1}" wurde eine benutzerdefinierte Eigenschaft mit dem Wert NULL oder eine benutzerdefinierte leere Eigenschaft definiert. Die benutzerdefinierte Eigenschaft muss einen gültigen Namen aufweisen.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ Von der„Execute“-Methode wurde ein Ausnahmefehler ausgelöst. Melden Sie diesen Fehler dem Autor des Attributs „{0}“.
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ Das für die Testmethode "{0}.{1}" definierte ExpectedException-Attribut hat während der Konstruktion eine Ausnahme ausgelöst.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ Fehler beim Abrufen der von der Testmethode "{0}.{1}" ausgelösten Ausnahme.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ Die Initialisierungsmethode '{0}.{1}' hat eine Ausnahme ausgelöst. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ Es kann keine Instanz der Klasse '{0}' erstellt werden. Fehler: {1}.
+
+
+
+ Method {0}.{1} does not exist.
+ Die Methode "{0}.{1}" ist nicht vorhanden.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ Für die Testmethode „{0}.{1}“ sind mehrere Attribute definiert, die von „{2}“ abgeleitet sind. Nur ein einziges solches Attribut ist zulässig.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ Fehler beim Ausführen des Tests. Von der Extension wurde kein Ergebnis zurückgegeben. Wenn Sie eine Extension von "TestMethodAttribute" verwenden, wenden Sie sich bitte an den Anbieter.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ Es wurde kein gültiger Konstruktor für die Testklasse "{0}" gefunden. Gültige Konstruktoren sind "public" und entweder parameterlos oder mit einem Parameter vom Typ "TestContext".
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ Die Eigenschaft "{0}.TestContext" wurde nicht gefunden. Fehler: {1}.
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ Die Eigenschaft 'TestContext' für die Klasse '{0}' kann nicht festgelegt werden. Fehler: {1}.
+
+
+
+ The {0}.TestContext has incorrect type.
+ "{0}.TestContext" weist einen falschen Typ auf.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Die Methode „{0}.{1}“ weist eine falsche Signatur auf. Die Methode muss nicht statisch und öffentlich sein, und sie darf keinen Wert zurückgeben und keinen Parameter annehmen. Wenn Sie außerdem in der Methode „async-await“ verwenden, muss der Rückgabetyp „Task“ oder „ValueTask“ sein.
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ Die Testmethode "{0}.{1}" hat eine Ausnahme ausgelöst:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ Der Typ "{0}" kann nicht abgerufen werden. Fehler: {1}.
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ Der aufgerufene Code hat eine Ausnahme ausgelöst, die abgefangen wurde, aber der Ausnahmewert war NULL.
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0}: Erwägen Sie für UWP-Projekte bei Einsatz von UI-Objekten im Test die Verwendung des [UITestMethod]-Attributs anstelle von "[TestMethod]", um den Test im UI-Thread auszuführen.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (Fehler beim Abrufen der Meldung für eine Ausnahme vom Typ "{0}" aufgrund einer Ausnahme.)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ „MSTest.TestAdapter“ und „MSTest.TestFramework“ müssen dieselbe Version aufweisen. Gefunden wurde „MSTest.TestAdapter“ Version „{0}“ und „MSTest.TestFramework“ Version „{1}“. Stellen Sie sicher, dass die Versionen der NuGet-Pakete „MSTest.TestAdapter“ und „MSTest.TestFramework“ übereinstimmen.
+
+ Wrong number of objects for permutation. Should be greater than zero.Falsche Anzahl von Objekten für die Permutation. Die Anzahl muss größer als NULL sein.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.es.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.es.xlf
index 1c05e7b8c1..022571fcca 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.es.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.es.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ Método de limpieza de ensamblado '{0}.{1}' se agotó el tiempo de espera después de {2}ms
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ Método de limpieza de ensamblado "{0}.{1}" se canceló
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ Método de inicialización de ensamblado '{0}.{1}' se agotó el tiempo de espera de después de {2}ms
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ Método de inicialización de ensamblado "{0}.{1}" se canceló
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ Excepción al enumerar el atributo IDataSource en "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ Se produjo una excepción al expandir las filas de IDataSource del atributo en "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ No se pueden serializar los datos del {0} de índice para "{1}". Todos los datos proporcionados a través de "IDataSource" deben ser serializables. Si necesita probar orígenes de datos no serializables, asegúrese de agregar el atributo "TestDataSourceDiscovery" en el ensamblado de prueba y establezca la opción de detección en "DuringExecution".
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ El nombre para mostrar "{2}" en los índices {0} y {1} están duplicados. Los nombres para mostrar deben ser únicos.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.No se pudo encontrar el archivo '{0}'.
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ No se puede ejecutar el método de prueba '{0}.{1}': Los datos de prueba no coinciden con los parámetros del método. El recuento o los tipos son diferentes.
+Probar los parámetros de {2} esperados, con los tipos '{3}',
+pero recibió {4} argumentos, con los tipos '{5}'.
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ No se puede ejecutar el método de prueba "{0}.{1}": el método tiene parámetros, pero no define ningún origen de prueba. Use "[DataRow]", "[DynamicData]" o un origen de datos "ITestDataSource" personalizado para proporcionar datos de prueba.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ Método de limpieza de clases '{0}.{1}' se agotó el tiempo de espera después de {2}ms
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ Método de limpieza de clases "{0}.{1}" se canceló
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ Método de inicialización de clase '{0}.{1}' se agotó el tiempo de espera después de {2}ms
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ Método de inicialización de clase "{0}.{1}" se canceló
+
+ The parameter should not be null or empty.El parámetro no debe ser NULL ni estar vacío.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ MSTestAdapter no detectó pruebas en la clase '{0}' del ensamblado '{1}' porque {2}.
+
+
+
+ {0} (Data Row {1})
+ {0} (Fila de datos {1})
+
+
+
+ Debug Trace:
+ Seguimiento de depuración:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.Problema de implementación en la serie de pruebas: elemento de implementación incorrecto '{0}': el directorio de salida '{1}' especifica el elemento que se va a implementar fuera del directorio raíz de implementación, lo cual no está permitido.
@@ -77,16 +177,108 @@
elemento de implementación '{0}' (directorio de salida '{1}')
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Discovery][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ Se han detectado los archivos ".runsettings" y ".testconfig.json". Seleccione solo uno de estos archivos de configuración de prueba.
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ "{0}": (No se pudo obtener la descripción de la excepción debido a una excepción de tipo "{1}".
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ Excepciones devueltas:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ Se canceló la prueba '{0}'
+
+
+
+ Test '{0}' timed out after {1}ms
+ La prueba '{0}' agotó el tiempo de espera después de {1} ms
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ Al obtener atributos personalizados para el tipo {0} se produjo una excepción (se omitirá y se usará la forma de reflexión): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ No se pudo inferir el tipo del parámetro genérico '{0}'.
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ El método de prueba genérico '{0}' no tiene argumentos, por lo que no se puede inferir el parámetro genérico.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ Se encontraron dos tipos en conflicto para el parámetro genérico '{0}'. Los tipos en conflicto son '{1}' y ''{2}.
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ Valor no válido "{0}" especificado para "ClassCleanupLifecycle". Los ámbitos admitidos son {1}.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ Valor no válido "{0}" especificado para "Scope". Los ámbitos admitidos son {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ Valor no válido "{0}" especificado para "Workers". El valor debe ser un entero no negativo.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ Valor no válido '{0}'. XmlAttribute no esperado: '{1}'.
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter encontró un elemento inesperado '{0}' en su configuración '{1}'. Quite este elemento e inténtelo de nuevo.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ Valor no válido '{0}'. XmlElement no esperado: '{1}'.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.Valor ''{0}'' no válido para la entrada runsettings ''{1}'', se omitirá la configuración.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ Valor ''{0}'' no válido para la entrada runsettings ''{1}'', se omitirá la configuración.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ Advertencia: No se admite un archivo testsettings o vsmdi con el adaptador de MSTest V2.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}Problema de implementación en la serie de pruebas: no se encontró el ensamblado o el módulo '{0}'. Motivo: {1}
@@ -97,21 +289,309 @@
Problema de implementación en la serie de pruebas: no se encontró el ensamblado o el módulo '{0}'.
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ Hay una versión anterior del paquete MSTestV2 cargada en el ensamblado. Es posible que la detección de pruebas no detecte todas las pruebas de datos si dependen del archivo ".runsettings".
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ La entrada runsettings "<ExecutionApartmentState>STA</ExecutionApartmentState>" no se admite en sistemas operativos que no son de Windows.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ La ejecución de pruebas en las fuentes proporcionadas no se admite para la plataforma seleccionada
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ No se pudieron detectar pruebas desde el ensamblado {0}. Motivo:{1}
+
+
+
+ File does not exist: {0}
+ El archivo no existe: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ Método de limpieza de pruebas '{0}.{1}' se agotó el tiempo de espera después de {2}ms
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ Método de limpieza de pruebas "{0}.{1}" se canceló
+
+
+
+ TestContext cannot be Null.
+ TestContext no será null.
+
+
+
+ TestContext Messages:
+ Mensajes de TestContext:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ Método de inicialización de prueba '{0}.{1}' se agotó el tiempo de espera después de {2}ms
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ Método de inicialización de prueba "{0}.{1}" se canceló
+
+
+
+ Test method {0} was not found.
+ No encontrado método prueba {0}.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ Probar paralelización habilitada para {0} (Workers: {1}, Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0} {1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ No se pueden cargar tipos del origen de prueba "{0}". Puede que no se detecten algunas o ninguna de las pruebas de este origen.
+Error: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ Error de método Cleanup de ensamblado {0}.{1}. Mensaje de error: {2}. StackTrace: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ Excepción método inicialización ensamblado {0}.{1}. {2}: {3}. Anulada ejecución de prueba.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ Error de método Cleanup de clase {0}.{1}. Mensaje error: {2}. Seguimiento de pila: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ Excepción del método inicialización clase {0}. {1}. {2}: {3}.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ El método {0}.{1} tiene una firma incorrecta. El método debe ser estático, público, no devolver un valor y no aceptar ningún parámetro. Además, si está usando async-await en el método entonces el tipo de valor devuelto debe ser 'Task' o 'ValueTask'.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ El método {0}.{1} tiene una firma incorrecta. El método debe ser estático, público, no devolver ningún valor y debe tomar un único parámetro de tipo TestContext. Además, si está usando async-await en el método entonces el tipo de valor devuelto debe ser 'Task' o 'ValueTask'.
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ El método TestCleanup {0}.{1} devolvió una excepción. {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ Error al llamar al método Test Cleanup para la clase de prueba {0}: {1}
+
+
+
+ TestCleanup Stack Trace
+ Seguimiento de pila de TestCleanup
+
+ Data source '{0}' cannot be found in the test configuration settingsNo se encuentra el origen de datos '{0}' en los valores de configuración de prueba
+
+ --- End of inner exception stack trace ---
+ --- Fin del seguimiento de la pila de excepción interna ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}El adaptador de pruebas unitarias no puede conectarse al origen de datos o leer los datos. Para obtener más información acerca de cómo solucionar este error, consulte "Solución de problemas de pruebas unitarias orientadas a datos" (http://go.microsoft.com/fwlink/?LinkId=62412) en la biblioteca de MSDN. Detalles del error: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: la clase {0}no tiene la propiedad TestContext válida. TestContext debe ser de tipo TestContext, debe ser no estática y debe ser pública. Por ejemplo: public TestContext TestContext.
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: El método {1} definido en la clase {0} no tiene la firma correcta. El método de prueba marcado con el atributo [TestMethod] debe ser no estático, público, con el tipo devuelto void y no debe tomar ningún parámetro. Ejemplo: public void Test.Class1.Test(). Además, si está usando async-await en el método de prueba, entonces el tipo de valor devuelto debe ser 'Task' o 'ValueTask'. Ejemplo: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}.{1} tiene un atributo Timeout no válido. El tiempo de espera debe ser un valor entero mayor que 0.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: No se puede definir más de un método con el atributo AssemblyCleanup dentro de un ensamblado.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: No se puede definir más de un método con el atributo AssemblyInitialize dentro de un ensamblado.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: No se puede definir más de un método con el atributo ClassCleanup dentro de una clase.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: No se puede definir más de un método con el atributo ClassInitialize dentro de una clase.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: No se puede definir más de un método con el atributo TestCleanup.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: No se puede definir más de un método con el atributo TestInitialize.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: se ha definido el atributo TestClass en la clase no pública {0}
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: no se puede definir la propiedad predefinida {2} en el método {1}.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ Atributo TestClass definido en una clase genérica no abstracta {0}
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: se ha definido una propiedad personalizada nula o vacía en el método {1}. La propiedad personalizada debe tener un nombre válido.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ El método 'Execute' produjo una excepción no controlada. Notifique este error al autor del atributo ''{0}.
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ El atributo ExpectedException definido en el método de prueba {0}.{1} inició una excepción durante la construcción.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ No se pudo obtener la excepción iniciada por el método de prueba {0}.{1}.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ El método de inicialización {0}.{1} devolvió una excepción. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ No se puede crear una instancia de la clase {0}. Error: {1}.
+
+
+
+ Method {0}.{1} does not exist.
+ El método {0}.{1} no existe.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ El método de prueba '{0}.{1}' tiene varios atributos derivados de '{2}' definidos en él. Solo se permite un atributo de este tipo.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ No se pudo ejecutar prueba. Extensión no devolvió resultados. Si usa extensión TestMethodAttribute, contacte con el proveedor.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ No se encuentra un constructor válido para la clase de prueba '{0}'. Los constructores válidos son 'public' y sin parámetros o con un parámetro de tipo 'TestContext'.
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ No se puede encontrar la propiedad {0}.TestContext. Error:{1}.
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ No se puede establecer la propiedad TestContext para la clase {0}. Error: {1}.
+
+
+
+ The {0}.TestContext has incorrect type.
+ Tipo {0}.TestContext no es correcto.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ El método {0}.{1} tiene una firma incorrecta. Debe ser un método no estático, público, no devolver ningún valor y no debe aceptar parámetros. Además, si está usando async-await en el método entonces el tipo de valor devuelto debe ser 'Task' o 'ValueTask'.
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ Excepción método de prueba {0}.{1}:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ No se puede obtener el tipo {0}. Error: {1}.
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ El código llamado produjo una excepción que se detectó, pero el valor de la excepción era null
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0}. En proyectos de UWP, si usa objetos de interfaz de usuario en la prueba, podría usar el atributo [UITestMethod] en lugar de [TestMethod] para ejecutar la prueba en el subproceso de interfaz de usuario.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (No se pudo obtener el mensaje para una excepción del tipo {0} debido a una excepción.)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ "MSTest.TestAdapter" y "MSTest.TestFramework" deben tener la misma versión. Se encontró la versión "{0}" de "MSTest.TestAdapter" y la versión "{1}" de "MSTest.TestFramework". Asegúrese de que las versiones de los paquetes NuGet "MSTest.TestAdapter" y "MSTest.TestFramework" tienen la misma versión.
+
+ Wrong number of objects for permutation. Should be greater than zero.Número incorrecto de objetos para permutación. Debe ser una cantidad mayor que cero.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.fr.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.fr.xlf
index 0233a28fb8..fe1c9768e3 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.fr.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.fr.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ La méthode de nettoyage d’assembly « {0}.{1} » a expiré après {2}ms
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ La méthode de nettoyage de l’assembly « {0}.{1} » a été annulée
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ La méthode d'initialisation de l’assembly « {0}.{1} » a expiré après {2}ms
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ La méthode d’initialisation de l’assembly « {0}.{1} » a été annulée
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ Une exception s’est produite lors de l’énumération de l’attribut IDataSource sur « {0}.{1} » : {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ Une exception s’est produite lors du développement des lignes IDataSource à partir de l’attribut sur « {0}.{1} » : {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ Impossible de sérialiser les données de l’index {0} pour « {1} ». Toutes les données fournies via « IDataSource » doivent être sérialisables. Si vous devez tester des sources de données non sérialisables, veillez à ajouter l’attribut « TestDataSourceDiscovery » à votre assembly de test et définissez l’option de découverte sur « DuringExecution ».
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ Le nom d’affichage « {2} » sur les index {0} et {1} est dupliqué. Les noms d’affichage doivent être uniques.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.Le fichier '{0}' est introuvable.
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ Impossible d’exécuter la méthode de test « {0}.{1} » : les données de test ne correspondent pas aux paramètres de la méthode. Le nombre ou les types sont différents.
+Tester le ou les paramètres de {2} attendus, avec les types « {3} »,
+mais a reçu {4} argument(s), avec les types « {5} ».
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ Impossible d’exécuter la méthode de test « {0}.{1} » : la méthode a des paramètres, mais ne définit aucune source de test. Utilisez « [DataRow] », « [DynamicData] » ou une source de données « ITestDataSource » personnalisée pour fournir des données de test.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ La méthode de nettoyage de classe « {0}.{1} » a expiré après {2}ms
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ La méthode de nettoyage de la classe « {0}.{1} » a été annulée
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ La méthode d'initialisation de la classe « {0}.{1} » a expiré après {2}ms
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ La méthode d’initialisation de la classe « {0}.{1} » a été annulée
+
+ The parameter should not be null or empty.Le paramètre ne doit pas être une valeur Null ou être vide.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ MSTestAdapter n'a pas découvert de tests dans la classe '{0}' de l'assembly '{1}', car {2}.
+
+
+
+ {0} (Data Row {1})
+ {0} (ligne de données {1})
+
+
+
+ Debug Trace:
+ Trace du débogage :
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.Problème de déploiement de la série de tests : élément de déploiement incorrect : '{0}' : le répertoire de sortie '{1}' spécifie l'élément à déployer en dehors du répertoire racine du déploiement, ce qui n'est pas autorisé.
@@ -77,16 +177,108 @@
élément de déploiement '{0}' (répertoire de sortie '{1}')
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Discovery][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ Les fichiers « .runsettings » et « .testconfig.json » ont été détectés. Veuillez sélectionner un seul de ces fichiers de configuration de test.
+
+
+
+ {0}: {1}
+ {0} : {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ « {0} » : (Échec de l’obtention de la description de l’exception en raison d’une exception de type « {1} ».
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ Exceptions levées/s :
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ Le test {0} a été annulé
+
+
+
+ Test '{0}' timed out after {1}ms
+ Le test « {0} » a expiré après {1} ms
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ L’obtention d’attributs personnalisés pour le type {0} a levé une exception (ignorera et utilisera la méthode de réflexion) : {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ Le type du paramètre générique « {0} » n'a pas pu être déduit.
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ La méthode de test générique « {0} » n’a pas d’arguments, donc le paramètre générique ne peut pas être déduit.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ Deux types en conflit ont été trouvés pour le paramètre générique « {0} ». Les types en conflit sont « {1} » et « {2} ».
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ Valeur non valide '{0}' spécifiée pour la 'ClassCleanupLifecycle'. Les portées prises en charge sont {1}.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ Valeur non valide « {0} » spécifiée pour « Scope ». Les étendues prises en charge sont {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ Valeur non valide '{0}' spécifiée pour 'Workers'. La valeur doit être un entier non négatif.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ Paramètres non valides '{0}'. XmlAttribute inattendu : '{1}'.
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter a rencontré un élément inattendu '{0}' dans ses paramètres '{1}'. Supprimez cet élément, puis réessayez.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ Paramètres non valides '{0}'. XmlElement inattendu : '{1}'.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.Valeur non valide '{0}' pour l’entrée runsettings '{1}', le paramètre sera ignoré.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ Valeur non valide '{0}' pour l’entrée runsettings '{1}', le paramètre sera ignoré.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ Avertissement : L'adaptateur MSTest V2 ne prend pas en charge les fichiers testsettings ou vsmdi.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}Problème de déploiement de la série de tests : l'assembly ou le module '{0}' est introuvable. Raison : {1}
@@ -97,21 +289,309 @@
Problème de déploiement de la série de tests : l'assembly ou le module '{0}' est introuvable.
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ Une version antérieure du package MSTestV2 est chargée dans l’assembly. La découverte de tests risque de ne pas découvrir tous les tests de données s’ils dépendent du fichier '.runsettings'.
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ L’entrée Runsettings « <ExecutionApartmentState>STA</ExecutionApartmentState> » n’est pas prise en charge sur les systèmes d’exploitation non Windows.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ L'exécution de tests dans l'une des sources fournies n'est pas prise en charge pour la plateforme sélectionnée
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ Échec de la découverte de tests à partir de l'assembly {0}. Raison :{1}
+
+
+
+ File does not exist: {0}
+ Fichier inexistant : {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ La méthode de nettoyage de test « {0}.{1} » a expiré après {2}ms
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ La méthode de nettoyage du test « {0}.{1} » a été annulée
+
+
+
+ TestContext cannot be Null.
+ TestContext ne peut pas être null.
+
+
+
+ TestContext Messages:
+ Messages TestContext :
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ La méthode d’initialisation de test « {0}.{1} » a expiré après {2}ms
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ La méthode d’initialisation du test « {0}.{1} » a été annulée
+
+
+
+ Test method {0} was not found.
+ Méthode de test {0} introuvable.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ Parallélisation des tests activée pour {0} (Workers : {1}, Scope : {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ Impossible de charger les types à partir de la source de tests '{0}'. Une partie ou l'ensemble des tests de cette source ne peuvent pas être découverts.
+Erreur : {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ La méthode Cleanup d'assembly {0}.{1} a échoué. Message d'erreur : {2}. StackTrace : {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ La méthode d'assembly Initialization {0}.{1} a levé une exception. {2} : {3}. Abandon de l'exécution de tests.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ La méthode de classe Cleanup {0}.{1} a échoué. Message d'erreur : {2}. Trace de la pile : {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ La méthode de classe Initialization {0}.{1} a levé une exception. {2} : {3}.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ La méthode {0}.{1} présente une signature incorrecte. La méthode doit être statique, publique et ne doit retourner aucune valeur ni accepter aucun paramètre. En outre, si vous utilisez async-await dans la méthode, return-type doit être « Task » ou « ValueTask ».
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ La méthode {0}.{1} présente une signature incorrecte. La méthode doit être statique, publique et ne doit retourner aucune valeur et accepter un seul paramètre de type TestContext. En outre, si vous utilisez async-await dans la méthode, return-type doit être « Task » ou « ValueTask ».
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ La méthode TestCleanup {0}.{1} a levé une exception. {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ Erreur lors de l'appel de la méthode Test Cleanup pour la classe de test {0} : {1}
+
+
+
+ TestCleanup Stack Trace
+ Trace de la pile TestCleanup
+
+ Data source '{0}' cannot be found in the test configuration settingsSource de données '{0}' introuvable dans les paramètres de configuration de test
+
+ --- End of inner exception stack trace ---
+ --- Fin de la trace de la pile d'exception interne ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}L'adaptateur de test unitaire n'a pas réussi à se connecter à la source de données ou à lire les données. Pour plus d'informations sur le dépannage de l'erreur, consultez "Résolution des problèmes liés aux tests unitaires pilotés par les données" (http://go.microsoft.com/fwlink/?LinkId=62412) dans MSDN Library. Détails de l'erreur : {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031 : la classe {0} n'a pas de propriété TestContext valide. TestContext doit être de type TestContext, doit être non statique et doit être public. Par exemple : public TestContext TestContext.
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007 : la méthode {1} définie dans la classe {0} ne dispose pas d'une signature correcte. Une méthode de test marquée avec l'attribut [TestMethod] doit être non statique, doit utiliser void pour return-type et ne doit accepter aucun paramètre. Exemple : public void Test.Class1.Test(). En outre, si vous utilisez async-await dans la méthode test, return-type doit être « Task » ou « ValueTask ». Exemple : public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054 : {0}.{1}possède un attribut de délai d’expiration non valide. Le délai d’expiration doit être un nombre entier supérieur à 0.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014 : {0} : impossible de définir plus d'une méthode avec l'attribut AssemblyCleanup à l'intérieur d'un assembly.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013 : {0} : impossible de définir plus d'une méthode avec l'attribut AssemblyInitialize à l'intérieur d'un assembly.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026 : {0} : impossible de définir plus d'une méthode avec l'attribut ClassCleanup à l'intérieur d'une classe.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025 : {0} : impossible de définir plus d'une méthode avec l'attribut ClassInitialize à l'intérieur d'une classe.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024 : {0} : impossible de définir plus d'une méthode avec l'attribut TestCleanup.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018 : {0} : impossible de définir plus d'une méthode avec l'attribut TestInitialize.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001 : attribut TestClass défini sur la classe non publique {0}
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023 : {0} : Impossible de définir la propriété prédéfinie {2} sur la méthode {1}.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ Attribut TestClass défini sur une classe non abstraite générique {0}
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021 : {0} : Une propriété null ou vide personnalisée est définie sur la méthode {1}. La propriété personnalisée doit posséder un nom valide.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ Une exception non gérée a été levée par la méthode « Execute ». Veuillez signaler cette erreur à l’auteur de l’attribut « {0} ».
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ L'attribut ExpectedException défini dans la méthode de test {0}.{1} a levé une exception durant la construction.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ Échec de l'obtention de l'exception levée par la méthode de test {0}.{1}.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ La méthode Initialization {0}.{1} a levé une exception. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ Impossible de créer une instance de la classe {0}. Erreur : {1}.
+
+
+
+ Method {0}.{1} does not exist.
+ La méthode {0}.{1} n'existe pas.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ La méthode de test « {0}.{1} » possède plusieurs attributs dérivés de « {2} » qui lui sont définis. Un seul attribut de ce type est autorisé.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ Erreur lors de l'exécution du test. L'extension n'a retourné aucun résultat. Si vous utilisez l'extension de TestMethodAttribute, contactez le fournisseur.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ Impossible de trouver un constructeur valide pour la classe de test « {0} ». Les constructeurs valides sont « publics » et sans paramètre ou avec un paramètre de type « TestContext ».
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ Propriété {0}.TestContext introuvable. Erreur :{1}.
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ Impossible de définir la propriété TestContext pour la classe {0}. Erreur : {1}.
+
+
+
+ The {0}.TestContext has incorrect type.
+ {0}.TestContext possède un type incorrect.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ La méthode {0}.{1} présente une signature incorrecte. La méthode doit être non statique, publique et ne doit retourner aucune valeur ni accepter aucun paramètre. En outre, si vous utilisez async-await dans la méthode, return-type doit être « Task » ou « ValueTask ».
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ La méthode de test {0}.{1} a levé une exception :
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ Impossible d'obtenir le type {0}. Erreur : {1}.
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ Le code appelé a levé une exception qui a été interceptée, mais la valeur de l’exception était nul
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0} Pour les projets UWP, si vous utilisez des objets d'IU dans un test, utilisez l'attribut [UITestMethod] à la place de [TestMethod] pour exécuter le test dans le thread d'interface utilisateur.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (Échec de la réception du message pour une exception de type {0} en raison d'une exception.)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ « MSTest.TestAdapter » et « MSTest.TestFramework » doivent avoir la même version. Version de « MSTest.TestAdapter » : « {0} » et version de « MSTest.TestFramework » : « {1} ». Veuillez vous assurer que les versions des packages NuGet « MSTest.TestAdapter » et « MSTest.TestFramework » sont identiques.
+
+ Wrong number of objects for permutation. Should be greater than zero.Nombre d'objets erroné pour la permutation. Il doit être supérieur à zéro.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.it.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.it.xlf
index 4808a47f8f..01041f4d35 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.it.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.it.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ Metodo di pulizia dell’assembly '{0}. Time out di {1}' dopo {2} ms
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ Il metodo di pulizia dell'assembly "{0}.{1}" è stato annullato
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ Metodo di inizializzazione dell'assembly '{0}. Timeout di {1}' dopo {2} ms
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ Il metodo di inizializzazione dell'assembly "{0}.{1}" è stato annullato
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ Si è verificata un'eccezione durante l'enumerazione dell'attributo IDataSource in "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ Si è verificata un'eccezione durante l'espansione delle righe IDataSource dall'attributo in "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ Non è possibile serializzare i dati nell'indice {0} per "{1}". Tutti i dati forniti tramite "IDataSource" devono essere serializzabili. Se è necessario testare origini dati non serializzabili, assicurarsi di aggiungere l'attributo "TestDataSourceDiscovery" nell'assembly di test e impostare l'opzione di individuazione su "DuringExecution".
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ Il nome visualizzato "{2}" negli indici {0} e {1} è duplicato. I nomi visualizzati devono essere univoci.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.Il file '{0}' non è stato trovato.
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ Non è possibile eseguire il metodo di test '{0}.{1}': i dati del test non corrispondono ai parametri del metodo. Il numero o il tipo è diverso.
+Il test prevedeva {2} parametri, con tipi '{3}',
+ma ha ricevuto {4} argomenti, con tipi '{5}'.
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ Impossibile eseguire il metodo di test "{0}.{1}": il metodo contiene parametri, ma non definisce alcuna origine test. Usare "[DataRow]", "[DynamicData]" o un'origine dati "ITestDataSource" personalizzata per fornire i dati del test.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ Time out del metodo di pulizia della classe '{0}. Time out di {1}' dopo {2} ms
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ Il metodo di pulizia della classe "{0}.{1}" è stato annullato
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ Metodo di inizializzazione della classe '{0}. Timeout di {1}' dopo {2} ms
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ Il metodo di inizializzazione della classe "{0}.{1}" è stato annullato
+
+ The parameter should not be null or empty.Il parametro non deve essere vuoto o Null.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ MSTestAdapter non è riuscito a individuare test nella classe '{0}' dell'assembly '{1}' perché {2}.
+
+
+
+ {0} (Data Row {1})
+ {0} (riga dati {1})
+
+
+
+ Debug Trace:
+ Traccia di debug:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.Problema di distribuzione dell'esecuzione dei test: l'elemento di distribuzione '{0}' non è corretto. La directory di output '{1}' specifica l'elemento da distribuire all'esterno della directory radice della distribuzione e questa operazione non consentita.
@@ -77,16 +177,108 @@
elemento di distribuzione '{0}' (directory di output '{1}')
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Individuazione][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ Sono stati rilevati sia i file '.runsettings' sia '.testconfig.json'. Selezionare solo uno di questi file di configurazione di test.
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ "{0}": (non è stato possibile ottenere la descrizione dell'eccezione a causa di un'eccezione di tipo "{1}".
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ Eccezioni generate:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ Il test '{0}' è stato annullato
+
+
+
+ Test '{0}' timed out after {1}ms
+ Timeout del test '{0}' dopo {1} ms
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ Il recupero degli attributi personalizzati per il tipo {0} ha generato un'eccezione (verrà ignorata e verrà usata la modalità reflection): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ Non è possibile dedurre il tipo del parametro generico '{0}'.
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ Il metodo di test generico '{0}' non ha argomenti, quindi non è possibile dedurre il parametro generico.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ Sono stati trovati due tipi in conflitto per il parametro generico '{0}'. I tipi in conflitto sono '{1}' e '{2}'.
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ Il valore '{0}', specificato per 'ClassCleanupLifecycle', non è valido. I valori supportati per Scope sono {1}.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ Il valore '{0}', specificato per 'Scope', non è valido. I valori supportati per Scope sono {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ Il valore '{0}', specificato per 'Workers', non è valido. Il valore deve essere un numero intero non negativo.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ Le impostazioni '{0}' non sono valide. Elemento XmlAttribute imprevisto: '{1}'.
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter ha rilevato un elemento imprevisto '{0}' nelle impostazioni '{1}'. Rimuovere l'elemento e riprovare.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ Le impostazioni '{0}' non sono valide. Elemento XmlElement imprevisto: '{1}'.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.Valore non valido '{0}' per la voce runsettings '{1}'. L'impostazione verrà ignorata.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ Valore non valido '{0}' per la voce runsettings '{1}'. L'impostazione verrà ignorata.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ Avviso: con l'adattatore MSTest V2 non è possibile usare un file testsettings o un file vsmdi.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}Problema di distribuzione dell'esecuzione dei test: l'assembly o il modulo '{0}' non è stato trovato. Motivo: {1}
@@ -97,21 +289,309 @@
Problema di distribuzione dell'esecuzione dei test: l'assembly o il modulo '{0}' non è stato trovato.
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ Nell'assembly è caricata una versione precedente del pacchetto MSTestV2. L'individuazione dei test potrebbe non riuscire a individuare tutti i test dei dati se dipendono dal file '.runsettings'.
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ La voce Runsettings '<ExecutionApartmentState>STA</ExecutionApartmentState>' non è supportata nei sistemi operativi non Windows.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ L'esecuzione di test in una delle origini specificate non è supportata per la piattaforma selezionata
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ Non è stato possibile individuare i test dall'assembly {0}. Motivo: {1}
+
+
+
+ File does not exist: {0}
+ Il file {0} non esiste
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ Time out del metodo di pulizia della classe dei test '{0}. Time out di {1}' dopo {2} ms
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ Il metodo di pulizia del test "{0}.{1}" è stato annullato
+
+
+
+ TestContext cannot be Null.
+ TestContext non può essere Null.
+
+
+
+ TestContext Messages:
+ Messaggi di TestContext:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ Metodo di inizializzazione del test '{0}. Timeout di {1}' dopo {2} ms
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ Il metodo di inizializzazione del test "{0}.{1}" è stato annullato
+
+
+
+ Test method {0} was not found.
+ Il metodo di test {0} non è stato trovato.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ Parallelizzazione test abilitata per {0} (Workers: {1}. Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ Non è possibile caricare i tipi dall'origine test '{0}'. È possibile che alcuni o tutti i test non siano stati individuati in questa origine.
+Errore: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ Il metodo di pulizia assembly {0}.{1} non è riuscito. Messaggio di errore: {2}. Analisi dello stack: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ Il metodo di inizializzazione assembly {0}.{1} ha generato un'eccezione. {2}: {3}. L'esecuzione del test verrà interrotta.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ Il metodo di pulizia classi {0}.{1} non è riuscito. Messaggio di errore: {2}. Analisi dello stack: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ Il metodo di inizializzazione classi {0}.{1} ha generato un'eccezione. {2}: {3}.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ La firma del metodo {0}.{1}non è corretta. Il metodo deve essere statico e pubblico, non deve restituire un valore né accettare parametri. Se inoltre si usa async-await nel metodo di test, il tipo restituito deve essere 'Task' o 'ValueTask'.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ La firma del metodo {0}.{1}non è corretta. Il metodo deve essere statico e pubblico, non deve restituire un valore e deve accettare un singolo parametro di tipo TestContext. Se inoltre si usa async-await nel metodo di test, il tipo restituito deve essere 'Task' o 'ValueTask'.
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ Il metodo TestCleanup {0}.{1} ha generato un'eccezione. {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ Si è verificato un errore durante la chiamata del metodo TestCleanup per la classe di test {0}: {1}
+
+
+
+ TestCleanup Stack Trace
+ Analisi dello stato di TestCleanup
+
+ Data source '{0}' cannot be found in the test configuration settingsL'origine dati '{0}' non è stata trovata nelle impostazioni della configurazione di test
+
+ --- End of inner exception stack trace ---
+ --- Fine dell'analisi dello stack dell'eccezione interna ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}L'adattatore di unit test non è riuscito a connettersi all'origine dati o a leggere i dati. Per altre informazioni sulla risoluzione di questo errore, vedere "Risoluzione dei problemi relativi a unit test basati su dati" (http://go.microsoft.com/fwlink/?LinkId=62412) in MSDN Library. Dettagli errore: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: la classe {0} non dispone di una proprietà TestContext valida. La proprietà TestContext deve essere di tipo TestContext, non deve essere statica e deve essere pubblica. Ad esempio: public TestContext TestContext.
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: la firma del metodo {1} definito nella classe {0} non è corretta. Il metodo di test contrassegnato con l'attributo [TestMethod] deve essere pubblico e non statico, non deve accettare parametri e deve includere un tipo restituito void. Esempio: public void Test.Class1.Test(). Se inoltre nel metodo di test si usa async-await, il tipo restituito deve essere 'Task' o 'ValueTask'. Esempio: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}.{1} ha un attributo Timeout non valido. Il timeout deve essere un valore intero maggiore di 0.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: non è possibile definire più di un metodo con l'attributo AssemblyCleanup all'interno di un assembly.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: non è possibile definire più di un metodo con l'attributo AssemblyInitialize all'interno di un assembly.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: non è possibile definire più di un metodo con l'attributo ClassCleanup all'interno di una classe.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: non è possibile definire più di un metodo con l'attributo ClassInitialize all'interno di una classe.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: non è possibile definire più di un metodo con l'attributo TestCleanup.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: non è possibile definire più di un metodo con l'attributo TestInitialize.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: è stato definito l'attributo TestClass per la classe non pubblica {0}
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: non è possibile definire la proprietà predefinita {2} per il metodo {1}.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ Attributo TestClass definito nella classe generica non astratta {0}
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: per il metodo {1} è stata definita una proprietà personalizzata Null o vuota. Specificare un nome valido per la proprietà personalizzata.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ Un'eccezione non gestita è stata generata dal metodo 'Execute'. Segnalare questo errore all'autore dell'attributo '{0}'.
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ L'attributo ExpectedException definito nel metodo di test {0}.{1} ha generato un'eccezione durante la costruzione.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ Non è stato possibile ottenere l'eccezione generata dal metodo di test {0}.{1}.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ Il metodo di inizializzazione {0}.{1} ha generato un'eccezione. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ Non è possibile creare un'istanza della classe {0}. Errore: {1}.
+
+
+
+ Method {0}.{1} does not exist.
+ Il metodo {0}.{1} non esiste.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ Il metodo di test '{0}.{1}' contiene più attributi derivati da '{2}' definito in esso. È consentito solo uno di tali attributi.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ Si è verificato un errore durante l'esecuzione del test. L'estensione non ha restituito alcun risultato. Se si usa l'estensione di TestMethodAttribute, contattare il fornitore.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ Impossibile trovare un costruttore valido per la classe di test '{0}'. I costruttori validi sono 'public' e senza parametri o con un parametro di tipo 'TestContext'.
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ La proprietà {0}.TestContext non è stata trovata. Errore: {1}.
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ Non è possibile impostare la proprietà TestContext per la classe {0}. Errore: {1}.
+
+
+
+ The {0}.TestContext has incorrect type.
+ Il tipo di {0}.TestContext non è corretto.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ La firma del metodo {0}.{1}non è corretta. Il metodo deve essere non statico e pubblico, non deve restituire un valore né accettare parametri. Se inoltre si usa async-await nel metodo di test, il tipo restituito deve essere 'Task' o 'ValueTask'.
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ Il metodo di test {0}.{1} ha generato un'eccezione:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ Non è possibile ottenere il tipo {0}. Errore: {1}.
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ Il codice chiamato ha generato un'eccezione che è stata rilevata, ma il valore dell'eccezione è Null
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0}. Se, per i progetti della piattaforma UWP, nel test si usano oggetti dell'interfaccia utente, provare a specificare l'attributo [UITestMethod] invece di [TestMethod] per eseguire il test nel thread di UI.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ Non è stato possibile ottenere il messaggio per un'eccezione di tipo {0} a causa di un'eccezione.
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ 'MSTest.TestAdapter' e 'MSTest.TestFramework' devono avere la stessa versione. Trovato 'MSTest.TestAdapter' versione '{0}' e 'MSTest.TestFramework' versione '{1}'. Assicurarsi che le versioni dei pacchetti NuGet 'MSTest.TestAdapter' e 'MSTest.TestFramework' siano identiche.
+
+ Wrong number of objects for permutation. Should be greater than zero.Il numero di oggetti non è corretto per la permutazione. Deve essere maggiore di zero.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ja.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ja.xlf
index 68681a9ea2..132533c564 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ja.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ja.xlf
@@ -2,16 +2,117 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ アセンブリ クリーンアップ メソッド '{0}.{1}' が {2}ms 後にタイムアウトしました
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ アセンブリ クリーンアップ メソッド '{0}.{1}' が取り消されました
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ アセンブリ初期化メソッド '{0}.{1}' が {2}ms 後にタイムアウトになりました
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ アセンブリ初期化メソッド '{0}.{1}' が取り消されました
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ "{0}.{1}" で IDataSource 属性を列挙中に例外が発生しました: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ "{0}.{1}" の属性から IDataSource 行を展開中に例外が発生しました: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ "{1}" のインデックス {0} のデータをシリアル化できません。"IDataSource" を介して提供されるすべてのデータはシリアル化可能である必要があります。シリアル化できないデータ ソースをテストする必要がある場合は、テスト アセンブリに "TestDataSourceDiscovery" 属性を追加し、検出オプションを "DuringExecution" に設定してください。
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ インデックス {0} と {1} の表示名 "{2}" が重複しています。表示名は一意である必要があります。
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.ファイル '{0}' が見つかりませんでした。
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ テスト メソッド '{0}.{1}' を実行できません: テスト データがメソッド パラメーターと一致しません。カウントまたは型が異なります。
+型 '{3}'、
+ を持つ、予期された {2} パラメーターをテストします
+ただし、型 '{5}' の引数 {4} を受け取りました。
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ テスト メソッド '{0} を実行できません。{1}': メソッドにはパラメーターがありますが、テスト ソースは定義されていません。'[DataRow]'、'[DynamicData]'、カスタムの 'ITestDataSource' データ ソースを使用して、テスト データを提供します。
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ クラス クリーンアップ メソッド '{0}.{1}' が {2}ms 後にタイムアウトしました
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ クラス クリーンアップ メソッド '{0}.{1}' が取り消されました
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ クラス初期化メソッド '{0}.{1}' が {2}ms 後にタイムアウトになりました
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ クラス初期化メソッド '{0}.{1}' が取り消されました
+
+ The parameter should not be null or empty.パラメーターを null または空にすることはできません。
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ MSTestAdapter でアセンブリ '{1}' のクラス '{0}' にテストが見つかりませんでした。理由 {2}。
+
+
+
+ {0} (Data Row {1})
+ {0} (データ行 {1})
+
+
+
+ Debug Trace:
+ デバッグ トレース:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.テストの実行の配置問題です: 配置項目が正しくありません: '{0}': 出力ディレクトリ '{1}' は、項目が配置ルート ディレクトリ外に配置されるように指定していますが、それは許可されません。
@@ -77,16 +178,108 @@
配置項目 '{0}' (出力ディレクトリ '{1}')
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Discovery][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ '.runsettings' ファイルと '.testconfig.json' ファイルの両方が検出されました。これらのテスト構成ファイルのいずれか 1 つだけを選択してください。
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ "{0}": (種類が "{1}"の例外のため、例外の説明を取得できませんでした。
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ スローされた例外:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ テスト '{0}' が取り消されました
+
+
+
+ Test '{0}' timed out after {1}ms
+ テスト '{0}' が {1} ミリ秒後にタイムアウトしました
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ 型 {0} のカスタム属性を取得中に例外がスローされました (無視してリフレクションの方法を使用します): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ ジェネリック パラメーター '{0}' の型を推論できませんでした。
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ ジェネリック テスト メソッド '{0}' に引数がないため、ジェネリック パラメーターを推論できません。
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ ジェネリック パラメーター '{0}' に 2 つの競合する型が見つかりました。競合する型は '{1}' および '{2}' です。
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ 'ClassCleanupLifecycle' に無効な値 '{0}' が指定されました。サポートされているスコープは {1} です。
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ 無効な値 '{0}' が 'Scope' に指定されました。サポートされているスコープは {1} です。
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ 無効な値 '{0}' が 'Workers' に指定されました。値は負ではない整数である必要があります。
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ 設定 '{0}' は無効です。予期しない XmlAttribute: '{1}'。
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter で設定 '{1}' に予期しない要素 '{0}' が見つかりました。この要素を削除して、もう一度お試しください。
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ 設定 '{0}' は無効です。予期しない XmlElement: '{1}'。
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.runsettings エントリ '{1}' の値 '{0}' は無効です。設定は無視されます。
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ runsettings エントリ '{1}' の値 '{0}' は無効です。設定は無視されます。
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ 警告: testsettings ファイル、vsmdi ファイルは MSTest V2 アダプターではサポートされていません。
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}テストの実行の配置問題です: アセンブリまたはモジュール '{0}' が見つかりませんでした。理由: {1}
@@ -97,21 +290,309 @@
テストの実行の配置問題です: アセンブリまたはモジュール '{0}' が見つかりませんでした。
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ 古いバージョンの MSTestV2 パッケージがアセンブリに読み込まれています。`.runsettings` ファイルに依存している場合、テスト検出ですべてのデータ テストを検出できない可能性があります。
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ Runsettings エントリ '<ExecutionApartmentState>STA</ExecutionApartmentState>' は、Windows OS 以外ではサポートされていません。
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ 指定されたソースのいずれかでのテストの実行は、選択されたプラットフォームでサポートされていません
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ アセンブリ {0} からテストを検出できませんでした。理由:{1}
+
+
+
+ File does not exist: {0}
+ ファイルが存在しません: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ テスト クリーンアップ メソッド '{0}.{1}' が {2}ms 後にタイムアウトしました
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ テスト クリーンアップ メソッド '{0}.{1}' が取り消されました
+
+
+
+ TestContext cannot be Null.
+ TestContext を Null にすることはできません。
+
+
+
+ TestContext Messages:
+ TestContext メッセージ:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ テスト初期化メソッド '{0}.{1}' が {2}ms 後にタイムアウトになりました
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ テスト初期化メソッド '{0}.{1}' が取り消されました
+
+
+
+ Test method {0} was not found.
+ テスト メソッド {0} が見つかりませんでした。
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ {0} でテスト並列処理が有効にされています (Workers: {1}、Scope: {2})。
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ テスト ソース '{0}' から型を読み込むことができません。このソース内の一部またはすべてのテストが見つからない可能性があります。
+エラー: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ アセンブリ クリーンアップ メソッド {0}.{1} に失敗しました。エラー メッセージ: {2}。スタック トレース: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ アセンブリ初期化メソッド {0}.{1} は例外をスローしました。{2}: {3}。テストの実行を中止しています。
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ クラス クリーンアップ メソッド {0}.{1} に失敗しました。エラー メッセージ: {2}。スタック トレース: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ クラス初期化メソッド {0}.{1} は例外をスローしました。{2}: {3}。
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ メソッド {0}。{1} は不適切なシグネチャを含んでいます。メソッドは static および public である必要があり、値を返しません。また、パラメーターを受け取ることはできません。また、メソッドで async-await を使用している場合、戻り値の型は 'Task' または 'ValueTask' である必要があります。
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ メソッド {0}。{1} は不適切なシグネチャを含んでいます。メソッドは static および public である必要があり、値を返しません。また、TestContext 型の 1 つのパラメーターを受け取る必要があります。また、メソッドで async-await を使用している場合、戻り値の型は 'Task' または 'ValueTask' である必要があります。
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ TestCleanup メソッド {0}.{1} は例外をスローしました。{2}。
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ テスト クラス {0} のテスト クリーンアップ メソッドの呼び出しでエラーが発生しました: {1}
+
+
+
+ TestCleanup Stack Trace
+ TestCleanup スタック トレース
+
+ Data source '{0}' cannot be found in the test configuration settingsデータ ソース '{0}' がテスト構成の設定に見つかりません
+
+ --- End of inner exception stack trace ---
+ --- 内部例外スタック トレースの終わり ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}単体テスト アダプターがデータ ソースに接続できなかったか、データを読み取れませんでした。このエラーのトラブルシューティングの詳細については、MSDN ライブラリの「方法: データ ドリブン単体テストを作成する」(http://go.microsoft.com/fwlink/?LinkId=62412) をご覧ください。エラーの詳細: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: クラス {0} に有効な TestContext プロパティがありません。TestContext は TestContext 型で、非静的である必要があり、public である必要があります。たとえば、public TestContext TestContext です。
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: クラス {0} で定義されているメソッド {1} に適切なシグネチャが含まれていません。[TestMethod] 属性でマークされたテスト メソッドは、non-static および public である必要があり、戻り値の型は void である必要があります。また、パラメーターを受け取ることはできません。例: public void Test.Class1.Test()。また、テスト メソッドで async-await を使用している場合、戻り値の型は 'Task' または 'ValueTask' である必要があります。例: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}。{1} に無効な Timeout 属性があります。タイムアウトには、0 より大きい整数値を指定する必要があります。
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: 1 つのアセンブリ内で、AssemblyCleanup 属性を伴う 2 つ以上のメソッドを定義することはできません。
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: 1 つのアセンブリ内で、AssemblyInitialize 属性を伴う 2 つ以上のメソッドを定義することはできません。
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: 1 つのクラス内で、ClassCleanup 属性を伴う 2 つ以上のメソッドを定義することはできません。
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: 1 つのクラス内で、ClassInitialize 属性を伴う 2 つ以上のメソッドを定義することはできません。
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: TestCleanup 属性を伴う 2 つ以上のメソッドを定義することはできません。
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: TestInitialize 属性を伴う 2 つ以上のメソッドを定義することはできません。
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: TestClass 属性がパブリックでないクラス {0} で定義されています
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: メソッド {1} 上の以前に定義されたプロパティ {2} を定義することはできません。
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ 汎用の非抽象クラス {0}で定義された TestClass 属性
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: Null または空のカスタム プロパティが、メソッド {1} で定義されています。カスタム プロパティには有効な名前を指定しなければなりません。
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ 'Execute' メソッドによってハンドルされない例外がスローされました。属性 '{0}' の作成者にこのエラーを報告してください。
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ テスト メソッド {0}.{1} に定義されている ExpectedException 属性が、作成中に例外をスローしました。
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ テスト メソッド {0}.{1} によってスローされた例外を取得できませんでした。
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ 初期化メソッド {0}.{1} は例外をスローしました。{2}。
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ クラス {0} のインスタンスを作成できません。エラー: {1}。
+
+
+
+ Method {0}.{1} does not exist.
+ メソッド {0}.{1} は存在しません。
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ テスト メソッド '{0}.{1}' には、 '{2}' から派生した属性が複数定義されています。このような属性は 1 つしか許可されません。
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ テストの実行中にエラーが発生しました。拡張から結果が返されませんでした。TestMethodAttribute の拡張クラスを使用している場合は、ベンダーに連絡してください。
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ テスト クラス '{0}' の有効なコンストラクターが見つかりません。有効なコンストラクターは、'public' で、パラメーターがないもの、または 'TestContext' 型のパラメーター 1 個を取るものです。
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ プロパティ {0}.TestContext が見つかりません。エラー: {1}。
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ クラス {0} の TestContext プロパティを設定できません。エラー: {1}。
+
+
+
+ The {0}.TestContext has incorrect type.
+ {0}.TestContext は不適切な型を含んでいます。
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ メソッド {0}。{1} は不適切なシグネチャを含んでいます。メソッドは non-static および public である必要があり、値を返しません。また、パラメーターを受け取ることはできません。また、メソッドで async-await を使用している場合、戻り値の型は 'Task' または 'ValueTask' である必要があります。
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ テスト メソッド {0}.{1} が例外をスローしました:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ 型 {0} を取得できません。エラー: {1}。
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ 呼び出されたコードはキャッチされた例外をスローしましたが、例外値が null でした
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0} UWP プロジェクトについて、テスト内で UI オブジェクトを使用している場合は、[TestMethod] の代わりに [UITestMethod] 属性を使用して UI スレッド内でテストを実行することを検討してください。
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (例外が発生したため、型 {0} の例外のメッセージを取得できませんでした。)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ 'MSTest.TestAdapter' と 'MSTest.TestFramework' は同じバージョンである必要があります。'MSTest.TestAdapter' バージョン '{0}' と 'MSTest.TestFramework' バージョン '{1}' が見つかりました。'MSTest.TestAdapter' と 'MSTest.TestFramework' の NuGet パッケージのバージョンが同じであることを確認してください。
+
+ Wrong number of objects for permutation. Should be greater than zero.順列のオブジェクト数が正しくありません。ゼロより大きくなければなりません。
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ko.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ko.xlf
index d602b1e260..55a932381d 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ko.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ko.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ {2}밀리초 후 어셈블리 정리 메서드 '{0}.{1}'이(가) 시간 초과되었습니다.
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ 어셈블리 정리 메서드 '{0}.{1}'이(가) 취소되었습니다.
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ {2}밀리초 후 '{0}.{1}' 어셈블리 초기화 메서드의 시간이 초과되었습니다.
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ 어셈블리 초기화 메서드 '{0}.{1}'(이)가 취소되었습니다.
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ "{0}.{1}"에서 IDataSource 특성을 열거하는 동안 예외가 발생했습니다. {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ "{0}.{1}"의 특성에서 IDataSource 행을 확장하는 동안 예외가 발생했습니다. {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ "{1}"에 대한 {0} 인덱스의 데이터를 직렬화할 수 없습니다. "IDataSource"를 통해 제공된 모든 데이터를 직렬화할 수 있어야 합니다. 직렬화할 수 없는 데이터 원본을 테스트해야 하는 경우 테스트 어셈블리에 "TestDataSourceDiscovery" 특성을 추가하고 검색 옵션을 "DuringExecution"으로 설정하세요.
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ {0} 및 {1} 인덱스의 "{2}" 표시 이름이 중복됩니다. 표시 이름은 고유해야 합니다.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.'{0}' 파일을 찾을 수 없습니다.
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ 테스트 메서드 '{0}{1}'을(를) 실행할 수 없음: 테스트 데이터가 메서드 매개 변수와 일치하지 않습니다. 개수 또는 형식이 다릅니다.
+테스트에 {2} 매개 변수로 ‘{3}’ 형식이 필요하지만,
+{4} 인수의 ‘{5}’ 형식을 받았습니다.
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ 테스트 메서드 '{0}{1}'을(를) 실행할 수 없음: 메서드에 매개 변수가 있지만 테스트 원본을 정의하지 않습니다. '[DataRow]', '[DynamicData]' 또는 사용자 지정 'ITestDataSource' 데이터 원본을 사용하여 테스트 데이터를 제공합니다.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ {2}밀리초 후 클래스 정리 메서드 '{0}.{1}'이(가) 시간 초과되었습니다.
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ 클래스 정리 메서드 '{0}.{1}'이(가) 취소되었습니다.
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ {2}밀리초 후 '{0}.{1}' 클래스 초기화 메서드의 시간이 초과되었습니다.
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ '클래스 초기화 메서드 '{0}.{1}'이(가) 취소되었습니다.
+
+ The parameter should not be null or empty.매개 변수는 null이거나 비워 둘 수 없습니다.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ MSTestAdapter가 {2} 때문에 어셈블리 '{1}'의 클래스 '{0}'에서 테스트를 검색하지 못했습니다.
+
+
+
+ {0} (Data Row {1})
+ {0}(데이터 행 {1})
+
+
+
+ Debug Trace:
+ 디버그 추적:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.테스트 실행 배포 문제: 잘못된 배포 항목: '{0}': 출력 디렉터리 '{1}'에서 항목을 배포 루트 디렉터리 외부에 배포하도록 지정하며 이는 허용되지 않습니다.
@@ -77,16 +177,108 @@
배포 항목 '{0}'(출력 디렉터리 '{1}')
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][검색][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ '.runsettings' 및 '.testconfig.json' 파일이 모두 검색되었습니다. 이러한 테스트 구성 파일 중 하나만 선택하세요.
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ "{0}": ("{1}" 형식의 예외로 인해 예외 설명을 가져오지 못했습니다.
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ 예외 발생:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ 테스트 '{0}'이(가) 취소되었습니다.
+
+
+
+ Test '{0}' timed out after {1}ms
+ 테스트 '{0}'이(가) {1}밀리초 후에 시간 초과되었습니다.
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ {0} 형식에 대한 사용자 지정 특성을 가져오는 데 예외가 발생했습니다(무시하고 리플렉션 방법 사용). {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ 제네릭 매개 변수 '{0}'의 형식을 유추할 수 없습니다.
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ 제네릭 테스트 메서드 '{0}'에 인수가 없으므로 제네릭 매개 변수를 유추할 수 없습니다.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ 제네릭 매개 변수 '{0}'에 대해 충돌하는 두 가지 형식을 찾았습니다. 충돌하는 형식은 '{1}' 및 ''{2}입니다.
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ 'ClassCleanupLifecycle'에 대해 '{0}' 잘못된 값이 지정되었습니다. 지원되는 범위는 {1}입니다.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ 'Scope'에 대해 잘못된 값 '{0}'이(가) 지정되었습니다. 지원되는 범위는 {1}입니다.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ 'Workers'에 대해 잘못된 값 '{0}'이(가) 지정되었습니다. 이 값은 음수가 아닌 정수여야 합니다.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ '{0}' 설정이 잘못되었습니다. 예기치 않은 XmlAttribute '{1}'이(가) 있습니다.
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter의 '{1}' 설정에서 예기치 않은 요소 '{0}'이(가) 발견되었습니다. 이 요소를 제거하고 다시 시도하세요.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ '{0}' 설정이 잘못되었습니다. 예기치 않은 XmlElement '{1}'이(가) 있습니다.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.runsettings 항목 '{1}'에 대해 '{0}' 값이 잘못되었습니다. 설정은 무시됩니다.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ runsettings 항목 '{1}'에 대해 '{0}' 값이 잘못되었습니다. 설정은 무시됩니다.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ 경고: MSTest V2 어댑터에서는 testsettings 파일 또는 vsmdi 파일이 지원되지 않습니다.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}테스트 실행 배포 문제: 어셈블리 또는 모듈 '{0}'을(를) 찾을 수 없습니다. 이유: {1}
@@ -97,21 +289,309 @@
테스트 실행 배포 문제: 어셈블리 또는 모듈 '{0}'을(를) 찾을 수 없습니다.
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ 이전 버전 MSTestV2 패키지가 어셈블리에 로드되어 테스트 검색이 '.runsettings' 파일에 종속된 경우 모든 데이터 테스트를 검색하지 못할 수 있습니다.
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ Runsettings 항목 '<ExecutionApartmentState>STA</ExecutionApartmentState>'는 Windows 이외의 OS에서는 지원되지 않습니다.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ 선택된 플랫폼의 경우 제공된 소스에서 테스트를 실행할 수 없습니다.
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ 어셈블리 {0}에서 테스트를 검색하지 못했습니다. 이유:{1}
+
+
+
+ File does not exist: {0}
+ 파일이 없습니다. {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ {2}밀리초 후 테스트 정리 메서드 '{0}.{1}'이(가) 시간 초과되었습니다.
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ 테스트 정리 메서드 '{0}.{1}'이(가) 취소되었습니다.
+
+
+
+ TestContext cannot be Null.
+ TestContext는 null일 수 없습니다.
+
+
+
+ TestContext Messages:
+ TestContext 메시지:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ {2}밀리초 후 '{0}.{1}' 테스트 초기화 메서드의 시간이 초과되었습니다.
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ 테스트 초기화 메서드 '{0}.{1}'이(가) 취소되었습니다.
+
+
+
+ Test method {0} was not found.
+ {0} 테스트 메서드를 찾을 수 없습니다.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ {0}에 대해 테스트 병렬 처리를 사용합니다(Workers: {1}, Scope: {2}).
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ 테스트 소스 '{0}'에서 형식을 로드할 수 없습니다. 이 소스의 일부 또는 모든 테스트를 검색할 수 없습니다.
+오류: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ 어셈블리 정리 메서드 {0}.{1}이(가) 실패했습니다. 오류 메시지: {2}. StackTrace: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ 어셈블리 초기화 메서드 {0}.{1}에서 예외를 throw했습니다. {2}: {3}. 테스트 실행을 중단합니다.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ 클래스 정리 메서드 {0}.{1}이(가) 실패했습니다. 오류 메시지: {2}. 스택 추적: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ 클래스 초기화 메서드 {0}.{1}에서 예외를 throw했습니다. {2}: {3}
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ {0}.{1} 메서드의 서명이 잘못되었습니다. 메서드는 정적이고 공용이어야 하며, 값을 반환하거나 매개 변수를 취하지 않습니다. 또한 메서드에서 비동기 대기를 사용하는 경우 반환 형식은 'Task' 또는 'ValueTask'여야 합니다.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ {0}.{1} 메서드의 서명이 잘못되었습니다. 메서드는 static, public이어야 하고, 값을 반환하지 않으며, TestContext 형식의 단일 매개 변수를 사용해야 합니다. 또한 메서드에서 비동기 대기를 사용하는 경우 반환 형식은 'Task' 또는 'ValueTask'여야 합니다.
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ TestCleanup 메서드 {0}.{1}에서 예외가 발생했습니다. {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ 테스트 클래스 {0}에 대한 테스트 정리 메서드를 호출하는 오류: {1}
+
+
+
+ TestCleanup Stack Trace
+ TestCleanup 스택 추적
+
+ Data source '{0}' cannot be found in the test configuration settings테스트 구성 설정에서 데이터 원본 '{0}'을(를) 찾을 수 없습니다.
+
+ --- End of inner exception stack trace ---
+ --- 내부 예외 스택 추적의 끝 ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}단위 테스트 어댑터가 데이터 원본에 연결하거나 데이터를 읽지 못했습니다. 이 오류를 해결하는 방법에 대한 자세한 내용은 MSDN 라이브러리에서 "데이터 기반 단위 테스트 문제 해결"(http://go.microsoft.com/fwlink/?LinkId=62412)을 참조하십시오. 오류 세부 정보: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: {0} 클래스에 유효한 TestContext 속성이 없습니다. TestContext는 TestContext 유형이어야 하고, 정적이 아니어야 하며, 일반적이어야 합니다. 예: public TestContext TestContext.
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: 클래스 {0}에 정의된 메서드 {1}에 올바른 서명이 없습니다. [TestMethod] 특성으로 표시된 테스트 메서드는 non-static, public, return-type이 void여야 하며 매개 변수를 사용하지 않아야 합니다. 예: public void Test.Class1.Test(). 또한 테스트 메서드에서 비동기 대기를 사용하는 경우 반환 형식은 Task여야 합니다. 예: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}.{1}에 잘못된 Timeout 특성이 있습니다. 시간 제한 값은 0보다 큰 정수여야 합니다.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: 어셈블리 내부에서 AssemblyCleanup 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: 어셈블리 내부에서 AssemblyInitialize 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: 클래스 내부에서 ClassCleanup 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: 클래스 내부에서 ClassInitialize 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: TestCleanup 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: TestInitialize 특성을 사용하는 메서드를 여러 개 정의할 수 없습니다.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: public이 아닌 클래스 {0}에서 TestClass 특성을 정의했습니다.
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: {1} 메서드에서 미리 정의된 속성 {2}을(를) 정의할 수 없습니다.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ 일반 비추상 클래스 {0}에 정의된 TestClass 속성
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: {1} 메서드에서 Null 또는 빈 사용자 지정 속성을 정의했습니다. 사용자 지정 속성에는 올바른 이름이 지정되어 있어야 합니다.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ 'Execute' 메서드에서 처리되지 않은 예외가 발생했습니다. '{0}' 특성의 작성자에게 이 오류를 보고하세요.
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ 테스트 메서드 {0}.{1}에 정의된 ExpectedException 특성이 생성하는 동안 예외를 throw했습니다.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ 테스트 메서드 {0}.{1}에서 throw한 예외를 가져오지 못했습니다.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ 초기화 메서드 {0}.{1}에서 예외를 throw했습니다. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ {0} 클래스의 인스턴스를 만들 수 없습니다. 오류: {1}
+
+
+
+ Method {0}.{1} does not exist.
+ {0}.{1} 메서드가 없습니다.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ 테스트 메서드 '{0}.{1}'에 {2}에서 파생된 여러 특성이 정의되어 있습니다. 이러한 특성은 하나만 허용됩니다.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ 테스트를 실행하는 중에 오류가 발생했습니다. 확장에서 결과가 반환되지 않았습니다. TestMethodAttribute 확장을 사용하는 경우 공급업체에 문의하세요.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ 테스트 클래스 '{0}'에 대한 유효한 생성자를 찾을 수 없습니다. 유효한 생성자는 'public'이며 매개 변수가 없거나 'TestContext' 유형의 매개 변수가 하나 있습니다.
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ {0}.TestContext 속성을 찾을 수 없습니다. 오류: {1}
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ {0} 클래스에 대해 TestContext 속성을 설정할 수 없습니다. 오류: {1}
+
+
+
+ The {0}.TestContext has incorrect type.
+ {0}.TestContext의 형식이 잘못되었습니다.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ {0}.{1} 메서드의 서명이 잘못되었습니다. 메서드는 정적이 아니고 공용이어야 하며, 값을 반환하거나 매개 변수를 사용할 수 없습니다. 또한 메서드에서 비동기 대기를 사용하는 경우 반환 형식은 'Task' 또는 'ValueTask'여야 합니다.
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ 테스트 메서드 {0}.{1}에서 예외를 throw했습니다.
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ {0} 형식을 가져올 수 없습니다. 오류: {1}
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ 호출된 코드에서 확인된 예외가 발생했지만 예외 값이 null입니다.
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0} UWP 프로젝트의 경우 테스트에서 UI 개체를 사용 중이면 [TestMethod] 대신 [UITestMethod] 특성을 사용하여 UI 스레드에서 테스트를 실행하세요.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (예외로 인해 {0} 형식의 예외에 대한 메시지를 가져오지 못했습니다.)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ 'MSTest.TestAdapter'와 'MSTest.TestFramework'의 버전이 같아야 합니다. 'MSTest.TestAdapter'의 버전은 '{0}'이고, 'MSTest.TestFramework'의 버전은 '{1}'입니다. 'MSTest.TestAdapter'와 'MSTest.TestFramework' NuGet 패키지의 버전이 동일한지 확인하세요.
+
+ Wrong number of objects for permutation. Should be greater than zero.순열의 개체 수가 잘못되었습니다. 개체 수는 0보다 커야 합니다.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.pl.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.pl.xlf
index 56730517f6..431f757dd8 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.pl.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.pl.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ Metoda oczyszczania zestawu „{0}.{1}” przekroczyła limit czasu po {2}ms
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ Anulowano metodę oczyszczania zestawu „{0}.{1}”
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ Metoda inicjalizacji zestawu „{0}.{1}” przekroczyła limit czasu po {2}ms
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ Anulowano metodę inicjowania zestawu „{0}.{1}”
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ Wystąpił wyjątek podczas wyliczania atrybutu IDataSource w przestrzeni nazwy „{0}.{1}”: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ Wystąpił wyjątek podczas rozwijania wierszy IDataSource z atrybutu w przestrzeni nazw „{0}.{1}”: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ Nie można serializować danych w indeksie {0} dla „{1}”. Wszystkie dane dostarczane za pomocą źródła „IDataSource” powinny być możliwe do serializacji. Jeśli chcesz przetestować nieserializowalne źródła danych, upewnij się, że dodasz atrybut „ TestDataSourceDiscovery” w zestawie testowym i ustaw opcję odnajdywania na wartość „DuringExecution”.
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ Nazwa wyświetlana „{2}” w indeksach {0} i {1} jest duplikatem. Nazwy wyświetlane powinny być unikatowe.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.Nie można odnaleźć pliku „{0}”.
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ Nie można uruchomić metody testowej „{0}.{1}”: dane testowe nie są zgodne z parametrami metody. Liczba lub typy są różne.
+Testowanie oczekiwał parametrów {2} z typami „{3}”,
+ale odebrał argumenty {4} z typami „{5}”.
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ Nie można uruchomić metody testowej „{0}.{1}”: metoda ma parametry, ale nie definiuje żadnego źródła testowego. Użyj źródła danych „[DataRow]”, „[DynamicData]” lub niestandardowego źródła danych „ITestDataSource”, aby dostarczyć dane testowe.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ Metoda oczyszczania klasy „{0}.{1}” przekroczyła limit czasu po {2}ms
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ Anulowano metodę oczyszczania klasy „{0}.{1}”
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ Metoda inicjalizacji klasy „{0}.{1}” przekroczyła limit czasu po {2}ms
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ Anulowano metodę inicjowania klasy „{0}.{1}”
+
+ The parameter should not be null or empty.Parametr nie może mieć wartości null ani być pusty.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ Adapter MSTestAdapter nie mógł odnaleźć testów w klasie „{0}” zestawu „{1}”, przyczyna: {2}.
+
+
+
+ {0} (Data Row {1})
+ {0} (wiersz danych {1})
+
+
+
+ Debug Trace:
+ Ślad debugowania:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.Problem wdrażania przebiegu testu: nieprawidłowy element wdrożenia: „{0}”: katalog wyjściowy „{1}” określa element do wdrożenia poza głównym katalogiem wdrożenia. Taka sytuacja jest niedozwolona.
@@ -77,16 +177,108 @@
element wdrożenia „{0}” (katalog wyjściowy „{1}”)
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Discovery][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ Wykryto zarówno pliki „.runsettings”, jak i „.testconfig.json”. Wybierz tylko jeden z tych plików konfiguracji testu.
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ „{0}”: (Nie można uzyskać opisu wyjątku z powodu wyjątku typu „{1}”.
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ Zgłoszone wyjątki:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ Test „{0}” został anulowany
+
+
+
+ Test '{0}' timed out after {1}ms
+ Upłynął limit czasu testu „{0}” po {1}ms
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ Pobieranie atrybutów niestandardowych dla typu {0} zgłosiło wyjątek (zignoruje i użyje sposobu odbicia): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ Nie można wywnioskować typu parametru ogólnego „{0}”.
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ Ogólna metoda testowa „{0}” nie ma argumentów, więc nie można wywnioskować parametru ogólnego.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ Znaleziono dwa typy powodujące konflikt dla parametru ogólnego „{0}”. Typy powodujące konflikt to „{1}” i „{2}”.
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ Dla ustawienia „ClassCleanupLifecycle” określono nieprawidłową wartość „{0}”. Obsługiwane zakresy to {1}.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ Określono nieprawidłową wartość „{0}” dla właściwości „Scope”. Obsługiwane zakresy to {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ Określono nieprawidłową wartość „{0}” dla właściwości „Workers”. Wartość musi być nieujemną liczbą całkowitą.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ Nieprawidłowe ustawienia „{0}”. Nieoczekiwany atrybut XmlAttribute: „{1}”.
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.Adapter MSTestAdapter napotkał nieoczekiwany element „{0}” w ustawieniach „{1}”. Usuń ten element i spróbuj ponownie.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ Nieprawidłowe ustawienia „{0}”. Nieoczekiwany atrybut XmlElement: „{1}”.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.Nieprawidłowa wartość „{0}” dla wpisu runsettings „{1}”. Ustawienie zostanie zignorowane.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ Nieprawidłowa wartość „{0}” dla wpisu runsettings „{1}”. Ustawienie zostanie zignorowane.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ Ostrzeżenie: Plik testsettings lub plik vsmdi nie jest obsługiwany przez adapter MSTest w wersji 2.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}Problem wdrażania przebiegu testu: nie znaleziono zestawu lub modułu „{0}”. Przyczyna: {1}
@@ -97,21 +289,309 @@
Problem wdrażania przebiegu testu: nie znaleziono zestawu lub modułu „{0}”.
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ Starsza wersja pakietu MSTestV2 jest załadowana do zestawu. Odnajdywanie testów może nie odnaleźć wszystkich testów danych, jeśli zależą od pliku „.runsettings”.
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ Wpis runsettings „<ExecutionApartmentState>STA</ExecutionApartmentState>” nie jest obsługiwany w systemach operacyjnych innych niż Windows.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ Uruchamianie testów w żadnym z podanych źródeł nie jest obsługiwane dla wybranej platformy
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ Nie można odnaleźć testów z zestawu {0}. Przyczyna:{1}
+
+
+
+ File does not exist: {0}
+ Plik nie istnieje: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ Metoda oczyszczania testu „{0}.{1}” przekroczyła limit czasu po {2}ms
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ Anulowano metodę oczyszczania testu „{0}.{1}”
+
+
+
+ TestContext cannot be Null.
+ Wartość TestContext nie może być równa null.
+
+
+
+ TestContext Messages:
+ Komunikaty TestContext:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ Metoda inicjalizacji testu „{0}.{1}” przekroczyła limit czasu po {2}ms
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ Anulowano metodę inicjowania testu „{0}.{1}”
+
+
+
+ Test method {0} was not found.
+ Nie znaleziono metody testowej {0}.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ Przetwarzanie równoległe testów włączono dla {0} (Workers: {1}, Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ Nie można załadować typów ze źródła testów „{0}”. Niektóre lub wszystkie testy w tym źródle mogły nie zostać odnalezione.
+Błąd: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ Metoda czyszczenia zestawu {0}.{1} nie powiodła się. Komunikat o błędzie: {2}. Ślad stosu: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ Metoda inicjująca zestaw {0}.{1} nie powiodła się. {2}: {3}. Przerywanie wykonywania testu.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ Metoda czyszczenia klasy {0}.{1} nie powiodła się. Komunikat o błędzie: {2}. Ślad stosu: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ Metoda inicjowania klasy {0}.{1} zgłosiła wyjątek. {2}: {3}.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Metoda {0}.{1}ma nieprawidłową sygnaturę. Metoda musi być statyczna, publiczna, nie może zwracać wartości i nie powinna przyjmować żadnego parametru. Ponadto jeśli w metodzie jest używane oczekiwanie asynchroniczne, wtedy zwracanym typem musi być typ „Task” lub „ValueTask”.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Metoda {0}.{1}ma nieprawidłową sygnaturę. Metoda musi być statyczna, publiczna, nie może zwracać wartości i powinna mieć jeden parametr typu TestContext. Ponadto jeśli w metodzie jest używane oczekiwanie asynchroniczne, wtedy zwracanym typem musi być typ „Task” lub „ValueTask”.
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ Metoda TestCleanup {0}.{1} zgłosiła wyjątek {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ Błąd podczas wywoływania metody czyszczącej testu dla klasy testowej {0}: {1}
+
+
+
+ TestCleanup Stack Trace
+ Ślad stosu dla TestCleanup
+
+ Data source '{0}' cannot be found in the test configuration settingsW ustawieniach konfiguracji testu nie można znaleźć źródła danych „{0}”
+
+ --- End of inner exception stack trace ---
+ --- Koniec śledzenia stosu wyjątku wewnętrznego ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}Adapter testu jednostkowego nie mógł połączyć się ze źródłem danych lub odczytać danych. Aby uzyskać więcej informacji o rozwiązywaniu tego błędu, zobacz „Rozwiązywanie problemów z testami jednostkowymi sterowanymi danymi” (http://go.microsoft.com/fwlink/?LinkId=62412) w bibliotece MSDN. Szczegóły błędu: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: Klasa {0}nie ma prawidłowej właściwości TestContext. Element TestContext musi być typu TestContext, musi być niestatyczny i musi być publiczny. Na przykład : public TestContext TestContext.
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: metoda {1} zdefiniowana w klasie {0}nie ma poprawnej sygnatury. Metoda testowa oznaczona przez atrybut [TestMethod] musi być niestatyczna, publiczna, zwracać wartość typu void i nie powinna przyjmować żadnego parametru. Przykład: public void Test.Class1.Test(). Ponadto, jeśli używasz oczekiwanie asynchroniczne w metodzie testowej, wtedy zwracanym typem musi być „Task” lub „ValueTask”. Przykład: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}.{1} ma nieprawidłowy atrybut Timeout. Limit czasu musi być liczbą całkowitą większą niż 0.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: W zestawie nie można zdefiniować więcej niż jednej metody z atrybutem AssemblyCleanup.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: W zestawie nie można zdefiniować więcej niż jednej metody z atrybutem AssemblyInitialize.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: W klasie nie można zdefiniować więcej niż jednej metody z atrybutem ClassCleanup.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: W klasie nie można zdefiniować więcej niż jednej metody z atrybutem ClassInitialize.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: Nie można zdefiniować więcej niż jednej metody z atrybutem TestCleanup.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: Nie można zdefiniować więcej niż jednej metody z atrybutem TestInitialize.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: Atrybut TestClass zdefiniowany dla niepublicznej klasy {0}
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: Nie można zdefiniować wstępnie zdefiniowanej właściwości {2} dla metody {1}.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ Atrybut TestClass zdefiniowany w ogólnej klasie nieabstrakcyjnej {0}
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: Zerowa lub pusta niestandardowa właściwość została zdefiniowana dla metody {1}. Niestandardowa właściwość musi mieć prawidłową nazwę.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ Metoda „Execute” zgłosiła nieobsługiwany wyjątek. Zgłoś ten błąd autorowi atrybutu „{0}”.
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ Atrybut ExpectedException zdefiniowany dla metody testowej {0}.{1} zgłosił wyjątek w trakcie konstruowania.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ Nie powiodło się uzyskanie wyjątku zgłoszonego przez metodę testową {0}.{1}.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ Metoda inicjowania {0}.{1} zgłosiła wyjątek. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ Nie można utworzyć wystąpienia klasy {0}. Błąd: {1}.
+
+
+
+ Method {0}.{1} does not exist.
+ Metoda {0}.{1} nie istnieje.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ Metoda testowa "{0}.{1}” ma zdefiniowanych wiele atrybutów pochodzących z „{2}”. Dozwolony jest tylko jeden taki atrybut.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ Błąd podczas wykonywania testu. Rozszerzenie nie zwróciło żadnego wyniku. W przypadku korzystania z rozszerzenia atrybutu TestMethodAttribute należy skontaktować się z dostawcą.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ Nie można odnaleźć prawidłowego konstruktora dla klasy testowej „{0}”. Prawidłowe konstruktory są „publiczne” i albo bez parametrów, albo z jednym parametrem typu „TestContext”.
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ Nie można znaleźć właściwości {0}.TestContext. Błąd:{1}.
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ Nie można ustawić właściwości TestContext w klasie {0}. Błąd: {1}.
+
+
+
+ The {0}.TestContext has incorrect type.
+ Element {0}.TestContext ma niepoprawny typ.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Metoda {0}.{1}ma nieprawidłową sygnaturę. Metoda musi być niestatyczna, publiczna, nie może zwracać wartości i nie powinna przyjmować żadnego parametru. Ponadto jeśli w metodzie jest używane oczekiwanie asynchroniczne, wtedy zwracanym typem musi być typ „Task” lub „ValueTask”.
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ Metoda testowa {0}.{1} zgłosiła wyjątek:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ Nie można uzyskać typu {0}. Błąd: {1}.
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ Wywołany kod zgłosił wyjątek, który został przechwycony, ale wartość wyjątku miała wartość null
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0} Jeśli w projektach UWP korzystasz z obiektów interfejsu użytkownika podczas testowania, rozważ użycie atrybutu [UITestMethod] zamiast atrybutu [TestMethod], aby wykonywać test w wątku interfejsu użytkownika.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (Nie można pobrać komunikatu dotyczącego wyjątku typu {0} z powodu wyjątku).
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ Elementy „MSTest.TestAdapter” i „MSTest.TestFramework” muszą mieć tę samą wersję. Znaleziono element „MSTest.TestAdapter” w wersji „{0}” i element „MSTest.TestFramework” w wersji „{1}”. Upewnij się, że wersje pakietów NuGet „MSTest.TestAdapter” i „MSTest.TestFramework” mają tę samą wersję.
+
+ Wrong number of objects for permutation. Should be greater than zero.Nieprawidłowa liczba obiektów permutacji. Ta liczba powinna być większa od zera.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.pt-BR.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.pt-BR.xlf
index 613c27c07d..775566e3b6 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.pt-BR.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.pt-BR.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ O método de limpeza da montagem '{0}.{1}' atingiu o tempo limite após {2}ms
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ O método de limpeza do assembly "{0}.{1}" foi cancelado
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ O método de inicialização da montagem '{0}.{1}' atingiu o tempo limite após {2}ms
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ O método de inicialização do assembly "{0}.{1}" foi cancelado
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ Ocorreu uma exceção ao enumerar o atributo IDataSource em "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ Ocorreu uma exceção ao expandir as linhas IDataSource do atributo em "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ Os dados no índice {0} para "{1}" não podem ser serializados. Todos os dados fornecidos por meio de "IDataSource" devem ser serializáveis. Se você precisar testar fontes de dados não serializáveis, certifique-se de adicionar o atributo "TestDataSourceDiscovery" em seu assembly de teste e defina a opção de descoberta como "DuringExecution".
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ O nome de exibição "{2}" nos índices {0} e {1} são duplicados. Os nomes de exibição devem ser exclusivos.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.Não foi possível encontrar o arquivo '{0}'.
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ Não é possível executar o método de teste '{0}.{1}': Os dados de teste não correspondem aos parâmetros do método. A contagem ou os tipos são diferentes.
+Testar {2} parâmetros esperados, com tipos '{3}',
+mas {4} argumentos recebidos, com tipos '{5}'.
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ Não é possível executar o método de teste '{0}.{1}': o método tem parâmetros, mas não define nenhuma fonte de teste. Use '[DataRow]', '[DynamicData]' ou uma fonte de dados 'ITestDataSource' personalizada para fornecer dados de teste.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ O método de limpeza da classe '{0}.{1}' atingiu o tempo limite após {2}ms
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ O método de limpeza de classe "{0}.{1}" foi cancelado
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ O método de inicialização da classe '{0}.{1}' atingiu o tempo limite após {2}ms
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ O método de inicialização de classe "{0}.{1}" foi cancelado
+
+ The parameter should not be null or empty.O parâmetro não deve ser nulo ou vazio.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ O MSTestAdapter não conseguiu descobrir testes na classe '{0}' do assembly '{1}' devido a {2}.
+
+
+
+ {0} (Data Row {1})
+ {0} (Linha de Dados {1})
+
+
+
+ Debug Trace:
+ Rastreamento de Depuração:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.Problema de implantação de Execução de Teste: item de implantação inválido: '{0}': o diretório de saída '{1}' especifica o item a ser implantado fora do diretório raiz de implantação, o que não é permitido.
@@ -77,16 +177,108 @@
item de implantação '{0}' (diretório de saída '{1}')
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Descoberta][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ Ambos os arquivos '.runsettings' e '.testconfig.json' foram detectados. Selecione apenas um desses arquivos de configuração de teste.
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ "{0}": (Falha ao obter a descrição da exceção devido a uma exceção do tipo "{1}".
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ Exceções lançadas:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ O teste "{0}" foi cancelado
+
+
+
+ Test '{0}' timed out after {1}ms
+ O teste "{0}" atingiu o tempo limite após {1}ms
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ A obtenção de atributos personalizados para o tipo {0} gerou uma exceção (irá ignorar e usar o modo de reflexão): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ O tipo do parâmetro genérico "{0}" não pôde ser inferido.
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ O método de teste genérico "{0}" não tem argumentos; portanto, o parâmetro genérico não pode ser inferido.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ Foram encontrados dois tipos conflitantes para o parâmetro genérico "{0}". Os tipos conflitantes são "{1}" e "{2}".
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ Valor inválido '{0}' especificado para 'ClassCleanupLifecycle'. Os escopos suportados são {1}.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ Valor inválido '{0}' especificado para 'Scope'. Os escopos compatíveis são {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ Valor inválido '{0}' especificado para 'Workers'. O valor deve ser um inteiro não negativo.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ Configurações inválidas '{0}'. XmlAttribute inesperado: '{1}'.
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter encontrou um elemento inesperado '{0}' em suas configurações '{1}'. Remova este elemento e tente novamente.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ Configurações inválidas '{0}'. XmlElement inesperado: '{1}'.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.Valor inválido "{0}" para a entrada runsettings "{1}", a configuração será ignorada.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ Valor inválido "{0}" para a entrada runsettings "{1}", a configuração será ignorada.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ Aviso: um arquivo testsettings ou um arquivo vsmdi não tem suporte no MSTest V2 Adapter.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}Problema de implantação de Execução de Teste: o assembly ou módulo '{0}' não foi encontrado. Motivo: {1}
@@ -97,21 +289,309 @@
Problema de implantação de Execução de Teste: o assembly ou módulo '{0}' não foi encontrado.
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ Uma versão mais antiga do pacote MSTestV2 é carregada no assembly, a descoberta de teste pode falhar ao descobrir todos os testes de dados se eles dependerem do arquivo `.runsettings`.
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ Não há suporte para a entrada runsettings "<ExecutionApartmentState>STA</ExecutionApartmentState>" em sistemas operacionais que não sejam Windows.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ Não há suporte para execução de teste em qualquer uma das origens fontes fornecidas para a plataforma selecionada
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ Falha ao descobrir testes por meio do assembly {0}. Motivo: {1}
+
+
+
+ File does not exist: {0}
+ O arquivo não existe: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ O método de limpeza do teste '{0}.{1}' atingiu o tempo limite após {2}ms
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ O método de limpeza de teste "{0}.{1}" foi cancelado
+
+
+
+ TestContext cannot be Null.
+ TestContext não pode ser Nulo.
+
+
+
+ TestContext Messages:
+ Mensagens TestContext:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ O método de inicialização do teste '{0}.{1}' atingiu o tempo limite após {2}ms
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ O método de inicialização de teste "{0}.{1}" foi cancelado
+
+
+
+ Test method {0} was not found.
+ O método de teste {0} não foi encontrado.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ Paralelização de Teste habilitada para {0} (Workers: {1}, Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ Não é possível carregar tipos da fonte de teste '{0}'. Alguns ou todos os testes nessa fonte podem não ser descobertos.
+Erro: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ Falha no método de Limpeza de Assembly {0}.{1}. Mensagem de Erro: {2}. StackTrace: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ O método de Inicialização de Assembly {0}.{1} lançou uma exceção. {2}: {3}. Anulando execução de teste.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ Falha no método de Limpeza de Classe {0}.{1}. Mensagem de Erro: {2}. Rastreamento de Pilha: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ O método de Inicialização de Classe {0}.{1} lançou uma exceção. {2}: {3}.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ O método {0}.{1} tem a assinatura incorreta. O método deve ser estático, público, não deve retornar um valor nem receber parâmetro. Além disso, se você estiver usando async-await no método, o return-type deverá ser "Task" ou "ValueTask".
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ O método {0}.{1} tem a assinatura incorreta. O método deve ser estático, público, não retornar um valor e deve usar um único parâmetro do tipo TestContext. Além disso, se você estiver usando async-await no método, o return-type deverá ser "Task" ou "ValueTask".
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ O método TestCleanup {0}.{1} gerou a exceção. {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ Erro ao chamar o método Test Cleanup para a classe de teste {0}: {1}
+
+
+
+ TestCleanup Stack Trace
+ Rastreamento de pilha TestCleanup
+
+ Data source '{0}' cannot be found in the test configuration settingsA fonte de dados '{0}' não pode ser encontrada nas configurações de teste
+
+ --- End of inner exception stack trace ---
+ --- Fim do rastreamento de pilha de exceção interna ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}O adaptador de teste de unidade falhou ao conectar-se à fonte de dados ou ao ler os dados. Para obter mais informações sobre como solucionar esse erro, consulte "Solucionando Problemas em Testes de Unidade Controlados por Dados" (http://go.microsoft.com/fwlink/?LinkId=62412) na Biblioteca do MSDN. Detalhes do erro: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: a classe {0} não tem uma propriedade TestContext válida. TestContext deve ser do tipo TestContext, não deve ser estático e deve ser público. Por exemplo: public TestContext TestContext.
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: o método {1} definido na classe {0} não tem a assinatura correta. O método de teste marcado com o atributo [TestMethod] deve ser não estático, público, com tipo de retorno nulo e não deve receber parâmetros. Exemplo: Test.Class1.Test() público nulo. Além disso, se você estiver usando async-await no método de teste, return-type deverá ser "Task" ou "ValueTask". Exemplo: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}.{1} tem atributo Timeout inválido. O tempo limite deve ser um valor inteiro maior que 0.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: não é possível definir mais de um método com o atributo AssemblyCleanup em um assembly.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: não é possível definir mais de um método com o atributo AssemblyInitialize dentro de um assembly.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: não é possível definir mais de um método com o atributo ClassCleanup dentro de uma classe.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: não é possível definir mais de um método com o atributo ClassInitialize em uma classe.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: não é possível definir mais de um método com o atributo TestCleanup.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: não é possível definir mais de um método com o atributo TestInitialize.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: atributo TestClass definido em classe não pública {0}
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: não é possível definir a propriedade predefinida {2} no método {1}.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ Atributo TestClass definido em uma classe genérica não abstrata {0}
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: Propriedade personalizada nula ou vazia definida no método {1}. A propriedade personalizada deve ter um nome válido.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ Uma exceção sem tratamento foi lançada pelo método "Execute". Relate esse erro ao autor do atributo "{0}".
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ O atributo ExpectedException definido no método de teste {0}.{1} emitiu uma exceção durante a construção.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ Falha ao obter a exceção lançada pelo método de teste {0}.{1}.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ O método de inicialização {0}.{1} gerou exceção. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ Não é possível criar instância da classe {0}. Erro: {1}.
+
+
+
+ Method {0}.{1} does not exist.
+ O método {0}.{1} não existe.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ O método de teste '{0}.{1}' tem várias características derivadas de '{2}' definidas nele. Apenas uma dessas características tem permissão.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ Erro ao executar o teste. Nenhum resultado retornado pela extensão. Se usar a extensão de TestMethodAttribute, entre em contato com o fornecedor.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ Não é possível localizar um construtor válido para a classe de teste '{0}'. Construtores válidos são 'public' e sem parâmetros ou com um parâmetro do tipo 'TestContext'.
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ Não é possível encontrar propriedade {0}.TestContext. Erro:{1}.
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ Não é definir a propriedade TestContext para a classe {0}. Erro: {1}.
+
+
+
+ The {0}.TestContext has incorrect type.
+ O {0}.TestContext é do tipo incorreto.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ O método {0}.{1} tem a assinatura incorreta. O método deve ser não estático, público, não deve retornar um valor e não deve receber nenhum parâmetro. Além disso, se você estiver usando async-await no método, o return-type deverá ser "Task" ou "ValueTask".
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ O método de teste {0}.{1} lançou a exceção:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ Não é possível obter o tipo {0}. Erro: {1}.
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ O código chamado lançou uma exceção que foi capturada, mas o valor da exceção era nulo
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0} Para projetos UWP, se você está usando objetos de IU no teste, considere usar o atributo [UITestMethod] em vez de [TestMethod] para executar o teste no thread da IU.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (Falha ao obter a mensagem para uma exceção do tipo {0} devido a uma exceção.)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ 'MSTest.TestAdapter' e 'MSTest.TestFramework' devem ter a mesma versão. Encontrada a versão '{0}' do 'MSTest.TestAdapter' e a versão '{1}' do 'MSTest.TestFramework'. Por favor, verifique se as versões dos pacotes NuGet 'MSTest.TestAdapter' e 'MSTest.TestFramework' são iguais.
+
+ Wrong number of objects for permutation. Should be greater than zero.Número incorreto de objetos para permutação. Deve ser maior que zero.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ru.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ru.xlf
index adadbea84e..5196050592 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ru.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.ru.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ Время ожидания метода очистки сборки "{0}.{1}" истекло через {2} мс
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ Метод очистки сборки "{0}.{1}" отменен
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ Время ожидания метода инициализации сборки "{0}.{1}" истекло через {2} мс
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ Метод инициализации сборки "{0}.{1}" отменен
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ Возникло исключение при перечислении атрибута IDataSource в "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ Возникло исключение при развертывании строк IDataSource из атрибута "{0}.{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ Не удается сериализовать данные в индексе {0} для "{1}". Все данные, предоставленные через IDataSource, должны быть сериализуемыми. Если необходимо протестировать несериализуемые источники данных, добавьте атрибут "TestDataSourceDiscovery" в тестовую сборку и установите для параметра обнаружения значение "DuringExecution".
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ Отображаемые имена "{2}" в индексах {0} и {1} дублируются. Отображаемые имена должны быть уникальными.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.Не удалось найти файл "{0}".
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ Не удается запустить метод теста "{0}.{1}": тестовые данные не соответствуют параметрам метода. Не совпадают количество или типы.
+Для теста ожидается следующее количество параметров: {2} типов "{3}",
+но число полученных аргументов — {4} и они принадлежат к типам "{5}".
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ Не удается запустить метод теста "{0}.{1}": метод имеет параметры, но не определяет источник теста. Используйте "[DataRow]", "[DynamicData]" или настраиваемый источник данных "ITestDataSource" для предоставления тестовых данных.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ Время ожидания метода очистки класса "{0}.{1}" истекло через {2} мс
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ Метод очистки класса "{0}.{1}" отменен
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ Время ожидания метода инициализации класса "{0}.{1}" истекло через {2} мс
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ Метод инициализации класса "{0}.{1}" отменен
+
+ The parameter should not be null or empty.Этот параметр не должен быть пустым или иметь значение NULL.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ Средству MSTestAdapter не удалось обнаружить тесты в классе "{0}" сборки "{1}", так как {2}.
+
+
+
+ {0} (Data Row {1})
+ {0} (строка данных {1})
+
+
+
+ Debug Trace:
+ Трассировка отладки:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.Ошибка развертывания при тестовом запуске: недопустимый элемент развертывания "{0}". В выходном каталоге "{1}" указано, что развертывание этого элемента должно быть выполнено не в корневом каталоге развертывания, что запрещено.
@@ -77,16 +177,108 @@
элемент развертывания "{0}" (выходной каталог "{1}")
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Discovery][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ Обнаружены одновременно файлы ".runsettings" и ".testconfig.json". Выберите только один из этих файлов тестовой конфигурации.
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ "{0}": (Не удалось получить описание исключения из-за исключения типа "{1}".
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ Выданные исключения:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ Тест "{0}" был отменен
+
+
+
+ Test '{0}' timed out after {1}ms
+ Время ожидания теста "{0}" истекло через {1} мс
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ При получении настраиваемых атрибутов для типа {0} возникло исключение (оно будет проигнорировано и будет использовано отражение): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ Не удалось определить тип универсального параметра "{0}".
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ Универсальный метод "{0}" не имеет аргументов, поэтому невозможно вывести универсальный параметр.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ Обнаружены два конфликтующих типа для универсального параметра "{0}". Конфликтующие типы: "{1}" и "{2}".
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ Для параметра "ClassCleanupLifecycle" указано недопустимое значение "{0}". Поддерживаемые области: {1}.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ В поле "Scope" указано недопустимое значение "{0}". Поддерживаемые области: {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ В поле "Workers" указано недопустимое значение "{0}". Оно должно быть неотрицательным целым числом.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ Недопустимые параметры "{0}". Непредвиденный атрибут XmlAttribute: "{1}".
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter обнаружил непредвиденный элемент "{0}" в параметрах "{1}". Удалите этот элемент и повторите попытку.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ Недопустимые параметры "{0}". Непредвиденный элемент XmlElement: "{1}".
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.Недопустимое значение "{0}" для записи runsettings "{1}", параметр будет пропущен.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ Недопустимое значение "{0}" для записи runsettings "{1}", параметр будет пропущен.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ Внимание! Адаптер MSTest версии 2 не поддерживает файл TESTSETTINGS или VSMDI.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}Ошибка развертывания тестового запуска: не удалось найти сборку или модуль "{0}". Причина: {1}
@@ -97,21 +289,309 @@
Ошибка развертывания тестового запуска: не удалось найти сборку или модуль "{0}".
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ В сборку загружена старая версия пакета MSTestV2. При обнаружении тестов могут быть обнаружены не все тесты данных, если они зависят от файла ".runsettings".
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ Запись Runsettings "<ExecutionApartmentState>STA</ExecutionApartmentState>" не поддерживается в ОС, отличных от Windows.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ Запуск тестов в любом из предоставленных источников не поддерживается на выбранной платформе
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ Не удалось обнаружить тесты из сборки {0}. Причина:{1}
+
+
+
+ File does not exist: {0}
+ Файл не существует: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ Время ожидания метода очистки теста "{0}.{1}" истекло через {2} мс
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ Метод очистки теста "{0}.{1}" отменен
+
+
+
+ TestContext cannot be Null.
+ TestContext не может иметь значение NULL.
+
+
+
+ TestContext Messages:
+ Сообщения TestContext:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ Время ожидания метода инициализации теста "{0}.{1}" истекло через {2} мс
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ Метод инициализации теста "{0}.{1}" отменен
+
+
+
+ Test method {0} was not found.
+ Метод теста {0} не найден.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ Включена параллелизация тестов для {0} (Workers: {1}, Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ Не удалось загрузить типы из тестового источника "{0}". В этом источнике могут быть не обнаружены некоторые или все тесты.
+Ошибка: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ Не удалось применить метод очистки сборки {0}.{1}. Сообщение об ошибке: {2}. Трассировка стека (StackTrace): {3}.
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ Методом инициализации сборки {0}.{1} создано исключение. {2}: {3}. Выполнение теста прекращается.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ Не удалось применить метод очистки класса {0}.{1}. Сообщение об ошибке: {2}. Трассировка стека: {3}.
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ Методом инициализации класса {0}.{1} создано исключение. {2}: {3}.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Метод {0}.{1} имеет неправильную сигнатуру. Метод должен быть статическим и открытым, не должен возвращать значение и принимать параметры. Кроме того, при использовании async-await в методе возвращаемое значение должно иметь тип "Task" или "ValueTask".
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Метод {0}.{1} имеет неправильную сигнатуру. Метод должен быть статическим и открытым, не должен возвращать значение и должен принимать один параметр, имеющий тип TestContext. Кроме того, при использовании async-await в методе возвращаемое значение должно иметь тип "Task" или "ValueTask".
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ Метод TestCleanup {0}.{1} создал исключение. {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ Ошибка при вызове метода TestCleanup для тестового класса {0}: {1}
+
+
+
+ TestCleanup Stack Trace
+ Трассировка стека TestCleanup
+
+ Data source '{0}' cannot be found in the test configuration settingsНе удалось найти источник данных "{0}" в параметрах конфигурации теста
+
+ --- End of inner exception stack trace ---
+ --- Конец трассировки стека внутренних исключений ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}Адаптеру модульных тестов не удалось подключиться к источнику данных, чтобы считать данные. Дополнительные сведения об устранении этой ошибки см. в разделе "Устранение неполадок в модульных тестах на основе данных" (http://go.microsoft.com/fwlink/?LinkId=62412) в библиотеке MSDN. Подробности об ошибке: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: в классе {0} отсутствует допустимое свойство TestContext. Свойство TestContext должно относиться к типу TestContext, быть нестатическим и открытым. Например: public TestContext TestContext.
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: метод {1}, определенный в классе {0}, имеет неправильную сигнатуру. Метод теста, помеченный атрибутом [TestMethod], должен быть нестатическим, открытым и иметь тип возвращаемого значения void; он также не должен принимать параметры. Пример: public void Test.Class1.Test(). Кроме того, при использовании async-await в методе теста возвращаемое значение должно иметь тип "Task" или "ValueTask". Пример: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}. {1} имеет недопустимый атрибут времени ожидания. Значение времени ожидания должно быть положительным целым числом.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: в сборке невозможно определить несколько методов с атрибутом AssemblyCleanup.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: в сборке невозможно определить несколько методов с атрибутом AssemblyInitialize.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: в классе невозможно определить несколько методов с атрибутом ClassCleanup.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: в классе невозможно определить несколько методов с атрибутом ClassInitialize.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: невозможно определить несколько методов с атрибутом TestCleanup.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: невозможно определить несколько методов с атрибутом TestInitialize.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: атрибут TestClass определен в классе {0}, не являющемся открытым
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: не удается определить предопределенное свойство {2} в методе {1}.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ Атрибут TestClass определен в универсальном неабстрактном классе {0}
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: в методе {1} определено пользовательское свойство, имя которого имеет значение NULL или пусто. Пользовательское свойство должно иметь допустимое имя.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ Метод "Execute" сгенерировал необработанное исключение. Сообщите об этой ошибке автору атрибута "{0}".
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ Атрибут ExpectedException, определенный в методе теста {0}.{1}, породил исключение во время создания.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ Не удалось получить исключение, созданное методом теста {0}.{1}.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ Метод инициализации {0}.{1} вызвал исключение. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ Не удалось создать экземпляр класса {0}. Ошибка: {1}.
+
+
+
+ Method {0}.{1} does not exist.
+ Метод {0}.{1} не существует.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ У метода тестирования "{0}.{1}" есть несколько атрибутов, производных от заданного в нем "{2}". Допускается только один такой атрибут.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ Ошибка при выполнении теста. Расширение не возвратило результаты. Если используется расширение атрибута TestMethodAttribute, обратитесь к поставщику.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ Не удается найти допустимый конструктор для тестового класса "{0}". Допустимые конструкторы должны быть определены как "public" и либо не иметь параметров, либо иметь один параметр типа "TestContext".
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ Не удается найти свойство {0}.TestContext. Ошибка: {1}.
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ Не удалось задать свойство TestContext для класса {0}. Ошибка: {1}.
+
+
+
+ The {0}.TestContext has incorrect type.
+ Для свойства {0}.TestContext указан неправильный тип.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ Метод {0}.{1} имеет неправильную сигнатуру. Метод должен быть нестатическим и открытым, не должен возвращать значение и принимать параметры. Кроме того, при использовании async-await в методе возвращаемое значение должно иметь тип "Task" или "ValueTask".
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ Метод теста {0}.{1} создал исключение:
+{2}.
+
+
+
+ Unable to get type {0}. Error: {1}.
+ Не удается получить тип {0}. Ошибка: {1}.
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ Вызванный код вызвал исключение, которое было перехвачено, но значение исключения было равно NULL
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0} В проектах UWP, если в тесте используются объекты пользовательского интерфейса, рассмотрите возможность использования атрибута [UITestMethod] вместо атрибута [TestMethod] для выполнения теста в потоке пользовательского интерфейса.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (Не удалось получить сообщение для исключения с типом {0} в связи с возникновением исключения.)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ "MSTest.TestAdapter" и "MSTest.TestFramework" должны использовать одинаковую версию. Обнаружены "MSTest.TestAdapter" версии "{0}" и "MSTest.TestFramework" версии "{1}". Убедитесь, что версии пакетов NuGet "MSTest.TestAdapter" и "MSTest.TestFramework" совпадают.
+
+ Wrong number of objects for permutation. Should be greater than zero.Неправильное число объектов для перестановки. Оно должно быть больше нуля.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.tr.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.tr.xlf
index 79d35b165a..1ba2e803d3 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.tr.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.tr.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ '{0}.{1}' derleme temizleme yöntemi {2}ms sonra zaman aşımına uğradı
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ '{0}.{1}' bütünleştirilmiş kod temizleme yöntemi iptal edildi
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ '{0}.{1}' derleme başlatma yöntemi {2}ms sonra zaman aşımına uğradı
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ '{0}.{1}' derleme başlatma yöntemi iptal edildi
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ "{0}.{1} " üzerinde IDataSource özniteliği numaralandırılırken özel durum oluştu: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ "{0}. {1}" üzerindeki öznitelikten IDataSource satırları genişletilirken özel durum oluştu: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ "{1}" için {0} indeksindeki veriler serileştirilemez. "IDataSource" aracılığıyla sağlanan tüm veriler serileştirilebilir olmalıdır. Serileştirilemeyen veri kaynaklarını test etmeniz gerekiyorsa, lütfen test derlemenize "TestDataSourceDiscovery" özniteliğini eklediğinizden ve keşif seçeneğini "DuringExecution" olarak ayarladığınızdan emin olun.
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ {0} ve {1}dizinlerinde görünen ad " {2}" yineleniyor. Görünen adlar benzersiz olmalıdır.
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.'{0}' adlı dosya bulunamadı.
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ '{0}.{1}' test yöntemi çalıştırılamıyor: Test verileri yöntem parametreleriyle eşleşmiyor. Ya sayıları ya da türleri birbirinden farklı.
+Test '{3}' türünde {2} parametre bekledi,
+ancak, '{5}' türünde {4} bağımsız değişken aldı.
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ '{0}.{1}' test yöntemi çalıştırılamıyor: Yöntemin parametreleri var ancak herhangi bir test kaynağı tanımlamıyor. Test verilerini sağlamak için '[DataRow]', '[DynamicData]' veya özel bir 'ITestDataSource' veri kaynağı kullanın.
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ '{0}.{1}' sınıf temizleme yöntemi {2}ms sonra zaman aşımına uğradı
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ '{0}.{1}' sınıf temizleme yöntemi iptal edildi
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ '{0}.{1}' sınıf başlatma yöntemi {2}ms sonra zaman aşımına uğradı
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ '{0}.{1}' sınıf başlatma yöntemi iptal edildi
+
+ The parameter should not be null or empty.Parametre null veya boş olmamalıdır.
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ MSTestAdapter, '{1}' bütünleştirilmiş kodunun '{0}' sınıfındaki testleri bulamadı. Nedeni: {2}.
+
+
+
+ {0} (Data Row {1})
+ {0} (Veri Satırı {1})
+
+
+
+ Debug Trace:
+ Hata Ayıklama İzleyici:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.Test Çalıştırması dağıtım sorunu: '{0}' dağıtım öğesi hatalı: '{1}' çıktı dizininde öğenin dağıtım kök dizini dışında dağıtılması gerektiği belirtilmiş, ancak buna izin verilmiyor.
@@ -77,16 +177,108 @@
'{0}' dağıtım öğesi (çıktı dizini '{1}')
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Discovery][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ Hem '.runsettings' hem de '.testconfig.json' dosyaları algılandı. Lütfen bu test yapılandırma dosyalarından yalnızca birini seçin.
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ "{0}": ("{1}" türündeki bir istisna nedeniyle özel durum açıklaması alınamadı.
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ Oluşturulan özel durumlar:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ '{0}' testi iptal edildi
+
+
+
+ Test '{0}' timed out after {1}ms
+ '{0}' testi {1} ms sonra zaman aşımına uğradı
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ {0} tipi için özel niteliklerin alınması özel durum oluşturdu (yok sayar ve yansıma yolunu kullanır): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ '{0}' genel parametre türü çıkarsanamadı.
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ '{0}' genel test metodu bağımsız değişkenlere sahip olmadığından, genel parametre çıkarsanamıyor.
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ '{0}' genel parametresi için iki çakışan tür bulundu. Çakışan türler '{1}' ile '{2}'.
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ 'ClassCleanupLifecycle' için geçersiz '{0}' değeri belirtildi. Desteklenen kapsamlar {1}'dir.
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ 'Scope' için geçersiz '{0}' değeri belirtildi. Desteklenen kapsamlar {1}.
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ 'Workers' için geçersiz '{0}' değeri belirtildi. Değer negatif olmayan bir tamsayı olmalıdır.
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ Geçersiz '{0}' ayarları. Beklenmeyen XmlAttribute: '{1}'.
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter, '{1}' ayarlarında beklenmedik bir öğeyle ('{0}') karşılaştı. Bu öğeyi kaldırıp yeniden deneyin.
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ Geçersiz '{0}' ayarları. Beklenmeyen XmlElement: '{1}'.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.'{1}' çalıştırma ayarları girişi için '{0}' değeri geçersiz, ayar yoksayılacak.
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ '{1}' çalıştırma ayarları girişi için '{0}' değeri geçersiz, ayar yoksayılacak.
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ Uyarı : MSTest V2 Adapter ile bir testsettings dosyası veya bir vsmdi dosyası desteklenmez.
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}Test Çalıştırması dağıtım sorunu: '{0}' adlı bütünleştirilmiş kod veya modül bulunamadı. Nedeni: {1}
@@ -97,21 +289,309 @@
Test Çalıştırması dağıtım sorunu: '{0}' adlı bütünleştirilmiş kod veya modül bulunamadı.
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ Montaja MSTestV2 paketinin daha eski bir sürümü yüklenir, test keşfi, `.runsettings` dosyasına bağlılarsa tüm veri testlerini keşfetmede başarısız olabilir.
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ '<ExecutionApartmentState>STA</ExecutionApartmentState>' çalışma ayarları girişi Windows dışı işletim sistemlerinde desteklenmiyor.
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ Testlerin sağlanan kaynakların herhangi birinde çalıştırılması seçili platformda desteklenmiyor
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ {0} bütünleştirilmiş kodundan testler bulunamadı. Neden:{1}
+
+
+
+ File does not exist: {0}
+ Dosya yok: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ '{0}.{1}' test temizleme yöntemi {2}ms sonra zaman aşımına uğradı
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ '{0}.{1}' test temizleme yöntemi iptal edildi
+
+
+
+ TestContext cannot be Null.
+ TestContext, Null olamaz.
+
+
+
+ TestContext Messages:
+ TestContext İletileri:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ '{0}.{1}' test başlatma yöntemi {2}ms sonra zaman aşımına uğradı
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ '{0}.{1}' test başlatma yöntemi iptal edildi
+
+
+
+ Test method {0} was not found.
+ {0} test metodu bulunamadı.
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ {0} için Test Paralelleştirme etkin (Workers: {1}, Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ '{0}' test kaynağından türler yüklenemiyor. Kaynaktaki testlerin bazıları veya tümü bulunamayabilir.
+Hata: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ Bütünleştirilmiş Kod Temizleme metodu ({0}.{1}) başarısız oldu. Hata İletisi: {2}. StackTrace: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ Bütünleştirilmiş Kod Başlatma metodu ({0}.{1}) özel durum oluşturdu. {2}: {3}. Test yürütmesi durduruluyor.
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ Sınıf Temizleme metodu ({0}.{1}) başarısız oldu. Hata İletisi: {2}. Yığın İzlemesi: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ Sınıf Başlatma metodu ({0}.{1}) özel durum oluşturdu. {2}: {3}.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ {0}.{1} yönteminin imzası yanlış. Yöntem statik, genel, değer döndürmeyen bir yöntem olmalı, hiçbir parametre almamalıdır. Bunlara ek olarak, yöntemde async-await kullanıyorsanız return-type değeri 'Task' veya 'ValueTask' olmalıdır.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ {0}.{1} yönteminin imzası yanlış. Yöntem statik, genel, değer döndürmeyen bir yöntem olmalı ve TestContext türünde tek bir parametre almalıdır. Bunlara ek olarak, yöntemde async-await kullanıyorsanız return-type değeri 'Task' veya 'ValueTask' olmalıdır.
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ TestCleanup metodu {0}.{1} özel durum oluşturdu. {2}.
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ {0} test sınıfı için Test Temizleme metodu çağrılırken hata oluştu: {1}
+
+
+
+ TestCleanup Stack Trace
+ TestCleanup Yığın İzleme
+
+ Data source '{0}' cannot be found in the test configuration settingsTest yapılandırması ayarlarında '{0}' adlı veri kaynağı bulunamıyor
+
+ --- End of inner exception stack trace ---
+ --- İç özel durum yığın izlemesinin sonu ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}Birim test bağdaştırıcısı, veri kaynağına bağlanamadı veya verileri okuyamadı. Bu hata ile ilgili daha fazla sorun giderme bilgisi için MSDN Kitaplığı'ndaki "Veri Temelli Birim Testleriyle İlgili Sorunları Giderme" (http://go.microsoft.com/fwlink/?LinkId=62412) konusuna bakın. Hata ayrıntıları: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: {0}sınıfı geçerli bir TestContext özelliğine sahip değil. TestContext, TestContext türünde olmalı, static olmamalı ve public olmalıdır. Örnek: public TestContext TestContext.
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: {0} sınıfında tanımlanan {1} yönteminin imzası doğru değil. [TestMethod] özniteliğiyle işaretlenmiş test yöntemi statik olmayan, genel, dönüş türü void olan bir yöntem olmalıdır ve hiçbir parametre almamalıdır. Örnek: public void Test.Class1.Test(). Bunlara ek olarak, test metodunda async-await kullanıyorsanız return-type değeri 'Task' veya 'ValueTask' olmalıdır. Örnek: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}.{1} Timeout özniteliği geçersiz. Zaman aşımı değeri 0'dan büyük bir tamsayı olmalıdır.
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: Bir bütünleştirilmiş kod içinde AssemblyCleanup özniteliği ile birden fazla metot tanımlanamaz.
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: Bir bütünleştirilmiş kod içinde AssemblyInitialize özniteliği ile birden fazla metot tanımlanamaz.
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: Bir sınıf içinde ClassCleanup özniteliği ile birden fazla metot tanımlanamaz.
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: Bir sınıf içinde ClassInitialize özniteliği ile birden fazla metot tanımlanamaz.
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: TestCleanup özniteliği ile birden fazla metot tanımlanamaz.
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: TestInitialize özniteliği ile birden fazla metot tanımlanamaz.
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: TestClass özniteliği genel olmayan {0} sınıfında tanımlanmış
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: Önceden tanımlanmış {2} özelliği {1} metodunda tanımlanamaz.
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ {0} genel soyut olmayan sınıf üzerinde tanımlanan TestClass özniteliği
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: {1} metodunda null veya boş özel özellik tanımlanmış. Özel özellik geçerli bir ada sahip olmalıdır.
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ 'Execute' yöntemi tarafından işlenmeyen bir özel durum oluştu. Lütfen bu hatayı '{0}' özniteliğinin yazarına bildirin.
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ {0}.{1} test yöntemi üzerinde tanımlanan ExpectedException özniteliği, oluşturma sırasında bir özel durum oluşturdu.
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ {0}.{1} metodu tarafından oluşturulan özel durum alınamadı.
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ Başlatma metodu {0}.{1} özel durum oluşturdu. {2}.
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ {0} sınıfının örneği oluşturulamıyor. Hata: {1}.
+
+
+
+ Method {0}.{1} does not exist.
+ {0}.{1} metodu yok.
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ “{0}.{1}” test yöntemi, üzerinde tanımlanan “{2}” öğesinden türetilmiş birden fazla öznitelik içeriyor. Bu türde yalnızca bir tane özniteliğe izin verilir.
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ Test yürütülürken hata oluştu. Uzantı tarafından hiç sonuç döndürülmedi. TestMethodAttribute uzantısı kullanılıyorsa, lütfen satıcıya başvurun.
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ '{0}' test sınıfı için geçerli bir oluşturucu bulunamıyor. Geçerli oluşturucular 'public' ve parametresiz veya 'TestContext' türünde tek bir parametre içeriyor.
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ {0}.TestContext özelliği bulunamıyor. Hata:{1}.
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ {0} sınıfı için TestContext özelliği ayarlanamıyor. Hata: {1}.
+
+
+
+ The {0}.TestContext has incorrect type.
+ {0}.TestContext yanlış türe sahip.
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ {0}.{1} yönteminin imzası yanlış. Yöntem statik olmayan, genel, değer döndürmeyen bir yöntem olmalı, hiçbir parametre almamalıdır. Bunlara ek olarak, yöntemde async-await kullanıyorsanız return-type değeri 'Task' veya 'ValueTask' olmalıdır.
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ {0}.{1} test metodu özel durum oluşturdu:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ {0} türü alınamıyor. Hata: {1}.
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ Çağrılan kod, yakalanan bir özel durum yarattı, ancak özel durum değeri boştu
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0} UWP projeleri için testte UI nesneleri kullanıyorsanız, testi UI iş parçacığında yürütmek için [TestMethod] yerine [UITestMethod] özniteliğini kullanabilirsiniz.
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (Bir özel durum nedeniyle, {0} türündeki özel durum iletisi alınamadı.)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ 'MSTest.TestAdapter' ve 'MSTest.TestFramework' aynı sürüme sahip olmalıdır. 'MSTest.TestAdapter' sürümü '{0}' ve 'MSTest.TestFramework' sürümü '{1}' bulundu. Lütfen 'MSTest.TestAdapter' ve 'MSTest.TestFramework' NuGet paketlerinin aynı sürüme sahip olduğundan emin olun.
+
+ Wrong number of objects for permutation. Should be greater than zero.Permütasyon için nesne sayısı yanlış. Değer, sıfırdan büyük olmalıdır.
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.zh-Hans.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.zh-Hans.xlf
index 813ddf8f72..5cc1e12a73 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.zh-Hans.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.zh-Hans.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ 程序集清理方法“{0}.{1}”在 {2} ms 后超时
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ 已取消程序集清理方法“{0}.{1}”
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ 程序集初始化方法“{0}.{1}”在 {2} ms 后超时
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ 已取消程序集初始化方法“{0}.{1}”
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ 枚举 {0} 上的 IDataSource 属性时发生异常。{1}": {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ 从“{0}.{1}”上的属性扩展 IDataSource 行时出现异常: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ 无法序列化“{1}”的索引 {0} 上的数据。通过“IDataSource”提供的所有数据都应可序列化。如果需要测试不可序列化的数据源,请确保在测试程序集上添加“TestDataSourceDiscovery”属性,并将发现选项设置为“DuringExecution”。
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ 索引 {0} 和 {1} 上的显示名称“{2}”重复。显示名称应是唯一的。
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.找不到文件“{0}”。
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ 无法运行测试方法“{0}.{1}”: 测试数据与方法参数不匹配。计数或类型不同。
+测试需要类型为“{3}”的 {2} 参数,
+但收到了类型为“{5}”的 {4} 参数。
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ 无法运行测试方法“{0}.{1}”: 方法具有参数,但未定义任何测试源。使用 “[DataRow]”、“[DynamicData]” 或自定义 “ITestDataSource” 数据源提供测试数据。
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ 类清理方法“{0}.{1}”在 {2} ms 后超时
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ 已取消类清理方法“{0}.{1}”
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ 类初始化方法“{0}.{1}”在 {2} ms 后超时
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ 已取消类初始化方法“{0}.{1}”
+
+ The parameter should not be null or empty.参数不应为 NULL 或为空。
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ 由于 {2},MSTestAdapter 未能在程序集“{1}”的类“{0}”中发现测试。
+
+
+
+ {0} (Data Row {1})
+ {0} (数据行 {1})
+
+
+
+ Debug Trace:
+ 调试跟踪:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.测试运行部署问题: 错误的部署项:“{0}”: 输出目录“{1}”指定将该项部署到部署根目录的外部,这是不允许的。
@@ -77,16 +177,108 @@
部署项“{0}”(输出目录“{1}”)
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][发现][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ 检测到 ".runsettings" 和 ".testconfig.json" 文件。请仅选择其中一个测试配置文件。
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ “{0}”:(由于类型“{1}”异常,无法获取异常说明。
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ 引发的异常:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ 测试“{0}”已取消
+
+
+
+ Test '{0}' timed out after {1}ms
+ 测试“{0}”在 {1} 毫秒后超时
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ 获取类型 {0} 自定义属性引发异常(将忽略并使用反射方式): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ 无法推断泛型参数“{0}”的类型。
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ 泛型测试方法“{0}”没有参数,因此无法推断泛型参数。
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ 发现泛型参数“{0}”有两种冲突类型。冲突类型为“{1}”和“{2}”。
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ 为“ClassCleanupLifecycle”指定的值“{0}”无效。支持的作用域为 {1}。
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ 为 ‘Scope’ 指定的值 ‘{0}’ 无效。受支持的范围为 {1}。
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ 为 ‘Workers’ 指定的值 ‘{0}’ 无效。该值应为非负整数。
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ 设置“{0}”无效。意外的 XmlAttribute:“{1}”。
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter 在其设置“{1}”中遇到意外的元素“{0}”。删除此元素,然后再试一次。
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ 设置“{0}”无效。意外的 XmlElement:“{1}”。
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.runsettings 项 ‘{1}’ 的值 ‘{0}’ 无效,将忽略设置。
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ runsettings 项 ‘{1}’ 的值 ‘{0}’ 无效,将忽略设置。
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ 警告: MSTest V2 适配器不支持 testsettings 文件或 vsmdi 文件。
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}测试运行部署问题: 找不到程序集或模块“{0}”。原因: {1}
@@ -97,21 +289,309 @@
测试运行部署问题: 找不到程序集或模块“{0}”。
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ 程序集中加载了 MSTestV2 包的较旧版本,如果测试发现依赖于“.runsettings”文件,则它们可能无法发现所有数据测试。
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ 非 Windows 操作系统不支持 Runsettings 条目 "<ExecutionApartmentState>STA</ExecutionApartmentState>"。
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ 选定的平台不支持在任何提供的源中运行测试
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ 未能发现程序集 {0} 中的测试。原因: {1}
+
+
+
+ File does not exist: {0}
+ 文件不存在: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ 测试清理方法“{0}.{1}”在 {2} ms 后超时
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ 已取消测试清理方法“{0}.{1}”
+
+
+
+ TestContext cannot be Null.
+ TestContext 不能为 NULL。
+
+
+
+ TestContext Messages:
+ TestContext 消息:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ 测试初始化方法“{0}.{1}”在 {2} ms 后超时
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ 已取消测试初始化方法“{0}.{1}”
+
+
+
+ Test method {0} was not found.
+ 未找到测试方法 {0}。
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ 已为 {0} 启用测试并行化(Workers: {1},Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ 无法从测试源“{0}”加载类型。可能无法发现此源中的部分或所有测试。
+错误: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ 程序集清理方法 {0}.{1} 失败。错误消息: {2}。StackTrace: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ 程序集初始化方法 {0}.{1} 引发异常。{2}: {3}。正在中止测试的执行。
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ 类清理方法 {0}.{1} 失败。错误消息: {2}。堆栈跟踪: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ 类初始化方法 {0}.{1} 引发异常。{2}: {3}。
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ 方法 {0}。{1}的签名错误。该方法必须是静态的公共方法、不返回值并且不应采用任何参数。此外,如果在方法中使用同步等待,则返回类型必须为“Task”或“Value Task”。
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ 方法 {0}。{1}的签名错误。该方法必须是静态的公共方法,不返回值,并且应采用一个 TestContext 类型的参数。此外,如果在方法中使用同步等待,则返回类型必须为“Task”或“Value Task”。
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ TestCleanup 方法 {0}.{1} 引发异常。{2}。
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ 为测试类 {0} 调用 Test Cleanup 方法时出错: {1}
+
+
+
+ TestCleanup Stack Trace
+ TestCleanup 堆栈跟踪
+
+ Data source '{0}' cannot be found in the test configuration settings在测试配置设置中找不到数据源“{0}”
+
+ --- End of inner exception stack trace ---
+ ---内部异常堆栈跟踪结束---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}单元测试适配器未能连接到数据源或读取数据。有关解决此错误的详细信息,请查看 MSDN 库中的“数据驱动单元测试疑难解答”(http://go.microsoft.com/fwlink/?LinkId=62412)。错误详细信息: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: 类 {0} 没有有效的 TestContext 属性。TestContext 必须是 TestContext 类型并且必须是非静态和公共的。例如: public TestContext TestContext。
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: 在类 {0} 中定义的方法 {1} 没有正确的签名。用 [TestMethod] 特性标记的测试方法必须是返回类型为 void 的非静态的公共方法,并且不应采用任何参数。示例: public void Test.Class1.Test()。此外,如果在测试方法中使用同步等待,则返回类型必须为“Task”或“Value Task”。示例: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}。{1} 的超时属性无效。“超时”必须是大于零的整数值。
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: 在一个程序集内部,不能定义多个具有 AssemblyCleanup 特性的方法。
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: 在一个程序集内部,不能定义多个具有 AssemblyInitialize 特性的方法。
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: 在一个类内部,不能定义多个具有 ClassCleanup 特性的方法。
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: 在一个类内部,不能定义多个具有 ClassInitialize 特性的方法。
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: 不能定义多个具有 TestCleanup 特性的方法。
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: 不能定义多个具有 TestInitialize 特性的方法。
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: 在非公共类 {0} 上定义的 TestClass 特性
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: 不能在方法 {1} 上定义预定义属性 {2}。
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ 在泛型非抽象类 {0} 上定义的 TestClass 特性
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: 对方法 {1} 定义了为 NULL 或为空的自定义属性。自定义属性必须具有有效名称。
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ “Execute”方法引发了未经处理的异常。请将此错误报告给属性“{0}”的作者。
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ 测试方法 {0}.{1} 上定义的 ExpectedException 属性在构造过程中引发了一个异常。
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ 未能获取测试方法 {0}.{1} 引发的异常。
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ 初始化方法 {0}.{1} 引发异常。{2}。
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ 无法创建类 {0} 的实例。错误: {1}。
+
+
+
+ Method {0}.{1} does not exist.
+ 方法 {0}.{1} 不存在。
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ 测试方法“{0}.{1}”具有多个在其上定义的“{2}”的派生属性。仅允许一个此类属性。
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ 执行测试时出错。扩展未返回任何结果。如果使用的是扩展 TestMethodAttribute ,请与供应商联系。
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ 找不到测试类“{0}”的有效构造函数。有效的构造函数为 “public”,但该构造函数无参数或具有一个类型为 “TestContext” 的参数。
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ 无法找到属性 {0}.TestContext。错误: {1}。
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ 无法设置类 {0} 的 TestContext 属性。错误: {1}。
+
+
+
+ The {0}.TestContext has incorrect type.
+ {0}.TestContext 的类型不正确。
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ 方法 {0}。{1}的签名错误。该方法必须是非静态的公共方法、不返回值并且不应采用任何参数。此外,如果在方法中使用同步等待,则返回类型必须为“Task”或“Value Task”。
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ 测试方法 {0}.{1} 引发了异常:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ 无法获取类型 {0}。错误: {1}。
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ 调用的代码引发了捕获的异常,但异常值为 null
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0} 对于 UWP 项目,如果在测试中使用 UI 对象,请考虑使用 [UITestMethod] 属性代替 [TestMethod] 属性在 UI 线程中执行测试。
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (因异常而未能获取类型为 {0} 的异常的消息。)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ 'MSTest.TestAdapter' 和 'MSTest.TestFramework' 必须具有相同的版本。找到 'MSTest.TestAdapter' 版本“{0}”和 'MSTest.TestFramework' 版本“{1}”。请确保 'MSTest.TestAdapter' 和 'MSTest.TestFramework' NuGet 包的版本具有相同的版本。
+
+ Wrong number of objects for permutation. Should be greater than zero.排列的对象数不正确。应大于零。
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.zh-Hant.xlf b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.zh-Hant.xlf
index aae5f14299..d5a3738734 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.zh-Hant.xlf
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Resources/xlf/Resource.zh-Hant.xlf
@@ -2,16 +2,116 @@
+
+ Assembly cleanup method '{0}.{1}' timed out after {2}ms
+ 組件清理方法 '{0}.{1}' 在 {2} 毫秒後已逾時
+
+
+
+ Assembly cleanup method '{0}.{1}' was canceled
+ 已取消組件清理方法 '{0}.{1}'
+
+
+
+ Assembly initialize method '{0}.{1}' timed out after {2}ms
+ 組件初始化方法 '{0}.{1}' 在 {2} 毫秒後已逾時
+
+
+
+ Assembly initialize method '{0}.{1}' was canceled
+ 已取消組件初始化方法 '{0}.{1}'
+
+
+
+ MSTestAdapterV2
+ MSTestAdapterV2
+
+
+
+ Exception occurred while enumerating IDataSource attribute on "{0}.{1}": {2}
+ 列舉「{0}.{1}」上的 IDataSource 屬性時發生例外狀況: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: Exception details
+
+
+ Exception occurred while expanding IDataSource rows from attribute on "{0}.{1}": {2}
+ 從「{0}.{1}」上的屬性展開 IDataSource 資料列時發生例外狀況: {2}
+ {0}: TypeName with namespace,
+{1}: Method name,
+{2}: CannotExpandIDataSourceAttribute_DuplicateDisplayName or CannotExpandIDataSourceAttribute_CannotSerialize
+
+
+ Data on index {0} for "{1}" cannot be serialized. All data provided through "IDataSource" should be serializable. If you need to test non-serializable data sources, please make sure you add "TestDataSourceDiscovery" attribute on your test assembly and set the discovery option to "DuringExecution".
+ 無法序列化「{1}"」索引 {0} 上的資料。透過「IDataSource」提供的所有資料應可序列化。如果您需要測試不可序列化的資料來源,請務必在測試元件上新增「TestDataSourceDiscovery」屬性,並將探索選項設定為「DuringExecution」。
+ {0}: Zero based index if an element inside of an array,
+{1}: Test name
+
+
+ Display name "{2}" on indexes {0} and {1} are duplicate. Display names should be unique.
+ 索引 {0} 和 {1} 上的顯示名稱「{2}」重複。顯示名稱必須是唯一的。
+ {0}, {1}: Zero based index if an element inside of an array
+{2}: Test display name.
+ Could not find file '{0}'.找不到檔案 '{0}'。
+
+ Cannot run test method '{0}.{1}': Test data doesn't match method parameters. Either the count or types are different.
+Test expected {2} parameter(s), with types '{3}',
+but received {4} argument(s), with types '{5}'.
+ 無法執行測試方法 '{0}.{1}': 測試資料不符合方法參數。計數或類型不同。
+測試預期的 {2} 參數,類型為 '{3}',
+但收到 {4} 引數,類型為 '{5}'。
+
+
+
+ Cannot run test method '{0}.{1}': Method has parameters, but does not define any test source. Use '[DataRow]', '[DynamicData]', or a custom 'ITestDataSource' data source to provide test data.
+ 無法執行測試方法 '{0}.{1}': 方法具有參數,但未定義任何測試來源。使用 '[DataRow]'、'[DynamicData]' 或自訂 'ITestDataSource' 資料來源來提供測試資料。
+
+
+
+ Class cleanup method '{0}.{1}' timed out after {2}ms
+ 類別清理方法 '{0}.{1}' 在 {2} 毫秒後已逾時
+
+
+
+ Class cleanup method '{0}.{1}' was canceled
+ 已取消類別清理方法 '{0}.{1}'
+
+
+
+ Class initialize method '{0}.{1}' timed out after {2}ms
+ 類別初始化方法 '{0}.{1}' 在 {2} 毫秒後已逾時
+
+
+
+ Class initialize method '{0}.{1}' was canceled
+ 已取消類別初始化方法 '{0}.{1}'
+
+ The parameter should not be null or empty.參數不可為 null 或空白。
+
+ MSTestAdapter failed to discover tests in class '{0}' of assembly '{1}' because {2}.
+ MSTestAdapter 無法在組件 '{1}' 的類別 '{0}' 中探索測試,因為 {2}。
+
+
+
+ {0} (Data Row {1})
+ {0} (資料列 {1})
+
+
+
+ Debug Trace:
+ 偵錯追蹤:
+
+ Test Run deployment issue: Bad deployment item: '{0}': output directory '{1}' specifies the item to be deployed outside deployment root directory which is not allowed.測試回合部署問題: 部署項目錯誤: '{0}': 輸出目錄 '{1}' 指定要將項目部署到部署根目錄之外,但不允許這情況。
@@ -77,16 +177,108 @@
部署項目 '{0}' (輸出目錄 '{1}')
+
+ [MSTest][Discovery][{0}] {1}
+ [MSTest][Discovery][{0}] {1}
+
+
+
+ Both '.runsettings' and '.testconfig.json' files have been detected. Please select only one of these test configuration files.
+ 偵測到 '.runsettings' 和 '.testconfig.json' 檔案。請只選取其中一個測試設定檔。
+
+
+
+ {0}: {1}
+ {0}: {1}
+
+
+
+ "{0}": (Failed to get exception description due to an exception of type "{1}".
+ 「{0}」: (因為類型「{1}」的例外狀況而無法取得例外狀況描述。
+ {0}: Type of the original exception that we're trying to get the description of.
+{1}: Thrown exception
+
+
+ Exceptions thrown:
+ 擲回的例外狀況數:
+ This is usually precedes by TestAssembly_AssemblyDiscoveryFailure message, and preceded by list of exceptions thrown in a test discovery session.
+
+
+ Test '{0}' was canceled
+ 測試 '{0}' 已取消
+
+
+
+ Test '{0}' timed out after {1}ms
+ 測試 '{0}' 在 {1} 毫秒後逾時
+
+
+
+ Getting custom attributes for type {0} threw exception (will ignore and use the reflection way): {1}
+ 取得類型 {0} 擲回例外狀況的自訂屬性 (將會略過並使用反映方式): {1}
+ {0}: Attribute full type name.
+{1}: Exception description
+
+
+ The type of the generic parameter '{0}' could not be inferred.
+ 無法推斷泛型參數 '{0}' 的類型。
+
+
+
+ The generic test method '{0}' doesn't have arguments, so the generic parameter cannot be inferred.
+ 泛型測試方法 '{0}' 沒有引數,因此無法推斷泛型參數。
+
+
+
+ Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'.
+ 發現泛型參數 '{0}' 有兩個衝突類型。衝突類型為 '{1}' 和 '{2}'。
+
+
+
+ Invalid value '{0}' specified for 'ClassCleanupLifecycle'. Supported scopes are {1}.
+ 為 'ClassCleanupLifecycle' 指定的值 '{0}' 無效。支援的範圍為 {1}。
+ {Locked="ClassCleanupLifecycle"}
+
+
+ Invalid value '{0}' specified for 'Scope'. Supported scopes are {1}.
+ 為 'Scope' 指定的值 '{0}' 無效。支援的範圍為 {1}。
+ {Locked="Scope"}
+
+
+ Invalid value '{0}' specified for 'Workers'. The value should be a non-negative integer.
+ 為 'Workers' 的值 '{0}' 無效。值應為非負整數。
+ {Locked="Workers"}
+
+
+ Invalid settings '{0}'. Unexpected XmlAttribute: '{1}'.
+ 設定 '{0}' 無效。未預期的 XmlAttribute: '{1}'。
+
+ MSTestAdapter encountered an unexpected element '{0}' in its settings '{1}'. Remove this element and try again.MSTestAdapter 在其設定 '{1}' 中遇到未預期的項目 '{0}'。請移除此項目,然後再試一次。
+
+ Invalid settings '{0}'. Unexpected XmlElement: '{1}'.
+ 設定 '{0}' 無效。未預期的 XmlElement: '{1}'。
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.runsettings 項目 '{1}' 的值 '{0}' 無效,將忽略設定。
+
+ Invalid value '{0}' for runsettings entry '{1}', setting will be ignored.
+ runsettings 項目 '{1}' 的值 '{0}' 無效,將忽略設定。
+
+
+
+ Warning : A testsettings file or a vsmdi file is not supported with the MSTest V2 Adapter.
+ 警告: MSTest V2 配接器不支援 testsettings 檔案 vsmdi 檔案。
+
+ Test Run deployment issue: The assembly or module '{0}' was not found. Reason: {1}測試回合部署問題: 找不到組件或模組 '{0}'。原因: {1}
@@ -97,21 +289,309 @@
測試回合部署問題: 找不到組件或模組 '{0}'。
+
+ An older version of MSTestV2 package is loaded in assembly, test discovery might fail to discover all data tests if they depend on `.runsettings` file.
+ 元件中已載入舊版的 MSTestV2 套件,如果測試探索相依於 '.runsettings' 檔案,則測試探索可能無法探索所有資料測試。
+
+
+
+ Runsettings entry '<ExecutionApartmentState>STA</ExecutionApartmentState>' is not supported on non-Windows OSes.
+ 非 Windows OS 不支援 Runsettings 項目 '<ExecutionApartmentState>STA</ExecutionApartmentState>'。
+
+
+
+ Running tests in any of the provided sources is not supported for the selected platform
+ 所選取的平台不支援在任何提供的來源中執行測試
+
+
+
+ Failed to discover tests from assembly {0}. Reason:{1}
+ 無法從組件 {0} 中探索測試。原因:{1}
+
+
+
+ File does not exist: {0}
+ 檔案不存在: {0}
+
+
+
+ Test cleanup method '{0}.{1}' timed out after {2}ms
+ 測試清理方法 '{0}.{1}' 在 {2} 毫秒後已逾時
+
+
+
+ Test cleanup method '{0}.{1}' was canceled
+ 已取消測試清理方法 '{0}.{1}'
+
+
+
+ TestContext cannot be Null.
+ TestContext 不可為 Null。
+
+
+
+ TestContext Messages:
+ TestContext 訊息:
+
+
+
+ Test initialize method '{0}.{1}' timed out after {2}ms
+ 測試初始化方法 '{0}.{1}' 在 {2} 毫秒後已逾時
+
+
+
+ Test initialize method '{0}.{1}' was canceled
+ 已取消測試初始化方法 '{0}.{1}'
+
+
+
+ Test method {0} was not found.
+ 找不到測試方法 {0}。
+
+
+
+ Test Parallelization enabled for {0} (Workers: {1}, Scope: {2})
+ 已為 {0} 啟用平行測試 (Workers: {1}, Scope: {2})
+ {Locked="Workers"}{Locked="Scope"}
+ {0}_{1} {2}{0}_{1} {2}
+
+ Unable to load types from the test source '{0}'. Some or all of the tests in this source may not be discovered.
+Error: {1}
+ 無法從測試來源 '{0}' 載入類型。有可能無法探索此來源中的部分或所有測試。
+錯誤: {1}
+
+
+
+ Assembly Cleanup method {0}.{1} failed. Error Message: {2}. StackTrace: {3}
+ 組件清除方法 {0}.{1} 失敗。錯誤訊息: {2}。堆疊追蹤: {3}
+
+
+
+ Assembly Initialization method {0}.{1} threw exception. {2}: {3}. Aborting test execution.
+ 組件初始設定方法 {0}.{1} 擲回例外狀況。{2}: {3}。正在中止測試執行。
+
+
+
+ Class Cleanup method {0}.{1} failed. Error Message: {2}. Stack Trace: {3}
+ 類別清除方法 {0}.{1} 失敗。錯誤訊息: {2}。堆疊追蹤: {3}
+
+
+
+ Class Initialization method {0}.{1} threw exception. {2}: {3}.
+ 類別初始設定方法 {0}.{1} 擲回例外狀況。{2}: {3}。
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ 方法 {0}.{1} 有錯誤的簽章。方法必須為靜態、公用、不傳回值,並且不應該接受任何參數。此外,如果您在方法中使用 async-await,則傳回類型必須是 'Task' 或 'ValueTask'。
+
+
+
+ Method {0}.{1} has wrong signature. The method must be static, public, does not return a value and should take a single parameter of type TestContext. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ 方法 {0}.{1} 有錯誤的簽章。方法必須為靜態、公用、不傳回值,並且應接受類型為 TestContext 的單一參數。此外,如果您在方法中使用 async-await,則傳回類型必須是 'Task' 或 'ValueTask'。
+
+
+
+ TestCleanup method {0}.{1} threw exception. {2}.
+ TestCleanup 方法 {0}.{1} 擲回例外狀況。{2}。
+
+
+
+ Error calling Test Cleanup method for test class {0}: {1}
+ 呼叫測試類別 {0} 的測試清除方法時發生錯誤: {1}
+
+
+
+ TestCleanup Stack Trace
+ TestCleanup 堆疊追蹤
+
+ Data source '{0}' cannot be found in the test configuration settings在測試組態設定中找不到資料來源 '{0}'
+
+ --- End of inner exception stack trace ---
+ --- 已到達內部例外狀況堆疊追蹤的結尾 ---
+
+ The unit test adapter failed to connect to the data source or to read the data. For more information on troubleshooting this error, see "Troubleshooting Data-Driven Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library. Error details: {0}單元測試配接器無法連接至資料來源或無法讀取資料。如需為此錯誤進行疑難排解的詳細資訊,請參閱 MSDN Library 上的<如何: 建立資料驅動型單元測試>(http://go.microsoft.com/fwlink/?LinkId=62412)。錯誤詳細資料: {0}
+
+ UTA031: class {0} does not have valid TestContext property. TestContext must be of type TestContext, must be non-static, and must be public. For example: public TestContext TestContext.
+ UTA031: 類別 {0}不具備有效的 TestContext 屬性。TestContext 必須是 TestContext 類型、必須是非靜態的,而且必須是公用的。例如: public TestContext TestContext。
+
+
+
+ UTA007: Method {1} defined in class {0} does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, if you are using async-await in test method then return-type must be 'Task' or 'ValueTask'. Example: public async Task Test.Class1.Test2()
+ UTA007: 類別 {0} 中定義的方法 {1} 沒有正確的簽章。標記 [TestMethod] 屬性的測試方法必須為非靜態、公用、傳回類型為 void,而且不應該接受任何參數。範例: public void Test.Class1.Test()。此外,如果您在測試方法中使用 async-await,則傳回類型必須是 'Task' 或 'ValueTask'。範例: public async Task Test.Class1.Test2()
+
+
+
+ UTA054: {0}.{1} has invalid Timeout attribute. The timeout must be an integer value greater than 0.
+ UTA054: {0}。{1} 中具有無效的 Timeout 屬性。逾時必須為大於 0 的整數值。
+
+
+
+ UTA014: {0}: Cannot define more than one method with the AssemblyCleanup attribute inside an assembly.
+ UTA014: {0}: 組件內不可定義一個以上具有 AssemblyCleanup 屬性的方法。
+
+
+
+ UTA013: {0}: Cannot define more than one method with the AssemblyInitialize attribute inside an assembly.
+ UTA013: {0}: 組件內不可定義一個以上具有 AssemblyInitialize 屬性的方法。
+
+
+
+ UTA026: {0}: Cannot define more than one method with the ClassCleanup attribute inside a class.
+ UTA026: {0}: 類別內不可定義一個以上具有 ClassCleanup 屬性的方法。
+
+
+
+ UTA025: {0}: Cannot define more than one method with the ClassInitialize attribute inside a class.
+ UTA025: {0}: 類別內不可定義一個以上具有 ClassInitialize 屬性的方法。
+
+
+
+ UTA024: {0}: Cannot define more than one method with the TestCleanup attribute.
+ UTA024: {0}: 不可定義一個以上具有 TestCleanup 屬性的方法。
+
+
+
+ UTA018: {0}: Cannot define more than one method with the TestInitialize attribute.
+ UTA018: {0}: 不可定義一個以上具有 TestInitialize 屬性的方法。
+
+
+
+ UTA001: TestClass attribute defined on non-public class {0}
+ UTA001: 在非公用類別 {0} 上定義了 TestClass 屬性
+
+
+
+ UTA023: {0}: Cannot define predefined property {2} on method {1}.
+ UTA023: {0}: 不可在方法 {1} 上定義預先定義的屬性 {2}。
+
+
+
+ TestClass attribute defined on generic non-abstract class {0}
+ 在一般非抽象類別上定義的 TestClass 屬性 {0}
+
+
+
+ UTA021: {0}: Null or empty custom property defined on method {1}. The custom property must have a valid name.
+ UTA021: {0}: 在方法 {1} 上定義了 Null 或空白的自訂屬性。自訂屬性的名稱必須有效。
+
+
+
+ An unhandled exception was thrown by the 'Execute' method. Please report this error to the author of the attribute '{0}'.
+{1}
+ 'Execute' 方法擲回未處理的例外狀況。請將此錯誤回報給屬性 '{0}' 的作者。
+{1}
+
+
+
+ The ExpectedException attribute defined on test method {0}.{1} threw an exception during construction.
+{2}
+ 測試方法 {0} 上定義的 ExpectedException 屬性。{1} 在建構期間擲回例外狀況。
+{2}
+
+
+
+ Failed to obtain the exception thrown by test method {0}.{1}.
+ 無法取得測試方法 {0}.{1} 所擲回的例外狀況。
+
+
+
+ Initialization method {0}.{1} threw exception. {2}.
+ 初始設定方法 {0}.{1} 擲回例外狀況。{2}。
+
+
+
+ Unable to create instance of class {0}. Error: {1}.
+ 無法建立類別 {0} 的執行個體。錯誤: {1}。
+
+
+
+ Method {0}.{1} does not exist.
+ 方法 {0}.{1} 不存在。
+
+
+
+ The test method '{0}.{1}' has multiple attributes derived from '{2}' defined on it. Only one such attribute is allowed.
+ 測試方法 '{0}.{1}' 具有多個衍生自 '{2}' 的屬性根據其定義。只允許一個此類屬性。
+
+
+
+ Error in executing test. No result returned by extension. If using extension of TestMethodAttribute then please contact vendor.
+ 執行測試時發生錯誤。擴充功能未傳回任何結果。如果您使用 TestMethodAttribute 的擴充功能,請連絡廠商。
+
+
+
+ Cannot find a valid constructor for test class '{0}'. Valid constructors are 'public' and either parameterless or with one parameter of type 'TestContext'.
+ 找不到測試類別 '{0}' 的有效建構函式。有效的建構函式為 'public' 且無參數或具有一個類型為 'TestContext' 的參數。
+
+
+
+ Unable to find property {0}.TestContext. Error:{1}.
+ 找不到屬性 {0}.TestContext。錯誤: {1}。
+
+
+
+ Unable to set TestContext property for the class {0}. Error: {1}.
+ 無法設定類別 {0} 的 TestContext 屬性。錯誤: {1}。
+
+
+
+ The {0}.TestContext has incorrect type.
+ {0}.TestContext 有不正確的類型。
+
+
+
+ Method {0}.{1} has wrong signature. The method must be non-static, public, does not return a value and should not take any parameter. Additionally, if you are using async-await in method then return-type must be 'Task' or 'ValueTask'.
+ 方法 {0}.{1} 有錯誤的簽章。方法必須為非靜態、公用、不傳回值,並且不應該接受任何參數。此外,如果您在方法中使用 async-await,則傳回類型必須是 'Task' 或 'ValueTask'。
+
+
+
+ Test method {0}.{1} threw exception:
+{2}
+ 測試方法 {0}.{1} 擲回例外狀況:
+{2}
+
+
+
+ Unable to get type {0}. Error: {1}.
+ 無法取得類型 {0}。錯誤: {1}。
+
+
+
+ The called code threw an exception that was caught, but the exception value was null
+ 被呼叫的程式碼擲回攔截到的例外狀況,但例外狀況值為 Null
+
+
+
+ {0} For UWP projects, if you are using UI objects in test consider using [UITestMethod] attribute instead of [TestMethod] to execute test in UI thread.
+ {0} 針對 UWP 專案,如果您在測試中使用 UI 物件,請考慮使用 [UITestMethod] 屬性取代 [TestMethod] 在 UI 執行緒中執行測試。
+
+
+
+ (Failed to get the message for an exception of type {0} due to an exception.)
+ (因為發生例外狀況,所以無法取得類型 {0} 之例外狀況的訊息。)
+
+
+
+ 'MSTest.TestAdapter' and 'MSTest.TestFramework' must have the same version. Found 'MSTest.TestAdapter' version '{0}' and 'MSTest.TestFramework' version '{1}'. Please make sure that the versions of 'MSTest.TestAdapter' and 'MSTest.TestFramework' NuGet packages have the same version.
+ 'MSTest.TestAdapter' 和 'MSTest.TestFramework' 必須使用相同的版本。發現 'MSTest.TestAdapter' 的版本為 '{0}',而 'MSTest.TestFramework' 的版本為 '{1}'。請確保 'MSTest.TestAdapter' 和 'MSTest.TestFramework' 的 NuGet 套件版本一致。
+
+ Wrong number of objects for permutation. Should be greater than zero.排列的物件數目錯誤。應大於零。
diff --git a/src/Adapter/MSTest.TestAdapter/RunConfigurationSettings.cs b/src/Adapter/MSTestAdapter.PlatformServices/RunConfigurationSettings.cs
similarity index 98%
rename from src/Adapter/MSTest.TestAdapter/RunConfigurationSettings.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/RunConfigurationSettings.cs
index b2c9b24b54..915bca4761 100644
--- a/src/Adapter/MSTest.TestAdapter/RunConfigurationSettings.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/RunConfigurationSettings.cs
@@ -16,9 +16,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
/// The run configuration settings.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class RunConfigurationSettings
{
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/FileOperations.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/FileOperations.cs
index 9f5399670c..d62f517c60 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/FileOperations.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/FileOperations.cs
@@ -16,9 +16,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// The file operations.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class FileOperations : IFileOperations
{
@@ -45,7 +45,11 @@ public Assembly LoadAssembly(string assemblyName, bool isReflectionOnly)
}
#endif
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(assemblyName);
- Assembly assembly = _assemblyCache.GetOrAdd(fileNameWithoutExtension, fileNameWithoutExtension => Assembly.Load(new AssemblyName(fileNameWithoutExtension)));
+ // Do NOT use `new AssemblyName(fileNameWithoutExtension)` here. The provided string is a FullName of assembly and needs to be properly escaped (but there is no utility for it).
+ // To correctly construct AssemblyName from file name, we need to just set the Name, and it will be escaped correct when constructing FullName.
+ // https://github.com/dotnet/runtime/blob/da322a2260bcb07347df3082fca211987ec8f2fc/src/libraries/Common/src/System/Reflection/AssemblyNameFormatter.cs#L120
+ // When we did it wrong the exception thrown is "The given assembly name was invalid." for files that have `=` or any other special characters in their names (see the AssemblyNameFormatter.cs code).
+ Assembly assembly = _assemblyCache.GetOrAdd(fileNameWithoutExtension, fileNameWithoutExtension => Assembly.Load(new AssemblyName { Name = fileNameWithoutExtension }));
return assembly;
#elif NETFRAMEWORK
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/MSTestAdapterSettings.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/MSTestAdapterSettings.cs
index 8266bf58e7..8f4f179327 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/MSTestAdapterSettings.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/MSTestAdapterSettings.cs
@@ -14,9 +14,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// The MSTest settings.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class MSTestAdapterSettings
{
@@ -161,7 +161,7 @@ internal static MSTestAdapterSettings ToSettings(IConfiguration configuration)
// },
// ... remaining settings
// }
- var settings = new MSTestAdapterSettings();
+ MSTestAdapterSettings settings = MSTestSettingsProvider.Settings;
Configuration = configuration;
ParseBooleanSetting(configuration, "deployment:enabled", value => settings.DeploymentEnabled = value);
ParseBooleanSetting(configuration, "deployment:deployTestSourceDependencies", value => settings.DeployTestSourceDependencies = value);
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/ReflectionOperations.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/ReflectionOperations.cs
index 2e37b5afba..cf49b2781d 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/ReflectionOperations.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/ReflectionOperations.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
#if NETFRAMEWORK
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Utilities;
#endif
@@ -12,9 +13,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// This service is responsible for platform specific reflection operations.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class ReflectionOperations : IReflectionOperations
{
@@ -27,7 +28,7 @@ public class ReflectionOperations : IReflectionOperations
[return: NotNullIfNotNull(nameof(memberInfo))]
public object[]? GetCustomAttributes(MemberInfo memberInfo, bool inherit)
#if NETFRAMEWORK
- => ReflectionUtility.GetCustomAttributes(memberInfo, inherit).ToArray();
+ => [.. ReflectionUtility.GetCustomAttributes(memberInfo, inherit)];
#else
{
object[] attributes = memberInfo.GetCustomAttributes(typeof(Attribute), inherit);
@@ -51,7 +52,7 @@ public class ReflectionOperations : IReflectionOperations
[return: NotNullIfNotNull(nameof(memberInfo))]
public object[]? GetCustomAttributes(MemberInfo memberInfo, Type type, bool inherit) =>
#if NETFRAMEWORK
- ReflectionUtility.GetCustomAttributes(memberInfo, type, inherit).ToArray();
+ [.. ReflectionUtility.GetCustomAttributes(memberInfo, type, inherit)];
#else
memberInfo.GetCustomAttributes(type, inherit);
#endif
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/SettingsProvider.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/SettingsProvider.cs
index 26e97bf5d5..c530d8d802 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/SettingsProvider.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/SettingsProvider.cs
@@ -9,9 +9,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// Class to read settings from the runsettings xml for the desktop.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class MSTestSettingsProvider : ISettingsProvider
{
@@ -37,9 +37,16 @@ public static MSTestAdapterSettings Settings
internal static void Load(IConfiguration configuration)
{
#if !WINDOWS_UWP
-#pragma warning disable IDE0022 // Use expression body for method
var settings = MSTestAdapterSettings.ToSettings(configuration);
-#pragma warning restore IDE0022 // Use expression body for method
+ if (!ReferenceEquals(settings, Settings))
+ {
+ // NOTE: ToSettings mutates the Settings property and just returns it.
+ // This invariant is important to preserve, because we load from from runsettings through the XmlReader overload below.
+ // Then we read via IConfiguration.
+ // So this path should be unreachable.
+ // In v4 when we will make this class internal, we can start changing the API to clean this up.
+ throw ApplicationStateGuard.Unreachable();
+ }
#endif
}
@@ -51,7 +58,16 @@ public void Load(XmlReader reader)
{
#if !WINDOWS_UWP
Guard.NotNull(reader);
- Settings = MSTestAdapterSettings.ToSettings(reader);
+ var settings = MSTestAdapterSettings.ToSettings(reader);
+ if (!ReferenceEquals(settings, Settings))
+ {
+ // NOTE: ToSettings mutates the Settings property and just returns it.
+ // This invariant is important to preserve, because we load from from runsettings through the XmlReader overload below.
+ // Then we read via IConfiguration.
+ // So this path should be unreachable.
+ // In v4 when we will make this class internal, we can start changing the API to clean this up.
+ throw ApplicationStateGuard.Unreachable();
+ }
#endif
}
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestContextImplementation.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestContextImplementation.cs
index c129f79d52..44eb70f27c 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestContextImplementation.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestContextImplementation.cs
@@ -6,6 +6,7 @@
using System.Data.Common;
#endif
+using Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -20,22 +21,46 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// like GetProperty<string>("TestName") or GetProperty<string>("FullyQualifiedTestClassName").
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
-public class TestContextImplementation : TestContext, ITestContext
+public sealed class TestContextImplementation : TestContext, ITestContext, IDisposable
{
- ///
- /// List of result files associated with the test.
- ///
- private readonly List _testResultFiles;
+ internal sealed class SynchronizedStringBuilder
+ {
+ private readonly StringBuilder _builder = new();
- ///
- /// Writer on which the messages given by the user should be written.
- ///
- private readonly StringWriter _stringWriter;
- private readonly ThreadSafeStringWriter? _threadSafeStringWriter;
+ [MethodImpl(MethodImplOptions.Synchronized)]
+ internal void Append(char value)
+ => _builder.Append(value);
+
+ [MethodImpl(MethodImplOptions.Synchronized)]
+ internal void Append(string? value)
+ => _builder.Append(value);
+
+ [MethodImpl(MethodImplOptions.Synchronized)]
+ internal void Append(char[] buffer, int index, int count)
+ => _builder.Append(buffer, index, count);
+
+ [MethodImpl(MethodImplOptions.Synchronized)]
+ internal void AppendLine(string? value)
+ => _builder.AppendLine(value);
+
+ [MethodImpl(MethodImplOptions.Synchronized)]
+ internal void Clear()
+ => _builder.Clear();
+
+ [MethodImpl(MethodImplOptions.Synchronized)]
+ public override string ToString()
+ => _builder.ToString();
+ }
+
+ private static readonly AsyncLocal CurrentTestContextAsyncLocal = new();
+
+ // This should be removed. Don't rely on it.
+ // We only keep it for public constructor, but we don't pass it by the adapter.
+ private readonly StringWriter? _stringWriter;
///
/// Properties.
@@ -43,10 +68,17 @@ public class TestContextImplementation : TestContext, ITestContext
private readonly Dictionary _properties;
private readonly IMessageLogger? _messageLogger;
+ private CancellationTokenRegistration? _cancellationTokenRegistration;
+
///
- /// Specifies whether the writer is disposed or not.
+ /// List of result files associated with the test.
///
- private bool _stringWriterDisposed;
+ private List? _testResultFiles;
+
+ private SynchronizedStringBuilder? _stdOutStringBuilder;
+ private SynchronizedStringBuilder? _stdErrStringBuilder;
+ private SynchronizedStringBuilder? _traceStringBuilder;
+ private SynchronizedStringBuilder? _testContextMessageStringBuilder;
///
/// Unit test outcome.
@@ -65,16 +97,21 @@ public class TestContextImplementation : TestContext, ITestContext
private DataRow? _dataRow;
#endif
+ private static readonly Action CancelDelegate = static state => ((TestContextImplementation)state!).Context.CancellationTokenSource.Cancel();
+
///
/// Initializes a new instance of the class.
///
/// The test method.
- /// The writer where diagnostic messages are written to.
/// Properties/configuration passed in.
/// The message logger to use.
- internal TestContextImplementation(ITestMethod? testMethod, StringWriter stringWriter, IDictionary properties, IMessageLogger messageLogger)
- : this(testMethod, stringWriter, properties)
- => _messageLogger = messageLogger;
+ /// The global test run cancellation token.
+ internal TestContextImplementation(ITestMethod? testMethod, IDictionary properties, IMessageLogger messageLogger, TestRunCancellationToken? testRunCancellationToken)
+ : this(testMethod, null!, properties)
+ {
+ _messageLogger = messageLogger;
+ _cancellationTokenRegistration = testRunCancellationToken?.Register(CancelDelegate, this);
+ }
///
/// Initializes a new instance of the class.
@@ -87,27 +124,28 @@ public TestContextImplementation(ITestMethod? testMethod, StringWriter stringWri
// testMethod can be null when running ForceCleanup (done when reaching --maximum-failed-tests.
DebugEx.Assert(properties != null, "properties is not null");
-#if NETFRAMEWORK
- DebugEx.Assert(stringWriter != null, "StringWriter is not null");
-#endif
-
_stringWriter = stringWriter;
-
- // Cannot get this type in constructor directly, because all signatures for all platforms need to be the same.
- _threadSafeStringWriter = stringWriter as ThreadSafeStringWriter;
- _properties = testMethod is null
- ? new Dictionary(properties)
- : new Dictionary(properties)
+ if (testMethod is null)
+ {
+ _properties = new Dictionary(properties);
+ }
+ else
+ {
+ _properties = new Dictionary(properties.Count + 4);
+ foreach (KeyValuePair kvp in properties)
{
- [FullyQualifiedTestClassNameLabel] = testMethod.FullClassName,
- [ManagedTypeLabel] = testMethod.ManagedTypeName,
- [ManagedMethodLabel] = testMethod.ManagedMethodName,
- [TestNameLabel] = testMethod.Name,
- };
+ _properties[kvp.Key] = kvp.Value;
+ }
- _testResultFiles = [];
+ _properties[FullyQualifiedTestClassNameLabel] = testMethod.FullClassName;
+ _properties[ManagedTypeLabel] = testMethod.ManagedTypeName;
+ _properties[ManagedMethodLabel] = testMethod.ManagedMethodName;
+ _properties[TestNameLabel] = testMethod.Name;
+ }
}
+ internal static TestContextImplementation? CurrentTestContext => CurrentTestContextAsyncLocal.Value;
+
#region TestContext impl
///
@@ -168,7 +206,7 @@ public override void AddResultFile(string fileName)
throw new ArgumentException(Resource.Common_CannotBeNullOrEmpty, nameof(fileName));
}
- _testResultFiles.Add(Path.GetFullPath(fileName));
+ (_testResultFiles ??= []).Add(Path.GetFullPath(fileName));
}
///
@@ -178,20 +216,9 @@ public override void AddResultFile(string fileName)
/// The formatted string that contains the trace message.
public override void Write(string? message)
{
- if (_stringWriterDisposed)
- {
- return;
- }
-
- try
- {
- string? msg = message?.Replace("\0", "\\0");
- _stringWriter.Write(msg);
- }
- catch (ObjectDisposedException)
- {
- _stringWriterDisposed = true;
- }
+ string? msg = message?.Replace("\0", "\\0");
+ GetTestContextMessagesStringBuilder().Append(msg);
+ _stringWriter?.Write(msg);
}
///
@@ -202,20 +229,9 @@ public override void Write(string? message)
/// Arguments to add to the trace message.
public override void Write(string format, params object?[] args)
{
- if (_stringWriterDisposed)
- {
- return;
- }
-
- try
- {
- string message = string.Format(CultureInfo.CurrentCulture, format.Replace("\0", "\\0"), args);
- _stringWriter.Write(message);
- }
- catch (ObjectDisposedException)
- {
- _stringWriterDisposed = true;
- }
+ string message = string.Format(CultureInfo.CurrentCulture, format.Replace("\0", "\\0"), args);
+ GetTestContextMessagesStringBuilder().Append(message);
+ _stringWriter?.Write(message);
}
///
@@ -225,20 +241,9 @@ public override void Write(string format, params object?[] args)
/// The formatted string that contains the trace message.
public override void WriteLine(string? message)
{
- if (_stringWriterDisposed)
- {
- return;
- }
-
- try
- {
- string? msg = message?.Replace("\0", "\\0");
- _stringWriter.WriteLine(msg);
- }
- catch (ObjectDisposedException)
- {
- _stringWriterDisposed = true;
- }
+ string? msg = message?.Replace("\0", "\\0");
+ GetTestContextMessagesStringBuilder().AppendLine(msg);
+ _stringWriter?.Write(msg);
}
///
@@ -249,20 +254,9 @@ public override void WriteLine(string? message)
/// Arguments to add to the trace message.
public override void WriteLine(string format, params object?[] args)
{
- if (_stringWriterDisposed)
- {
- return;
- }
-
- try
- {
- string message = string.Format(CultureInfo.CurrentCulture, format.Replace("\0", "\\0"), args);
- _stringWriter.WriteLine(message);
- }
- catch (ObjectDisposedException)
- {
- _stringWriterDisposed = true;
- }
+ string message = string.Format(CultureInfo.CurrentCulture, format.Replace("\0", "\\0"), args);
+ GetTestContextMessagesStringBuilder().AppendLine(message);
+ _stringWriter?.Write(message);
}
///
@@ -336,7 +330,7 @@ public void AddProperty(string propertyName, string propertyValue)
/// Results files generated in run.
public IList? GetResultFiles()
{
- if (_testResultFiles.Count == 0)
+ if (_testResultFiles is null || _testResultFiles.Count == 0)
{
return null;
}
@@ -354,13 +348,16 @@ public void AddProperty(string propertyName, string propertyValue)
///
/// The test context messages added so far.
public string? GetDiagnosticMessages()
- => _stringWriter.ToString();
+ => _testContextMessageStringBuilder?.ToString();
///
/// Clears the previous testContext writeline messages.
///
public void ClearDiagnosticMessages()
- => _threadSafeStringWriter?.ToStringAndClear();
+ {
+ _testContextMessageStringBuilder?.Clear();
+ (_stringWriter as ThreadSafeStringWriter)?.ToStringAndClear();
+ }
///
public void SetDisplayName(string? displayName)
@@ -370,4 +367,86 @@ public void SetDisplayName(string? displayName)
public override void DisplayMessage(MessageLevel messageLevel, string message)
=> _messageLogger?.SendMessage(messageLevel.ToTestMessageLevel(), message);
#endregion
+
+ ///
+ public void Dispose()
+ {
+ _cancellationTokenRegistration?.Dispose();
+ _cancellationTokenRegistration = null;
+ }
+
+ internal readonly struct ScopedTestContextSetter : IDisposable
+ {
+ internal ScopedTestContextSetter(TestContextImplementation? testContext)
+ => CurrentTestContextAsyncLocal.Value = testContext;
+
+ public void Dispose()
+ => CurrentTestContextAsyncLocal.Value = null;
+ }
+
+ internal static ScopedTestContextSetter SetCurrentTestContext(TestContextImplementation? testContext)
+ => new(testContext);
+
+ internal void WriteConsoleOut(char value)
+ => GetOutStringBuilder().Append(value);
+
+ internal void WriteConsoleOut(string? value)
+ => GetOutStringBuilder().Append(value);
+
+ internal void WriteConsoleOut(char[] buffer, int index, int count)
+ => GetOutStringBuilder().Append(buffer, index, count);
+
+ internal void WriteConsoleErr(char value)
+ => GetErrStringBuilder().Append(value);
+
+ internal void WriteConsoleErr(string? value)
+ => GetErrStringBuilder().Append(value);
+
+ internal void WriteConsoleErr(char[] buffer, int index, int count)
+ => GetErrStringBuilder().Append(buffer, index, count);
+
+ internal void WriteTrace(char value)
+ => GetTraceStringBuilder().Append(value);
+
+ internal void WriteTrace(string? value)
+ => GetTraceStringBuilder().Append(value);
+
+ private SynchronizedStringBuilder GetOutStringBuilder()
+ {
+ _ = _stdOutStringBuilder ?? Interlocked.CompareExchange(ref _stdOutStringBuilder, new SynchronizedStringBuilder(), null)!;
+ return _stdOutStringBuilder;
+ }
+
+ private SynchronizedStringBuilder GetErrStringBuilder()
+ {
+ _ = _stdErrStringBuilder ?? Interlocked.CompareExchange(ref _stdErrStringBuilder, new SynchronizedStringBuilder(), null)!;
+ return _stdErrStringBuilder;
+ }
+
+ private SynchronizedStringBuilder GetTraceStringBuilder()
+ {
+ _ = _traceStringBuilder ?? Interlocked.CompareExchange(ref _traceStringBuilder, new SynchronizedStringBuilder(), null)!;
+ return _traceStringBuilder;
+ }
+
+ private SynchronizedStringBuilder GetTestContextMessagesStringBuilder()
+ {
+ // Prefer writing to the current test context instead of 'this'.
+ // This is just a hack to preserve backward compatibility.
+ // It's relevant for cases where users store 'TestContext' in a static field.
+ // Then, they write to the "wrong" test context.
+ // Here, we are correcting user's fault by finding out the correct TestContext that should receive the message.
+ TestContextImplementation @this = CurrentTestContext ?? this;
+ _ = @this._testContextMessageStringBuilder ?? Interlocked.CompareExchange(ref @this._testContextMessageStringBuilder, new SynchronizedStringBuilder(), null)!;
+ return @this._testContextMessageStringBuilder;
+ }
+
+ internal string? GetOut()
+ => _stdOutStringBuilder?.ToString();
+
+ internal string? GetErr()
+ => _stdErrStringBuilder?.ToString();
+
+ internal string? GetTrace()
+ => _traceStringBuilder?.ToString();
}
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestDataSource.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestDataSource.cs
index 4f1a4f90d9..328576496c 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestDataSource.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestDataSource.cs
@@ -24,9 +24,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// a ReflectionTypeLoadException.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class TestDataSource : ITestDataSource
{
@@ -147,7 +147,7 @@ private static void GetConnectionProperties(DataSourceAttribute dataSourceAttrib
providerNameInvariant = ConfigurationManager.ConnectionStrings[element.ConnectionString].ProviderName;
connectionString = ConfigurationManager.ConnectionStrings[element.ConnectionString].ConnectionString;
tableName = element.DataTableName;
- dataAccessMethod = EnumPolyfill.Parse(element.DataAccessMethod);
+ dataAccessMethod = Enum.Parse(element.DataAccessMethod);
}
#endif
}
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestDeployment.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestDeployment.cs
index 03a50cdfa3..bb745acf5b 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestDeployment.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestDeployment.cs
@@ -23,9 +23,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// The test deployment.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class TestDeployment : ITestDeployment
{
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestSource.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestSource.cs
index c0cbeab9cd..b93d0aaa05 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestSource.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestSource.cs
@@ -5,6 +5,7 @@
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.AppContainer;
#endif
using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Interface;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
#if NETFRAMEWORK
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities;
#endif
@@ -16,9 +17,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// the test sources provided to the adapter.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class TestSource : ITestSource
{
@@ -27,22 +28,22 @@ public class TestSource : ITestSource
private static readonly IEnumerable ExecutableExtensions = new HashSet()
{
- Constants.ExeExtension,
+ EngineConstants.ExeExtension,
// Required only for store 8.1. In future if that support is needed, uncomment this.
// Constants.DllExtension
};
- private static readonly HashSet SystemAssemblies = new(new string[]
- {
+ private static readonly HashSet SystemAssemblies =
+ [
"MICROSOFT.CSHARP.DLL",
"MICROSOFT.VISUALBASIC.DLL",
"CLRCOMPRESSION.DLL",
- });
+ ];
// Well known platform assemblies.
- private static readonly HashSet PlatformAssemblies = new(new string[]
- {
+ private static readonly HashSet PlatformAssemblies =
+ [
"MICROSOFT.VISUALSTUDIO.TESTPLATFORM.TESTFRAMEWORK.DLL",
"MICROSOFT.VISUALSTUDIO.TESTPLATFORM.TESTFRAMEWORK.EXTENSIONS.CORE.DLL",
"MICROSOFT.VISUALSTUDIO.TESTPLATFORM.CORE.DLL",
@@ -54,7 +55,7 @@ public class TestSource : ITestSource
"VSTEST_EXECUTIONENGINE_PLATFORMBRIDGE.DLL",
"VSTEST_EXECUTIONENGINE_PLATFORMBRIDGE.WINMD",
"VSTEST.EXECUTIONENGINE.WINDOWSPHONE.DLL",
- });
+ ];
#endif
///
@@ -62,13 +63,13 @@ public class TestSource : ITestSource
///
public IEnumerable ValidSourceExtensions => new List
{
- Constants.DllExtension,
+ EngineConstants.DllExtension,
#if NETFRAMEWORK
- Constants.PhoneAppxPackageExtension,
+ EngineConstants.PhoneAppxPackageExtension,
#elif WINDOWS_UWP || WIN_UI
- Constants.AppxPackageExtension,
+ EngineConstants.AppxPackageExtension,
#endif
- Constants.ExeExtension,
+ EngineConstants.ExeExtension,
};
///
@@ -149,7 +150,7 @@ public IEnumerable GetTestSources(IEnumerable sources)
{
// WinUI Desktop uses .NET 6, which builds both a .dll and an .exe.
// The manifest will provide the .exe, but the tests are inside the .dll, so we replace the name here.
- newSources.Add(Path.Combine(appxSourceDirectory, Path.ChangeExtension(filePath, Constants.DllExtension)));
+ newSources.Add(Path.Combine(appxSourceDirectory, Path.ChangeExtension(filePath, EngineConstants.DllExtension)));
}
}
@@ -170,7 +171,7 @@ private static bool ContainsAppxSource(IEnumerable sources)
{
foreach (string source in sources)
{
- if (string.Equals(Path.GetExtension(source), Constants.AppxPackageExtension, StringComparison.OrdinalIgnoreCase))
+ if (string.Equals(Path.GetExtension(source), EngineConstants.AppxPackageExtension, StringComparison.OrdinalIgnoreCase))
{
return true;
}
@@ -190,7 +191,7 @@ private static bool ContainsAppxSource(IEnumerable sources)
{
foreach (string source in sources)
{
- if (string.Equals(Path.GetExtension(source), Constants.AppxPackageExtension, StringComparison.OrdinalIgnoreCase))
+ if (string.Equals(Path.GetExtension(source), EngineConstants.AppxPackageExtension, StringComparison.OrdinalIgnoreCase))
{
return source;
}
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestSourceHost.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestSourceHost.cs
index 54f530d721..a88a8d463e 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/TestSourceHost.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/TestSourceHost.cs
@@ -22,9 +22,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// A host that loads the test source. This can be in isolation for desktop using an AppDomain or just loading the source in the current context.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class TestSourceHost : ITestSourceHost
{
@@ -120,7 +120,7 @@ public void SetupHost()
if (EqtTrace.IsInfoEnabled)
{
- EqtTrace.Info("DesktopTestSourceHost.SetupHost(): Creating assembly resolver with resolution paths {0}.", string.Join(",", resolutionPaths));
+ EqtTrace.Info("DesktopTestSourceHost.SetupHost(): Creating assembly resolver with resolution paths {0}.", string.Join(',', resolutionPaths));
}
var assemblyResolver = new AssemblyResolver(resolutionPaths);
@@ -137,7 +137,7 @@ public void SetupHost()
if (EqtTrace.IsInfoEnabled)
{
- EqtTrace.Info("DesktopTestSourceHost.SetupHost(): Creating assembly resolver with resolution paths {0}.", string.Join(",", resolutionPaths));
+ EqtTrace.Info("DesktopTestSourceHost.SetupHost(): Creating assembly resolver with resolution paths {0}.", string.Join(',', resolutionPaths));
}
// NOTE: These 2 lines are super important, see https://github.com/microsoft/testfx/issues/2922
@@ -221,19 +221,13 @@ public void SetupHost()
public void Dispose()
{
#if NETFRAMEWORK || (NET && !WINDOWS_UWP)
- if (_parentDomainAssemblyResolver != null)
- {
- _parentDomainAssemblyResolver.Dispose();
- _parentDomainAssemblyResolver = null;
- }
+ _parentDomainAssemblyResolver?.Dispose();
+ _parentDomainAssemblyResolver = null;
#endif
#if NETFRAMEWORK
- if (_childDomainAssemblyResolver != null)
- {
- _childDomainAssemblyResolver.Dispose();
- _childDomainAssemblyResolver = null;
- }
+ _childDomainAssemblyResolver?.Dispose();
+ _childDomainAssemblyResolver = null;
if (AppDomain != null)
{
@@ -346,7 +340,7 @@ internal string GetAppBaseAsPerPlatform()
// UWP platform service assembly at the test source location and since CLR starts looking for assemblies from the app base location,
// there would be a mismatch of platform service assemblies during discovery.
DebugEx.Assert(_targetFrameworkVersion is not null, "Target framework version is null.");
- return _targetFrameworkVersion.Contains(Constants.DotNetFrameWorkStringPrefix)
+ return _targetFrameworkVersion.Contains(EngineConstants.DotNetFrameWorkStringPrefix)
? Path.GetDirectoryName(_sourceFileName) ?? Path.GetDirectoryName(typeof(TestSourceHost).Assembly.Location)
: Path.GetDirectoryName(typeof(TestSourceHost).Assembly.Location);
}
@@ -428,10 +422,6 @@ private static bool TryAddSearchDirectoriesSpecifiedInRunSettingsToAssemblyResol
{
// Check if user specified any adapter settings
MSTestAdapterSettings adapterSettings = MSTestSettingsProvider.Settings;
- if (adapterSettings == null)
- {
- return false;
- }
try
{
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/ThreadOperations.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/ThreadOperations.cs
index 294ec53bfd..756793e443 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/ThreadOperations.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/ThreadOperations.cs
@@ -10,9 +10,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// This service is responsible for any Async operations specific to a platform.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class ThreadOperations : IThreadOperations
{
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/ThreadSafeStringWriter.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/ThreadSafeStringWriter.cs
index 821e25829d..3859b40cd8 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/ThreadSafeStringWriter.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/ThreadSafeStringWriter.cs
@@ -7,9 +7,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// AsyncContext aware, thread safe string writer that allows output writes from different threads to end up in the same async local context.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class ThreadSafeStringWriter : StringWriter
{
@@ -183,7 +183,7 @@ internal static void CleanState()
{
lock (StaticLockObject)
{
- State.Value = new();
+ State.Value = [];
}
}
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceListener.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceListener.cs
index 5308c23d72..485b351528 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceListener.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceListener.cs
@@ -13,9 +13,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// like Close(), Dispose() etc.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class TraceListenerWrapper :
#if !WINDOWS_UWP && !WIN_UI
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceListenerManager.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceListenerManager.cs
index e811d1cd15..1e427fc766 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceListenerManager.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceListenerManager.cs
@@ -10,9 +10,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// Responsible for performing Add(), Remove(), Close(), Dispose() operations on traceListener object.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class TraceListenerManager : ITraceListenerManager
{
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceLogger.cs b/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceLogger.cs
index 44baf76b71..982509eaef 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceLogger.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Services/TraceLogger.cs
@@ -10,9 +10,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
/// A service to log any trace messages from the adapter that would be shown in *.TpTrace files.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public class AdapterTraceLogger : IAdapterTraceLogger
{
diff --git a/src/Adapter/MSTest.TestAdapter/TestMethodFilter.cs b/src/Adapter/MSTestAdapter.PlatformServices/TestMethodFilter.cs
similarity index 92%
rename from src/Adapter/MSTest.TestAdapter/TestMethodFilter.cs
rename to src/Adapter/MSTestAdapter.PlatformServices/TestMethodFilter.cs
index a713f7acc8..33f554a96c 100644
--- a/src/Adapter/MSTest.TestAdapter/TestMethodFilter.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/TestMethodFilter.cs
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+using Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices;
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;
@@ -17,12 +18,12 @@ internal sealed class TestMethodFilter
internal TestMethodFilter() => _supportedProperties = new Dictionary(StringComparer.OrdinalIgnoreCase)
{
- [Constants.TestCategoryProperty.Label] = Constants.TestCategoryProperty,
- [Constants.PriorityProperty.Label] = Constants.PriorityProperty,
+ [EngineConstants.TestCategoryProperty.Label] = EngineConstants.TestCategoryProperty,
+ [EngineConstants.PriorityProperty.Label] = EngineConstants.PriorityProperty,
[TestCaseProperties.FullyQualifiedName.Label] = TestCaseProperties.FullyQualifiedName,
[TestCaseProperties.DisplayName.Label] = TestCaseProperties.DisplayName,
[TestCaseProperties.Id.Label] = TestCaseProperties.Id,
- [Constants.TestClassNameProperty.Label] = Constants.TestClassNameProperty,
+ [EngineConstants.TestClassNameProperty.Label] = EngineConstants.TestClassNameProperty,
};
///
@@ -124,15 +125,14 @@ internal TestProperty PropertyProvider(string propertyName)
MethodInfo? methodGetTestCaseFilter = context.GetType().GetRuntimeMethod("GetTestCaseFilter", [typeof(IEnumerable), typeof(Func)]);
return (ITestCaseFilterExpression?)methodGetTestCaseFilter?.Invoke(context, [_supportedProperties.Keys, (Func)PropertyProvider]);
}
- catch (Exception ex)
+ catch (TargetInvocationException ex)
{
// In case of UWP .Net Native Tool Chain compilation. Invoking methods via Reflection doesn't work, hence discovery always fails.
// Hence throwing exception only if it is of type TargetInvocationException(i.e. Method got invoked but something went wrong in GetTestCaseFilter Method)
- if (ex is TargetInvocationException)
- {
- throw ex.InnerException!;
- }
-
+ throw ex.InnerException!;
+ }
+ catch (Exception ex)
+ {
logger.SendMessage(TestMessageLevel.Warning, ex.Message);
}
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/AppDomainUtilities.cs b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/AppDomainUtilities.cs
index a80126e0b1..a4151b99a3 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/AppDomainUtilities.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/AppDomainUtilities.cs
@@ -42,7 +42,7 @@ internal static void SetAppDomainFrameworkVersionBasedOnTestSource(AppDomainSetu
{
if (GetTargetFrameworkVersionFromVersionString(frameworkVersionString).CompareTo(Version45) > 0)
{
- PropertyInfo? pInfo = typeof(AppDomainSetup).GetProperty(Constants.TargetFrameworkName);
+ PropertyInfo? pInfo = typeof(AppDomainSetup).GetProperty(EngineConstants.TargetFrameworkName);
pInfo?.SetValue(setup, frameworkVersionString, null);
}
}
@@ -227,9 +227,9 @@ internal static Version GetTargetFrameworkVersionFromVersionString(string versio
{
try
{
- if (version.Length > Constants.DotNetFrameWorkStringPrefix.Length + 1)
+ if (version.Length > EngineConstants.DotNetFrameWorkStringPrefix.Length + 1)
{
- string versionPart = version.Substring(Constants.DotNetFrameWorkStringPrefix.Length + 1);
+ string versionPart = version.Substring(EngineConstants.DotNetFrameWorkStringPrefix.Length + 1);
return new Version(versionPart);
}
}
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentItemUtility.cs b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentItemUtility.cs
index bd8c0d78e6..892345da66 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentItemUtility.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentItemUtility.cs
@@ -212,7 +212,7 @@ private static List GetDeploymentItems(IEnumerable deploymentIte
return deploymentItemList1;
}
- IList result = new List(deploymentItemList1);
+ IList result = [.. deploymentItemList1];
foreach (DeploymentItem item in deploymentItemList2)
{
@@ -227,7 +227,7 @@ private static List GetDeploymentItems(IEnumerable deploymentIte
///
/// The test Case.
/// The .
- private static KeyValuePair[]? GetDeploymentItems(TestCase testCase) => testCase.GetPropertyValue(Constants.DeploymentItemsProperty) as
+ private static KeyValuePair[]? GetDeploymentItems(TestCase testCase) => testCase.GetPropertyValue(EngineConstants.DeploymentItemsProperty) as
KeyValuePair[];
private static KeyValuePair[]? ToKeyValuePairs(IEnumerable deploymentItemList)
@@ -247,7 +247,7 @@ private static List GetDeploymentItems(IEnumerable deploymentIte
}
}
- return result.ToArray();
+ return [.. result];
}
private static IList? FromKeyValuePairs(KeyValuePair[] deploymentItemsData)
@@ -257,7 +257,7 @@ private static List GetDeploymentItems(IEnumerable deploymentIte
return null;
}
- IList result = new List();
+ IList result = [];
foreach ((string? key, string? value) in deploymentItemsData)
{
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentUtility.cs b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentUtility.cs
index af43490bde..e7f32535b3 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentUtility.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentUtility.cs
@@ -62,11 +62,7 @@ public override void AddDeploymentItemsBasedOnMsTestSetting(string testSource, I
/// Root deployment directory.
public override string GetRootDeploymentDirectory(string baseDirectory)
{
-#if NETFRAMEWORK || NETSTANDARD || NETCOREAPP3_1
- string dateTimeSuffix = $"{DateTime.Now.ToString("yyyyMMddTHHmmss", DateTimeFormatInfo.InvariantInfo)}_{Process.GetCurrentProcess().Id}";
-#else
string dateTimeSuffix = $"{DateTime.Now.ToString("yyyyMMddTHHmmss", DateTimeFormatInfo.InvariantInfo)}_{Environment.ProcessId}";
-#endif
string directoryName = string.Format(CultureInfo.InvariantCulture, Resource.TestRunName, DeploymentFolderPrefix,
#if NETFRAMEWORK
Environment.UserName,
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentUtilityBase.cs b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentUtilityBase.cs
index 21de3f1a79..7b2f77a9a6 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentUtilityBase.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/DeploymentUtilityBase.cs
@@ -407,7 +407,7 @@ private bool Deploy(string source, IRunContext? runContext, ITestExecutionRecord
// Do the deployment.
EqtTrace.InfoIf(EqtTrace.IsInfoEnabled, "MSTestExecutor: Using deployment directory {0} for source {1}.", runDirectories.OutDirectory, source);
- IEnumerable warnings = Deploy(new List(deploymentItems), source, runDirectories.OutDirectory, GetTestResultsDirectory(runContext));
+ IEnumerable warnings = Deploy([.. deploymentItems], source, runDirectories.OutDirectory, GetTestResultsDirectory(runContext));
// Log warnings
LogWarnings(testExecutionRecorder, warnings);
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/ReflectionUtility.cs b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/ReflectionUtility.cs
index b9fe555b32..1ef57c713c 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/ReflectionUtility.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/ReflectionUtility.cs
@@ -126,7 +126,7 @@ internal static List GetCustomAttributes(Assembly assembly, Type type
{
if (!assembly.ReflectionOnly)
{
- return assembly.GetCustomAttributes(type).ToList();
+ return [.. assembly.GetCustomAttributes(type)];
}
List customAttributes = [.. CustomAttributeData.GetCustomAttributes(assembly)];
@@ -195,8 +195,8 @@ internal static List GetCustomAttributes(Assembly assembly, Type type
constructorArguments.Add(list.ToArray(parameterType.GetElementType()));
}
- ConstructorInfo constructor = attributeType.GetConstructor(constructorParameters.ToArray());
- attribute = constructor.Invoke(constructorArguments.ToArray());
+ ConstructorInfo constructor = attributeType.GetConstructor([.. constructorParameters]);
+ attribute = constructor.Invoke([.. constructorArguments]);
foreach (CustomAttributeNamedArgument namedArgument in attributeData.NamedArguments)
{
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/VSInstallationUtilities.cs b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/VSInstallationUtilities.cs
index 3083c603c8..07b01ef1dc 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Utilities/VSInstallationUtilities.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Utilities/VSInstallationUtilities.cs
@@ -11,9 +11,9 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.Uti
/// Utilities to get Visual Studio installation paths.
///
#if NET6_0_OR_GREATER
-[Obsolete(Constants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage, DiagnosticId = "MSTESTOBS")]
#else
-[Obsolete(Constants.PublicTypeObsoleteMessage)]
+[Obsolete(TestTools.UnitTesting.FrameworkConstants.PublicTypeObsoleteMessage)]
#endif
public static class VSInstallationUtilities
{
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/AddTestClassFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/AddTestClassFixer.cs
index 2b6488f8de..bca1789d1b 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/AddTestClassFixer.cs
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/AddTestClassFixer.cs
@@ -52,13 +52,36 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
// Find the type declaration identified by the diagnostic.
TypeDeclarationSyntax declaration = syntaxToken.Parent.AncestorsAndSelf().OfType().First();
- // Register a code action that will invoke the fix.
- context.RegisterCodeFix(
- CodeAction.Create(
- title: CodeFixResources.AddTestClassFix,
- createChangedDocument: c => AddTestClassAttributeAsync(context.Document, declaration, c),
- equivalenceKey: $"{nameof(AddTestClassFixer)}_{diagnostic.Id}"),
- diagnostic);
+ // For structs and record structs, we need to change them to classes/record classes since [TestClass] cannot be applied to structs
+ if (declaration is StructDeclarationSyntax)
+ {
+ context.RegisterCodeFix(
+ CodeAction.Create(
+ title: CodeFixResources.ChangeStructToClassAndAddTestClassFix,
+ createChangedDocument: c => ChangeStructToClassAndAddTestClassAttributeAsync(context.Document, declaration, c),
+ equivalenceKey: $"{nameof(AddTestClassFixer)}_ChangeStructToClass_{diagnostic.Id}"),
+ diagnostic);
+ }
+ else if (declaration is RecordDeclarationSyntax recordDeclaration
+ && recordDeclaration.ClassOrStructKeyword.IsKind(SyntaxKind.StructKeyword))
+ {
+ context.RegisterCodeFix(
+ CodeAction.Create(
+ title: CodeFixResources.ChangeStructToClassAndAddTestClassFix,
+ createChangedDocument: c => ChangeRecordStructToRecordClassAndAddTestClassAttributeAsync(context.Document, recordDeclaration, c),
+ equivalenceKey: $"{nameof(AddTestClassFixer)}_ChangeRecordStructToClass_{diagnostic.Id}"),
+ diagnostic);
+ }
+ else
+ {
+ // For classes and record classes, just add the [TestClass] attribute
+ context.RegisterCodeFix(
+ CodeAction.Create(
+ title: CodeFixResources.AddTestClassFix,
+ createChangedDocument: c => AddTestClassAttributeAsync(context.Document, declaration, c),
+ equivalenceKey: $"{nameof(AddTestClassFixer)}_{diagnostic.Id}"),
+ diagnostic);
+ }
}
private static async Task AddTestClassAttributeAsync(Document document, TypeDeclarationSyntax typeDeclaration, CancellationToken cancellationToken)
@@ -75,4 +98,67 @@ private static async Task AddTestClassAttributeAsync(Document document
SyntaxNode newRoot = editor.GetChangedRoot();
return document.WithSyntaxRoot(newRoot);
}
+
+ private static async Task ChangeStructToClassAndAddTestClassAttributeAsync(Document document, TypeDeclarationSyntax structDeclaration, CancellationToken cancellationToken)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false);
+
+ // Create the [TestClass] attribute
+ AttributeSyntax testClassAttribute = SyntaxFactory.Attribute(SyntaxFactory.ParseName("TestClass"));
+ AttributeListSyntax attributeList = SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(testClassAttribute));
+
+ // Convert struct to class
+ ClassDeclarationSyntax classDeclaration = SyntaxFactory.ClassDeclaration(structDeclaration.Identifier)
+ .WithModifiers(structDeclaration.Modifiers)
+ .WithTypeParameterList(structDeclaration.TypeParameterList)
+ .WithConstraintClauses(structDeclaration.ConstraintClauses)
+ .WithBaseList(structDeclaration.BaseList)
+ .WithMembers(structDeclaration.Members)
+ .WithAttributeLists(structDeclaration.AttributeLists.Add(attributeList))
+ .WithLeadingTrivia(structDeclaration.GetLeadingTrivia())
+ .WithTrailingTrivia(structDeclaration.GetTrailingTrivia());
+
+ editor.ReplaceNode(structDeclaration, classDeclaration);
+
+ SyntaxNode newRoot = editor.GetChangedRoot();
+ return document.WithSyntaxRoot(newRoot);
+ }
+
+ private static async Task ChangeRecordStructToRecordClassAndAddTestClassAttributeAsync(Document document, RecordDeclarationSyntax recordStructDeclaration, CancellationToken cancellationToken)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false);
+
+ // Create the [TestClass] attribute
+ AttributeSyntax testClassAttribute = SyntaxFactory.Attribute(SyntaxFactory.ParseName("TestClass"));
+ AttributeListSyntax attributeList = SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(testClassAttribute));
+
+ // Filter out readonly modifier since it's not valid for record classes
+ SyntaxTokenList filteredModifiers = SyntaxFactory.TokenList(
+ recordStructDeclaration.Modifiers.Where(modifier => !modifier.IsKind(SyntaxKind.ReadOnlyKeyword)));
+
+ // Convert record struct to record class by creating a new RecordDeclarationSyntax
+ // We need to create a new record declaration instead of just changing the keyword
+ RecordDeclarationSyntax recordClassDeclaration = SyntaxFactory.RecordDeclaration(
+ recordStructDeclaration.Keyword,
+ recordStructDeclaration.Identifier)
+ .WithModifiers(filteredModifiers)
+ .WithTypeParameterList(recordStructDeclaration.TypeParameterList)
+ .WithParameterList(recordStructDeclaration.ParameterList)
+ .WithBaseList(recordStructDeclaration.BaseList)
+ .WithConstraintClauses(recordStructDeclaration.ConstraintClauses)
+ .WithOpenBraceToken(recordStructDeclaration.OpenBraceToken)
+ .WithMembers(recordStructDeclaration.Members)
+ .WithCloseBraceToken(recordStructDeclaration.CloseBraceToken)
+ .WithSemicolonToken(recordStructDeclaration.SemicolonToken)
+ .WithAttributeLists(recordStructDeclaration.AttributeLists.Add(attributeList))
+ .WithLeadingTrivia(recordStructDeclaration.GetLeadingTrivia())
+ .WithTrailingTrivia(recordStructDeclaration.GetTrailingTrivia());
+
+ editor.ReplaceNode(recordStructDeclaration, recordClassDeclaration);
+
+ SyntaxNode newRoot = editor.GetChangedRoot();
+ return document.WithSyntaxRoot(newRoot);
+ }
}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/AssertionArgsShouldAvoidConditionalAccessFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/AssertionArgsShouldAvoidConditionalAccessFixer.cs
index 830253f2e4..8e5eefd5e2 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/AssertionArgsShouldAvoidConditionalAccessFixer.cs
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/AssertionArgsShouldAvoidConditionalAccessFixer.cs
@@ -40,7 +40,7 @@ private sealed class CustomFixAll : DocumentBasedFixAllProvider
protected override async Task FixAllAsync(FixAllContext fixAllContext, Document document, ImmutableArray diagnostics)
{
SyntaxNode root = await document.GetRequiredSyntaxRootAsync(fixAllContext.CancellationToken).ConfigureAwait(false);
- DocumentEditor editor = await DocumentEditor.CreateAsync(document, fixAllContext.CancellationToken);
+ DocumentEditor editor = await DocumentEditor.CreateAsync(document, fixAllContext.CancellationToken).ConfigureAwait(false);
Document currentDocument = document;
foreach (Diagnostic diagnostic in diagnostics)
{
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/AvoidAssertFormatParametersFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/AvoidAssertFormatParametersFixer.cs
new file mode 100644
index 0000000000..da9a71e2be
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/AvoidAssertFormatParametersFixer.cs
@@ -0,0 +1,287 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+using System.Composition;
+
+using Analyzer.Utilities;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CodeActions;
+using Microsoft.CodeAnalysis.CodeFixes;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using Microsoft.CodeAnalysis.Operations;
+using Microsoft.CodeAnalysis.Simplification;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers.CodeFixes;
+
+///
+/// Code fix for MSTEST0053: Avoid using Assert methods with format parameters.
+///
+[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(AvoidAssertFormatParametersFixer))]
+[Shared]
+public sealed class AvoidAssertFormatParametersFixer : CodeFixProvider
+{
+ ///
+ public override ImmutableArray FixableDiagnosticIds { get; }
+ = ImmutableArray.Create(DiagnosticIds.AvoidAssertFormatParametersRuleId);
+
+ ///
+ public override FixAllProvider GetFixAllProvider()
+ => WellKnownFixAllProviders.BatchFixer;
+
+ ///
+ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
+ {
+ SyntaxNode root = await context.Document.GetRequiredSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);
+ Diagnostic diagnostic = context.Diagnostics[0];
+ if (root.FindNode(context.Span, getInnermostNodeForTie: true) is InvocationExpressionSyntax invocation)
+ {
+ RegisterStringFormatCodeFix(context, diagnostic, root, invocation);
+ await RegisterInterpolatedStringCodeFixAsync(context, diagnostic, root, invocation).ConfigureAwait(false);
+ }
+ }
+
+ private static void RegisterStringFormatCodeFix(CodeFixContext context, Diagnostic diagnostic, SyntaxNode root, InvocationExpressionSyntax invocation)
+ {
+ var codeAction = CodeAction.Create(
+ title: CodeFixResources.AvoidAssertFormatParametersUseStringFormat,
+ createChangedDocument: ct => CreateStringFormatFixAsync(context.Document, root, invocation, ct),
+ equivalenceKey: $"{nameof(AvoidAssertFormatParametersFixer)}_StringFormat");
+
+ context.RegisterCodeFix(codeAction, diagnostic);
+ }
+
+ private static async Task RegisterInterpolatedStringCodeFixAsync(CodeFixContext context, Diagnostic diagnostic, SyntaxNode root, InvocationExpressionSyntax invocation)
+ {
+ // Only offer interpolated string fix for simple cases
+ if (await CanConvertToInterpolatedStringAsync(context.Document, invocation, context.CancellationToken).ConfigureAwait(false))
+ {
+ var codeAction = CodeAction.Create(
+ title: CodeFixResources.AvoidAssertFormatParametersUseInterpolatedString,
+ createChangedDocument: ct => CreateInterpolatedStringFixAsync(context.Document, root, invocation, ct),
+ equivalenceKey: $"{nameof(AvoidAssertFormatParametersFixer)}_InterpolatedString");
+
+ context.RegisterCodeFix(codeAction, diagnostic);
+ }
+ }
+
+ private static async Task CreateStringFormatFixAsync(Document document, SyntaxNode root, InvocationExpressionSyntax invocation, CancellationToken cancellationToken)
+ {
+ ArgumentListSyntax oldArgumentList = invocation.ArgumentList;
+ if (oldArgumentList.Arguments.Count < 2)
+ {
+ return document;
+ }
+
+ SemanticModel semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
+ if (semanticModel.GetOperation(invocation, cancellationToken) is not IInvocationOperation invocationOperation)
+ {
+ return document;
+ }
+
+ if (!TryGetMessageAndMessageArgsArguments(invocationOperation, out IArgumentOperation? messageArgumentOperation, out IArgumentOperation? paramsArgumentOperation))
+ {
+ return document;
+ }
+
+ if (paramsArgumentOperation is null || messageArgumentOperation is null)
+ {
+ return document;
+ }
+
+ ArgumentListSyntax newArgumentList = oldArgumentList;
+ var formatArgument = (ArgumentSyntax)messageArgumentOperation.Syntax;
+ if (paramsArgumentOperation.ArgumentKind == ArgumentKind.ParamArray)
+ {
+ ImmutableArray elementValues = ((IArrayCreationOperation)paramsArgumentOperation.Value).Initializer!.ElementValues;
+ IEnumerable paramsArguments = elementValues.Select(e => (ArgumentSyntax)e.Syntax.Parent!);
+
+ InvocationExpressionSyntax stringFormatInvocation = CreateStringFormatCall([formatArgument, .. paramsArguments]);
+
+ newArgumentList = newArgumentList.ReplaceNode(formatArgument, formatArgument.WithExpression(stringFormatInvocation));
+ foreach (IOperation element in elementValues.OrderByDescending(e => oldArgumentList.Arguments.IndexOf((ArgumentSyntax)e.Syntax.Parent!)))
+ {
+ newArgumentList = newArgumentList.WithArguments(newArgumentList.Arguments.RemoveAt(oldArgumentList.Arguments.IndexOf((ArgumentSyntax)element.Syntax.Parent!)));
+ }
+ }
+ else if (paramsArgumentOperation.ArgumentKind == ArgumentKind.Explicit)
+ {
+ var paramsArgumentSyntax = (ArgumentSyntax)paramsArgumentOperation.Syntax;
+ InvocationExpressionSyntax stringFormatInvocation = CreateStringFormatCall([formatArgument, paramsArgumentSyntax]);
+
+ newArgumentList = newArgumentList.ReplaceNode(formatArgument, formatArgument.WithExpression(stringFormatInvocation));
+ newArgumentList = newArgumentList.WithArguments(newArgumentList.Arguments.RemoveAt(oldArgumentList.Arguments.IndexOf(paramsArgumentSyntax)));
+ }
+
+ return document.WithSyntaxRoot(root.ReplaceNode(oldArgumentList, newArgumentList));
+
+ static InvocationExpressionSyntax CreateStringFormatCall(IEnumerable arguments)
+ => SyntaxFactory.InvocationExpression(
+ SyntaxFactory.MemberAccessExpression(
+ SyntaxKind.SimpleMemberAccessExpression,
+ SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.StringKeyword)),
+ SyntaxFactory.IdentifierName("Format")),
+ SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(arguments)));
+ }
+
+ private static async Task CreateInterpolatedStringFixAsync(
+ Document document,
+ SyntaxNode root,
+ InvocationExpressionSyntax invocation,
+ CancellationToken cancellationToken)
+ {
+ ArgumentListSyntax oldArgumentList = invocation.ArgumentList;
+ if (oldArgumentList.Arguments.Count < 2)
+ {
+ return document;
+ }
+
+ SemanticModel semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
+ if (semanticModel.GetOperation(invocation, cancellationToken) is not IInvocationOperation invocationOperation)
+ {
+ return document;
+ }
+
+ if (!TryGetMessageAndMessageArgsArguments(invocationOperation, out IArgumentOperation? messageArgumentOperation, out IArgumentOperation? paramsArgumentOperation))
+ {
+ return document;
+ }
+
+ ImmutableArray elementValues = ((IArrayCreationOperation)paramsArgumentOperation.Value).Initializer!.ElementValues;
+ ArgumentSyntax[] paramsArguments = [.. elementValues.Select(e => (ArgumentSyntax)e.Syntax.Parent!)];
+ ArgumentListSyntax newArgumentList = oldArgumentList;
+
+ var formatArgument = (ArgumentSyntax)messageArgumentOperation.Syntax;
+
+ if (TryCreateInterpolatedString(formatArgument, paramsArguments, out InterpolatedStringExpressionSyntax? interpolatedString))
+ {
+ newArgumentList = newArgumentList.ReplaceNode(formatArgument, formatArgument.WithExpression(interpolatedString));
+ }
+
+ foreach (IOperation element in elementValues.OrderByDescending(e => oldArgumentList.Arguments.IndexOf((ArgumentSyntax)e.Syntax.Parent!)))
+ {
+ newArgumentList = newArgumentList.WithArguments(newArgumentList.Arguments.RemoveAt(oldArgumentList.Arguments.IndexOf((ArgumentSyntax)element.Syntax.Parent!)));
+ }
+
+ return document.WithSyntaxRoot(root.ReplaceNode(oldArgumentList, newArgumentList));
+ }
+
+ private static async Task CanConvertToInterpolatedStringAsync(
+ Document document,
+ InvocationExpressionSyntax invocation,
+ CancellationToken cancellationToken)
+ {
+ SeparatedSyntaxList arguments = invocation.ArgumentList.Arguments;
+ if (arguments.Count < 2)
+ {
+ return false;
+ }
+
+ SemanticModel semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
+ if (semanticModel.GetOperation(invocation, cancellationToken) is not IInvocationOperation invocationOperation ||
+ !TryGetMessageAndMessageArgsArguments(invocationOperation, out IArgumentOperation? messageArgumentOperation, out IArgumentOperation? paramsArgumentOperation) ||
+ paramsArgumentOperation.ArgumentKind != ArgumentKind.ParamArray ||
+ messageArgumentOperation.Syntax is not ArgumentSyntax formatArgument)
+ {
+ return false;
+ }
+
+ // We can only offer a fix if the message is a string literal already.
+ return formatArgument.Expression is LiteralExpressionSyntax literal &&
+ literal.Token.IsKind(SyntaxKind.StringLiteralToken);
+ }
+
+ private static bool TryCreateInterpolatedString(
+ ArgumentSyntax formatArgument,
+ ArgumentSyntax[] paramsArguments,
+ [NotNullWhen(true)] out InterpolatedStringExpressionSyntax? interpolatedString)
+ {
+ interpolatedString = null;
+ if (formatArgument.Expression is not LiteralExpressionSyntax literal ||
+ !literal.Token.IsKind(SyntaxKind.StringLiteralToken))
+ {
+ return false;
+ }
+
+ string formatString = literal.Token.ValueText;
+ var interpolatedContents = new List();
+ int currentIndex = 0;
+
+ for (int i = 0; i < formatString.Length; i++)
+ {
+ if (formatString[i] == '{' && i + 1 < formatString.Length)
+ {
+ // Add text before the placeholder
+ if (i > currentIndex)
+ {
+ string text = formatString[currentIndex..i];
+ interpolatedContents.Add(SyntaxFactory.InterpolatedStringText(
+ SyntaxFactory.Token(SyntaxTriviaList.Empty, SyntaxKind.InterpolatedStringTextToken, text, text, SyntaxTriviaList.Empty)));
+ }
+
+ // Find the end of the placeholder
+ int closeIndex = formatString.IndexOf('}', i + 1);
+ if (closeIndex == -1)
+ {
+ return false; // Invalid format string
+ }
+
+ // Extract the placeholder index
+ string placeholder = formatString.Substring(i + 1, closeIndex - i - 1);
+ if (int.TryParse(placeholder, NumberStyles.Integer, CultureInfo.InvariantCulture, out int paramIndex) && paramIndex < paramsArguments.Length)
+ {
+ // Create interpolation expression
+ InterpolationSyntax interpolation = SyntaxFactory.Interpolation(
+ SyntaxFactory.ParenthesizedExpression(
+ paramsArguments[paramIndex].Expression).WithAdditionalAnnotations(Simplifier.Annotation));
+ interpolatedContents.Add(interpolation);
+ }
+ else
+ {
+ return false; // Invalid or out-of-range parameter index
+ }
+
+ currentIndex = closeIndex + 1;
+ i = closeIndex;
+ }
+ }
+
+ // Add remaining text
+ if (currentIndex < formatString.Length)
+ {
+ string text = formatString[currentIndex..];
+ interpolatedContents.Add(SyntaxFactory.InterpolatedStringText(
+ SyntaxFactory.Token(SyntaxTriviaList.Empty, SyntaxKind.InterpolatedStringTextToken, text, text, SyntaxTriviaList.Empty)));
+ }
+
+ interpolatedString = SyntaxFactory.InterpolatedStringExpression(
+ SyntaxFactory.Token(SyntaxKind.InterpolatedStringStartToken),
+ SyntaxFactory.List(interpolatedContents),
+ SyntaxFactory.Token(SyntaxKind.InterpolatedStringEndToken));
+
+ return true;
+ }
+
+ private static bool TryGetMessageAndMessageArgsArguments(
+ IInvocationOperation invocationOperation,
+ [NotNullWhen(true)] out IArgumentOperation? messageArgument,
+ [NotNullWhen(true)] out IArgumentOperation? messageArgsArgument)
+ {
+ ImmutableArray parameters = invocationOperation.TargetMethod.Parameters;
+ if (parameters.Length < 2 ||
+ parameters.SingleOrDefault(p => p.Name == "message" && p.Type.SpecialType == SpecialType.System_String) is not IParameterSymbol messageParameter)
+ {
+ messageArgument = null;
+ messageArgsArgument = null;
+ return false;
+ }
+
+ messageArgument = invocationOperation.Arguments.SingleOrDefault(arg => arg.Parameter?.Ordinal == messageParameter.Ordinal);
+ messageArgsArgument = invocationOperation.Arguments.SingleOrDefault(arg => arg.Parameter?.Ordinal == invocationOperation.TargetMethod.Parameters.Length - 1);
+ return messageArgument is not null && messageArgsArgument is not null;
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/AvoidExplicitDynamicDataSourceTypeFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/AvoidExplicitDynamicDataSourceTypeFixer.cs
new file mode 100644
index 0000000000..9811d55ce5
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/AvoidExplicitDynamicDataSourceTypeFixer.cs
@@ -0,0 +1,83 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+using System.Composition;
+
+using Analyzer.Utilities;
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CodeActions;
+using Microsoft.CodeAnalysis.CodeFixes;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using Microsoft.CodeAnalysis.Editing;
+using Microsoft.CodeAnalysis.Text;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// Code fixer for .
+///
+[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(AvoidExplicitDynamicDataSourceTypeFixer))]
+[Shared]
+public sealed class AvoidExplicitDynamicDataSourceTypeFixer : CodeFixProvider
+{
+ ///
+ public sealed override ImmutableArray FixableDiagnosticIds { get; }
+ = ImmutableArray.Create(DiagnosticIds.AvoidExplicitDynamicDataSourceTypeRuleId);
+
+ ///
+ public override FixAllProvider GetFixAllProvider()
+ // See https://github.com/dotnet/roslyn/blob/main/docs/analyzers/FixAllProvider.md for more information on Fix All Providers
+ => WellKnownFixAllProviders.BatchFixer;
+
+ ///
+ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
+ {
+ SyntaxNode root = await context.Document.GetRequiredSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);
+ Diagnostic diagnostic = context.Diagnostics[0];
+ TextSpan diagnosticSpan = diagnostic.Location.SourceSpan;
+
+ if (root.FindNode(diagnosticSpan) is not AttributeSyntax attributeSyntax ||
+ attributeSyntax.ArgumentList is not AttributeArgumentListSyntax argumentList)
+ {
+ return;
+ }
+
+ context.RegisterCodeFix(
+ CodeAction.Create(
+ CodeFixResources.RemoveDynamicDataSourceTypeFix,
+ ct => RemoveDynamicDataSourceTypeAsync(context.Document, argumentList, ct),
+ nameof(AvoidExplicitDynamicDataSourceTypeFixer)),
+ context.Diagnostics);
+ }
+
+ private static async Task RemoveDynamicDataSourceTypeAsync(Document document, AttributeArgumentListSyntax argumentList, CancellationToken cancellationToken)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false);
+ SemanticModel semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
+
+ if (!semanticModel.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingDynamicDataSourceType, out INamedTypeSymbol? dynamicDataSourceTypeSymbol))
+ {
+ return document;
+ }
+
+ foreach (AttributeArgumentSyntax argument in argumentList.Arguments)
+ {
+ Microsoft.CodeAnalysis.TypeInfo typeInfo = semanticModel.GetTypeInfo(argument.Expression, cancellationToken);
+ if (SymbolEqualityComparer.Default.Equals(typeInfo.Type, dynamicDataSourceTypeSymbol))
+ {
+ editor.ReplaceNode(argumentList, argumentList.WithArguments(argumentList.Arguments.Remove(argument)));
+ break;
+ }
+ }
+
+ return editor.GetChangedDocument();
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/CodeFixResources.Designer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/CodeFixResources.Designer.cs
deleted file mode 100644
index 9cab8f2e12..0000000000
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/CodeFixResources.Designer.cs
+++ /dev/null
@@ -1,243 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace MSTest.Analyzers {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class CodeFixResources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal CodeFixResources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MSTest.Analyzers.CodeFixResources", typeof(CodeFixResources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized string similar to Add '[TestClass]'.
- ///
- internal static string AddTestClassFix {
- get {
- return ResourceManager.GetString("AddTestClassFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Add '[TestMethod]'.
- ///
- internal static string AddTestMethodAttributeFix {
- get {
- return ResourceManager.GetString("AddTestMethodAttributeFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Fix signature.
- ///
- internal static string AssemblyInitializeShouldBeValidCodeFix {
- get {
- return ResourceManager.GetString("AssemblyInitializeShouldBeValidCodeFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Move conditional access in assertion to separate 'Assert.IsNotNull' check.
- ///
- internal static string AssertionArgsShouldAvoidConditionalAccessFix {
- get {
- return ResourceManager.GetString("AssertionArgsShouldAvoidConditionalAccessFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use '{0}'.
- ///
- internal static string AvoidAssertAreSameWithValueTypesFix {
- get {
- return ResourceManager.GetString("AvoidAssertAreSameWithValueTypesFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Change method accessibility to 'private'.
- ///
- internal static string ChangeMethodAccessibilityToPrivateFix {
- get {
- return ResourceManager.GetString("ChangeMethodAccessibilityToPrivateFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Fix actual/expected arguments order.
- ///
- internal static string FixAssertionArgsOrder {
- get {
- return ResourceManager.GetString("FixAssertionArgsOrder", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Fix signature.
- ///
- internal static string FixSignatureCodeFix {
- get {
- return ResourceManager.GetString("FixSignatureCodeFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Replace TestInitialize method with constructor.
- ///
- internal static string ReplaceWithConstructorFix {
- get {
- return ResourceManager.GetString("ReplaceWithConstructorFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Replace TestCleanup with Dispose method.
- ///
- internal static string ReplaceWithDisposeFix {
- get {
- return ResourceManager.GetString("ReplaceWithDisposeFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Replace the assertion with 'Assert.Fail()'.
- ///
- internal static string ReplaceWithFailAssertionFix {
- get {
- return ResourceManager.GetString("ReplaceWithFailAssertionFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Replace 'Dispose' with a TestCleanup method.
- ///
- internal static string ReplaceWithTestCleanuFix {
- get {
- return ResourceManager.GetString("ReplaceWithTestCleanuFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Replace constructor with TestInitialize method.
- ///
- internal static string ReplaceWithTestInitializeFix {
- get {
- return ResourceManager.GetString("ReplaceWithTestInitializeFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Fix test class signature.
- ///
- internal static string TestClassShouldBeValidFix {
- get {
- return ResourceManager.GetString("TestClassShouldBeValidFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Fix test context.
- ///
- internal static string TestContextShouldBeValidFix {
- get {
- return ResourceManager.GetString("TestContextShouldBeValidFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Fix test method signature.
- ///
- internal static string TestMethodShouldBeValidFix {
- get {
- return ResourceManager.GetString("TestMethodShouldBeValidFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use 'Assert.ThrowsException<T>' instead of '[ExpectedException]' attribute.
- ///
- internal static string UseAssertThrowsExceptionOnLastStatementFix {
- get {
- return ResourceManager.GetString("UseAssertThrowsExceptionOnLastStatementFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Add '[TestMethod]'.
- ///
- internal static string UseAttributeOnTestMethodFix {
- get {
- return ResourceManager.GetString("UseAttributeOnTestMethodFix", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use '{0}'.
- ///
- internal static string UseNewerAssertThrows {
- get {
- return ResourceManager.GetString("UseNewerAssertThrows", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use '{0}'.
- ///
- internal static string UseProperAssertMethodsFix {
- get {
- return ResourceManager.GetString("UseProperAssertMethodsFix", resourceCulture);
- }
- }
- }
-}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/CodeFixResources.resx b/src/Analyzers/MSTest.Analyzers.CodeFixes/CodeFixResources.resx
index 27cd7731e9..b88c2f5b10 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/CodeFixResources.resx
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/CodeFixResources.resx
@@ -129,6 +129,9 @@
Add '[TestClass]'
+
+ Change to 'class' and add '[TestClass]'
+
Fix test method signature
@@ -177,4 +180,28 @@
Use '{0}'
+
+ Replace 'DataTestMethod' with 'TestMethod'
+
+
+ Use 'CooperativeCancellation = true'
+
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+
+
+ Pass 'TestContext.CancellationToken' argument to method call
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+
+
+ Use 'TestContext.CancellationToken' instead
+
+
+ Use 'string.Format' instead of format parameters
+
+
+ Use interpolated string instead of format parameters
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs
new file mode 100644
index 0000000000..9a8716502c
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs
@@ -0,0 +1,265 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+using System.Composition;
+
+using Analyzer.Utilities;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CodeActions;
+using Microsoft.CodeAnalysis.CodeFixes;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using Microsoft.CodeAnalysis.Editing;
+using Microsoft.CodeAnalysis.Text;
+
+using MSTest.Analyzers.Helpers;
+
+using Polyfills;
+
+namespace MSTest.Analyzers;
+
+///
+/// Code fixer for .
+///
+[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(FlowTestContextCancellationTokenFixer))]
+[Shared]
+public sealed class FlowTestContextCancellationTokenFixer : CodeFixProvider
+{
+ ///
+ public sealed override ImmutableArray FixableDiagnosticIds { get; }
+ = ImmutableArray.Create(DiagnosticIds.FlowTestContextCancellationTokenRuleId);
+
+ ///
+ public override FixAllProvider GetFixAllProvider()
+ // Use custom FixAllProvider to handle adding TestContext property when needed
+ => FlowTestContextCancellationTokenFixAllProvider.Instance;
+
+ ///
+ public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
+ {
+ SyntaxNode root = await context.Document.GetRequiredSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);
+ Diagnostic diagnostic = context.Diagnostics[0];
+ TextSpan diagnosticSpan = diagnostic.Location.SourceSpan;
+
+ // Find the invocation expression identified by the diagnostic
+ SyntaxNode node = root.FindNode(diagnosticSpan, getInnermostNodeForTie: true);
+ if (node is not InvocationExpressionSyntax invocationExpression)
+ {
+ return;
+ }
+
+ diagnostic.Properties.TryGetValue(FlowTestContextCancellationTokenAnalyzer.TestContextMemberNamePropertyKey, out string? testContextMemberName);
+ diagnostic.Properties.TryGetValue(FlowTestContextCancellationTokenAnalyzer.CancellationTokenParameterNamePropertyKey, out string? cancellationTokenParameterName);
+ diagnostic.Properties.TryGetValue(nameof(FlowTestContextCancellationTokenAnalyzer.TestContextState), out string? testContextState);
+
+ // Register a code action that will invoke the fix
+ context.RegisterCodeFix(
+ CodeAction.Create(
+ title: CodeFixResources.PassCancellationTokenFix,
+ createChangedDocument: async c =>
+ {
+ DocumentEditor editor = await DocumentEditor.CreateAsync(context.Document, context.CancellationToken).ConfigureAwait(false);
+ return ApplyFix(editor, invocationExpression, testContextMemberName, testContextState, cancellationTokenParameterName, adjustedSymbols: null, c);
+ },
+ equivalenceKey: nameof(FlowTestContextCancellationTokenFixer)),
+ diagnostic);
+ }
+
+ internal static Document ApplyFix(
+ DocumentEditor editor,
+ InvocationExpressionSyntax invocationExpression,
+ string? testContextMemberName,
+ string? testContextState,
+ string? cancellationTokenParameterName,
+ HashSet? adjustedSymbols,
+ CancellationToken cancellationToken)
+ {
+ if (testContextState == nameof(FlowTestContextCancellationTokenAnalyzer.TestContextState.CouldBeInScopeAsProperty))
+ {
+ Debug.Assert(testContextMemberName is null, "TestContext member name should be null when state is CouldBeInScopeAsProperty");
+ AddCancellationTokenArgument(editor, invocationExpression, "TestContext", cancellationTokenParameterName);
+ TypeDeclarationSyntax? containingTypeDeclaration = invocationExpression.FirstAncestorOrSelf();
+ if (containingTypeDeclaration is not null)
+ {
+ // adjustedSymbols is null meaning we are only applying a single fix (in that case we add the property).
+ // If we are in fix all, we then verify if a previous fix has already added the property.
+ // We only add the property if it wasn't added by a previous fix.
+ // NOTE: We don't expect GetDeclaredSymbol to return null, but if it did (e.g, error scenario), we add the property.
+ if (adjustedSymbols is null ||
+ editor.SemanticModel.GetDeclaredSymbol(containingTypeDeclaration, cancellationToken) is not { } symbol ||
+ adjustedSymbols.Add(symbol))
+ {
+ editor.ReplaceNode(containingTypeDeclaration, (containingTypeDeclaration, _) => AddTestContextProperty((TypeDeclarationSyntax)containingTypeDeclaration));
+ }
+ }
+ }
+ else if (testContextState == nameof(FlowTestContextCancellationTokenAnalyzer.TestContextState.CouldBeInScopeAsParameter))
+ {
+ Debug.Assert(testContextMemberName is null, "TestContext member name should be null when state is CouldBeInScopeAsParameter");
+ AddCancellationTokenArgument(editor, invocationExpression, "testContext", cancellationTokenParameterName);
+ MethodDeclarationSyntax? containingMethodDeclaration = invocationExpression.FirstAncestorOrSelf();
+
+ if (containingMethodDeclaration is not null)
+ {
+ // adjustedSymbols is null meaning we are only applying a single fix (in that case we add the parameter).
+ // If we are in fix all, we then verify if a previous fix has already added the parameter.
+ // We only add the parameter if it wasn't added by a previous fix.
+ // NOTE: We don't expect GetDeclaredSymbol to return null, but if it did (e.g, error scenario), we add the property.
+ if (adjustedSymbols is null ||
+ editor.SemanticModel.GetDeclaredSymbol(containingMethodDeclaration, cancellationToken) is not { } symbol ||
+ adjustedSymbols.Add(symbol))
+ {
+ editor.ReplaceNode(containingMethodDeclaration, (containingMethodDeclaration, _) => AddTestContextParameterToMethod((MethodDeclarationSyntax)containingMethodDeclaration));
+ }
+ }
+ }
+ else
+ {
+ Guard.NotNull(testContextMemberName);
+ AddCancellationTokenArgument(editor, invocationExpression, testContextMemberName, cancellationTokenParameterName);
+ }
+
+ return editor.GetChangedDocument();
+ }
+
+ internal static void AddCancellationTokenArgument(
+ DocumentEditor editor,
+ InvocationExpressionSyntax invocationExpression,
+ string testContextMemberName,
+ string? cancellationTokenParameterName)
+ {
+ // Find the containing method to determine the context
+ MethodDeclarationSyntax? containingMethod = invocationExpression.FirstAncestorOrSelf();
+
+ // Create the TestContext.CancellationToken expression
+ MemberAccessExpressionSyntax testContextExpression = SyntaxFactory.MemberAccessExpression(
+ SyntaxKind.SimpleMemberAccessExpression,
+ SyntaxFactory.IdentifierName(testContextMemberName),
+ SyntaxFactory.IdentifierName("CancellationToken"));
+
+ editor.ReplaceNode(invocationExpression, (node, _) =>
+ {
+ var invocationExpression = (InvocationExpressionSyntax)node;
+ ArgumentListSyntax currentArguments = invocationExpression.ArgumentList;
+ NameColonSyntax? nameColon = cancellationTokenParameterName is null ? null : SyntaxFactory.NameColon(cancellationTokenParameterName);
+ SeparatedSyntaxList newArguments = currentArguments.Arguments.Add(SyntaxFactory.Argument(nameColon, default, testContextExpression));
+ return invocationExpression.WithArgumentList(currentArguments.WithArguments(newArguments));
+ });
+ }
+
+ internal static MethodDeclarationSyntax AddTestContextParameterToMethod(MethodDeclarationSyntax method)
+ {
+ // Create TestContext parameter
+ ParameterSyntax testContextParameter = SyntaxFactory.Parameter(SyntaxFactory.Identifier("testContext"))
+ .WithType(SyntaxFactory.IdentifierName("TestContext"));
+
+ // Add the parameter to the method
+ SeparatedSyntaxList updatedParameterList = method.ParameterList.Parameters.Count == 0
+ ? SyntaxFactory.SingletonSeparatedList(testContextParameter)
+ : method.ParameterList.Parameters.Add(testContextParameter);
+
+ return method.WithParameterList(method.ParameterList.WithParameters(updatedParameterList));
+ }
+
+ internal static TypeDeclarationSyntax AddTestContextProperty(TypeDeclarationSyntax typeDeclaration)
+ {
+ PropertyDeclarationSyntax testContextProperty = SyntaxFactory.PropertyDeclaration(
+ SyntaxFactory.IdentifierName("TestContext"),
+ "TestContext")
+ .WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)))
+ .WithAccessorList(SyntaxFactory.AccessorList(
+ SyntaxFactory.List(new[]
+ {
+ SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration)
+ .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
+ SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration)
+ .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
+ })));
+
+ return typeDeclaration.AddMembers(testContextProperty);
+ }
+}
+
+///
+/// Custom FixAllProvider for that can add TestContext property when needed.
+/// This ensures that when multiple fixes are applied to the same class, the TestContext property is added only once.
+///
+internal sealed class FlowTestContextCancellationTokenFixAllProvider : FixAllProvider
+{
+ public static readonly FlowTestContextCancellationTokenFixAllProvider Instance = new();
+
+ private FlowTestContextCancellationTokenFixAllProvider()
+ {
+ }
+
+ public override Task GetFixAsync(FixAllContext fixAllContext)
+ => Task.FromResult(new FixAllCodeAction(fixAllContext));
+
+ private sealed class FixAllCodeAction : CodeAction
+ {
+ private readonly FixAllContext _fixAllContext;
+
+ public FixAllCodeAction(FixAllContext fixAllContext)
+ => _fixAllContext = fixAllContext;
+
+ public override string Title => CodeFixResources.PassCancellationTokenFix;
+
+ public override string? EquivalenceKey => nameof(FlowTestContextCancellationTokenFixer);
+
+ protected override async Task GetChangedSolutionAsync(CancellationToken cancellationToken)
+ {
+ FixAllContext fixAllContext = _fixAllContext;
+ var editor = new SolutionEditor(fixAllContext.Solution);
+ var fixedSymbols = new HashSet(SymbolEqualityComparer.Default);
+
+ if (fixAllContext.Scope == FixAllScope.Document)
+ {
+ DocumentEditor documentEditor = await editor.GetDocumentEditorAsync(fixAllContext.Document!.Id, cancellationToken).ConfigureAwait(false);
+ foreach (Diagnostic diagnostic in await fixAllContext.GetDocumentDiagnosticsAsync(fixAllContext.Document!).ConfigureAwait(false))
+ {
+ FixOneDiagnostic(documentEditor, diagnostic, fixedSymbols, cancellationToken);
+ }
+ }
+ else if (fixAllContext.Scope == FixAllScope.Project)
+ {
+ await FixAllInProjectAsync(fixAllContext, fixAllContext.Project, editor, fixedSymbols, cancellationToken).ConfigureAwait(false);
+ }
+ else if (fixAllContext.Scope == FixAllScope.Solution)
+ {
+ foreach (Project project in fixAllContext.Solution.Projects)
+ {
+ await FixAllInProjectAsync(fixAllContext, project, editor, fixedSymbols, cancellationToken).ConfigureAwait(false);
+ }
+ }
+
+ return editor.GetChangedSolution();
+ }
+
+ private static async Task FixAllInProjectAsync(FixAllContext fixAllContext, Project project, SolutionEditor editor, HashSet fixedSymbols, CancellationToken cancellationToken)
+ {
+ foreach (Diagnostic diagnostic in await fixAllContext.GetAllDiagnosticsAsync(project).ConfigureAwait(false))
+ {
+ DocumentId documentId = editor.OriginalSolution.GetDocumentId(diagnostic.Location.SourceTree)!;
+ DocumentEditor documentEditor = await editor.GetDocumentEditorAsync(documentId, cancellationToken).ConfigureAwait(false);
+ FixOneDiagnostic(documentEditor, diagnostic, fixedSymbols, cancellationToken);
+ }
+ }
+
+ private static void FixOneDiagnostic(DocumentEditor documentEditor, Diagnostic diagnostic, HashSet fixedSymbols, CancellationToken cancellationToken)
+ {
+ SyntaxNode node = documentEditor.OriginalRoot.FindNode(diagnostic.Location.SourceSpan, getInnermostNodeForTie: true);
+ if (node is not InvocationExpressionSyntax invocationExpression)
+ {
+ return;
+ }
+
+ diagnostic.Properties.TryGetValue(FlowTestContextCancellationTokenAnalyzer.TestContextMemberNamePropertyKey, out string? testContextMemberName);
+ diagnostic.Properties.TryGetValue(FlowTestContextCancellationTokenAnalyzer.CancellationTokenParameterNamePropertyKey, out string? cancellationTokenParameterName);
+ diagnostic.Properties.TryGetValue(nameof(FlowTestContextCancellationTokenAnalyzer.TestContextState), out string? testContextState);
+
+ FlowTestContextCancellationTokenFixer.ApplyFix(documentEditor, invocationExpression, testContextMemberName, testContextState, cancellationTokenParameterName, fixedSymbols, cancellationToken);
+ }
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/MSTest.Analyzers.CodeFixes.csproj b/src/Analyzers/MSTest.Analyzers.CodeFixes/MSTest.Analyzers.CodeFixes.csproj
index 90c2706c8f..525d079c19 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/MSTest.Analyzers.CodeFixes.csproj
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/MSTest.Analyzers.CodeFixes.csproj
@@ -14,9 +14,4 @@
-
-
-
-
-
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferConstructorOverTestInitializeFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferConstructorOverTestInitializeFixer.cs
index efeecd6dbd..2c0f2df3fb 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferConstructorOverTestInitializeFixer.cs
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferConstructorOverTestInitializeFixer.cs
@@ -68,7 +68,7 @@ private static async Task ReplaceTestInitializeWithConstructorAsync(Do
{
ConstructorDeclarationSyntax? existingConstructor = containingClass.Members
.OfType()
- .FirstOrDefault();
+ .FirstOrDefault(c => !c.Modifiers.Any(SyntaxKind.StaticKeyword));
// Move the body of the TestInitialize method
BlockSyntax? testInitializeBody = testInitializeMethod.Body;
@@ -81,7 +81,7 @@ private static async Task ReplaceTestInitializeWithConstructorAsync(Do
// If a constructor already exists, append the body of the TestInitialize method to it
if (existingConstructor.Body != null)
{
- BlockSyntax newConstructorBody = existingConstructor.Body.AddStatements(testInitializeStatements ?? Array.Empty());
+ BlockSyntax newConstructorBody = existingConstructor.Body.AddStatements(testInitializeStatements ?? []);
newConstructor = existingConstructor.WithBody(newConstructorBody);
}
else
@@ -90,19 +90,20 @@ private static async Task ReplaceTestInitializeWithConstructorAsync(Do
}
editor.ReplaceNode(existingConstructor, newConstructor);
+
+ // Remove the TestInitialize method
+ editor.RemoveNode(testInitializeMethod);
}
else
{
// Create a new constructor with the TestInitialize body if one doesn't exist
- ConstructorDeclarationSyntax constructor = SyntaxFactory.ConstructorDeclaration(containingClass.Identifier)
+ ConstructorDeclarationSyntax constructor = SyntaxFactory.ConstructorDeclaration(containingClass.Identifier.WithoutTrivia())
.WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)))
.WithBody(testInitializeBody);
- editor.AddMember(containingClass, constructor);
+ // Insert the constructor at the position of the existing TestInitialize method
+ editor.ReplaceNode(testInitializeMethod, constructor);
}
-
- // Remove the TestInitialize method
- editor.RemoveNode(testInitializeMethod);
}
return editor.GetChangedDocument();
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferDisposeOverTestCleanupFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferDisposeOverTestCleanupFixer.cs
index 9911ee7287..309ccadb67 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferDisposeOverTestCleanupFixer.cs
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferDisposeOverTestCleanupFixer.cs
@@ -69,7 +69,7 @@ private static bool IsTestCleanupMethodValid(MethodDeclarationSyntax methodDecla
methodDeclaration.ReturnType is PredefinedTypeSyntax predefinedType &&
predefinedType.Keyword.IsKind(SyntaxKind.VoidKeyword);
- private static async Task AddDisposeAndBaseClassAsync(
+ private static async Task AddDisposeAndBaseClassAsync(
Document document,
MethodDeclarationSyntax testCleanupMethod,
TypeDeclarationSyntax containingType,
@@ -82,23 +82,54 @@ private static async Task AddDisposeAndBaseClassAsync(
SyntaxGenerator generator = editor.Generator;
TypeDeclarationSyntax newParent = containingType;
INamedTypeSymbol? iDisposableSymbol = semanticModel.Compilation.GetTypeByMetadataName(WellKnownTypeNames.SystemIDisposable);
- INamedTypeSymbol? testCleanupAttributeSymbol = semanticModel.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestCleanupAttribute);
// Move the code from TestCleanup to Dispose method
- MethodDeclarationSyntax? existingDisposeMethod = containingType.Members
- .OfType()
- .FirstOrDefault(m => semanticModel.GetDeclaredSymbol(m) is IMethodSymbol methodSymbol && methodSymbol.IsDisposeImplementation(iDisposableSymbol));
+ // For partial classes, we need to check all parts of the type, not just the current partial declaration
+ Document? disposeDocument = null;
+ MethodDeclarationSyntax? existingDisposeMethod = null;
+ if (semanticModel.GetDeclaredSymbol(containingType, cancellationToken) is INamedTypeSymbol typeSymbol)
+ {
+ // Find existing Dispose method in any part of the partial class
+ IMethodSymbol? existingDisposeSymbol = typeSymbol.GetMembers("Dispose")
+ .OfType()
+ .FirstOrDefault(m => m.IsDisposeImplementation(iDisposableSymbol));
+
+ if (existingDisposeSymbol is not null)
+ {
+ // Find the syntax node for the existing Dispose method
+ foreach (SyntaxReference syntaxRef in existingDisposeSymbol.DeclaringSyntaxReferences)
+ {
+ if (await syntaxRef.GetSyntaxAsync(cancellationToken).ConfigureAwait(false) is MethodDeclarationSyntax methodSyntax)
+ {
+ existingDisposeMethod = methodSyntax;
+ // Find the document containing the Dispose method
+ foreach (Document projectDocument in document.Project.Documents)
+ {
+ SyntaxTree? docSyntaxTree = await projectDocument.GetSyntaxTreeAsync(cancellationToken).ConfigureAwait(false);
+ if (docSyntaxTree == syntaxRef.SyntaxTree)
+ {
+ disposeDocument = projectDocument;
+ break;
+ }
+ }
+
+ break;
+ }
+ }
+ }
+ }
BlockSyntax? cleanupBody = testCleanupMethod.Body;
+ Solution solution = document.Project.Solution;
- if (existingDisposeMethod != null)
+ if (existingDisposeMethod is not null && disposeDocument is not null)
{
// Append the TestCleanup body to the existing Dispose method
StatementSyntax[]? cleanupStatements = cleanupBody?.Statements.ToArray();
MethodDeclarationSyntax newDisposeMethod;
- if (existingDisposeMethod.Body != null)
+ if (existingDisposeMethod.Body is not null)
{
- BlockSyntax newDisposeBody = existingDisposeMethod.Body.AddStatements(cleanupStatements ?? Array.Empty());
+ BlockSyntax newDisposeBody = existingDisposeMethod.Body.AddStatements(cleanupStatements ?? []);
newDisposeMethod = existingDisposeMethod.WithBody(newDisposeBody);
}
else
@@ -106,8 +137,24 @@ private static async Task AddDisposeAndBaseClassAsync(
newDisposeMethod = existingDisposeMethod.WithBody(cleanupBody);
}
- editor.ReplaceNode(existingDisposeMethod, newDisposeMethod);
- editor.RemoveNode(testCleanupMethod);
+ if (disposeDocument.Id == document.Id)
+ {
+ // Both methods are in the same document, use single editor
+ editor.ReplaceNode(existingDisposeMethod, newDisposeMethod);
+ editor.RemoveNode(testCleanupMethod);
+ solution = solution.WithDocumentSyntaxRoot(document.Id, editor.GetChangedRoot());
+ }
+ else
+ {
+ // Methods are in different documents, use separate editors
+ DocumentEditor disposeEditor = await DocumentEditor.CreateAsync(disposeDocument, cancellationToken).ConfigureAwait(false);
+ disposeEditor.ReplaceNode(existingDisposeMethod, newDisposeMethod);
+ solution = solution.WithDocumentSyntaxRoot(disposeDocument.Id, disposeEditor.GetChangedRoot());
+
+ // Remove the TestCleanup method from the current document
+ editor.RemoveNode(testCleanupMethod);
+ solution = solution.WithDocumentSyntaxRoot(document.Id, editor.GetChangedRoot());
+ }
}
else
{
@@ -123,9 +170,10 @@ private static async Task AddDisposeAndBaseClassAsync(
}
editor.ReplaceNode(containingType, newParent);
+ solution = solution.WithDocumentSyntaxRoot(document.Id, editor.GetChangedRoot());
}
- return editor.GetChangedDocument();
+ return solution;
}
private static bool ImplementsIDisposable(TypeDeclarationSyntax typeDeclaration, INamedTypeSymbol iDisposableSymbol, SemanticModel semanticModel)
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferTestInitializeOverConstructorFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferTestInitializeOverConstructorFixer.cs
index 9ea85da311..5961aa1747 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferTestInitializeOverConstructorFixer.cs
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferTestInitializeOverConstructorFixer.cs
@@ -86,7 +86,7 @@ private static async Task ReplaceConstructorWithTestInitializeAsync(Do
MethodDeclarationSyntax newTestInitialize;
if (existingTestInitialize.Body != null)
{
- BlockSyntax newTestInitializeBody = existingTestInitialize.Body.AddStatements(constructorStatements ?? Array.Empty());
+ BlockSyntax newTestInitializeBody = existingTestInitialize.Body.AddStatements(constructorStatements ?? []);
newTestInitialize = existingTestInitialize.WithBody(newTestInitializeBody);
}
else
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferTestMethodOverDataTestMethodFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferTestMethodOverDataTestMethodFixer.cs
new file mode 100644
index 0000000000..580a90cb3e
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/PreferTestMethodOverDataTestMethodFixer.cs
@@ -0,0 +1,64 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+using System.Composition;
+
+using Analyzer.Utilities;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CodeActions;
+using Microsoft.CodeAnalysis.CodeFixes;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// Code fixer for .
+///
+[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(PreferTestMethodOverDataTestMethodFixer))]
+[Shared]
+public sealed class PreferTestMethodOverDataTestMethodFixer : CodeFixProvider
+{
+ ///
+ public override ImmutableArray FixableDiagnosticIds { get; }
+ = ImmutableArray.Create(DiagnosticIds.PreferTestMethodOverDataTestMethodRuleId);
+
+ ///
+ public override FixAllProvider GetFixAllProvider()
+ => WellKnownFixAllProviders.BatchFixer;
+
+ ///
+ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
+ {
+ SyntaxNode root = await context.Document.GetRequiredSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);
+
+ foreach (Diagnostic diagnostic in context.Diagnostics)
+ {
+ SyntaxNode? diagnosticNode = root?.FindNode(diagnostic.Location.SourceSpan);
+ if (diagnosticNode is not AttributeSyntax attributeSyntax)
+ {
+ continue;
+ }
+
+ // Replace DataTestMethod with TestMethod
+ var action = CodeAction.Create(
+ title: CodeFixResources.ReplaceDataTestMethodWithTestMethodTitle,
+ createChangedDocument: c => Task.FromResult(ReplaceDataTestMethod(context.Document, root!, attributeSyntax)),
+ equivalenceKey: nameof(PreferTestMethodOverDataTestMethodFixer));
+
+ context.RegisterCodeFix(action, diagnostic);
+ }
+ }
+
+ private static Document ReplaceDataTestMethod(Document document, SyntaxNode root, AttributeSyntax attributeSyntax)
+ {
+ AttributeSyntax newAttribute = attributeSyntax.WithName(SyntaxFactory.IdentifierName("TestMethod"));
+ SyntaxNode newRoot = root.ReplaceNode(attributeSyntax, newAttribute);
+
+ return document.WithSyntaxRoot(newRoot);
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/StringAssertToAssertFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/StringAssertToAssertFixer.cs
new file mode 100644
index 0000000000..b132e457a0
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/StringAssertToAssertFixer.cs
@@ -0,0 +1,117 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+using System.Composition;
+
+using Analyzer.Utilities;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CodeActions;
+using Microsoft.CodeAnalysis.CodeFixes;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers.CodeFixes;
+
+///
+/// Code fixer for .
+///
+[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(StringAssertToAssertFixer))]
+[Shared]
+public sealed class StringAssertToAssertFixer : CodeFixProvider
+{
+ ///
+ public override ImmutableArray FixableDiagnosticIds { get; }
+ = ImmutableArray.Create(DiagnosticIds.StringAssertToAssertRuleId);
+
+ ///
+ public sealed override FixAllProvider GetFixAllProvider()
+ // See https://github.com/dotnet/roslyn/blob/main/docs/analyzers/FixAllProvider.md for more information on Fix All Providers
+ => WellKnownFixAllProviders.BatchFixer;
+
+ ///
+ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
+ {
+ SyntaxNode? root = await context.Document.GetRequiredSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);
+
+ Diagnostic diagnostic = context.Diagnostics[0];
+ if (!diagnostic.Properties.TryGetValue(StringAssertToAssertAnalyzer.ProperAssertMethodNameKey, out string? properAssertMethodName)
+ || properAssertMethodName == null)
+ {
+ return;
+ }
+
+ if (root.FindNode(diagnostic.Location.SourceSpan, getInnermostNodeForTie: true) is not InvocationExpressionSyntax invocationExpressionSyntax)
+ {
+ return;
+ }
+
+ // Register a code fix that will invoke the fix operation.
+ string title = string.Format(CultureInfo.InvariantCulture, CodeFixResources.StringAssertToAssertTitle, properAssertMethodName);
+ var action = CodeAction.Create(
+ title: title,
+ createChangedDocument: ct => FixStringAssertAsync(context.Document, invocationExpressionSyntax, properAssertMethodName, ct),
+ equivalenceKey: title);
+
+ context.RegisterCodeFix(action, diagnostic);
+ }
+
+ private static async Task FixStringAssertAsync(
+ Document document,
+ InvocationExpressionSyntax invocationExpr,
+ string properAssertMethodName,
+ CancellationToken cancellationToken)
+ {
+ // Check if the invocation expression has a member access expression
+ if (invocationExpr.Expression is not MemberAccessExpressionSyntax memberAccessExpr)
+ {
+ return document;
+ }
+
+ SeparatedSyntaxList arguments = invocationExpr.ArgumentList.Arguments;
+ if (arguments.Count < 2)
+ {
+ return document;
+ }
+
+ SyntaxNode root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
+
+ // Create new argument list with swapped first two arguments
+ // We keep the existing separators in case there is trivia attached to them.
+ var newArguments = arguments.GetWithSeparators().ToList();
+ // NOTE: Index 1 has the "separator" (comma) between the first and second arguments.
+ (newArguments[0], newArguments[2]) = (newArguments[2], newArguments[0]);
+
+ // StringAssert has overloads with parameter types (string, string, string, StringComparison)
+ // In Assert class, these are (string, string, StringComparison, string)
+ // So we need to do the swap.
+ if (arguments.Count >= 4)
+ {
+ SemanticModel semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
+ if (semanticModel.GetSymbolInfo(invocationExpr, cancellationToken).Symbol is IMethodSymbol stringAssertMethod &&
+ stringAssertMethod.Parameters.Length >= 4 &&
+ stringAssertMethod.Parameters[2].Type.SpecialType == SpecialType.System_String &&
+ stringAssertMethod.Parameters[3].Type.Name == "StringComparison")
+ {
+ (newArguments[4], newArguments[6]) = (newArguments[6], newArguments[4]);
+ }
+ }
+
+ ArgumentListSyntax newArgumentList = invocationExpr.ArgumentList.WithArguments(SyntaxFactory.SeparatedList(newArguments));
+ InvocationExpressionSyntax newInvocationExpr = invocationExpr.WithArgumentList(newArgumentList);
+
+ // Replace StringAssert with Assert in the member access expression
+ // Change StringAssert.MethodName to Assert.ProperMethodName
+ MemberAccessExpressionSyntax newMemberAccess = memberAccessExpr.WithExpression(SyntaxFactory.IdentifierName("Assert"))
+ .WithName(SyntaxFactory.IdentifierName(properAssertMethodName));
+ newInvocationExpr = newInvocationExpr.WithExpression(newMemberAccess);
+
+ // Preserve leading trivia (including empty lines) from the original invocation
+ newInvocationExpr = newInvocationExpr.WithLeadingTrivia(invocationExpr.GetLeadingTrivia());
+
+ return document.WithSyntaxRoot(root.ReplaceNode(invocationExpr, newInvocationExpr));
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/TestClassShouldBeValidFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/TestClassShouldBeValidFixer.cs
index 1b593479a7..93580e61e1 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/TestClassShouldBeValidFixer.cs
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/TestClassShouldBeValidFixer.cs
@@ -9,7 +9,6 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeActions;
using Microsoft.CodeAnalysis.CodeFixes;
-using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Editing;
using Microsoft.CodeAnalysis.Text;
@@ -62,32 +61,24 @@ private static async Task FixClassDeclarationAsync(Document document,
{
cancellationToken.ThrowIfCancellationRequested();
- // Get the SemanticModel and Compilation
+ SyntaxNode root = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
SemanticModel semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
bool canDiscoverInternals = semanticModel.Compilation.CanDiscoverInternals();
- DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false);
+ var generator = SyntaxGenerator.GetGenerator(document);
- // Remove the static modifier if it exists
- SyntaxTokenList modifiers = SyntaxFactory.TokenList(
- typeDeclaration.Modifiers.Where(modifier => !modifier.IsKind(SyntaxKind.StaticKeyword)));
+ Accessibility existingAccessibility = generator.GetAccessibility(typeDeclaration);
+ bool isGoodAccessibility = existingAccessibility == Accessibility.Public ||
+ (canDiscoverInternals && existingAccessibility == Accessibility.Internal);
- if (!typeDeclaration.Modifiers.Any(SyntaxKind.PublicKeyword))
- {
- // Determine the visibility modifier
- SyntaxToken visibilityModifier = canDiscoverInternals
- ? SyntaxFactory.Token(SyntaxKind.InternalKeyword)
- : SyntaxFactory.Token(SyntaxKind.PublicKeyword);
+ SyntaxNode newTypeDeclaration = generator
+ .WithModifiers(typeDeclaration, generator.GetModifiers(typeDeclaration).WithIsStatic(false));
- modifiers = SyntaxFactory.TokenList(
- modifiers.Where(modifier => !modifier.IsKind(SyntaxKind.PrivateKeyword) && !modifier.IsKind(SyntaxKind.InternalKeyword))).Add(visibilityModifier);
+ if (!isGoodAccessibility)
+ {
+ newTypeDeclaration = generator.WithAccessibility(newTypeDeclaration, Accessibility.Public);
}
- // Create a new class declaration with the updated modifiers.
- TypeDeclarationSyntax newTypeDeclaration = typeDeclaration.WithModifiers(modifiers);
- editor.ReplaceNode(typeDeclaration, newTypeDeclaration);
- SyntaxNode newRoot = editor.GetChangedRoot();
-
- return document.WithSyntaxRoot(newRoot);
+ return document.WithSyntaxRoot(root.ReplaceNode(typeDeclaration, newTypeDeclaration));
}
}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/TestContextShouldBeValidFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/TestContextShouldBeValidFixer.cs
index c15765fa46..14639ce961 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/TestContextShouldBeValidFixer.cs
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/TestContextShouldBeValidFixer.cs
@@ -62,9 +62,6 @@ private static async Task FixMemberDeclarationAsync(Document document,
{
cancellationToken.ThrowIfCancellationRequested();
- // Get the SemanticModel and Compilation
- SemanticModel semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
-
DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false);
// Remove the static and readonly modifiers if it exists
@@ -103,7 +100,7 @@ private static async Task FixMemberDeclarationAsync(Document document,
AccessorDeclarationSyntax setAccessor = accessors.FirstOrDefault(a => a.Kind() == SyntaxKind.SetAccessorDeclaration)
?? SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken));
- newMemberDeclaration = propertyDeclaration.WithAccessorList(SyntaxFactory.AccessorList(SyntaxFactory.List(new[] { getAccessor, setAccessor })));
+ newMemberDeclaration = propertyDeclaration.WithAccessorList(SyntaxFactory.AccessorList(SyntaxFactory.List([getAccessor, setAccessor])));
}
// Create a new member declaration with the updated modifiers.
@@ -121,13 +118,13 @@ private static PropertyDeclarationSyntax ConvertFieldToProperty(FieldDeclaration
PropertyDeclarationSyntax propertyDeclaration = SyntaxFactory.PropertyDeclaration(type, TestContextShouldBeValidAnalyzer.TestContextPropertyName)
.WithModifiers(SyntaxFactory.TokenList(fieldDeclaration.Modifiers))
.WithAccessorList(SyntaxFactory.AccessorList(
- SyntaxFactory.List(new[]
- {
+ SyntaxFactory.List(
+ [
SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration)
.WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration)
- .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
- })));
+ .WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken))
+ ])));
return propertyDeclaration;
}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/TestMethodShouldBeValidCodeFix.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/TestMethodShouldBeValidCodeFix.cs
index 0facc4173f..263cfe53e2 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/TestMethodShouldBeValidCodeFix.cs
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/TestMethodShouldBeValidCodeFix.cs
@@ -93,20 +93,26 @@ private static async Task FixTestMethodAsync(Document document, Method
SyntaxToken publicModifier = newMethodDeclaration.Modifiers.FirstOrDefault(m => m.IsKind(SyntaxKind.PublicKeyword));
if (publicModifier == default)
{
- newMethodDeclaration = newMethodDeclaration.WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)));
+ IEnumerable modifiersWithoutAccessModifiers = newMethodDeclaration.Modifiers.Where(m =>
+ !m.IsKind(SyntaxKind.PrivateKeyword) &&
+ !m.IsKind(SyntaxKind.ProtectedKeyword) &&
+ !m.IsKind(SyntaxKind.InternalKeyword));
+
+ newMethodDeclaration = newMethodDeclaration.WithModifiers(
+ new SyntaxTokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
+ .AddRange(modifiersWithoutAccessModifiers));
}
// Ensure the method returns void or Task/ValueTask.
SemanticModel semanticModel = await document.GetRequiredSemanticModelAsync(cancellationToken).ConfigureAwait(false);
- Compilation compilation = semanticModel.Compilation;
var wellKnownTypeProvider = WellKnownTypeProvider.GetOrCreate(semanticModel.Compilation);
INamedTypeSymbol? taskSymbol = wellKnownTypeProvider.GetOrCreateTypeByMetadataName(WellKnownTypeNames.SystemThreadingTasksTask);
INamedTypeSymbol? valueTaskSymbol = wellKnownTypeProvider.GetOrCreateTypeByMetadataName(WellKnownTypeNames.SystemThreadingTasksValueTask);
if (newMethodDeclaration.ReturnType != null &&
!newMethodDeclaration.ReturnType.IsVoid() &&
- (taskSymbol == null || !semanticModel.ClassifyConversion(newMethodDeclaration.ReturnType, taskSymbol).IsImplicit) &&
- (valueTaskSymbol == null || !semanticModel.ClassifyConversion(newMethodDeclaration.ReturnType, valueTaskSymbol).IsImplicit))
+ (taskSymbol == null || !semanticModel.ClassifyConversion(methodDeclaration.ReturnType, taskSymbol).IsImplicit) &&
+ (valueTaskSymbol == null || !semanticModel.ClassifyConversion(methodDeclaration.ReturnType, valueTaskSymbol).IsImplicit))
{
// Change return type to void and remove return statements
newMethodDeclaration = newMethodDeclaration.WithReturnType(SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.VoidKeyword)));
@@ -123,8 +129,8 @@ private static async Task FixTestMethodAsync(Document document, Method
bool asyncModifier = newMethodDeclaration.Modifiers.Any(m => m.IsKind(SyntaxKind.AsyncKeyword));
if (asyncModifier && newMethodDeclaration.ReturnType != null && newMethodDeclaration.ReturnType.IsVoid())
{
- // Change the return type to Task
- newMethodDeclaration = newMethodDeclaration.WithReturnType(SyntaxFactory.ParseTypeName("Task "));
+ // Change the return type to Task. We have a space after Task to ensure we have a trailing trivia (space) after Task.
+ newMethodDeclaration = newMethodDeclaration.WithReturnType(SyntaxFactory.IdentifierName("Task"));
}
// Apply changes.
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/UseCancellationTokenPropertyFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/UseCancellationTokenPropertyFixer.cs
new file mode 100644
index 0000000000..f1f4238461
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/UseCancellationTokenPropertyFixer.cs
@@ -0,0 +1,71 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+using System.Composition;
+
+using Analyzer.Utilities;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CodeActions;
+using Microsoft.CodeAnalysis.CodeFixes;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// Code fixer for .
+///
+[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(UseCancellationTokenPropertyFixer))]
+[Shared]
+public sealed class UseCancellationTokenPropertyFixer : CodeFixProvider
+{
+ ///
+ public sealed override ImmutableArray FixableDiagnosticIds { get; }
+ = ImmutableArray.Create(DiagnosticIds.UseCancellationTokenPropertyRuleId);
+
+ ///
+ public override FixAllProvider? GetFixAllProvider()
+ => WellKnownFixAllProviders.BatchFixer;
+
+ ///
+ public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
+ {
+ SyntaxNode root = await context.Document.GetRequiredSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);
+ Diagnostic diagnostic = context.Diagnostics[0];
+
+ // The node here is a the node accessing CancellationTokenSource property on testContext.
+ SyntaxNode node = root.FindNode(diagnostic.Location.SourceSpan, getInnermostNodeForTie: true);
+ if (node is not MemberAccessExpressionSyntax memberAccessExpression)
+ {
+ return;
+ }
+
+ // We are looking for testContext.CancellationTokenSource.Token.
+ // We already have testContext.CancellationTokenSource, so we get the parent, and check if it's accessing 'Token'.
+ if (memberAccessExpression.Parent is not MemberAccessExpressionSyntax parentMemberAccess ||
+ parentMemberAccess.Name is not IdentifierNameSyntax { Identifier.ValueText: "Token" })
+ {
+ return;
+ }
+
+ context.RegisterCodeFix(
+ CodeAction.Create(
+ title: CodeFixResources.UseCancellationTokenPropertyFix,
+ createChangedDocument: c =>
+ {
+ // Replace testContext.CancellationTokenSource.Token with testContext.CancellationToken
+ MemberAccessExpressionSyntax newExpression = SyntaxFactory.MemberAccessExpression(
+ SyntaxKind.SimpleMemberAccessExpression,
+ memberAccessExpression.Expression, // testContext part
+ SyntaxFactory.IdentifierName("CancellationToken"));
+
+ return Task.FromResult(context.Document.WithSyntaxRoot(root.ReplaceNode(parentMemberAccess, newExpression)));
+ },
+ equivalenceKey: nameof(UseCancellationTokenPropertyFixer)),
+ diagnostic);
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/UseCooperativeCancellationForTimeoutFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/UseCooperativeCancellationForTimeoutFixer.cs
new file mode 100644
index 0000000000..a3052a78f1
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/UseCooperativeCancellationForTimeoutFixer.cs
@@ -0,0 +1,121 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+using System.Composition;
+
+using Analyzer.Utilities;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CodeActions;
+using Microsoft.CodeAnalysis.CodeFixes;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using Microsoft.CodeAnalysis.Editing;
+using Microsoft.CodeAnalysis.Text;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// Code fixer for .
+///
+[ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(UseCooperativeCancellationForTimeoutFixer))]
+[Shared]
+public sealed class UseCooperativeCancellationForTimeoutFixer : CodeFixProvider
+{
+ ///
+ public sealed override ImmutableArray FixableDiagnosticIds { get; }
+ = ImmutableArray.Create(DiagnosticIds.UseCooperativeCancellationForTimeoutRuleId);
+
+ ///
+ public override FixAllProvider GetFixAllProvider()
+ // See https://github.com/dotnet/roslyn/blob/main/docs/analyzers/FixAllProvider.md for more information on Fix All Providers
+ => WellKnownFixAllProviders.BatchFixer;
+
+ ///
+ public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
+ {
+ SyntaxNode root = await context.Document.GetRequiredSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);
+ Diagnostic diagnostic = context.Diagnostics[0];
+ TextSpan diagnosticSpan = diagnostic.Location.SourceSpan;
+
+ // Find the attribute syntax node identified by the diagnostic
+ SyntaxNode attributeNode = root.FindNode(diagnosticSpan, getInnermostNodeForTie: true);
+ if (attributeNode is not AttributeSyntax attributeSyntax)
+ {
+ return;
+ }
+
+ // Register a code action that will invoke the fix
+ context.RegisterCodeFix(
+ CodeAction.Create(
+ title: CodeFixResources.UseCooperativeCancellationForTimeoutFix,
+ createChangedDocument: c => AddCooperativeCancellationAsync(context.Document, attributeSyntax, c),
+ equivalenceKey: nameof(UseCooperativeCancellationForTimeoutFixer)),
+ diagnostic);
+ }
+
+ private static async Task AddCooperativeCancellationAsync(Document document, AttributeSyntax attributeSyntax, CancellationToken cancellationToken)
+ {
+ DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false);
+
+ AttributeSyntax newAttributeSyntax;
+
+ if (attributeSyntax.ArgumentList == null)
+ {
+ // No argument list exists, create one with CooperativeCancellation = true
+ AttributeArgumentSyntax cooperativeCancellationArg = SyntaxFactory.AttributeArgument(
+ SyntaxFactory.NameEquals("CooperativeCancellation"),
+ null,
+ SyntaxFactory.LiteralExpression(SyntaxKind.TrueLiteralExpression));
+
+ newAttributeSyntax = attributeSyntax.WithArgumentList(
+ SyntaxFactory.AttributeArgumentList(
+ SyntaxFactory.SingletonSeparatedList(cooperativeCancellationArg)));
+ }
+ else
+ {
+ // Argument list exists, check if CooperativeCancellation is already specified
+ bool hasCooperativeCancellation = false;
+ List newArguments = [];
+
+ foreach (AttributeArgumentSyntax arg in attributeSyntax.ArgumentList.Arguments)
+ {
+ if (arg.NameEquals?.Name.Identifier.ValueText == "CooperativeCancellation")
+ {
+ // Replace existing CooperativeCancellation = false with true
+ hasCooperativeCancellation = true;
+ AttributeArgumentSyntax newArg = arg.WithExpression(
+ SyntaxFactory.LiteralExpression(SyntaxKind.TrueLiteralExpression));
+ newArguments.Add(newArg);
+ }
+ else
+ {
+ newArguments.Add(arg);
+ }
+ }
+
+ if (!hasCooperativeCancellation)
+ {
+ // Add CooperativeCancellation = true to existing arguments
+ AttributeArgumentSyntax cooperativeCancellationArg = SyntaxFactory.AttributeArgument(
+ SyntaxFactory.NameEquals("CooperativeCancellation"),
+ null,
+ SyntaxFactory.LiteralExpression(SyntaxKind.TrueLiteralExpression));
+
+ newArguments.Add(cooperativeCancellationArg);
+ }
+
+ newAttributeSyntax = attributeSyntax.WithArgumentList(
+ attributeSyntax.ArgumentList.WithArguments(
+ SyntaxFactory.SeparatedList(newArguments)));
+ }
+
+ // Replace the old attribute with the new one
+ editor.ReplaceNode(attributeSyntax, newAttributeSyntax);
+
+ return editor.GetChangedDocument();
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/UseProperAssertMethodsFixer.cs b/src/Analyzers/MSTest.Analyzers.CodeFixes/UseProperAssertMethodsFixer.cs
index 37be3ecc36..a2b22ce340 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/UseProperAssertMethodsFixer.cs
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/UseProperAssertMethodsFixer.cs
@@ -70,7 +70,7 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
switch (mode)
{
case UseProperAssertMethodsAnalyzer.CodeFixModeSimple:
- createChangedDocument = ct => FixAssertMethodForSimpleModeAsync(context.Document, diagnostic.AdditionalLocations[0], diagnostic.AdditionalLocations[1], root, simpleNameSyntax, properAssertMethodName, ct);
+ createChangedDocument = ct => FixAssertMethodForSimpleModeAsync(context.Document, diagnostic.AdditionalLocations, root, simpleNameSyntax, properAssertMethodName, ct);
break;
case UseProperAssertMethodsAnalyzer.CodeFixModeAddArgument:
createChangedDocument = ct => FixAssertMethodForAddArgumentModeAsync(context.Document, diagnostic.AdditionalLocations[0], diagnostic.AdditionalLocations[1], diagnostic.AdditionalLocations[2], root, simpleNameSyntax, properAssertMethodName, ct);
@@ -78,6 +78,9 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
case UseProperAssertMethodsAnalyzer.CodeFixModeRemoveArgument:
createChangedDocument = ct => FixAssertMethodForRemoveArgumentModeAsync(context.Document, diagnostic.AdditionalLocations, root, simpleNameSyntax, properAssertMethodName, diagnostic.Properties.ContainsKey(UseProperAssertMethodsAnalyzer.NeedsNullableBooleanCastKey), ct);
break;
+ case UseProperAssertMethodsAnalyzer.CodeFixModeRemoveArgumentAndReplaceArgument:
+ createChangedDocument = ct => FixAssertMethodForRemoveArgumentAndReplaceArgumentModeAsync(context.Document, diagnostic.AdditionalLocations, root, simpleNameSyntax, properAssertMethodName, ct);
+ break;
default:
break;
}
@@ -93,26 +96,30 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
}
}
- private static async Task FixAssertMethodForSimpleModeAsync(Document document, Location conditionLocationToBeReplaced, Location replacementExpressionLocation, SyntaxNode root, SimpleNameSyntax simpleNameSyntax, string properAssertMethodName, CancellationToken cancellationToken)
+ private static async Task FixAssertMethodForSimpleModeAsync(Document document, IReadOnlyList additionalLocations, SyntaxNode root, SimpleNameSyntax simpleNameSyntax, string properAssertMethodName, CancellationToken cancellationToken)
{
- // This doesn't properly handle cases like Assert.IsTrue(message: "My message", condition: x == null)
- // The proper handling of this may be Assert.IsNull(message: "My message", value: x)
- // Or: Assert.IsNull(x, "My message")
- // For now this is not handled.
- if (root.FindNode(conditionLocationToBeReplaced.SourceSpan) is not ArgumentSyntax conditionNodeToBeReplaced)
- {
- return document;
- }
+ DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false);
+ FixInvocationMethodName(editor, simpleNameSyntax, properAssertMethodName);
- if (root.FindNode(replacementExpressionLocation.SourceSpan) is not ExpressionSyntax replacementExpressionNode)
+ for (int i = 0; i < additionalLocations.Count; i += 2)
{
- return document;
+ // This doesn't properly handle cases like Assert.IsTrue(message: "My message", condition: x == null)
+ // The proper handling of this may be Assert.IsNull(message: "My message", value: x)
+ // Or: Assert.IsNull(x, "My message")
+ // For now this is not handled.
+ if (root.FindNode(additionalLocations[i].SourceSpan) is not ArgumentSyntax conditionNodeToBeReplaced)
+ {
+ return document;
+ }
+
+ if (root.FindNode(additionalLocations[i + 1].SourceSpan, getInnermostNodeForTie: true) is not ExpressionSyntax replacementExpressionNode)
+ {
+ return document;
+ }
+
+ editor.ReplaceNode(conditionNodeToBeReplaced, SyntaxFactory.Argument(replacementExpressionNode).WithAdditionalAnnotations(Formatter.Annotation));
}
- DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false);
- FixInvocationMethodName(editor, simpleNameSyntax, properAssertMethodName);
- editor.ReplaceNode(conditionNodeToBeReplaced, SyntaxFactory.Argument(replacementExpressionNode).WithAdditionalAnnotations(Formatter.Annotation));
-
return editor.GetChangedDocument();
}
@@ -132,7 +139,8 @@ private static async Task FixAssertMethodForAddArgumentModeAsync(Docum
return document;
}
- if (root.FindNode(expectedLocation.SourceSpan) is not ExpressionSyntax expectedNode)
+ if (root.FindNode(expectedLocation.SourceSpan) is not { } expectedNode
+ || expectedNode is not ArgumentSyntax and not ExpressionSyntax)
{
return document;
}
@@ -146,7 +154,13 @@ private static async Task FixAssertMethodForAddArgumentModeAsync(Docum
FixInvocationMethodName(editor, simpleNameSyntax, properAssertMethodName);
ArgumentListSyntax newArgumentList = argumentList;
- newArgumentList = newArgumentList.ReplaceNode(conditionNode, SyntaxFactory.Argument(expectedNode).WithAdditionalAnnotations(Formatter.Annotation));
+ ExpressionSyntax expectedExpression = expectedNode switch
+ {
+ ArgumentSyntax argument => argument.Expression,
+ ExpressionSyntax expression => expression,
+ _ => throw new InvalidOperationException($"Unexpected node type for expected argument: {expectedNode.GetType()}"),
+ };
+ newArgumentList = newArgumentList.ReplaceNode(conditionNode, SyntaxFactory.Argument(expectedExpression).WithAdditionalAnnotations(Formatter.Annotation));
int insertionIndex = argumentList.Arguments.IndexOf(conditionNode) + 1;
newArgumentList = newArgumentList.WithArguments(newArgumentList.Arguments.Insert(insertionIndex, SyntaxFactory.Argument(actualNode).WithAdditionalAnnotations(Formatter.Annotation)));
@@ -203,6 +217,44 @@ private static async Task FixAssertMethodForRemoveArgumentModeAsync(
return editor.GetChangedDocument();
}
+ private static async Task FixAssertMethodForRemoveArgumentAndReplaceArgumentModeAsync(
+ Document document,
+ IReadOnlyList additionalLocations,
+ SyntaxNode root,
+ SimpleNameSyntax simpleNameSyntax,
+ string properAssertMethodName,
+ CancellationToken cancellationToken)
+ {
+ // Handle collection count transformations:
+ // Assert.AreEqual(0, list.Count) -> Assert.IsEmpty(list)
+ // Assert.AreEqual(list.Count, 0) -> Assert.IsEmpty(list)
+ if (root.FindNode(additionalLocations[0].SourceSpan) is not ArgumentSyntax expectedArgumentToRemove)
+ {
+ return document;
+ }
+
+ if (root.FindNode(additionalLocations[1].SourceSpan) is not ArgumentSyntax argumentToBeReplaced ||
+ root.FindNode(additionalLocations[2].SourceSpan) is not ExpressionSyntax replacement)
+ {
+ return document;
+ }
+
+ if (expectedArgumentToRemove.Parent is not ArgumentListSyntax argumentList)
+ {
+ return document;
+ }
+
+ DocumentEditor editor = await DocumentEditor.CreateAsync(document, cancellationToken).ConfigureAwait(false);
+ FixInvocationMethodName(editor, simpleNameSyntax, properAssertMethodName);
+
+ int argumentIndexToRemove = argumentList.Arguments.IndexOf(expectedArgumentToRemove);
+ ArgumentListSyntax newArgumentList = argumentList.ReplaceNode(argumentToBeReplaced, argumentToBeReplaced.WithExpression(replacement));
+ newArgumentList = newArgumentList.WithArguments(newArgumentList.Arguments.RemoveAt(argumentIndexToRemove));
+ editor.ReplaceNode(argumentList, newArgumentList);
+
+ return editor.GetChangedDocument();
+ }
+
private static void FixInvocationMethodName(DocumentEditor editor, SimpleNameSyntax simpleNameSyntax, string properAssertMethodName)
// NOTE: Switching Assert.IsTrue(x == y) to Assert.AreEqual(x, y) MAY produce an overload resolution error.
// For example, Assert.AreEqual("string", true) will fail the inference for generic argument.
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.cs.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.cs.xlf
index 5e01c72cca..cc2d8dc45e 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.cs.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.cs.xlf
@@ -22,11 +22,26 @@
Použít {0}
+
+ Use interpolated string instead of format parameters
+ Místo parametrů formátu použít interpolovaný řetězec
+
+
+
+ Use 'string.Format' instead of format parameters
+ Místo parametrů formátu použít argument string.Format
+
+ Change method accessibility to 'private'Změnit přístupnost metody na private
+
+ Change to 'class' and add '[TestClass]'
+ Změňte na class a přidejte [TestClass]
+
+ Fix actual/expected arguments orderOpravit pořadí skutečných/očekávaných argumentů
@@ -42,6 +57,21 @@
Opravit podpis
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ Předat argument TestContext.CancellationToken volání metody
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ Pokud chcete použít výchozí AutoDetect, odeberte parametr DynamicDataSourceType.
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ Nahradit DataTestMethod hodnotou TestMethod
+
+ Replace TestInitialize method with constructorNahradit metodu TestInitialize konstruktorem
@@ -67,6 +97,11 @@
Nahradit konstruktor metodou TestInitialize
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ Použijte Assert.{0}místo StringAssert
+
+ Fix test class signatureOprava podpisu testovací třídy
@@ -92,6 +127,16 @@
Přidat [TestMethod]
+
+ Use 'TestContext.CancellationToken' instead
+ Místo toho použít argument TestContext.CancellationToken
+
+
+
+ Use 'CooperativeCancellation = true'
+ Použijte „CooperativeCancellation = true“
+
+ Use '{0}'Použít {0}
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.de.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.de.xlf
index ecef33e935..6a3d19f1bc 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.de.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.de.xlf
@@ -22,11 +22,26 @@
„{0}“ verwenden
+
+ Use interpolated string instead of format parameters
+ Interpolierte Zeichenfolge anstelle von Formatparametern verwenden
+
+
+
+ Use 'string.Format' instead of format parameters
+ „string.Format“ anstelle von Formatparametern verwenden
+
+ Change method accessibility to 'private'Methodenzugriff auf „privat“ ändern
+
+ Change to 'class' and add '[TestClass]'
+ Wechseln Sie zu „Klasse“, und fügen Sie „[Testklasse]“ hinzu
+
+ Fix actual/expected arguments orderReihenfolge der tatsächlichen/erwarteten Argumente korrigieren
@@ -42,6 +57,21 @@
Signatur korrigieren
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ Argument „TestContext.CancellationToken“ an den Methodenaufruf übergeben
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ Entfernen Sie den Parameter „DynamicDataSourceType“, um die Standardeinstellung „AutoDetect“ zu verwenden.
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ „DataTestMethod“ durch „TestMethod“ ersetzen
+
+ Replace TestInitialize method with constructorTestInitialize-Methode durch Konstruktor ersetzen
@@ -67,6 +97,11 @@
Konstruktor durch TestInitialize-Methode ersetzen
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ Verwenden Sie „Assert.{0}“ anstelle von „StringAssert“.
+
+ Fix test class signatureTestklassensignatur korrigieren
@@ -92,6 +127,16 @@
„[TestMethod]“ hinzufügen
+
+ Use 'TestContext.CancellationToken' instead
+ Stattdessen „TestContext.CancellationToken“ verwenden
+
+
+
+ Use 'CooperativeCancellation = true'
+ Verwenden Sie „CooperativeCancellation = true“.
+
+ Use '{0}'„{0}“ verwenden
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.es.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.es.xlf
index 1edccf3e61..e285a57aa0 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.es.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.es.xlf
@@ -22,11 +22,26 @@
Usar "{0}"
+
+ Use interpolated string instead of format parameters
+ Usar cadena interpolada en lugar de parámetros de formato
+
+
+
+ Use 'string.Format' instead of format parameters
+ Usar 'string. Format' en lugar de parámetros de formato
+
+ Change method accessibility to 'private'Cambiar la accesibilidad del método a "private"
+
+ Change to 'class' and add '[TestClass]'
+ Cambiar a "class" y agregar "[TestClass]"
+
+ Fix actual/expected arguments orderCorregir el orden de los argumentos reales o esperados
@@ -42,6 +57,21 @@
Corregir firma
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ Pasar el argumento 'TestContext.CancellationToken' a la llamada al método
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ Elimine el parámetro 'DynamicDataSourceType' para utilizar el valor predeterminado 'AutoDetect'
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ Reemplazar "DataTestMethod" por "TestMethod"
+
+ Replace TestInitialize method with constructorReemplazar el método TestInitialize por el constructor
@@ -67,6 +97,11 @@
Reemplazar constructor por el método TestInitialize
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ Use "Assert.{0}" en lugar de "StringAssert"
+
+ Fix test class signatureCorregir firma de clase de prueba
@@ -92,6 +127,16 @@
Agregar '[TestMethod]'
+
+ Use 'TestContext.CancellationToken' instead
+ Usar 'TestContext.CancellationToken' en su lugar
+
+
+
+ Use 'CooperativeCancellation = true'
+ Usa "CooperativeCancellation = true"
+
+ Use '{0}'Usar "{0}"
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.fr.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.fr.xlf
index ed28b55f45..142da1b150 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.fr.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.fr.xlf
@@ -22,11 +22,26 @@
Utiliser « {0} »
+
+ Use interpolated string instead of format parameters
+ Utiliser une chaîne interpolée au lieu de paramètres de format
+
+
+
+ Use 'string.Format' instead of format parameters
+ Utiliser « string.Format » au lieu des paramètres de format
+
+ Change method accessibility to 'private'Remplacer l’accessibilité de la méthode par « privé »
+
+ Change to 'class' and add '[TestClass]'
+ Remplacez par « classe » et ajoutez « [TestClass] »
+
+ Fix actual/expected arguments orderCorriger l’ordre des arguments réels/attendus
@@ -42,6 +57,21 @@
Corriger la signature numérique
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ Transmettre l'argument « TestContext.CancellationToken » à l'appel de méthode
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ Pour utiliser la valeur par défaut « AutoDetect », supprimez le paramètre « DynamicDataSourceType »
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ Remplacer « DataTestMethod » par « TestMethod »
+
+ Replace TestInitialize method with constructorRemplacer la méthode TestInitialize par un constructeur
@@ -67,6 +97,11 @@
Remplacer le constructeur par la méthode TestInitialize
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ Utilisez « Assert.{0} » au lieu de « StringAssert »
+
+ Fix test class signatureCorrection de la signature de classe de test
@@ -92,6 +127,16 @@
Ajouter « [TestMethod] »
+
+ Use 'TestContext.CancellationToken' instead
+ Utiliser plutôt « TestContext.CancellationToken »
+
+
+
+ Use 'CooperativeCancellation = true'
+ Utilisez 'CooperativeCancellation = true'
+
+ Use '{0}'Utiliser « {0} »
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.it.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.it.xlf
index 10aafdcc89..c00367afaf 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.it.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.it.xlf
@@ -22,11 +22,26 @@
Usare ‘{0}’
+
+ Use interpolated string instead of format parameters
+ Usare la stringa interpolata invece dei parametri di formato
+
+
+
+ Use 'string.Format' instead of format parameters
+ Usare 'string. Format' invece dei parametri di formato
+
+ Change method accessibility to 'private'Modifica l'accessibilità del metodo in 'privato'
+
+ Change to 'class' and add '[TestClass]'
+ Cambia in 'class' e aggiungi '[TestClass]'
+
+ Fix actual/expected arguments orderCorreggi l'ordine degli argomenti effettivi/previsti
@@ -42,6 +57,21 @@
Correggi firma
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ Passare l'argomento 'TestContext.CancellationToken' alla chiamata al metodo
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ Rimuovi il parametro ''DynamicDataSourceType'' per utilizzare il valore predefinito ''AutoDetect''
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ Sostituisci 'DataTestMethod' con 'TestMethod'
+
+ Replace TestInitialize method with constructorSostituisci il metodo TestInitialize con il costruttore
@@ -67,6 +97,11 @@
Sostituisci costruttore con metodo TestInitialize
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ Usa 'Assert.{0}' invece di 'StringAssert'
+
+ Fix test class signatureCorreggi la firma della classe di test
@@ -92,6 +127,16 @@
Aggiungi '[TestMethod]'
+
+ Use 'TestContext.CancellationToken' instead
+ In alternativa, usare 'TestContext.CancellationToken'
+
+
+
+ Use 'CooperativeCancellation = true'
+ Usa "CooperativeCancellation = true"
+
+ Use '{0}'Usare ‘{0}’
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ja.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ja.xlf
index ad8e53d586..7d7b217dee 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ja.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ja.xlf
@@ -22,11 +22,26 @@
'{0}' を使用する
+
+ Use interpolated string instead of format parameters
+ 書式設定パラメーターの代わりに補間された文字列を使用する
+
+
+
+ Use 'string.Format' instead of format parameters
+ 書式設定パラメーターの代わりに 'string.Format' を使用する
+
+ Change method accessibility to 'private'メソッドのアクセシビリティを 'private' に変更する
+
+ Change to 'class' and add '[TestClass]'
+ 'class' に変更し、'[TestClass]' を追加します
+
+ Fix actual/expected arguments order実際の引数と予想される引数の順序を修正する
@@ -42,6 +57,21 @@
署名の修正
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ 'TestContext.CancellationToken' 引数をメソッド呼び出しに渡す
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ 'DynamicDataSourceType' パラメーターを削除して、既定の 'AutoDetect' を使用します
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ 'DataTestMethod' を 'TestMethod' に置き換えます
+
+ Replace TestInitialize method with constructorTestInitialize メソッドをコンストラクターに置き換える
@@ -67,6 +97,11 @@
コンストラクターを TestInitialize メソッドに置き換える
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ 'StringAssert' の代わりに 'Assert.{0}' を使用
+
+ Fix test class signatureテスト クラスのシグネチャの修正
@@ -92,6 +127,16 @@
'[TestMethod]' の追加
+
+ Use 'TestContext.CancellationToken' instead
+ 代わりに 'TestContext.CancellationToken' を使用する
+
+
+
+ Use 'CooperativeCancellation = true'
+ 'CooperativeCancellation = true' を使用する
+
+ Use '{0}''{0}' を使用する
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ko.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ko.xlf
index 9d32dc54eb..c3457804a2 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ko.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ko.xlf
@@ -22,11 +22,26 @@
'{0}' 사용
+
+ Use interpolated string instead of format parameters
+ 형식 매개 변수 대신 보간된 문자열 사용
+
+
+
+ Use 'string.Format' instead of format parameters
+ 형식 매개 변수 대신 'string.Format' 사용
+
+ Change method accessibility to 'private'메서드 접근성 '비공개'로 변경하기
+
+ Change to 'class' and add '[TestClass]'
+ 'class'로 변경하고 '[TestClass]'를 추가합니다.
+
+ Fix actual/expected arguments order실제/예상 인수 순서 수정
@@ -42,6 +57,21 @@
서명 수정
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ 메서드 호출에 'TestContext.CancellationToken' 인수 전달
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ 기본 'AutoDetect'를 사용하려면 'DynamicDataSourceType' 매개 변수를 제거합니다.
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ 'DataTestMethod'를 'TestMethod'로 바꾸기
+
+ Replace TestInitialize method with constructorTestInitialize 메서드를 생성자로 바꾸기
@@ -67,6 +97,11 @@
생성자를 TestInitialize 메서드로 바꾸기
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ 'StringAssert' 대신 'Assert.{0}' 사용
+
+ Fix test class signature테스트 클래스 서명 수정
@@ -92,6 +127,16 @@
'[TestMethod]' 추가
+
+ Use 'TestContext.CancellationToken' instead
+ 대신 'TestContext.CancellationToken' 사용
+
+
+
+ Use 'CooperativeCancellation = true'
+ 'CooperativeCancellation = true'를 사용하세요.
+
+ Use '{0}''{0}' 사용
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.pl.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.pl.xlf
index d879b5a155..9e51816347 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.pl.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.pl.xlf
@@ -22,11 +22,26 @@
Użyj „{0}”
+
+ Use interpolated string instead of format parameters
+ Użyj ciągu interpolowanego zamiast parametrów formatu
+
+
+
+ Use 'string.Format' instead of format parameters
+ Użyj ciągu „string.Format” zamiast parametrów formatu
+
+ Change method accessibility to 'private'Zmień dostępność metody na „private” (prywatna)
+
+ Change to 'class' and add '[TestClass]'
+ Zmień na wartość „class” i dodaj element „[TestClass]”
+
+ Fix actual/expected arguments orderNapraw rzeczywistą/oczekiwaną kolejność argumentów
@@ -42,6 +57,21 @@
Popraw podpis
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ Przekaż argument „TestContext.CancellationToken” do wywołania metody
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ Usuń parametr „DynamicDataSourceType”, aby użyć domyślnego elementu „AutoDetect”
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ Zastąp element „DataTestMethod” elementem „TestMethod”
+
+ Replace TestInitialize method with constructorZastąp metodę TestInitialize konstruktorem
@@ -67,6 +97,11 @@
Zastąp konstruktor metodą TestInitialize
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ Użyj ciągu „Assert.{0}” zamiast ciągu „StringAssert”
+
+ Fix test class signatureNapraw podpis klasy testowej
@@ -92,6 +127,16 @@
Dodaj „[TestMethod]”
+
+ Use 'TestContext.CancellationToken' instead
+ Zamiast tego użyj argumentu „TestContext.CancellationToken”
+
+
+
+ Use 'CooperativeCancellation = true'
+ Użyj opcji „CooperativeCancellation = true”
+
+ Use '{0}'Użyj „{0}”
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.pt-BR.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.pt-BR.xlf
index 646745d87a..509eb8d8d4 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.pt-BR.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.pt-BR.xlf
@@ -22,11 +22,26 @@
Usar '{0}'
+
+ Use interpolated string instead of format parameters
+ Use cadeia de caracteres interpolada em vez de parâmetros de formato
+
+
+
+ Use 'string.Format' instead of format parameters
+ Use 'string.Format' em vez de parâmetros de formato
+
+ Change method accessibility to 'private'Alterar a acessibilidade do método para 'privado'
+
+ Change to 'class' and add '[TestClass]'
+ Alterar para 'classe' e adicionar '[TestClass]'
+
+ Fix actual/expected arguments orderCorrigir ordem de argumentos real/esperada
@@ -42,6 +57,21 @@
Corrigir assinatura
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ Passar o argumento 'TestContext.CancellationToken' para a chamada de método
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ Remover o parâmetro "DynamicDataSourceType" para usar o padrão "AutoDetect"
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ Substitua 'DataTestMethod' por 'TestMethod'
+
+ Replace TestInitialize method with constructorSubstituir o método TestInitialize pelo construtor.
@@ -67,6 +97,11 @@
Substitua o construtor pelo método TestInitialize.
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ Use 'Assert'{0}. em vez de 'StringAssert'
+
+ Fix test class signatureCorreção da assinatura de classe do teste
@@ -92,6 +127,16 @@
Adicionar ''[TestMethod]"
+
+ Use 'TestContext.CancellationToken' instead
+ Usar 'TestContext.CancellationToken' em vez disso
+
+
+
+ Use 'CooperativeCancellation = true'
+ Usar “CooperativoCancellation = true”
+
+ Use '{0}'Usar "{0}"
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ru.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ru.xlf
index d2e9dbd136..612dc20fd7 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ru.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.ru.xlf
@@ -22,11 +22,26 @@
Использовать "{0}"
+
+ Use interpolated string instead of format parameters
+ Используйте интерполированную строку вместо параметров форматирования
+
+
+
+ Use 'string.Format' instead of format parameters
+ Используйте "string.Format" вместо параметров форматирования
+
+ Change method accessibility to 'private'Изменить доступность метода на "private"
+
+ Change to 'class' and add '[TestClass]'
+ Изменить на "class" и добавить "[TestClass]"
+
+ Fix actual/expected arguments orderИсправить порядок фактических и ожидаемых аргументов
@@ -42,6 +57,21 @@
Исправить подпись
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ Передайте аргумент "TestContext.CancellationToken" в вызов метода
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ Удалите параметр "DynamicDataSourceType", чтобы использовать значение по умолчанию "AutoDetect"
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ Заменить "DataTestMethod" на "TestMethod"
+
+ Replace TestInitialize method with constructorЗаменить метод TestInitialize конструктором
@@ -67,6 +97,11 @@
Заменить конструктор на метод TestInitialize
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ Используйте "Assert.{0}" вместо "StringAssert"
+
+ Fix test class signatureИсправить подпись класса теста
@@ -92,6 +127,16 @@
Добавить "[TestMethod]"
+
+ Use 'TestContext.CancellationToken' instead
+ Вместо этого используйте "TestContext.CancellationToken"
+
+
+
+ Use 'CooperativeCancellation = true'
+ Использовать "CooperativeCancellation = true"
+
+ Use '{0}'Использовать "{0}"
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.tr.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.tr.xlf
index 48e1032eb5..9d31daafe5 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.tr.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.tr.xlf
@@ -22,11 +22,26 @@
'{0}' kullan
+
+ Use interpolated string instead of format parameters
+ Biçim parametreleri yerine düz metin arasına kod eklenmiş dize kullanın
+
+
+
+ Use 'string.Format' instead of format parameters
+ Biçim parametreleri yerine 'string.Format' kullanın
+
+ Change method accessibility to 'private'Yöntem erişilebilirliğini ‘özel’ olarak değiştir
+
+ Change to 'class' and add '[TestClass]'
+ ‘class’ olarak değiştirin ve ‘[TestClass]’ ekleyin.
+
+ Fix actual/expected arguments orderFiili/beklenen bağımsız değişken sırasını düzelt
@@ -42,6 +57,21 @@
İmzayı düzelt
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ 'TestContext.CancellationToken' bağımsız değişkenini metot çağrısına aktarın
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ Varsayılan ‘AutoDetect’ değerini kullanmak için ‘DynamicDataSourceType’ parametresini kaldırın
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ 'DataTestMethod' yöntemini 'TestMethod' ile değiştirin
+
+ Replace TestInitialize method with constructorTestInitialize yöntemini oluşturucuyla değiştir
@@ -67,6 +97,11 @@
Oluşturucuyu TestInitialize yöntemiyle değiştir
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ ‘StringAssert’ yerine ‘Assert.{0}’ kullanın
+
+ Fix test class signatureTest sınıfı imzasını düzeltme
@@ -92,6 +127,16 @@
'[TestMethod]' ekle
+
+ Use 'TestContext.CancellationToken' instead
+ Bunun yerine 'TestContext.CancellationToken' kullanın
+
+
+
+ Use 'CooperativeCancellation = true'
+ 'CooperativeCancellation = true' kullanın
+
+ Use '{0}''{0}' kullan
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.zh-Hans.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.zh-Hans.xlf
index 2f4b66073d..97c4645e47 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.zh-Hans.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.zh-Hans.xlf
@@ -22,11 +22,26 @@
使用“{0}”
+
+ Use interpolated string instead of format parameters
+ 使用内插字符串而不是格式参数
+
+
+
+ Use 'string.Format' instead of format parameters
+ 使用 'string.Format' 而不是格式参数
+
+ Change method accessibility to 'private'将方法可访问性更改为“private”
+
+ Change to 'class' and add '[TestClass]'
+ 更改为 "class" 并添加 "[TestClass]"
+
+ Fix actual/expected arguments order修复实际/预期参数顺序
@@ -42,6 +57,21 @@
修复签名
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ 将 'TestContext.CancellationToken' 参数传递给方法调用
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ 移除 ‘DynamicDataSourceType’ 参数以使用默认的 ‘AutoDetect’
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ 将 'DataTestMethod' 替换为 'TestMethod'
+
+ Replace TestInitialize method with constructor将 TestInitialize 方法替换为构造函数
@@ -67,6 +97,11 @@
将构造函数替换为 TestInitialize 方法
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ 使用 'Assert.{0}' 而不是 'StringAssert'
+
+ Fix test class signature修复测试类签名
@@ -92,6 +127,16 @@
添加“[TestMethod]”
+
+ Use 'TestContext.CancellationToken' instead
+ 请改用 'TestContext.CancellationToken'
+
+
+
+ Use 'CooperativeCancellation = true'
+ 使用 'CooperativeCancellation = true'
+
+ Use '{0}'使用“{0}”
diff --git a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.zh-Hant.xlf b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.zh-Hant.xlf
index 5c5ea7e81d..67a726771e 100644
--- a/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.zh-Hant.xlf
+++ b/src/Analyzers/MSTest.Analyzers.CodeFixes/xlf/CodeFixResources.zh-Hant.xlf
@@ -22,11 +22,26 @@
使用 '{0}'
+
+ Use interpolated string instead of format parameters
+ 請使用差補字串而不是格式參數
+
+
+
+ Use 'string.Format' instead of format parameters
+ 請使用 'string.Format' 而不是格式參數
+
+ Change method accessibility to 'private'將方法協助工具變更為 'private'
+
+ Change to 'class' and add '[TestClass]'
+ 變更為 'class',並新增 '[TestClass]'
+
+ Fix actual/expected arguments order修正實際/預期的引數順序
@@ -42,6 +57,21 @@
修正簽章
+
+ Pass 'TestContext.CancellationToken' argument to method call
+ 將 'TestContext.CancellationToken' 引數傳遞給方法呼叫
+
+
+
+ Remove 'DynamicDataSourceType' parameter to use default 'AutoDetect'
+ 移除 'DynamicDataSourceType' 參數,以使用預設的 'AutoDetect'
+
+
+
+ Replace 'DataTestMethod' with 'TestMethod'
+ 將 'DataTestMethod' 取代為 'TestMethod'
+
+ Replace TestInitialize method with constructor以建構函式取代 TestInitialize 方法
@@ -67,6 +97,11 @@
使用 TestInitialize 方法取代建構函式
+
+ Use 'Assert.{0}' instead of 'StringAssert'
+ 使用 'Assert.{0}' 而不是 'StringAssert'
+
+ Fix test class signature修正測試類別簽章
@@ -92,6 +127,16 @@
新增 '[TestMethod]'
+
+ Use 'TestContext.CancellationToken' instead
+ 請改為使用 'TestContext.CancellationToken'
+
+
+
+ Use 'CooperativeCancellation = true'
+ 使用 'CooperativeCancellation = true'
+
+ Use '{0}'使用 '{0}'
diff --git a/src/Analyzers/MSTest.Analyzers.Package/MSTest.Analyzers.Package.csproj b/src/Analyzers/MSTest.Analyzers.Package/MSTest.Analyzers.Package.csproj
index dbeb1dfb27..9a8b279bdb 100644
--- a/src/Analyzers/MSTest.Analyzers.Package/MSTest.Analyzers.Package.csproj
+++ b/src/Analyzers/MSTest.Analyzers.Package/MSTest.Analyzers.Package.csproj
@@ -4,7 +4,6 @@
netstandard2.0falsetrue
- true
@@ -35,7 +34,7 @@
$(DotNetRoot)dotnet.exe$(DotNetRoot)dotnet
-
+
diff --git a/src/Analyzers/MSTest.Analyzers/AnalyzerReleases.Shipped.md b/src/Analyzers/MSTest.Analyzers/AnalyzerReleases.Shipped.md
index e3dd53f75e..2aa27e3422 100644
--- a/src/Analyzers/MSTest.Analyzers/AnalyzerReleases.Shipped.md
+++ b/src/Analyzers/MSTest.Analyzers/AnalyzerReleases.Shipped.md
@@ -1,4 +1,33 @@
-## Release 3.8.0
+## Release 3.10.0
+
+### New Rules
+
+Rule ID | Category | Severity | Notes
+--------|----------|----------|-------
+MSTEST0044 | Design | Warning | PreferTestMethodOverDataTestMethodAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0044)
+MSTEST0045 | Usage | Info | UseCooperativeCancellationForTimeoutAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0045)
+MSTEST0046 | Usage | Info | StringAssertToAssertAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0046)
+MSTEST0048 | Usage | Warning | TestContextPropertyUsageAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0048)
+MSTEST0049 | Usage | Info | FlowTestContextCancellationTokenAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0049)
+MSTEST0050 | Usage | Error | GlobalTestFixtureShouldBeValidAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0050)
+
+### Changed Rules
+
+Rule ID | New Category | New Severity | Old Category | Old Severity | Notes
+--------|--------------|--------------|--------------|--------------|-------
+MSTEST0006 | Design | Warning | Design | Info | AvoidExpectedExceptionAttributeAnalyzer
+MSTEST0039 | Usage | Warning | Usage | Info | UseNewerAssertThrowsAnalyzer
+
+## Release 3.9.0
+
+### New Rules
+
+Rule ID | Category | Severity | Notes
+--------|----------|----------|-------
+MSTEST0042 | Usage | Warning | DuplicateDataRowAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0042)
+MSTEST0043 | Usage | Warning | UseRetryWithTestMethodAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0043)
+
+## Release 3.8.0
### New Rules
diff --git a/src/Analyzers/MSTest.Analyzers/AnalyzerReleases.Unshipped.md b/src/Analyzers/MSTest.Analyzers/AnalyzerReleases.Unshipped.md
index fbfaf78376..ffe217561a 100644
--- a/src/Analyzers/MSTest.Analyzers/AnalyzerReleases.Unshipped.md
+++ b/src/Analyzers/MSTest.Analyzers/AnalyzerReleases.Unshipped.md
@@ -5,5 +5,8 @@
Rule ID | Category | Severity | Notes
--------|----------|----------|-------
-MSTEST0042 | Usage | Warning | DuplicateDataRowAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0042)
-MSTEST0043 | Usage | Warning | UseRetryWithTestMethodAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0043)
+MSTEST0051 | Usage | Info | AssertThrowsShouldContainSingleStatementAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0051)
+MSTEST0052 | Usage | Warning | PreferDynamicDataSourceTypeAutoDetectAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0052)
+MSTEST0053 | Usage | Warning | AvoidAssertFormatParametersAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0053)
+MSTEST0054 | Usage | Info | UseCancellationTokenPropertyAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0054)
+MSTEST0055 | Usage | Warning | IgnoreStringMethodReturnValueAnalyzer, [Documentation](https://learn.microsoft.com/dotnet/core/testing/mstest-analyzers/mstest0055)
diff --git a/src/Analyzers/MSTest.Analyzers/AssertThrowsShouldContainSingleStatementAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/AssertThrowsShouldContainSingleStatementAnalyzer.cs
new file mode 100644
index 0000000000..ef41149c65
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/AssertThrowsShouldContainSingleStatementAnalyzer.cs
@@ -0,0 +1,122 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.CodeAnalysis.Operations;
+
+using MSTest.Analyzers.Helpers;
+using MSTest.Analyzers.RoslynAnalyzerHelpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0051: Assert.Throws should contain only a single statement/expression.
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class AssertThrowsShouldContainSingleStatementAnalyzer : DiagnosticAnalyzer
+{
+ private static readonly LocalizableResourceString Title = new(nameof(Resources.AssertThrowsShouldContainSingleStatementTitle), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.AssertThrowsShouldContainSingleStatementMessageFormat), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString Description = new(nameof(Resources.AssertThrowsShouldContainSingleStatementDescription), Resources.ResourceManager, typeof(Resources));
+
+ internal static readonly DiagnosticDescriptor Rule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.AssertThrowsShouldContainSingleStatementRuleId,
+ Title,
+ MessageFormat,
+ Description,
+ Category.Usage,
+ DiagnosticSeverity.Info,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; }
+ = ImmutableArray.Create(Rule);
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ if (!context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingAssert, out INamedTypeSymbol? assertTypeSymbol))
+ {
+ return;
+ }
+
+ context.RegisterOperationAction(context => AnalyzeInvocationOperation(context, assertTypeSymbol), OperationKind.Invocation);
+ });
+ }
+
+ private static void AnalyzeInvocationOperation(OperationAnalysisContext context, INamedTypeSymbol assertTypeSymbol)
+ {
+ var operation = (IInvocationOperation)context.Operation;
+ IMethodSymbol targetMethod = operation.TargetMethod;
+
+ if (!SymbolEqualityComparer.Default.Equals(targetMethod.ContainingType, assertTypeSymbol) ||
+ !targetMethod.Name.StartsWith("Throws", StringComparison.Ordinal))
+ {
+ return;
+ }
+
+ // Find the action parameter (lambda expression) - it's typically the first parameter
+ foreach (IArgumentOperation argument in operation.Arguments)
+ {
+ if (argument.Parameter?.Ordinal == 0)
+ {
+ AnalyzeActionArgument(context, argument.Value.WalkDownConversion(), operation);
+ break;
+ }
+ }
+ }
+
+ private static void AnalyzeActionArgument(OperationAnalysisContext context, IOperation argumentValueOperation, IInvocationOperation invocationOperation)
+ {
+ if (argumentValueOperation is not IDelegateCreationOperation delegateCreation ||
+ delegateCreation.Target is not IAnonymousFunctionOperation lambdaOperation ||
+ lambdaOperation.Body is not IBlockOperation blockOperation)
+ {
+ return;
+ }
+
+ // Flag if there are multiple meaningful statements
+ if (CountStatements(blockOperation) > 1)
+ {
+ context.ReportDiagnostic(invocationOperation.CreateDiagnostic(Rule));
+ }
+ }
+
+ private static int CountStatements(IBlockOperation blockOperation)
+ {
+ int statementCount = 0;
+ foreach (IOperation operation in blockOperation.Operations)
+ {
+ // Skip implicit return/labeled operations.
+ // Implicit returns don't represent user code.
+ // Implicit labeled operations seem to be created for lambdas only under VB. But we don't do a language check.
+ // TODO: Should we bail-out for any implicit operation?
+ if (operation is IReturnOperation or ILabeledOperation && operation.IsImplicit)
+ {
+ continue;
+ }
+
+ // Skip empty statements
+ if (operation is IEmptyOperation)
+ {
+ continue;
+ }
+
+ // If we have a nested block operation, we add the count of the statements within it. Otherwise,
+ // we increment by one.
+ statementCount += operation is IBlockOperation nestedBlock ? CountStatements(nestedBlock) : 1;
+ }
+
+ return statementCount;
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/AssertionArgsShouldBePassedInCorrectOrderAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/AssertionArgsShouldBePassedInCorrectOrderAnalyzer.cs
index 1e08e3ee1f..1c10b1624f 100644
--- a/src/Analyzers/MSTest.Analyzers/AssertionArgsShouldBePassedInCorrectOrderAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/AssertionArgsShouldBePassedInCorrectOrderAnalyzer.cs
@@ -60,7 +60,10 @@ public override void Initialize(AnalysisContext context)
}
private static bool IsConstant(IArgumentOperation argumentOperation)
- => argumentOperation.Value.WalkDownConversion().ConstantValue.HasValue;
+ {
+ IOperation operation = argumentOperation.Value.WalkDownConversion();
+ return operation.ConstantValue.HasValue || operation.Kind == OperationKind.TypeOf;
+ }
private static void AnalyzeOperation(OperationAnalysisContext context, INamedTypeSymbol assertSymbol)
{
@@ -74,31 +77,50 @@ private static void AnalyzeOperation(OperationAnalysisContext context, INamedTyp
return;
}
+ // If "expected" is already constant, we shouldn't report any diagnostics and we don't care about "actual".
+ if (IsConstant(expectedArgument))
+ {
+ return;
+ }
+
// If the actual value is a constant or a literal and expected is not, then the arguments are in the wrong order.
// Note that we don't report if both are literals or constants, as there is no real fix for this.
// If both are literals or constants, the assert will always pass or always fail.
- if (IsConstant(actualArgument) && !IsConstant(expectedArgument))
+ if (IsConstant(actualArgument))
{
context.ReportDiagnostic(invocationOperation.CreateDiagnostic(Rule));
return;
}
- if (actualArgument.Value.GetReferencedMemberOrLocalOrParameter() is { } actualSymbol)
+ ISymbol? actualSymbol = actualArgument.Value.GetReferencedMemberOrLocalOrParameter();
+ ISymbol? expectedSymbol = expectedArgument.Value.GetReferencedMemberOrLocalOrParameter();
+ bool actualIsExpected = actualSymbol is not null && NameIsExpected(actualSymbol.Name);
+ bool expectedIsExpected = expectedSymbol is not null && NameIsExpected(expectedSymbol.Name);
+
+ // If both arguments have names indicating it's "expected", don't report a diagnostic.
+ if (actualIsExpected && !expectedIsExpected)
{
- if (actualSymbol.Name.StartsWith("expected", StringComparison.Ordinal)
- || actualSymbol.Name.StartsWith("_expected", StringComparison.Ordinal)
- || actualSymbol.Name.StartsWith("Expected", StringComparison.Ordinal))
- {
- context.ReportDiagnostic(invocationOperation.CreateDiagnostic(Rule));
- return;
- }
+ context.ReportDiagnostic(invocationOperation.CreateDiagnostic(Rule));
+ return;
}
- if (expectedArgument.Value.GetReferencedMemberOrLocalOrParameter() is { } expectedSymbol
- && expectedSymbol.Name.StartsWith("actual", StringComparison.Ordinal))
+ bool expectedIsActual = expectedSymbol is not null && NameIsActual(expectedSymbol.Name);
+ bool actualIsActual = actualSymbol is not null && NameIsActual(actualSymbol.Name);
+
+ // If both arguments have names indicating it's "actual", don't report a diagnostic.
+ if (expectedIsActual && !actualIsActual)
{
context.ReportDiagnostic(invocationOperation.CreateDiagnostic(Rule));
+ return;
}
+
+ static bool NameIsExpected(string name)
+ => name.StartsWith("expected", StringComparison.Ordinal) ||
+ name.StartsWith("_expected", StringComparison.Ordinal) ||
+ name.StartsWith("Expected", StringComparison.Ordinal);
+
+ static bool NameIsActual(string name)
+ => name.StartsWith("actual", StringComparison.Ordinal);
}
private static (IArgumentOperation ExpectedArgument, IArgumentOperation ActualArgument)? FindExpectedAndActualArguments(IInvocationOperation invocationOperation)
diff --git a/src/Analyzers/MSTest.Analyzers/AvoidAssertFormatParametersAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/AvoidAssertFormatParametersAnalyzer.cs
new file mode 100644
index 0000000000..3440e5e8e2
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/AvoidAssertFormatParametersAnalyzer.cs
@@ -0,0 +1,91 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.CodeAnalysis.Operations;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0053: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class AvoidAssertFormatParametersAnalyzer : DiagnosticAnalyzer
+{
+ private static readonly LocalizableResourceString Title = new(nameof(Resources.AvoidAssertFormatParametersTitle), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.AvoidAssertFormatParametersMessageFormat), Resources.ResourceManager, typeof(Resources));
+
+ internal static readonly DiagnosticDescriptor Rule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.AvoidAssertFormatParametersRuleId,
+ Title,
+ MessageFormat,
+ null,
+ Category.Usage,
+ DiagnosticSeverity.Warning,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; }
+ = ImmutableArray.Create(Rule);
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ if (context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingAssert, out INamedTypeSymbol? assertSymbol) &&
+ context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingCollectionAssert, out INamedTypeSymbol? collectionAssertSymbol) &&
+ context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingStringAssert, out INamedTypeSymbol? stringAssertSymbol))
+ {
+ context.RegisterOperationAction(context => AnalyzeOperation(context, assertSymbol, collectionAssertSymbol, stringAssertSymbol), OperationKind.Invocation);
+ }
+ });
+ }
+
+ private static void AnalyzeOperation(OperationAnalysisContext context, INamedTypeSymbol? assertSymbol, INamedTypeSymbol? collectionAssertSymbol, INamedTypeSymbol? stringAssertSymbol)
+ {
+ var invocationOperation = (IInvocationOperation)context.Operation;
+
+ // Check if this is a call to Assert, CollectionAssert, or StringAssert
+ if (!IsTargetAssertType(invocationOperation.TargetMethod.ContainingType, assertSymbol, collectionAssertSymbol, stringAssertSymbol))
+ {
+ return;
+ }
+
+ // Check if this method call has the format string + params pattern
+ if (HasFormatStringParamsPattern(invocationOperation))
+ {
+ context.ReportDiagnostic(invocationOperation.CreateDiagnostic(Rule, invocationOperation.TargetMethod.Name));
+ }
+ }
+
+ private static bool IsTargetAssertType(INamedTypeSymbol? containingType, INamedTypeSymbol? assertSymbol, INamedTypeSymbol? collectionAssertSymbol, INamedTypeSymbol? stringAssertSymbol)
+ => SymbolEqualityComparer.Default.Equals(containingType, assertSymbol) ||
+ SymbolEqualityComparer.Default.Equals(containingType, collectionAssertSymbol) ||
+ SymbolEqualityComparer.Default.Equals(containingType, stringAssertSymbol);
+
+ private static bool HasFormatStringParamsPattern(IInvocationOperation invocationOperation)
+ {
+ ImmutableArray parameters = invocationOperation.TargetMethod.Parameters;
+
+ // Look for the pattern: ([other params...], string message, params object[] parameters)
+ // The last two parameters should be string message and params object[]
+ return parameters.Length >= 2 &&
+ parameters[parameters.Length - 1] is { IsParams: true, Type: IArrayTypeSymbol { ElementType.SpecialType: SpecialType.System_Object } } &&
+ invocationOperation.Arguments.SingleOrDefault(arg => arg.Parameter?.Ordinal == parameters.Length - 1) is not IArgumentOperation
+ {
+ ArgumentKind: ArgumentKind.ParamArray,
+ Value: IArrayCreationOperation { Initializer.ElementValues.Length: 0 }
+ };
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/AvoidExpectedExceptionAttributeAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/AvoidExpectedExceptionAttributeAnalyzer.cs
index 57d24831f3..df19f7f3e5 100644
--- a/src/Analyzers/MSTest.Analyzers/AvoidExpectedExceptionAttributeAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/AvoidExpectedExceptionAttributeAnalyzer.cs
@@ -30,7 +30,7 @@ public sealed class AvoidExpectedExceptionAttributeAnalyzer : DiagnosticAnalyzer
MessageFormat,
Description,
Category.Design,
- DiagnosticSeverity.Info,
+ DiagnosticSeverity.Warning,
isEnabledByDefault: true);
///
diff --git a/src/Analyzers/MSTest.Analyzers/AvoidExplicitDynamicDataSourceTypeAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/AvoidExplicitDynamicDataSourceTypeAnalyzer.cs
new file mode 100644
index 0000000000..43aad409d3
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/AvoidExplicitDynamicDataSourceTypeAnalyzer.cs
@@ -0,0 +1,75 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0052: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class AvoidExplicitDynamicDataSourceTypeAnalyzer : DiagnosticAnalyzer
+{
+ private static readonly LocalizableResourceString Title = new(nameof(Resources.AvoidExplicitDynamicDataSourceTypeTitle), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.AvoidExplicitDynamicDataSourceTypeMessageFormat), Resources.ResourceManager, typeof(Resources));
+
+ internal static readonly DiagnosticDescriptor PreferAutoDetectRule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.AvoidExplicitDynamicDataSourceTypeRuleId,
+ Title,
+ MessageFormat,
+ null,
+ Category.Usage,
+ DiagnosticSeverity.Warning,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; } = ImmutableArray.Create(PreferAutoDetectRule);
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ if (context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingDynamicDataAttribute, out INamedTypeSymbol? dynamicDataAttributeSymbol)
+ && context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingDynamicDataSourceType, out INamedTypeSymbol? dynamicDataSourceTypeSymbol))
+ {
+ context.RegisterSymbolAction(
+ context => AnalyzeSymbol(context, dynamicDataAttributeSymbol, dynamicDataSourceTypeSymbol),
+ SymbolKind.Method);
+ }
+ });
+ }
+
+ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbol dynamicDataAttributeSymbol, INamedTypeSymbol dynamicDataSourceTypeSymbol)
+ {
+ var methodSymbol = (IMethodSymbol)context.Symbol;
+
+ foreach (AttributeData methodAttribute in methodSymbol.GetAttributes())
+ {
+ if (SymbolEqualityComparer.Default.Equals(methodAttribute.AttributeClass, dynamicDataAttributeSymbol))
+ {
+ AnalyzeAttribute(context, methodAttribute, dynamicDataSourceTypeSymbol);
+ }
+ }
+ }
+
+ private static void AnalyzeAttribute(SymbolAnalysisContext context, AttributeData attributeData, INamedTypeSymbol dynamicDataSourceTypeSymbol)
+ {
+ if (attributeData.ApplicationSyntaxReference?.GetSyntax(context.CancellationToken) is { } syntax &&
+ attributeData.AttributeConstructor?.Parameters.Any(p => dynamicDataSourceTypeSymbol.Equals(p.Type, SymbolEqualityComparer.Default)) == true)
+ {
+ context.ReportDiagnostic(syntax.CreateDiagnostic(PreferAutoDetectRule));
+ }
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/AvoidUsingAssertsInAsyncVoidContextAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/AvoidUsingAssertsInAsyncVoidContextAnalyzer.cs
index 4a6c6e1a7a..76ecac2e37 100644
--- a/src/Analyzers/MSTest.Analyzers/AvoidUsingAssertsInAsyncVoidContextAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/AvoidUsingAssertsInAsyncVoidContextAnalyzer.cs
@@ -46,23 +46,38 @@ public override void Initialize(AnalysisContext context)
{
Compilation compilation = context.Compilation;
INamedTypeSymbol? assertSymbol = compilation.GetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingAssert);
- if (assertSymbol is not null)
+ INamedTypeSymbol? stringAssertSymbol = compilation.GetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingStringAssert);
+ INamedTypeSymbol? collectionAssertSymbol = compilation.GetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingCollectionAssert);
+
+ if (assertSymbol is not null || stringAssertSymbol is not null || collectionAssertSymbol is not null)
{
- context.RegisterOperationAction(context => AnalyzeOperation(context, assertSymbol), OperationKind.Invocation);
+ context.RegisterOperationAction(context => AnalyzeOperation(context, assertSymbol, stringAssertSymbol, collectionAssertSymbol), OperationKind.Invocation);
}
});
}
- private static void AnalyzeOperation(OperationAnalysisContext context, INamedTypeSymbol assertSymbol)
+ private static void AnalyzeOperation(
+ OperationAnalysisContext context,
+ INamedTypeSymbol? assertSymbol,
+ INamedTypeSymbol? stringAssertSymbol,
+ INamedTypeSymbol? collectionAssertSymbol)
{
var operation = (IInvocationOperation)context.Operation;
- if (!IsAsyncVoidContext(operation, context.ContainingSymbol) ||
- !assertSymbol.Equals(operation.TargetMethod.ContainingType, SymbolEqualityComparer.Default))
+ if (!IsAsyncVoidContext(operation, context.ContainingSymbol))
{
return;
}
- context.ReportDiagnostic(operation.CreateDiagnostic(Rule));
+ INamedTypeSymbol targetType = operation.TargetMethod.ContainingType;
+ bool isAssertType =
+ targetType.Equals(assertSymbol, SymbolEqualityComparer.Default) ||
+ targetType.Equals(stringAssertSymbol, SymbolEqualityComparer.Default) ||
+ targetType.Equals(collectionAssertSymbol, SymbolEqualityComparer.Default);
+
+ if (isAssertType)
+ {
+ context.ReportDiagnostic(operation.CreateDiagnostic(Rule));
+ }
}
private static bool IsAsyncVoidContext(IInvocationOperation invocationOperation, ISymbol containingSymbol)
diff --git a/src/Analyzers/MSTest.Analyzers/DataRowShouldBeValidAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/DataRowShouldBeValidAnalyzer.cs
index 1742bf29c9..44d17d7c2d 100644
--- a/src/Analyzers/MSTest.Analyzers/DataRowShouldBeValidAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/DataRowShouldBeValidAnalyzer.cs
@@ -91,7 +91,7 @@ private static void AnalyzeSymbol(
var methodSymbol = (IMethodSymbol)context.Symbol;
bool isTestMethod = false;
- List dataRowAttributes = new();
+ List dataRowAttributes = [];
foreach (AttributeData methodAttribute in methodSymbol.GetAttributes())
{
// Current method should be a test method or should inherit from the TestMethod attribute.
@@ -184,7 +184,7 @@ private static void AnalyzeAttribute(SymbolAnalysisContext context, AttributeDat
AnalyzeGenericMethod(context, dataRowSyntax, methodSymbol, constructorArguments);
// Check constructor argument types match method parameter types.
- List<(int ConstructorArgumentIndex, int MethodParameterIndex)> typeMismatchIndices = new();
+ List<(string ParameterName, string ExpectedType, string ActualType)> typeMismatches = [];
for (int currentArgumentIndex = 0; currentArgumentIndex < constructorArguments.Length; currentArgumentIndex++)
{
// Null is considered as default for non-nullable types.
@@ -205,16 +205,34 @@ private static void AnalyzeAttribute(SymbolAnalysisContext context, AttributeDat
if (argumentType is not null && !argumentType.IsAssignableTo(paramType, context.Compilation))
{
- typeMismatchIndices.Add((currentArgumentIndex, Math.Min(currentArgumentIndex, methodSymbol.Parameters.Length - 1)));
+ int parameterIndex = Math.Min(currentArgumentIndex, methodSymbol.Parameters.Length - 1);
+ string parameterName = methodSymbol.Parameters[parameterIndex].Name;
+ string expectedType = paramType.ToDisplayString();
+ string actualType = argumentType.ToDisplayString();
+ typeMismatches.Add((parameterName, expectedType, actualType));
}
}
// Report diagnostics if there's any type mismatch.
- if (typeMismatchIndices.Count > 0)
+ if (typeMismatches.Count > 0)
{
+ // Format all mismatches into a single message
+ string mismatchMessage;
+ if (typeMismatches.Count == 1)
+ {
+ (string parameterName, string expectedType, string actualType) = typeMismatches[0];
+ mismatchMessage = string.Format(CultureInfo.InvariantCulture, Resources.DataRowShouldBeValidMessageFormat_ParameterMismatch, parameterName, expectedType, actualType);
+ }
+ else
+ {
+ IEnumerable mismatchDescriptions = typeMismatches.Select(m =>
+ string.Format(CultureInfo.InvariantCulture, Resources.DataRowShouldBeValidMessageFormat_ParameterMismatch, m.ParameterName, m.ExpectedType, m.ActualType));
+ mismatchMessage = string.Join("; ", mismatchDescriptions);
+ }
+
context.ReportDiagnostic(dataRowSyntax.CreateDiagnostic(
ArgumentTypeMismatchRule,
- string.Join(", ", typeMismatchIndices)));
+ mismatchMessage));
}
}
diff --git a/src/Analyzers/MSTest.Analyzers/DoNotUseShadowingAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/DoNotUseShadowingAnalyzer.cs
index e326e9cff5..99f2fca090 100644
--- a/src/Analyzers/MSTest.Analyzers/DoNotUseShadowingAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/DoNotUseShadowingAnalyzer.cs
@@ -64,7 +64,7 @@ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbo
Dictionary> membersByName = GetBaseMembers(namedTypeSymbol);
foreach (ISymbol member in namedTypeSymbol.GetMembers())
{
- foreach (ISymbol baseMember in membersByName.GetValueOrDefault(member.Name, new List()))
+ foreach (ISymbol baseMember in membersByName.GetValueOrDefault(member.Name, []))
{
// Check if the member is shadowing a base class member
if (IsMemberShadowing(member, baseMember))
@@ -77,7 +77,7 @@ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbo
private static Dictionary> GetBaseMembers(INamedTypeSymbol namedTypeSymbol)
{
- Dictionary> membersByName = new();
+ Dictionary> membersByName = [];
INamedTypeSymbol? currentType = namedTypeSymbol.BaseType;
while (currentType is not null)
{
@@ -91,7 +91,7 @@ private static Dictionary> GetBaseMembers(INamedTypeSymbol
if (!membersByName.TryGetValue(member.Name, out List? members))
{
- members = new List();
+ members = [];
membersByName[member.Name] = members;
}
diff --git a/src/Analyzers/MSTest.Analyzers/DuplicateDataRowAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/DuplicateDataRowAnalyzer.cs
index b4c2596fe9..6d560c76c1 100644
--- a/src/Analyzers/MSTest.Analyzers/DuplicateDataRowAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/DuplicateDataRowAnalyzer.cs
@@ -126,6 +126,22 @@ private static bool AreTypedConstantEquals(TypedConstant typedConstant1, TypedCo
return TypedConstantArrayComparer.Instance.Equals(typedConstant1.Values, typedConstant2.Values);
}
+ if (typedConstant1.Kind == TypedConstantKind.Primitive)
+ {
+ // object.Equals(float.NegativeZero, 0.0f) will return true.
+ // But we don't want to consider it as "equal" as the test case can yield different results.
+ // Behavior difference between zero and negative zero can be observed via BitConverter or ToString.
+ if (typedConstant1.Value is float float1 && typedConstant2.Value is float float2)
+ {
+ // BitConverter.SingleToInt32Bits isn't available on netstandard2.0, so we use BitConverter.GetBytes instead.
+ return BitConverter.GetBytes(float1).SequenceEqual(BitConverter.GetBytes(float2));
+ }
+ else if (typedConstant1.Value is double double1 && typedConstant2.Value is double double2)
+ {
+ return BitConverter.DoubleToInt64Bits(double1) == BitConverter.DoubleToInt64Bits(double2);
+ }
+ }
+
// At this point, the type is matching and the kind is matching and is not array.
return object.Equals(typedConstant1.Value, typedConstant2.Value);
}
diff --git a/src/Analyzers/MSTest.Analyzers/DynamicDataShouldBeValidAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/DynamicDataShouldBeValidAnalyzer.cs
index d5af2d294f..3c3d1a3e1e 100644
--- a/src/Analyzers/MSTest.Analyzers/DynamicDataShouldBeValidAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/DynamicDataShouldBeValidAnalyzer.cs
@@ -21,6 +21,7 @@ public sealed class DynamicDataShouldBeValidAnalyzer : DiagnosticAnalyzer
private const int DynamicDataSourceTypeProperty = 0;
private const int DynamicDataSourceTypeMethod = 1;
private const int DynamicDataSourceTypeAutoDetect = 2;
+ private const int DynamicDataSourceTypeField = 3;
private static readonly LocalizableResourceString Title = new(nameof(Resources.DynamicDataShouldBeValidTitle), Resources.ResourceManager, typeof(Resources));
private static readonly LocalizableResourceString Description = new(nameof(Resources.DynamicDataShouldBeValidDescription), Resources.ResourceManager, typeof(Resources));
@@ -47,8 +48,11 @@ public sealed class DynamicDataShouldBeValidAnalyzer : DiagnosticAnalyzer
internal static readonly DiagnosticDescriptor SourceTypeMethodRule = NotTestMethodRule
.WithMessage(new(nameof(Resources.DynamicDataShouldBeValidMessageFormat_SourceTypeMethod), Resources.ResourceManager, typeof(Resources)));
+ internal static readonly DiagnosticDescriptor SourceTypeFieldRule = NotTestMethodRule
+ .WithMessage(new(nameof(Resources.DynamicDataShouldBeValidMessageFormat_SourceTypeField), Resources.ResourceManager, typeof(Resources)));
+
internal static readonly DiagnosticDescriptor SourceTypeNotPropertyOrMethodRule = NotTestMethodRule
- .WithMessage(new(nameof(Resources.DynamicDataShouldBeValidMessageFormat_SourceTypeNotPropertyOrMethod), Resources.ResourceManager, typeof(Resources)));
+ .WithMessage(new(nameof(Resources.DynamicDataShouldBeValidMessageFormat_SourceTypeNotPropertyMethodOrField), Resources.ResourceManager, typeof(Resources)));
internal static readonly DiagnosticDescriptor MemberMethodRule = NotTestMethodRule
.WithMessage(new(nameof(Resources.DynamicDataShouldBeValidMessageFormat_MemberMethod), Resources.ResourceManager, typeof(Resources)));
@@ -184,6 +188,7 @@ private static void AnalyzeDataSource(SymbolAnalysisContext context, AttributeDa
{
string? memberName = null;
int dataSourceType = DynamicDataSourceTypeAutoDetect;
+ int argumentsCount = 0;
INamedTypeSymbol declaringType = methodSymbol.ContainingType;
foreach (TypedConstant argument in attributeData.ConstructorArguments)
{
@@ -202,10 +207,15 @@ private static void AnalyzeDataSource(SymbolAnalysisContext context, AttributeDa
{
dataSourceType = dataType;
}
- else if (argument.Value is INamedTypeSymbol type)
+ else if (argument.Kind != TypedConstantKind.Array &&
+ argument.Value is INamedTypeSymbol type)
{
declaringType = type;
}
+ else if (argument.Kind == TypedConstantKind.Array)
+ {
+ argumentsCount = argument.Values.Length;
+ }
}
// If the member name is not available, bail out.
@@ -250,6 +260,15 @@ private static void AnalyzeDataSource(SymbolAnalysisContext context, AttributeDa
return;
}
+ break;
+ case SymbolKind.Field:
+ // If the member is a field and the data source type is not set to field or auto detect, report a diagnostic.
+ if (dataSourceType is not (DynamicDataSourceTypeField or DynamicDataSourceTypeAutoDetect))
+ {
+ context.ReportDiagnostic(attributeSyntax.CreateDiagnostic(SourceTypeFieldRule, declaringType.Name, memberName));
+ return;
+ }
+
break;
default:
context.ReportDiagnostic(attributeSyntax.CreateDiagnostic(SourceTypeNotPropertyOrMethodRule, declaringType.Name, memberName));
@@ -264,7 +283,7 @@ private static void AnalyzeDataSource(SymbolAnalysisContext context, AttributeDa
if (member.Kind == SymbolKind.Method
&& member is IMethodSymbol method
- && (method.IsGenericMethod || method.Parameters.Length != 0))
+ && (method.IsGenericMethod || method.Parameters.Length != argumentsCount))
{
context.ReportDiagnostic(attributeSyntax.CreateDiagnostic(DataMemberSignatureRule, declaringType.Name, memberName));
return;
@@ -272,7 +291,7 @@ private static void AnalyzeDataSource(SymbolAnalysisContext context, AttributeDa
// Validate member return type.
ITypeSymbol? memberTypeSymbol = member.GetMemberType();
- if (memberTypeSymbol is IArrayTypeSymbol arrayType)
+ if (memberTypeSymbol is IArrayTypeSymbol)
{
return;
}
diff --git a/src/Analyzers/MSTest.Analyzers/FlowTestContextCancellationTokenAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/FlowTestContextCancellationTokenAnalyzer.cs
new file mode 100644
index 0000000000..388b893439
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/FlowTestContextCancellationTokenAnalyzer.cs
@@ -0,0 +1,259 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.CodeAnalysis.Operations;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0049: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class FlowTestContextCancellationTokenAnalyzer : DiagnosticAnalyzer
+{
+ private static readonly LocalizableResourceString Title = new(nameof(Resources.FlowTestContextCancellationTokenTitle), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString Description = new(nameof(Resources.FlowTestContextCancellationTokenDescription), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.FlowTestContextCancellationTokenMessageFormat), Resources.ResourceManager, typeof(Resources));
+
+ internal const string TestContextMemberNamePropertyKey = nameof(TestContextMemberNamePropertyKey);
+ internal const string CancellationTokenParameterNamePropertyKey = nameof(CancellationTokenParameterNamePropertyKey);
+
+ internal static readonly DiagnosticDescriptor FlowTestContextCancellationTokenRule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.FlowTestContextCancellationTokenRuleId,
+ Title,
+ MessageFormat,
+ Description,
+ Category.Usage,
+ DiagnosticSeverity.Info,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; }
+ = ImmutableArray.Create(FlowTestContextCancellationTokenRule);
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ // Get the required symbols
+ if (!context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.SystemThreadingCancellationToken, out INamedTypeSymbol? cancellationTokenSymbol) ||
+ !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestContext, out INamedTypeSymbol? testContextSymbol) ||
+ !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingClassCleanupAttribute, out INamedTypeSymbol? classCleanupAttributeSymbol) ||
+ !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingAssemblyCleanupAttribute, out INamedTypeSymbol? assemblyCleanupAttributeSymbol) ||
+ !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestMethodAttribute, out INamedTypeSymbol? testMethodAttributeSymbol))
+ {
+ return;
+ }
+
+ context.RegisterOperationAction(
+ context => AnalyzeInvocation(context, cancellationTokenSymbol, testContextSymbol, classCleanupAttributeSymbol, assemblyCleanupAttributeSymbol, testMethodAttributeSymbol),
+ OperationKind.Invocation);
+ });
+ }
+
+ private static void AnalyzeInvocation(
+ OperationAnalysisContext context,
+ INamedTypeSymbol cancellationTokenSymbol,
+ INamedTypeSymbol testContextSymbol,
+ INamedTypeSymbol classCleanupAttributeSymbol,
+ INamedTypeSymbol assemblyCleanupAttributeSymbol,
+ INamedTypeSymbol testMethodAttributeSymbol)
+ {
+ var invocationOperation = (IInvocationOperation)context.Operation;
+ IMethodSymbol method = invocationOperation.TargetMethod;
+
+ // Check if we're in a context where a TestContext is already available or could be made available.
+ if (!HasOrCouldHaveTestContextInScope(context.ContainingSymbol, testContextSymbol, classCleanupAttributeSymbol, assemblyCleanupAttributeSymbol, testMethodAttributeSymbol, out string? testContextMemberNameInScope, out TestContextState? testContextState))
+ {
+ return;
+ }
+
+ IParameterSymbol? cancellationTokenParameter = method.Parameters.LastOrDefault(p => SymbolEqualityComparer.Default.Equals(p.Type, cancellationTokenSymbol));
+ bool parameterHasDefaultValue = cancellationTokenParameter is not null && cancellationTokenParameter.HasExplicitDefaultValue;
+ if (cancellationTokenParameter is not null && !parameterHasDefaultValue)
+ {
+ // The called method has a required CancellationToken parameter.
+ // No need to report diagnostic, even if user is explicitly passing CancellationToken.None or default(CancellationToken).
+ // We consider it "intentional" if the user is passing it explicitly.
+ return;
+ }
+
+ if (parameterHasDefaultValue &&
+ invocationOperation.Arguments.FirstOrDefault(arg => SymbolEqualityComparer.Default.Equals(arg.Parameter, cancellationTokenParameter))?.ArgumentKind != ArgumentKind.Explicit)
+ {
+ // The called method has an optional CancellationToken parameter, but it was not explicitly provided. So we report a diagnostic.
+ // We also pass non-null cancellationTokenParameterName if the codefix should use named argument.
+ string? cancellationTokenParameterName = null;
+ int indexOfParameterCorrespondingToLastExplicitArgument = invocationOperation.Arguments.LastOrDefault(arg => arg.ArgumentKind == ArgumentKind.Explicit)?.Parameter?.Ordinal ?? -1;
+ if (cancellationTokenParameter!.Ordinal != indexOfParameterCorrespondingToLastExplicitArgument + 1)
+ {
+ cancellationTokenParameterName = cancellationTokenParameter.Name;
+ }
+
+ context.ReportDiagnostic(invocationOperation.Syntax.CreateDiagnostic(FlowTestContextCancellationTokenRule, properties: GetPropertiesBag(testContextMemberNameInScope, testContextState, cancellationTokenParameterName)));
+ return;
+ }
+
+ // At this point, we want to only continue analysis if and only if the called method didn't have a CancellationToken parameter.
+ // In this case, we look for other overloads that might accept a CancellationToken.
+ if (cancellationTokenParameter is null &&
+ GetCancellationTokenParameterOfOverloadWithCancellationToken(method, cancellationTokenSymbol) is { } cancellationTokenParameterFromDifferentOverload)
+ {
+ string? cancellationTokenParameterName = null;
+ int indexOfParameterCorrespondingToLastExplicitArgument = invocationOperation.Arguments.LastOrDefault(arg => arg.ArgumentKind == ArgumentKind.Explicit)?.Parameter?.Ordinal ?? -1;
+
+ if (cancellationTokenParameterFromDifferentOverload.Ordinal != indexOfParameterCorrespondingToLastExplicitArgument + 1)
+ {
+ cancellationTokenParameterName = cancellationTokenParameterFromDifferentOverload.Name;
+ }
+
+ context.ReportDiagnostic(invocationOperation.Syntax.CreateDiagnostic(FlowTestContextCancellationTokenRule, properties: GetPropertiesBag(testContextMemberNameInScope, testContextState, cancellationTokenParameterName)));
+ }
+
+ static ImmutableDictionary GetPropertiesBag(string? testContextMemberNameInScope, TestContextState? testContextState, string? cancellationTokenParameterName)
+ {
+ ImmutableDictionary properties = ImmutableDictionary.Empty;
+ properties = testContextMemberNameInScope is not null
+ ? properties.Add(TestContextMemberNamePropertyKey, testContextMemberNameInScope)
+ : properties.Add(nameof(TestContextState), testContextState.ToString());
+
+ if (cancellationTokenParameterName is not null)
+ {
+ properties = properties.Add(CancellationTokenParameterNamePropertyKey, cancellationTokenParameterName);
+ }
+
+ return properties;
+ }
+ }
+
+ private static IParameterSymbol? GetCancellationTokenParameterOfOverloadWithCancellationToken(IMethodSymbol method, INamedTypeSymbol cancellationTokenSymbol)
+ {
+ // Look for overloads of the same method that accept CancellationToken
+ INamedTypeSymbol containingType = method.ContainingType;
+
+ foreach (ISymbol member in containingType.GetMembers(method.Name))
+ {
+ if (member is IMethodSymbol candidateMethod &&
+ candidateMethod.MethodKind == method.MethodKind &&
+ candidateMethod.IsStatic == method.IsStatic)
+ {
+ // Check if this method has the same parameters plus a CancellationToken
+ if (GetCancellationTokenParameterIfCandidateIsValid(method, candidateMethod, cancellationTokenSymbol) is { } parameter)
+ {
+ return parameter;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private static bool HasOrCouldHaveTestContextInScope(
+ ISymbol containingSymbol,
+ INamedTypeSymbol testContextSymbol,
+ INamedTypeSymbol classCleanupAttributeSymbol,
+ INamedTypeSymbol assemblyCleanupAttributeSymbol,
+ INamedTypeSymbol testMethodAttributeSymbol,
+ out string? testContextMemberNameInScope,
+ [NotNullWhen(true)] out TestContextState? testContextState)
+ {
+ testContextMemberNameInScope = null;
+ testContextState = null;
+
+ if (containingSymbol is not IMethodSymbol method)
+ {
+ return false;
+ }
+
+ // We have a TestContext in scope (as a parameter)
+ if (method.Parameters.FirstOrDefault(p => testContextSymbol.Equals(p.Type, SymbolEqualityComparer.Default)) is { } testContextParameter)
+ {
+ testContextMemberNameInScope = testContextParameter.Name;
+ testContextState = TestContextState.InScope;
+ return true;
+ }
+
+ // We have a TestContext in scope (as a field or property)
+ if (!method.IsStatic &&
+ method.ContainingType.GetMembers().FirstOrDefault(
+ m => !m.IsStatic && m.Kind is SymbolKind.Field or SymbolKind.Property && testContextSymbol.Equals(m.GetMemberType(), SymbolEqualityComparer.Default)) is { } testContextMember)
+ {
+ testContextMember = (testContextMember as IFieldSymbol)?.AssociatedSymbol ?? testContextMember;
+ // Workaround https://github.com/dotnet/roslyn/issues/70208
+ // https://github.com/dotnet/roslyn/blob/f25ae8e02a91169f45060951a168b233ad588ed3/src/Compilers/CSharp/Portable/Symbols/Synthesized/GeneratedNameKind.cs#L47
+ testContextMemberNameInScope = testContextMember.Name.StartsWith('<') && testContextMember.Name.EndsWith(">P", StringComparison.Ordinal)
+ ? testContextMember.Name.Substring(1, testContextMember.Name.Length - 3)
+ : testContextMember.Name;
+ testContextState = TestContextState.InScope;
+ return true;
+ }
+
+ // If we have AssemblyCleanup or ClassCleanup with no parameters, then we *could* have a TestContext in scope.
+ // Note that assembly/class cleanup method can optionally have a TestContext parameter, but it is not required.
+ // Also, for test methods (parameterized or not), we *could* have a TestContext in scope by adding a property to the test class (or injecting it via constructor).
+ ImmutableArray attributes = method.GetAttributes();
+ foreach (AttributeData attribute in attributes)
+ {
+ if (method.Parameters.IsEmpty &&
+ (classCleanupAttributeSymbol.Equals(attribute.AttributeClass, SymbolEqualityComparer.Default) ||
+ assemblyCleanupAttributeSymbol.Equals(attribute.AttributeClass, SymbolEqualityComparer.Default)))
+ {
+ testContextState = TestContextState.CouldBeInScopeAsParameter;
+ return true;
+ }
+
+ if (attribute.AttributeClass?.Inherits(testMethodAttributeSymbol) == true)
+ {
+ testContextState = TestContextState.CouldBeInScopeAsProperty;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private static IParameterSymbol? GetCancellationTokenParameterIfCandidateIsValid(IMethodSymbol originalMethod, IMethodSymbol candidateMethod, INamedTypeSymbol cancellationTokenSymbol)
+ {
+ // Check if the candidate method has all the same parameters as the original method plus a CancellationToken
+ ImmutableArray originalParams = originalMethod.Parameters;
+ ImmutableArray candidateParams = candidateMethod.Parameters;
+
+ // The candidate should have one more parameter (the CancellationToken)
+ if (candidateParams.Length != originalParams.Length + 1)
+ {
+ return null;
+ }
+
+ // Check if all original parameters match the first N parameters of the candidate
+ for (int i = 0; i < originalParams.Length; i++)
+ {
+ if (!SymbolEqualityComparer.Default.Equals(originalParams[i].Type, candidateParams[i].Type))
+ {
+ return null;
+ }
+ }
+
+ // Check if the last parameter is CancellationToken
+ IParameterSymbol lastParam = candidateParams[candidateParams.Length - 1];
+ return SymbolEqualityComparer.Default.Equals(lastParam.Type, cancellationTokenSymbol) ? lastParam : null;
+ }
+
+ internal enum TestContextState
+ {
+ InScope,
+ CouldBeInScopeAsParameter,
+ CouldBeInScopeAsProperty,
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/GlobalTestFixtureShouldBeValidAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/GlobalTestFixtureShouldBeValidAnalyzer.cs
new file mode 100644
index 0000000000..f7b4a5c8a8
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/GlobalTestFixtureShouldBeValidAnalyzer.cs
@@ -0,0 +1,74 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0050: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class GlobalTestFixtureShouldBeValidAnalyzer : DiagnosticAnalyzer
+{
+ internal static readonly DiagnosticDescriptor Rule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.GlobalTestFixtureShouldBeValidRuleId,
+ new LocalizableResourceString(nameof(Resources.GlobalTestFixtureShouldBeValidTitle), Resources.ResourceManager, typeof(Resources)),
+ new LocalizableResourceString(nameof(Resources.GlobalTestFixtureShouldBeValidMessageFormat), Resources.ResourceManager, typeof(Resources)),
+ new LocalizableResourceString(nameof(Resources.GlobalTestFixtureShouldBeValidDescription), Resources.ResourceManager, typeof(Resources)),
+ Category.Usage,
+ DiagnosticSeverity.Error,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; } = ImmutableArray.Create(Rule);
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ if (context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestContext, out INamedTypeSymbol? testContextSymbol) &&
+ context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestClassAttribute, out INamedTypeSymbol? testClassAttributeSymbol) &&
+ context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingGlobalTestInitializeAttribute, out INamedTypeSymbol? globalTestInitializeAttributeSymbol) &&
+ context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingGlobalTestCleanupAttribute, out INamedTypeSymbol? globalTestCleanupAttributeSymbol))
+ {
+ INamedTypeSymbol? taskSymbol = context.Compilation.GetOrCreateTypeByMetadataName(WellKnownTypeNames.SystemThreadingTasksTask);
+ INamedTypeSymbol? valueTaskSymbol = context.Compilation.GetOrCreateTypeByMetadataName(WellKnownTypeNames.SystemThreadingTasksValueTask);
+
+ context.RegisterSymbolAction(
+ context => AnalyzeSymbol(context, globalTestInitializeAttributeSymbol, globalTestCleanupAttributeSymbol, taskSymbol, valueTaskSymbol, testContextSymbol, testClassAttributeSymbol),
+ SymbolKind.Method);
+ }
+ });
+ }
+
+ private static void AnalyzeSymbol(
+ SymbolAnalysisContext context,
+ INamedTypeSymbol globalTestInitializeAttributeSymbol,
+ INamedTypeSymbol globalTestCleanupAttributeSymbol,
+ INamedTypeSymbol? taskSymbol,
+ INamedTypeSymbol? valueTaskSymbol,
+ INamedTypeSymbol testContextSymbol,
+ INamedTypeSymbol testClassAttributeSymbol)
+ {
+ var methodSymbol = (IMethodSymbol)context.Symbol;
+
+ if ((methodSymbol.HasAttribute(globalTestInitializeAttributeSymbol) || methodSymbol.HasAttribute(globalTestCleanupAttributeSymbol)) &&
+ !methodSymbol.HasValidFixtureMethodSignature(taskSymbol, valueTaskSymbol, canDiscoverInternals: false, shouldBeStatic: true,
+ allowGenericType: false, FixtureParameterMode.MustHaveTestContext, testContextSymbol, testClassAttributeSymbol, fixtureAllowInheritedTestClass: false, out _))
+ {
+ context.ReportDiagnostic(methodSymbol.CreateDiagnostic(Rule, methodSymbol.Name));
+ }
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/Helpers/DiagnosticDescriptorHelper.cs b/src/Analyzers/MSTest.Analyzers/Helpers/DiagnosticDescriptorHelper.cs
index c719ef7aae..9e09a07c97 100644
--- a/src/Analyzers/MSTest.Analyzers/Helpers/DiagnosticDescriptorHelper.cs
+++ b/src/Analyzers/MSTest.Analyzers/Helpers/DiagnosticDescriptorHelper.cs
@@ -31,7 +31,7 @@ public static DiagnosticDescriptor Create(
public static DiagnosticDescriptor WithMessage(this DiagnosticDescriptor diagnosticDescriptor, LocalizableResourceString messageFormat)
=> new(diagnosticDescriptor.Id, diagnosticDescriptor.Title, messageFormat, diagnosticDescriptor.Category, diagnosticDescriptor.DefaultSeverity,
- diagnosticDescriptor.IsEnabledByDefault, diagnosticDescriptor.Description, diagnosticDescriptor.HelpLinkUri, diagnosticDescriptor.CustomTags.ToArray());
+ diagnosticDescriptor.IsEnabledByDefault, diagnosticDescriptor.Description, diagnosticDescriptor.HelpLinkUri, [.. diagnosticDescriptor.CustomTags]);
private static string[] CreateCustomTags(bool isReportedAtCompilationEnd, bool escalateToErrorInRecommended, bool disableInAllMode, string[] customTags)
{
diff --git a/src/Analyzers/MSTest.Analyzers/Helpers/DiagnosticIds.cs b/src/Analyzers/MSTest.Analyzers/Helpers/DiagnosticIds.cs
index 66be4e9c99..14b7dc9b8e 100644
--- a/src/Analyzers/MSTest.Analyzers/Helpers/DiagnosticIds.cs
+++ b/src/Analyzers/MSTest.Analyzers/Helpers/DiagnosticIds.cs
@@ -48,4 +48,16 @@ internal static class DiagnosticIds
public const string UseConditionBaseWithTestClassRuleId = "MSTEST0041";
public const string DuplicateDataRowRuleId = "MSTEST0042";
public const string UseRetryWithTestMethodRuleId = "MSTEST0043";
+ public const string PreferTestMethodOverDataTestMethodRuleId = "MSTEST0044";
+ public const string UseCooperativeCancellationForTimeoutRuleId = "MSTEST0045";
+ public const string StringAssertToAssertRuleId = "MSTEST0046";
+ public const string UnusedParameterSuppressorRuleId = "MSTEST0047";
+ public const string TestContextPropertyUsageRuleId = "MSTEST0048";
+ public const string FlowTestContextCancellationTokenRuleId = "MSTEST0049";
+ public const string GlobalTestFixtureShouldBeValidRuleId = "MSTEST0050";
+ public const string AssertThrowsShouldContainSingleStatementRuleId = "MSTEST0051";
+ public const string AvoidExplicitDynamicDataSourceTypeRuleId = "MSTEST0052";
+ public const string AvoidAssertFormatParametersRuleId = "MSTEST0053";
+ public const string UseCancellationTokenPropertyRuleId = "MSTEST0054";
+ public const string IgnoreStringMethodReturnValueRuleId = "MSTEST0055";
}
diff --git a/src/Analyzers/MSTest.Analyzers/Helpers/WellKnownTypeNames.cs b/src/Analyzers/MSTest.Analyzers/Helpers/WellKnownTypeNames.cs
index bb71ecd3a5..9afefad540 100644
--- a/src/Analyzers/MSTest.Analyzers/Helpers/WellKnownTypeNames.cs
+++ b/src/Analyzers/MSTest.Analyzers/Helpers/WellKnownTypeNames.cs
@@ -18,6 +18,7 @@ internal static class WellKnownTypeNames
public const string MicrosoftVisualStudioTestToolsUnitTestingCssIterationAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.CssIterationAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingCssProjectStructureAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.CssProjectStructureAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingDataRowAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.DataRowAttribute";
+ public const string MicrosoftVisualStudioTestToolsUnitTestingDataTestMethodAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.DataTestMethodAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingDeploymentItemAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingDescriptionAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingDiscoverInternalsAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.DiscoverInternalsAttribute";
@@ -26,6 +27,8 @@ internal static class WellKnownTypeNames
public const string MicrosoftVisualStudioTestToolsUnitTestingDynamicDataSourceType = "Microsoft.VisualStudio.TestTools.UnitTesting.DynamicDataSourceType";
public const string MicrosoftVisualStudioTestToolsUnitTestingExpectedExceptionAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingExpectedExceptionBaseAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionBaseAttribute";
+ public const string MicrosoftVisualStudioTestToolsUnitTestingGlobalTestCleanupAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.GlobalTestCleanupAttribute";
+ public const string MicrosoftVisualStudioTestToolsUnitTestingGlobalTestInitializeAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.GlobalTestInitializeAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingIgnoreAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.IgnoreAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingInheritanceBehavior = "Microsoft.VisualStudio.TestTools.UnitTesting.InheritanceBehavior";
public const string MicrosoftVisualStudioTestToolsUnitTestingOwnerAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.OwnerAttribute";
@@ -39,6 +42,7 @@ internal static class WellKnownTypeNames
public const string MicrosoftVisualStudioTestToolsUnitTestingTestInitializeAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingTestMethodAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingTestPropertyAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute";
+ public const string MicrosoftVisualStudioTestToolsUnitTestingTimeoutAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.TimeoutAttribute";
public const string MicrosoftVisualStudioTestToolsUnitTestingWorkItemAttribute = "Microsoft.VisualStudio.TestTools.UnitTesting.WorkItemAttribute";
public const string System = "System";
@@ -48,6 +52,9 @@ internal static class WellKnownTypeNames
public const string SystemIAsyncDisposable = "System.IAsyncDisposable";
public const string SystemIDisposable = "System.IDisposable";
public const string SystemReflectionMethodInfo = "System.Reflection.MethodInfo";
+ public const string SystemString = "System.String";
+ public const string SystemThreadingCancellationToken = "System.Threading.CancellationToken";
+ public const string SystemThreadingCancellationTokenSource = "System.Threading.CancellationTokenSource";
public const string SystemThreadingTasksTask = "System.Threading.Tasks.Task";
public const string SystemThreadingTasksTask1 = "System.Threading.Tasks.Task`1";
public const string SystemThreadingTasksValueTask = "System.Threading.Tasks.ValueTask";
diff --git a/src/Analyzers/MSTest.Analyzers/IgnoreStringMethodReturnValueAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/IgnoreStringMethodReturnValueAnalyzer.cs
new file mode 100644
index 0000000000..7e3d0d49c7
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/IgnoreStringMethodReturnValueAnalyzer.cs
@@ -0,0 +1,78 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.CodeAnalysis.Operations;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0055: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class IgnoreStringMethodReturnValueAnalyzer : DiagnosticAnalyzer
+{
+ private static readonly string[] StringMethodsToCheck = ["Contains", "StartsWith", "EndsWith"];
+
+ private static readonly LocalizableResourceString Title = new(nameof(Resources.IgnoreStringMethodReturnValueTitle), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.IgnoreStringMethodReturnValueMessageFormat), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString Description = new(nameof(Resources.IgnoreStringMethodReturnValueDescription), Resources.ResourceManager, typeof(Resources));
+
+ internal static readonly DiagnosticDescriptor Rule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.IgnoreStringMethodReturnValueRuleId,
+ Title,
+ MessageFormat,
+ Description,
+ Category.Usage,
+ DiagnosticSeverity.Warning,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; }
+ = ImmutableArray.Create(Rule);
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+ context.RegisterOperationAction(AnalyzeExpressionStatement, OperationKind.ExpressionStatement);
+ }
+
+ private static void AnalyzeExpressionStatement(OperationAnalysisContext context)
+ {
+ var expressionStatementOperation = (IExpressionStatementOperation)context.Operation;
+
+ if (expressionStatementOperation.Operation is not IInvocationOperation invocationOperation)
+ {
+ return;
+ }
+
+ // Check if this is a call to a string method we care about
+ if (!IsStringMethodCall(invocationOperation))
+ {
+ return;
+ }
+
+ string methodName = invocationOperation.TargetMethod.Name;
+ context.ReportDiagnostic(invocationOperation.CreateDiagnostic(Rule, methodName));
+ }
+
+ private static bool IsStringMethodCall(IInvocationOperation invocationOperation)
+ {
+ if (invocationOperation.TargetMethod.ContainingType?.SpecialType != SpecialType.System_String)
+ {
+ return false;
+ }
+
+ string methodName = invocationOperation.TargetMethod.Name;
+ return StringMethodsToCheck.Contains(methodName);
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/MSTest.Analyzers.csproj b/src/Analyzers/MSTest.Analyzers/MSTest.Analyzers.csproj
index 217d171183..cc4ad8f545 100644
--- a/src/Analyzers/MSTest.Analyzers/MSTest.Analyzers.csproj
+++ b/src/Analyzers/MSTest.Analyzers/MSTest.Analyzers.csproj
@@ -24,9 +24,4 @@
-
-
-
-
-
diff --git a/src/Analyzers/MSTest.Analyzers/NonNullableReferenceNotInitializedSuppressor.cs b/src/Analyzers/MSTest.Analyzers/NonNullableReferenceNotInitializedSuppressor.cs
index ccb701e511..0b866fc77a 100644
--- a/src/Analyzers/MSTest.Analyzers/NonNullableReferenceNotInitializedSuppressor.cs
+++ b/src/Analyzers/MSTest.Analyzers/NonNullableReferenceNotInitializedSuppressor.cs
@@ -41,19 +41,28 @@ public override void ReportSuppressions(SuppressionAnalysisContext context)
foreach (Diagnostic diagnostic in context.ReportedDiagnostics)
{
- // The diagnostic is reported on the test method
- if (diagnostic.Location.SourceTree is not { } tree)
+ // The main diagnostic location isn't always pointing to the TestContext property.
+ // It can point to the constructor.
+ // The additional locations will have the right thing.
+ // See https://github.com/dotnet/roslyn/issues/79188#issuecomment-3017087900.
+ // It was an intentional design to include the additional locations specifically for DiagnosticSuppressor scenarios.
+ // So it is safe to use AdditionalLocations here. We are not relying on an implementation detail here.
+ // However, we still fallback to diagnostic.Location just in case Roslyn regresses the AdditionalLocations behavior.
+ // Such regression happened in the past in Roslyn.
+ // See https://github.com/dotnet/roslyn/issues/66037
+ Location location = diagnostic.AdditionalLocations.Count >= 1 ? diagnostic.AdditionalLocations[0] : diagnostic.Location;
+ if (location.SourceTree is not { } tree)
{
continue;
}
SyntaxNode root = tree.GetRoot(context.CancellationToken);
- SyntaxNode node = root.FindNode(diagnostic.Location.SourceSpan, getInnermostNodeForTie: true);
+ SyntaxNode node = root.FindNode(location.SourceSpan, getInnermostNodeForTie: true);
SemanticModel semanticModel = context.GetSemanticModel(tree);
ISymbol? declaredSymbol = semanticModel.GetDeclaredSymbol(node, context.CancellationToken);
if (declaredSymbol is IPropertySymbol property
- && string.Equals(property.Name, "TestContext", StringComparison.OrdinalIgnoreCase)
+ && string.Equals(property.Name, "TestContext", StringComparison.Ordinal)
&& SymbolEqualityComparer.Default.Equals(testContextSymbol, property.GetMethod?.ReturnType)
&& property.ContainingType.GetAttributes().Any(attr => attr.AttributeClass.Inherits(testClassAttributeSymbol)))
{
diff --git a/src/Analyzers/MSTest.Analyzers/PreferAssertFailOverAlwaysFalseConditionsAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/PreferAssertFailOverAlwaysFalseConditionsAnalyzer.cs
index d06a95c547..ba18ade548 100644
--- a/src/Analyzers/MSTest.Analyzers/PreferAssertFailOverAlwaysFalseConditionsAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/PreferAssertFailOverAlwaysFalseConditionsAnalyzer.cs
@@ -127,7 +127,7 @@ private static bool IsNotNullableType(IArgumentOperation valueArgumentOperation)
{
ITypeSymbol? valueArgType = valueArgumentOperation.Value.GetReferencedMemberOrLocalOrParameter().GetReferencedMemberOrLocalOrParameter();
return valueArgType is not null
- && valueArgType.NullableAnnotation == NullableAnnotation.NotAnnotated
+ && valueArgType.IsValueType
&& valueArgType.OriginalDefinition.SpecialType != SpecialType.System_Nullable_T;
}
diff --git a/src/Analyzers/MSTest.Analyzers/PreferTestMethodOverDataTestMethodAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/PreferTestMethodOverDataTestMethodAnalyzer.cs
new file mode 100644
index 0000000000..faf8481797
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/PreferTestMethodOverDataTestMethodAnalyzer.cs
@@ -0,0 +1,79 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0044: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class PreferTestMethodOverDataTestMethodAnalyzer : DiagnosticAnalyzer
+{
+ internal static readonly DiagnosticDescriptor PreferTestMethodOverDataTestMethodRule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.PreferTestMethodOverDataTestMethodRuleId,
+ title: new LocalizableResourceString(nameof(Resources.PreferTestMethodOverDataTestMethodAnalyzerTitle), Resources.ResourceManager, typeof(Resources)),
+ messageFormat: new LocalizableResourceString(nameof(Resources.PreferTestMethodOverDataTestMethodAnalyzerMessageFormat), Resources.ResourceManager, typeof(Resources)),
+ description: new LocalizableResourceString(nameof(Resources.PreferTestMethodOverDataTestMethodAnalyzerDescription), Resources.ResourceManager, typeof(Resources)),
+ Category.Design,
+ DiagnosticSeverity.Warning,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; }
+ = ImmutableArray.Create(PreferTestMethodOverDataTestMethodRule);
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ if (!context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingDataTestMethodAttribute, out INamedTypeSymbol? dataTestMethodAttributeSymbol))
+ {
+ return;
+ }
+
+ context.RegisterSymbolAction(context => AnalyzeMethod(context, dataTestMethodAttributeSymbol), SymbolKind.Method);
+ context.RegisterSymbolAction(context => AnalyzeNamedType(context, dataTestMethodAttributeSymbol), SymbolKind.NamedType);
+ });
+ }
+
+ private static void AnalyzeMethod(SymbolAnalysisContext context, INamedTypeSymbol dataTestMethodAttributeSymbol)
+ {
+ var methodSymbol = (IMethodSymbol)context.Symbol;
+
+ foreach (AttributeData attribute in methodSymbol.GetAttributes())
+ {
+ // Only report on direct application of DataTestMethodAttribute, not inherited ones
+ if (SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, dataTestMethodAttributeSymbol))
+ {
+ if (attribute.ApplicationSyntaxReference is { } syntaxRef)
+ {
+ context.ReportDiagnostic(syntaxRef.CreateDiagnostic(PreferTestMethodOverDataTestMethodRule, context.CancellationToken));
+ }
+ }
+ }
+ }
+
+ private static void AnalyzeNamedType(SymbolAnalysisContext context, INamedTypeSymbol dataTestMethodAttributeSymbol)
+ {
+ var namedTypeSymbol = (INamedTypeSymbol)context.Symbol;
+
+ // Check if this type directly inherits from DataTestMethodAttribute
+ if (dataTestMethodAttributeSymbol.Equals(namedTypeSymbol.BaseType, SymbolEqualityComparer.Default))
+ {
+ context.ReportDiagnostic(namedTypeSymbol.CreateDiagnostic(PreferTestMethodOverDataTestMethodRule));
+ }
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/PublicAPI.Shipped.txt b/src/Analyzers/MSTest.Analyzers/PublicAPI.Shipped.txt
deleted file mode 100644
index 56544445f9..0000000000
--- a/src/Analyzers/MSTest.Analyzers/PublicAPI.Shipped.txt
+++ /dev/null
@@ -1,157 +0,0 @@
-#nullable enable
-MSTest.Analyzers.AssemblyCleanupShouldBeValidAnalyzer
-MSTest.Analyzers.AssemblyCleanupShouldBeValidAnalyzer.AssemblyCleanupShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.AssemblyInitializeShouldBeValidAnalyzer
-MSTest.Analyzers.AssemblyInitializeShouldBeValidAnalyzer.AssemblyInitializeShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.AssertionArgsShouldAvoidConditionalAccessAnalyzer
-MSTest.Analyzers.AssertionArgsShouldAvoidConditionalAccessAnalyzer.AssertionArgsShouldAvoidConditionalAccessAnalyzer() -> void
-MSTest.Analyzers.AssertionArgsShouldBePassedInCorrectOrderAnalyzer
-MSTest.Analyzers.AssertionArgsShouldBePassedInCorrectOrderAnalyzer.AssertionArgsShouldBePassedInCorrectOrderAnalyzer() -> void
-MSTest.Analyzers.AvoidAssertAreSameWithValueTypesAnalyzer
-MSTest.Analyzers.AvoidAssertAreSameWithValueTypesAnalyzer.AvoidAssertAreSameWithValueTypesAnalyzer() -> void
-MSTest.Analyzers.AvoidExpectedExceptionAttributeAnalyzer
-MSTest.Analyzers.AvoidExpectedExceptionAttributeAnalyzer.AvoidExpectedExceptionAttributeAnalyzer() -> void
-MSTest.Analyzers.AvoidUsingAssertsInAsyncVoidContextAnalyzer
-MSTest.Analyzers.AvoidUsingAssertsInAsyncVoidContextAnalyzer.AvoidUsingAssertsInAsyncVoidContextAnalyzer() -> void
-MSTest.Analyzers.ClassCleanupShouldBeValidAnalyzer
-MSTest.Analyzers.ClassCleanupShouldBeValidAnalyzer.ClassCleanupShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.ClassInitializeShouldBeValidAnalyzer
-MSTest.Analyzers.ClassInitializeShouldBeValidAnalyzer.ClassInitializeShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.DataRowShouldBeValidAnalyzer
-MSTest.Analyzers.DataRowShouldBeValidAnalyzer.DataRowShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.DoNotNegateBooleanAssertionAnalyzer
-MSTest.Analyzers.DoNotNegateBooleanAssertionAnalyzer.DoNotNegateBooleanAssertionAnalyzer() -> void
-MSTest.Analyzers.DoNotStoreStaticTestContextAnalyzer
-MSTest.Analyzers.DoNotStoreStaticTestContextAnalyzer.DoNotStoreStaticTestContextAnalyzer() -> void
-MSTest.Analyzers.DoNotUseShadowingAnalyzer
-MSTest.Analyzers.DoNotUseShadowingAnalyzer.DoNotUseShadowingAnalyzer() -> void
-MSTest.Analyzers.DoNotUseSystemDescriptionAttributeAnalyzer
-MSTest.Analyzers.DoNotUseSystemDescriptionAttributeAnalyzer.DoNotUseSystemDescriptionAttributeAnalyzer() -> void
-MSTest.Analyzers.DynamicDataShouldBeValidAnalyzer
-MSTest.Analyzers.DynamicDataShouldBeValidAnalyzer.DynamicDataShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.NonNullableReferenceNotInitializedSuppressor
-MSTest.Analyzers.NonNullableReferenceNotInitializedSuppressor.NonNullableReferenceNotInitializedSuppressor() -> void
-MSTest.Analyzers.PreferAssertFailOverAlwaysFalseConditionsAnalyzer
-MSTest.Analyzers.PreferAssertFailOverAlwaysFalseConditionsAnalyzer.PreferAssertFailOverAlwaysFalseConditionsAnalyzer() -> void
-MSTest.Analyzers.PreferConstructorOverTestInitializeAnalyzer
-MSTest.Analyzers.PreferConstructorOverTestInitializeAnalyzer.PreferConstructorOverTestInitializeAnalyzer() -> void
-MSTest.Analyzers.PreferDisposeOverTestCleanupAnalyzer
-MSTest.Analyzers.PreferDisposeOverTestCleanupAnalyzer.PreferDisposeOverTestCleanupAnalyzer() -> void
-MSTest.Analyzers.PreferTestCleanupOverDisposeAnalyzer
-MSTest.Analyzers.PreferTestCleanupOverDisposeAnalyzer.PreferTestCleanupOverDisposeAnalyzer() -> void
-MSTest.Analyzers.PreferTestInitializeOverConstructorAnalyzer
-MSTest.Analyzers.PreferTestInitializeOverConstructorAnalyzer.PreferTestInitializeOverConstructorAnalyzer() -> void
-MSTest.Analyzers.PublicMethodShouldBeTestMethodAnalyzer
-MSTest.Analyzers.PublicMethodShouldBeTestMethodAnalyzer.PublicMethodShouldBeTestMethodAnalyzer() -> void
-MSTest.Analyzers.PublicTypeShouldBeTestClassAnalyzer
-MSTest.Analyzers.PublicTypeShouldBeTestClassAnalyzer.PublicTypeShouldBeTestClassAnalyzer() -> void
-MSTest.Analyzers.ReviewAlwaysTrueAssertConditionAnalyzer
-MSTest.Analyzers.ReviewAlwaysTrueAssertConditionAnalyzer.ReviewAlwaysTrueAssertConditionAnalyzer() -> void
-MSTest.Analyzers.TestClassShouldBeValidAnalyzer
-MSTest.Analyzers.TestClassShouldBeValidAnalyzer.TestClassShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.TestClassShouldHaveTestMethodAnalyzer
-MSTest.Analyzers.TestClassShouldHaveTestMethodAnalyzer.TestClassShouldHaveTestMethodAnalyzer() -> void
-MSTest.Analyzers.TestCleanupShouldBeValidAnalyzer
-MSTest.Analyzers.TestCleanupShouldBeValidAnalyzer.TestCleanupShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.TestContextShouldBeValidAnalyzer
-MSTest.Analyzers.TestContextShouldBeValidAnalyzer.TestContextShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.TestInitializeShouldBeValidAnalyzer
-MSTest.Analyzers.TestInitializeShouldBeValidAnalyzer.TestInitializeShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.TestMethodShouldBeValidAnalyzer
-MSTest.Analyzers.TestMethodShouldBeValidAnalyzer.TestMethodShouldBeValidAnalyzer() -> void
-MSTest.Analyzers.TestMethodShouldNotBeIgnoredAnalyzer
-MSTest.Analyzers.TestMethodShouldNotBeIgnoredAnalyzer.TestMethodShouldNotBeIgnoredAnalyzer() -> void
-MSTest.Analyzers.TypeContainingTestMethodShouldBeATestClassAnalyzer
-MSTest.Analyzers.TypeContainingTestMethodShouldBeATestClassAnalyzer.TypeContainingTestMethodShouldBeATestClassAnalyzer() -> void
-MSTest.Analyzers.UseAsyncSuffixTestFixtureMethodSuppressor
-MSTest.Analyzers.UseAsyncSuffixTestFixtureMethodSuppressor.UseAsyncSuffixTestFixtureMethodSuppressor() -> void
-MSTest.Analyzers.UseAsyncSuffixTestMethodSuppressor
-MSTest.Analyzers.UseAsyncSuffixTestMethodSuppressor.UseAsyncSuffixTestMethodSuppressor() -> void
-MSTest.Analyzers.UseAttributeOnTestMethodAnalyzer
-MSTest.Analyzers.UseAttributeOnTestMethodAnalyzer.UseAttributeOnTestMethodAnalyzer() -> void
-MSTest.Analyzers.UseClassCleanupBehaviorEndOfClassAnalyzer
-MSTest.Analyzers.UseClassCleanupBehaviorEndOfClassAnalyzer.UseClassCleanupBehaviorEndOfClassAnalyzer() -> void
-MSTest.Analyzers.UseConditionBaseWithTestClassAnalyzer
-MSTest.Analyzers.UseConditionBaseWithTestClassAnalyzer.UseConditionBaseWithTestClassAnalyzer() -> void
-MSTest.Analyzers.UseDeploymentItemWithTestMethodOrTestClassAnalyzer
-MSTest.Analyzers.UseDeploymentItemWithTestMethodOrTestClassAnalyzer.UseDeploymentItemWithTestMethodOrTestClassAnalyzer() -> void
-MSTest.Analyzers.UseParallelizeAttributeAnalyzer
-MSTest.Analyzers.UseParallelizeAttributeAnalyzer.UseParallelizeAttributeAnalyzer() -> void
-override MSTest.Analyzers.AssemblyCleanupShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.AssemblyCleanupShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.AssemblyInitializeShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.AssemblyInitializeShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.AssertionArgsShouldAvoidConditionalAccessAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.AssertionArgsShouldAvoidConditionalAccessAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.AssertionArgsShouldBePassedInCorrectOrderAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.AssertionArgsShouldBePassedInCorrectOrderAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.AvoidAssertAreSameWithValueTypesAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.AvoidAssertAreSameWithValueTypesAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.AvoidExpectedExceptionAttributeAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.AvoidExpectedExceptionAttributeAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.AvoidUsingAssertsInAsyncVoidContextAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.AvoidUsingAssertsInAsyncVoidContextAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.ClassCleanupShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.ClassCleanupShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.ClassInitializeShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.ClassInitializeShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.DataRowShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.DataRowShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.DoNotNegateBooleanAssertionAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.DoNotNegateBooleanAssertionAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.DoNotStoreStaticTestContextAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.DoNotStoreStaticTestContextAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.DoNotUseShadowingAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.DoNotUseShadowingAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.DoNotUseSystemDescriptionAttributeAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.DoNotUseSystemDescriptionAttributeAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.DynamicDataShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.DynamicDataShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.NonNullableReferenceNotInitializedSuppressor.ReportSuppressions(Microsoft.CodeAnalysis.Diagnostics.SuppressionAnalysisContext context) -> void
-override MSTest.Analyzers.NonNullableReferenceNotInitializedSuppressor.SupportedSuppressions.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.PreferAssertFailOverAlwaysFalseConditionsAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.PreferAssertFailOverAlwaysFalseConditionsAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.PreferConstructorOverTestInitializeAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.PreferConstructorOverTestInitializeAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.PreferDisposeOverTestCleanupAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.PreferDisposeOverTestCleanupAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.PreferTestCleanupOverDisposeAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.PreferTestCleanupOverDisposeAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.PreferTestInitializeOverConstructorAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.PreferTestInitializeOverConstructorAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.PublicMethodShouldBeTestMethodAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.PublicMethodShouldBeTestMethodAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.PublicTypeShouldBeTestClassAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.PublicTypeShouldBeTestClassAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.ReviewAlwaysTrueAssertConditionAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.ReviewAlwaysTrueAssertConditionAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.TestClassShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.TestClassShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.TestClassShouldHaveTestMethodAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.TestClassShouldHaveTestMethodAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.TestCleanupShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.TestCleanupShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.TestContextShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.TestContextShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.TestInitializeShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.TestInitializeShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.TestMethodShouldBeValidAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.TestMethodShouldBeValidAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.TestMethodShouldNotBeIgnoredAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.TestMethodShouldNotBeIgnoredAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.TypeContainingTestMethodShouldBeATestClassAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.TypeContainingTestMethodShouldBeATestClassAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.UseAsyncSuffixTestFixtureMethodSuppressor.ReportSuppressions(Microsoft.CodeAnalysis.Diagnostics.SuppressionAnalysisContext context) -> void
-override MSTest.Analyzers.UseAsyncSuffixTestFixtureMethodSuppressor.SupportedSuppressions.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.UseAsyncSuffixTestMethodSuppressor.ReportSuppressions(Microsoft.CodeAnalysis.Diagnostics.SuppressionAnalysisContext context) -> void
-override MSTest.Analyzers.UseAsyncSuffixTestMethodSuppressor.SupportedSuppressions.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.UseAttributeOnTestMethodAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.UseAttributeOnTestMethodAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.UseClassCleanupBehaviorEndOfClassAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.UseClassCleanupBehaviorEndOfClassAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.UseConditionBaseWithTestClassAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.UseConditionBaseWithTestClassAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.UseDeploymentItemWithTestMethodOrTestClassAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.UseDeploymentItemWithTestMethodOrTestClassAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.UseParallelizeAttributeAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.UseParallelizeAttributeAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
diff --git a/src/Analyzers/MSTest.Analyzers/PublicAPI.Unshipped.txt b/src/Analyzers/MSTest.Analyzers/PublicAPI.Unshipped.txt
deleted file mode 100644
index ffbf652d09..0000000000
--- a/src/Analyzers/MSTest.Analyzers/PublicAPI.Unshipped.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-#nullable enable
-MSTest.Analyzers.DuplicateDataRowAnalyzer
-MSTest.Analyzers.DuplicateDataRowAnalyzer.DuplicateDataRowAnalyzer() -> void
-MSTest.Analyzers.UseRetryWithTestMethodAnalyzer
-MSTest.Analyzers.UseRetryWithTestMethodAnalyzer.UseRetryWithTestMethodAnalyzer() -> void
-override MSTest.Analyzers.DuplicateDataRowAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.DuplicateDataRowAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
-override MSTest.Analyzers.UseRetryWithTestMethodAnalyzer.Initialize(Microsoft.CodeAnalysis.Diagnostics.AnalysisContext! context) -> void
-override MSTest.Analyzers.UseRetryWithTestMethodAnalyzer.SupportedDiagnostics.get -> System.Collections.Immutable.ImmutableArray
diff --git a/src/Analyzers/MSTest.Analyzers/PublicTypeShouldBeTestClassAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/PublicTypeShouldBeTestClassAnalyzer.cs
index ae2e53ad40..4fc74ef968 100644
--- a/src/Analyzers/MSTest.Analyzers/PublicTypeShouldBeTestClassAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/PublicTypeShouldBeTestClassAnalyzer.cs
@@ -63,7 +63,7 @@ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbo
}
// The type is public, ensure this is a test class.
- if (!namedTypeSymbol.GetAttributes().Any(attr => SymbolEqualityComparer.Default.Equals(attr.AttributeClass, testClassAttributeSymbol)))
+ if (!namedTypeSymbol.GetAttributes().Any(attr => attr.AttributeClass.Inherits(testClassAttributeSymbol)))
{
context.ReportDiagnostic(namedTypeSymbol.CreateDiagnostic(Rule, namedTypeSymbol.Name));
}
diff --git a/src/Analyzers/MSTest.Analyzers/Resources.Designer.cs b/src/Analyzers/MSTest.Analyzers/Resources.Designer.cs
deleted file mode 100644
index 46445d28d4..0000000000
--- a/src/Analyzers/MSTest.Analyzers/Resources.Designer.cs
+++ /dev/null
@@ -1,1216 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace MSTest.Analyzers {
- using System;
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources() {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager {
- get {
- if (object.ReferenceEquals(resourceMan, null)) {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MSTest.Analyzers.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture {
- get {
- return resourceCulture;
- }
- set {
- resourceCulture = value;
- }
- }
-
- ///
- /// Looks up a localized string similar to Methods marked with '[AssemblyCleanup]' should follow the following layout to be valid:
- ///-it can't be declared on a generic class
- ///-it should be 'public'
- ///-it should be 'static'
- ///-it should not be 'async void'
- ///-it should not be a special method (finalizer, operator...).
- ///-it should not be generic
- ///-it should either not take any parameter, or take a single parameter of type 'TestContext'
- ///-return type should be 'void', 'Task' or 'ValueTask'
- ///
- ///The type declaring these methods should also respect the followi [rest of string was truncated]";.
- ///
- internal static string AssemblyCleanupShouldBeValidDescription {
- get {
- return ResourceManager.GetString("AssemblyCleanupShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to AssemblyCleanup method '{0}' signature is invalid.
- ///
- internal static string AssemblyCleanupShouldBeValidMessageFormat {
- get {
- return ResourceManager.GetString("AssemblyCleanupShouldBeValidMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to AssemblyCleanup methods should have valid layout.
- ///
- internal static string AssemblyCleanupShouldBeValidTitle {
- get {
- return ResourceManager.GetString("AssemblyCleanupShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Methods marked with '[AssemblyInitialize]' should follow the following layout to be valid:
- ///-it can't be declared on a generic class
- ///-it should be 'public'
- ///-it should be 'static'
- ///-it should not be 'async void'
- ///-it should not be a special method (finalizer, operator...).
- ///-it should not be generic
- ///-it should take one parameter of type 'TestContext'
- ///-return type should be 'void', 'Task' or 'ValueTask'
- ///
- ///The type declaring these methods should also respect the following rules:
- ///-The type should be a cla [rest of string was truncated]";.
- ///
- internal static string AssemblyInitializeShouldBeValidDescription {
- get {
- return ResourceManager.GetString("AssemblyInitializeShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to AssemblyInitialize method '{0}' signature is invalid.
- ///
- internal static string AssemblyInitializeShouldBeValidMessageFormat {
- get {
- return ResourceManager.GetString("AssemblyInitializeShouldBeValidMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to AssemblyInitialize methods should have valid layout.
- ///
- internal static string AssemblyInitializeShouldBeValidTitle {
- get {
- return ResourceManager.GetString("AssemblyInitializeShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer adding an additional assertion that checks for null.
- ///
- internal static string AssertionArgsShouldAvoidConditionalAccessMessageFormat {
- get {
- return ResourceManager.GetString("AssertionArgsShouldAvoidConditionalAccessMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Avoid conditional access in assertions.
- ///
- internal static string AssertionArgsShouldAvoidConditionalAccessTitle {
- get {
- return ResourceManager.GetString("AssertionArgsShouldAvoidConditionalAccessTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to 'Assert.AreEqual', 'Assert.AreNotEqual', 'Assert.AreSame' and 'Assert.AreNotSame' expects the expected value to be passed first and the actual value to be passed as second argument..
- ///
- internal static string AssertionArgsShouldBePassedInCorrectOrderDescription {
- get {
- return ResourceManager.GetString("AssertionArgsShouldBePassedInCorrectOrderDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Assertion arguments should be passed in the correct order. 'actual' and 'expected'/'notExpected' arguments have been swapped..
- ///
- internal static string AssertionArgsShouldBePassedInCorrectOrderMessageFormat {
- get {
- return ResourceManager.GetString("AssertionArgsShouldBePassedInCorrectOrderMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Assertion arguments should be passed in the correct order.
- ///
- internal static string AssertionArgsShouldBePassedInCorrectOrderTitle {
- get {
- return ResourceManager.GetString("AssertionArgsShouldBePassedInCorrectOrderTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use 'Assert.AreEqual'/'Assert.AreNotEqual' instead of 'Assert.AreSame'/'Assert.AreNotSame' when comparing value types. Passing a value type to 'Assert.AreSame'/'Assert.AreNotSame' will be boxed (creating a new object). Because 'Assert.AreSame'/'Assert.AreNotSame' does the comparison by reference, 'Assert.AreSame' will fail when boxing happens, and 'Assert.AreNotSame' will always pass..
- ///
- internal static string AvoidAssertAreSameWithValueTypesDescription {
- get {
- return ResourceManager.GetString("AvoidAssertAreSameWithValueTypesDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use '{0}' instead of '{1}' when comparing value types.
- ///
- internal static string AvoidAssertAreSameWithValueTypesMessageFormat {
- get {
- return ResourceManager.GetString("AvoidAssertAreSameWithValueTypesMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Don't use 'Assert.AreSame' or 'Assert.AreNotSame' with value types.
- ///
- internal static string AvoidAssertAreSameWithValueTypesTitle {
- get {
- return ResourceManager.GetString("AvoidAssertAreSameWithValueTypesTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception..
- ///
- internal static string AvoidExpectedExceptionAttributeDescription {
- get {
- return ResourceManager.GetString("AvoidExpectedExceptionAttributeDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer 'Assert.ThrowsExactly/ThrowsExactlyAsync' over '[ExpectedException]'.
- ///
- internal static string AvoidExpectedExceptionAttributeMessageFormat {
- get {
- return ResourceManager.GetString("AvoidExpectedExceptionAttributeMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Avoid '[ExpectedException]'.
- ///
- internal static string AvoidExpectedExceptionAttributeTitle {
- get {
- return ResourceManager.GetString("AvoidExpectedExceptionAttributeTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process..
- ///
- internal static string AvoidUsingAssertsInAsyncVoidContextDescription {
- get {
- return ResourceManager.GetString("AvoidUsingAssertsInAsyncVoidContextDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Do not assert inside 'async void' methods, local functions, or lambdas because they may not fail the test.
- ///
- internal static string AvoidUsingAssertsInAsyncVoidContextMessageFormat {
- get {
- return ResourceManager.GetString("AvoidUsingAssertsInAsyncVoidContextMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Do not assert inside 'async void' contexts.
- ///
- internal static string AvoidUsingAssertsInAsyncVoidContextTitle {
- get {
- return ResourceManager.GetString("AvoidUsingAssertsInAsyncVoidContextTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Methods marked with '[ClassCleanup]' should follow the following layout to be valid:
- ///-it can't be declared on a generic class without the 'InheritanceBehavior' mode is set
- ///-it should be 'public'
- ///-it should be 'static'
- ///-it should not be 'async void'
- ///-it should not be a special method (finalizer, operator...).
- ///-it should not be generic
- ///-it should either not take any parameter, or take a single parameter of type 'TestContext'
- ///-return type should be 'void', 'Task' or 'ValueTask'
- ///-'InheritanceBehavior.B [rest of string was truncated]";.
- ///
- internal static string ClassCleanupShouldBeValidDescription {
- get {
- return ResourceManager.GetString("ClassCleanupShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to ClassCleanup method '{0}' signature is invalid.
- ///
- internal static string ClassCleanupShouldBeValidMessageFormat {
- get {
- return ResourceManager.GetString("ClassCleanupShouldBeValidMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to ClassCleanup methods should have valid layout.
- ///
- internal static string ClassCleanupShouldBeValidTitle {
- get {
- return ResourceManager.GetString("ClassCleanupShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Methods marked with '[ClassInitialize]' should follow the following layout to be valid:
- ///-it can't be declared on a generic class without the 'InheritanceBehavior' mode is set
- ///-it should be 'public'
- ///-it should be 'static'
- ///-it should not be 'async void'
- ///-it should not be a special method (finalizer, operator...).
- ///-it should not be generic
- ///-it should take one parameter of type 'TestContext'
- ///-return type should be 'void', 'Task' or 'ValueTask'
- ///-'InheritanceBehavior.BeforeEachDerivedClass' attribute par [rest of string was truncated]";.
- ///
- internal static string ClassInitializeShouldBeValidDescription {
- get {
- return ResourceManager.GetString("ClassInitializeShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to ClassInitialize method '{0}' signature is invalid.
- ///
- internal static string ClassInitializeShouldBeValidMessageFormat {
- get {
- return ResourceManager.GetString("ClassInitializeShouldBeValidMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to ClassInitialize methods should have valid layout.
- ///
- internal static string ClassInitializeShouldBeValidTitle {
- get {
- return ResourceManager.GetString("ClassInitializeShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to DataRow entry should have the following layout to be valid:
- ///- should only be set on a test method;
- ///- argument count should match method argument count;
- ///- argument type should match method argument type..
- ///
- internal static string DataRowShouldBeValidDescription {
- get {
- return ResourceManager.GetString("DataRowShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to DataRow argument count should match method parameter count (constructor arguments: {0}, method parameters: {1}).
- ///
- internal static string DataRowShouldBeValidMessageFormat_ArgumentCountMismatch {
- get {
- return ResourceManager.GetString("DataRowShouldBeValidMessageFormat_ArgumentCountMismatch", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to DataRow argument type should match method parameter type. Mismatches occur at indices: {0}.
- ///
- internal static string DataRowShouldBeValidMessageFormat_ArgumentTypeMismatch {
- get {
- return ResourceManager.GetString("DataRowShouldBeValidMessageFormat_ArgumentTypeMismatch", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Found two conflicting types for generic parameter '{0}'. The conflicting types are '{1}' and '{2}'..
- ///
- internal static string DataRowShouldBeValidMessageFormat_GenericTypeArgumentConflictingTypes {
- get {
- return ResourceManager.GetString("DataRowShouldBeValidMessageFormat_GenericTypeArgumentConflictingTypes", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The type of the generic parameter '{0}' could not be inferred..
- ///
- internal static string DataRowShouldBeValidMessageFormat_GenericTypeArgumentNotResolved {
- get {
- return ResourceManager.GetString("DataRowShouldBeValidMessageFormat_GenericTypeArgumentNotResolved", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to DataRow should only be set on a test method.
- ///
- internal static string DataRowShouldBeValidMessageFormat_OnTestMethod {
- get {
- return ResourceManager.GetString("DataRowShouldBeValidMessageFormat_OnTestMethod", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to DataRow should be valid.
- ///
- internal static string DataRowShouldBeValidTitle {
- get {
- return ResourceManager.GetString("DataRowShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Do not negate boolean assertions, instead use the opposite assertion.
- ///
- internal static string DoNotNegateBooleanAssertionMessageFormat {
- get {
- return ResourceManager.GetString("DoNotNegateBooleanAssertionMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Do not negate boolean assertions.
- ///
- internal static string DoNotNegateBooleanAssertionTitle {
- get {
- return ResourceManager.GetString("DoNotNegateBooleanAssertionTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Do not store TestContext in a static member.
- ///
- internal static string DoNotStoreStaticTestContextAnalyzerMessageFormat {
- get {
- return ResourceManager.GetString("DoNotStoreStaticTestContextAnalyzerMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Do not store TestContext in a static member.
- ///
- internal static string DoNotStoreStaticTestContextAnalyzerTitle {
- get {
- return ResourceManager.GetString("DoNotStoreStaticTestContextAnalyzerTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Shadowing test members could cause testing issues (such as NRE)..
- ///
- internal static string DoNotUseShadowingDescription {
- get {
- return ResourceManager.GetString("DoNotUseShadowingDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Member '{0}' already exists in the base class.
- ///
- internal static string DoNotUseShadowingMessageFormat {
- get {
- return ResourceManager.GetString("DoNotUseShadowingMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Do not use shadowing.
- ///
- internal static string DoNotUseShadowingTitle {
- get {
- return ResourceManager.GetString("DoNotUseShadowingTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to 'System.ComponentModel.DescriptionAttribute' has no effect in the context of tests and you likely wanted to use 'Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute' instead..
- ///
- internal static string DoNotUseSystemDescriptionAttributeDescription {
- get {
- return ResourceManager.GetString("DoNotUseSystemDescriptionAttributeDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Did you mean to be using 'Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute'?.
- ///
- internal static string DoNotUseSystemDescriptionAttributeMessageFormat {
- get {
- return ResourceManager.GetString("DoNotUseSystemDescriptionAttributeMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to 'System.ComponentModel.DescriptionAttribute' has no effect on test methods.
- ///
- internal static string DoNotUseSystemDescriptionAttributeTitle {
- get {
- return ResourceManager.GetString("DoNotUseSystemDescriptionAttributeTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Do not duplicate 'DataRow' attributes. This is usually a copy/paste error. The attribute indices are '{0}' and '{1}'..
- ///
- internal static string DuplicateDataRowMessageFormat {
- get {
- return ResourceManager.GetString("DuplicateDataRowMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Avoid duplicated 'DataRow' entries.
- ///
- internal static string DuplicateDataRowTitle {
- get {
- return ResourceManager.GetString("DuplicateDataRowTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to 'DynamicData' entry should have the following layout to be valid:
- ///- should only be set on a test method;
- ///- member should be defined on the type specified;
- ///- member should be a method if DynamicDataSourceType.Method is specified or a property otherwise..
- ///
- internal static string DynamicDataShouldBeValidDescription {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' data member '{0}.{1}' signature is invalid.
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_DataMemberSignature {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_DataMemberSignature", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' display name method '{0}.{1}' signature is invalid.
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_DisplayMethodSignature {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_DisplayMethodSignature", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' member '{0}.{1}' should be a method.
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_MemberMethod {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_MemberMethod", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' member '{0}.{1}' cannot be found.
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_MemberNotFound {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_MemberNotFound", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' referenced member '{0}.{1}' should return 'IEnumerable<object[]>', 'IEnumerable<Tuple>` or 'IEnumerable<ValueTuple>'.
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_MemberType {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_MemberType", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' should only be set on a test method.
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_OnTestMethod {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_OnTestMethod", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended).
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_SourceTypeMethod {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_SourceTypeMethod", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported..
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_SourceTypeNotPropertyOrMethod {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_SourceTypeNotPropertyOrMethod", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' member '{0}.{1}' is a property so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Property' (auto detect is the default when not specified explicitly, and is recommended).
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_SourceTypeProperty {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_SourceTypeProperty", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DynamicData]' member '{0}.{1}' is found more than once.
- ///
- internal static string DynamicDataShouldBeValidMessageFormat_TooManyMembers {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidMessageFormat_TooManyMembers", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to DynamicData should be valid.
- ///
- internal static string DynamicDataShouldBeValidTitle {
- get {
- return ResourceManager.GetString("DynamicDataShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assert.
- ///
- internal static string PreferAssertFailOverAlwaysFalseConditionsMessageFormat {
- get {
- return ResourceManager.GetString("PreferAssertFailOverAlwaysFalseConditionsMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use 'Assert.Fail' instead of an always-failing assert.
- ///
- internal static string PreferAssertFailOverAlwaysFalseConditionsTitle {
- get {
- return ResourceManager.GetString("PreferAssertFailOverAlwaysFalseConditionsTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer constructors over TestInitialize methods.
- ///
- internal static string PreferConstructorOverTestInitializeMessageFormat {
- get {
- return ResourceManager.GetString("PreferConstructorOverTestInitializeMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer constructors over TestInitialize methods.
- ///
- internal static string PreferConstructorOverTestInitializeTitle {
- get {
- return ResourceManager.GetString("PreferConstructorOverTestInitializeTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer 'Dispose' over TestCleanup methods.
- ///
- internal static string PreferDisposeOverTestCleanupMessageFormat {
- get {
- return ResourceManager.GetString("PreferDisposeOverTestCleanupMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer 'Dispose' over TestCleanup methods.
- ///
- internal static string PreferDisposeOverTestCleanupTitle {
- get {
- return ResourceManager.GetString("PreferDisposeOverTestCleanupTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer TestCleanup over 'Dispose' methods.
- ///
- internal static string PreferTestCleanupOverDisposeMessageFormat {
- get {
- return ResourceManager.GetString("PreferTestCleanupOverDisposeMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer TestCleanup over 'Dispose' methods.
- ///
- internal static string PreferTestCleanupOverDisposeTitle {
- get {
- return ResourceManager.GetString("PreferTestCleanupOverDisposeTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer TestInitialize methods over constructors.
- ///
- internal static string PreferTestInitializeOverConstructorMessageFormat {
- get {
- return ResourceManager.GetString("PreferTestInitializeOverConstructorMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Prefer TestInitialize methods over constructors.
- ///
- internal static string PreferTestInitializeOverConstructorTitle {
- get {
- return ResourceManager.GetString("PreferTestInitializeOverConstructorTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Public methods should be test methods (marked with `[TestMethod]`)..
- ///
- internal static string PublicMethodShouldBeTestMethodAnalyzerDescription {
- get {
- return ResourceManager.GetString("PublicMethodShouldBeTestMethodAnalyzerDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Public method '{0}' should be a test method.
- ///
- internal static string PublicMethodShouldBeTestMethodAnalyzerFormat {
- get {
- return ResourceManager.GetString("PublicMethodShouldBeTestMethodAnalyzerFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Public methods should be test methods.
- ///
- internal static string PublicMethodShouldBeTestMethodAnalyzerTitle {
- get {
- return ResourceManager.GetString("PublicMethodShouldBeTestMethodAnalyzerTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to It's considered a good practice to have only test classes marked public in a test project..
- ///
- internal static string PublicTypeShouldBeTestClassDescription {
- get {
- return ResourceManager.GetString("PublicTypeShouldBeTestClassDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Public type '{0}' should be marked with '[TestClass]' or changed to 'internal'.
- ///
- internal static string PublicTypeShouldBeTestClassMessageFormat {
- get {
- return ResourceManager.GetString("PublicTypeShouldBeTestClassMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Public types should be test classes.
- ///
- internal static string PublicTypeShouldBeTestClassTitle {
- get {
- return ResourceManager.GetString("PublicTypeShouldBeTestClassTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Review or remove the assertion as its condition is known to be always true.
- ///
- internal static string ReviewAlwaysTrueAssertConditionAnalyzerMessageFormat {
- get {
- return ResourceManager.GetString("ReviewAlwaysTrueAssertConditionAnalyzerMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Assertion condition is always true.
- ///
- internal static string ReviewAlwaysTrueAssertConditionAnalyzerTitle {
- get {
- return ResourceManager.GetString("ReviewAlwaysTrueAssertConditionAnalyzerTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test classes, classes marked with the '[TestClass]' attribute, should respect the following layout to be considered valid by MSTest:
- ///- it should be 'public' (or 'internal' if '[assembly: DiscoverInternals]' attribute is set)
- ///- it should not be 'static' (except if it contains only 'AssemblyInitialize' and/or 'AssemblyCleanup' methods)
- ///- it should not be generic..
- ///
- internal static string TestClassShouldBeValidDescription {
- get {
- return ResourceManager.GetString("TestClassShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test class '{0}' should be valid.
- ///
- internal static string TestClassShouldBeValidMessageFormat {
- get {
- return ResourceManager.GetString("TestClassShouldBeValidMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test classes should have valid layout.
- ///
- internal static string TestClassShouldBeValidTitle {
- get {
- return ResourceManager.GetString("TestClassShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test class should have at least one test method or be 'static' with method(s) marked by '[AssemblyInitialize]' and/or '[AssemblyCleanup]'..
- ///
- internal static string TestClassShouldHaveTestMethodDescription {
- get {
- return ResourceManager.GetString("TestClassShouldHaveTestMethodDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test class '{0}' should have at least one test method or be 'static' with method(s) marked by '[AssemblyInitialize]' and/or '[AssemblyCleanup]'.
- ///
- internal static string TestClassShouldHaveTestMethodMessageFormat {
- get {
- return ResourceManager.GetString("TestClassShouldHaveTestMethodMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test class should have test method.
- ///
- internal static string TestClassShouldHaveTestMethodTitle {
- get {
- return ResourceManager.GetString("TestClassShouldHaveTestMethodTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Methods marked with '[TestCleanup]' should follow the following layout to be valid:
- ///-it should be 'public'
- ///-it should not be 'abstract'
- ///-it should not be 'async void'
- ///-it should not be 'static'
- ///-it should not be a special method (finalizer, operator...).
- ///-it should not be generic
- ///-it should not take any parameter
- ///-return type should be 'void', 'Task' or 'ValueTask'
- ///
- ///The type declaring these methods should also respect the following rules:
- ///-The type should be a class
- ///-The class should be 'public' [rest of string was truncated]";.
- ///
- internal static string TestCleanupShouldBeValidDescription {
- get {
- return ResourceManager.GetString("TestCleanupShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to TestCleanup method '{0}' signature is invalid.
- ///
- internal static string TestCleanupShouldBeValidMessageFormat {
- get {
- return ResourceManager.GetString("TestCleanupShouldBeValidMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to TestCleanup method should have valid layout.
- ///
- internal static string TestCleanupShouldBeValidTitle {
- get {
- return ResourceManager.GetString("TestCleanupShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to 'TestContext' should be a non-static field or property assigned in constructor or for a property set by MSTest, it should follow the layout:
- ///- it should be 'public' regardless of whether '[assembly: DiscoverInternals]' attribute is set or not.
- ///- it should not be 'static'
- ///- it should have a setter..
- ///
- internal static string TestContextShouldBeValidDescription {
- get {
- return ResourceManager.GetString("TestContextShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Property 'TestContext' should be valid.
- ///
- internal static string TestContextShouldBeValidMessageFormat {
- get {
- return ResourceManager.GetString("TestContextShouldBeValidMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test context property should have valid layout.
- ///
- internal static string TestContextShouldBeValidTitle {
- get {
- return ResourceManager.GetString("TestContextShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Methods marked with '[TestInitialize]' should follow the following layout to be valid:
- ///-it should be 'public'
- ///-it should not be 'abstract'
- ///-it should not be 'async void'
- ///-it should not be 'static'
- ///-it should not be a special method (finalizer, operator...).
- ///-it should not be generic
- ///-it should not take any parameter
- ///-return type should be 'void', 'Task' or 'ValueTask'
- ///
- ///The type declaring these methods should also respect the following rules:
- ///-The type should be a class
- ///-The class should be 'publ [rest of string was truncated]";.
- ///
- internal static string TestInitializeShouldBeValidDescription {
- get {
- return ResourceManager.GetString("TestInitializeShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to TestInitialize method '{0}' signature is invalid.
- ///
- internal static string TestInitializeShouldBeValidMessageFormat {
- get {
- return ResourceManager.GetString("TestInitializeShouldBeValidMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to TestInitialize method should have valid layout.
- ///
- internal static string TestInitializeShouldBeValidTitle {
- get {
- return ResourceManager.GetString("TestInitializeShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test methods, methods marked with the '[TestMethod]' attribute, should respect the following layout to be considered valid by MSTest:
- ///- it should be 'public' (or 'internal' if '[assembly: DiscoverInternals]' attribute is set)
- ///- it should not be 'static'
- ///- it should may be generic as long as type parameters can be inferred and argument types are compatible
- ///- it should not be 'abstract'
- ///- return type should be 'void', 'Task' or 'ValueTask'
- ///- it should not be 'async void'
- ///- it should not be a special me [rest of string was truncated]";.
- ///
- internal static string TestMethodShouldBeValidDescription {
- get {
- return ResourceManager.GetString("TestMethodShouldBeValidDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test method '{0}' signature is invalid.
- ///
- internal static string TestMethodShouldBeValidMessageFormat {
- get {
- return ResourceManager.GetString("TestMethodShouldBeValidMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test methods should have valid layout.
- ///
- internal static string TestMethodShouldBeValidTitle {
- get {
- return ResourceManager.GetString("TestMethodShouldBeValidTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test methods should not be ignored (marked with '[Ignore]')..
- ///
- internal static string TestMethodShouldNotBeIgnoredAnalyzerDescription {
- get {
- return ResourceManager.GetString("TestMethodShouldNotBeIgnoredAnalyzerDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test method '{0}' should not be ignored.
- ///
- internal static string TestMethodShouldNotBeIgnoredAnalyzerFormat {
- get {
- return ResourceManager.GetString("TestMethodShouldNotBeIgnoredAnalyzerFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Test method should not be ignored.
- ///
- internal static string TestMethodShouldNotBeIgnoredAnalyzerTitle {
- get {
- return ResourceManager.GetString("TestMethodShouldNotBeIgnoredAnalyzerTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored..
- ///
- internal static string TypeContainingTestMethodShouldBeATestClassDescription {
- get {
- return ResourceManager.GetString("TypeContainingTestMethodShouldBeATestClassDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Class '{0}' contains test methods and should be marked with '[TestClass]'.
- ///
- internal static string TypeContainingTestMethodShouldBeATestClassMessageFormat {
- get {
- return ResourceManager.GetString("TypeContainingTestMethodShouldBeATestClassMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Type containing '[TestMethod]' should be marked with '[TestClass]'.
- ///
- internal static string TypeContainingTestMethodShouldBeATestClassTitle {
- get {
- return ResourceManager.GetString("TypeContainingTestMethodShouldBeATestClassTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Asynchronous test fixture methods do not require the 'Async' suffix.
- ///
- internal static string UseAsyncSuffixTestFixtureMethodSuppressorJustification {
- get {
- return ResourceManager.GetString("UseAsyncSuffixTestFixtureMethodSuppressorJustification", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Asynchronous test methods do not require the 'Async' suffix.
- ///
- internal static string UseAsyncSuffixTestMethodSuppressorJustification {
- get {
- return ResourceManager.GetString("UseAsyncSuffixTestMethodSuppressorJustification", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to [{0}] can only be set on methods marked with [TestMethod].
- ///
- internal static string UseAttributeOnTestMethodAnalyzerMessageFormat {
- get {
- return ResourceManager.GetString("UseAttributeOnTestMethodAnalyzerMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to [{0}] can only be set on methods marked with [TestMethod].
- ///
- internal static string UseAttributeOnTestMethodAnalyzerTitle {
- get {
- return ResourceManager.GetString("UseAttributeOnTestMethodAnalyzerTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class..
- ///
- internal static string UseClassCleanupBehaviorEndOfClassDescription {
- get {
- return ResourceManager.GetString("UseClassCleanupBehaviorEndOfClassDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use 'ClassCleanupBehavior.EndOfClass' with the '[ClassCleanup]'.
- ///
- internal static string UseClassCleanupBehaviorEndOfClassMessageFormat {
- get {
- return ResourceManager.GetString("UseClassCleanupBehaviorEndOfClassMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use 'ClassCleanupBehavior.EndOfClass' with the '[ClassCleanup]'.
- ///
- internal static string UseClassCleanupBehaviorEndOfClassTitle {
- get {
- return ResourceManager.GetString("UseClassCleanupBehaviorEndOfClassTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to The attribute '{0}' which derives from 'ConditionBaseAttribute' should be used only on classes marked with `TestClassAttribute`.
- ///
- internal static string UseConditionBaseWithTestClassMessageFormat {
- get {
- return ResourceManager.GetString("UseConditionBaseWithTestClassMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use 'ConditionBaseAttribute' on test classes.
- ///
- internal static string UseConditionBaseWithTestClassTitle {
- get {
- return ResourceManager.GetString("UseConditionBaseWithTestClassTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DeploymentItem]' can be specified only on test class or test method.
- ///
- internal static string UseDeploymentItemWithTestMethodOrTestClassMessageFormat {
- get {
- return ResourceManager.GetString("UseDeploymentItemWithTestMethodOrTestClassMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to '[DeploymentItem]' can be specified only on test class or test method.
- ///
- internal static string UseDeploymentItemWithTestMethodOrTestClassTitle {
- get {
- return ResourceManager.GetString("UseDeploymentItemWithTestMethodOrTestClassTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use 'Assert.ThrowsExactly' instead of 'Assert.ThrowsException'.
- ///
- internal static string UseNewerAssertThrowsMessageFormat {
- get {
- return ResourceManager.GetString("UseNewerAssertThrowsMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use newer methods to assert exceptions.
- ///
- internal static string UseNewerAssertThrowsTitle {
- get {
- return ResourceManager.GetString("UseNewerAssertThrowsTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to By default, MSTest runs tests within the same assembly sequentially, which can lead to severe performance limitations. It is recommended to enable assembly attribute '[Parallelize]' to run tests in parallel, or if the assembly is known to not be parallelizable, to use explicitly the assembly level attribute '[DoNotParallelize]'..
- ///
- internal static string UseParallelizeAttributeAnalyzerDescription {
- get {
- return ResourceManager.GetString("UseParallelizeAttributeAnalyzerDescription", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Explicitly enable or disable tests parallelization.
- ///
- internal static string UseParallelizeAttributeAnalyzerMessageFormat {
- get {
- return ResourceManager.GetString("UseParallelizeAttributeAnalyzerMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Explicitly enable or disable tests parallelization.
- ///
- internal static string UseParallelizeAttributeAnalyzerTitle {
- get {
- return ResourceManager.GetString("UseParallelizeAttributeAnalyzerTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use 'Assert.{0}' instead of 'Assert.{1}'.
- ///
- internal static string UseProperAssertMethodsMessageFormat {
- get {
- return ResourceManager.GetString("UseProperAssertMethodsMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use proper 'Assert' methods.
- ///
- internal static string UseProperAssertMethodsTitle {
- get {
- return ResourceManager.GetString("UseProperAssertMethodsTitle", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to An attribute that derives from 'RetryBaseAttribute' can be specified only on a test method.
- ///
- internal static string UseRetryWithTestMethodMessageFormat {
- get {
- return ResourceManager.GetString("UseRetryWithTestMethodMessageFormat", resourceCulture);
- }
- }
-
- ///
- /// Looks up a localized string similar to Use retry attribute on test method.
- ///
- internal static string UseRetryWithTestMethodTitle {
- get {
- return ResourceManager.GetString("UseRetryWithTestMethodTitle", resourceCulture);
- }
- }
- }
-}
diff --git a/src/Analyzers/MSTest.Analyzers/Resources.resx b/src/Analyzers/MSTest.Analyzers/Resources.resx
index 304dfec95d..1ecc9df254 100644
--- a/src/Analyzers/MSTest.Analyzers/Resources.resx
+++ b/src/Analyzers/MSTest.Analyzers/Resources.resx
@@ -251,7 +251,10 @@ The type declaring these methods should also respect the following rules:
DataRow argument count should match method parameter count (constructor arguments: {0}, method parameters: {1})
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
+ DataRow argument types do not match method parameter types. {0}
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'DataRow should only be set on a test method
@@ -426,6 +429,9 @@ The type declaring these methods should also respect the following rules:
Asynchronous test methods do not require the 'Async' suffix
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+
[{0}] can only be set on methods marked with [TestMethod]
@@ -445,10 +451,10 @@ The type declaring these methods should also respect the following rules:
Type containing '[TestMethod]' should be marked with '[TestClass]'
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
+ Type '{0}' contains test methods and should be marked with '[TestClass]''System.ComponentModel.DescriptionAttribute' has no effect on test methods
@@ -504,6 +510,9 @@ The type declaring these methods should also respect the following rules:
'[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+
'[DynamicData]' display name method '{0}.{1}' signature is invalid
@@ -534,6 +543,12 @@ The type declaring these methods should also respect the following rules:
Use 'Assert.{0}' instead of 'Assert.{1}'
+
+ Use 'Assert' instead of 'StringAssert'
+
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+
The type of the generic parameter '{0}' could not be inferred.
@@ -543,6 +558,9 @@ The type declaring these methods should also respect the following rules:
'[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+
Use newer methods to assert exceptions
@@ -585,4 +603,103 @@ The type declaring these methods should also respect the following rules:
An attribute that derives from 'RetryBaseAttribute' can be specified only on a test method
-
\ No newline at end of file
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+
+
+ TestContext property cannot be accessed in this context
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+
+
+ Flow TestContext.CancellationToken to async operations
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+
+
+ Assert.Throws should contain only a single statement/expression
+
+
+ Assert.Throws should contain only a single statement/expression
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+
+
+ Global test fixture method '{0}' signature is invalid
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+
+
+ Avoid using Assert methods with format parameters
+
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+
+
+ Do not ignore the return value of string methods
+
+
+ The return value of '{0}' should not be ignored
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+
+
diff --git a/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/ArrayBuilder.Enumerator.cs b/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/ArrayBuilder.Enumerator.cs
index 2a2fd9a7e4..48340fbf6a 100644
--- a/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/ArrayBuilder.Enumerator.cs
+++ b/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/ArrayBuilder.Enumerator.cs
@@ -32,7 +32,7 @@ public readonly void Dispose()
{
}
- readonly object? System.Collections.IEnumerator.Current => Current;
+ readonly object? IEnumerator.Current => Current;
public void Reset() => _index = -1;
}
diff --git a/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/BoundedCacheWithFactory.cs b/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/BoundedCacheWithFactory.cs
index 87250620aa..3a760e6bd9 100644
--- a/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/BoundedCacheWithFactory.cs
+++ b/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/BoundedCacheWithFactory.cs
@@ -4,7 +4,7 @@ namespace Analyzer.Utilities;
///
/// Provides bounded cache for analyzers.
-/// Acts as a good alternative to
+/// Acts as a good alternative to
/// when the cached value has a cyclic reference to the key preventing early garbage collection of entries.
///
internal sealed class BoundedCacheWithFactory
diff --git a/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/DiagnosticExtensions.cs b/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/DiagnosticExtensions.cs
index 7316c3ebb5..dbed1d2ae6 100644
--- a/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/DiagnosticExtensions.cs
+++ b/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/DiagnosticExtensions.cs
@@ -169,7 +169,7 @@ public static void ReportNoLocationDiagnostic(
{
#pragma warning disable RS0030 // The symbol 'DiagnosticDescriptor.DiagnosticDescriptor.#ctor' is banned in this project: Use 'DiagnosticDescriptorHelper.Create' instead
rule = new DiagnosticDescriptor(rule.Id, rule.Title, rule.MessageFormat, rule.Category,
- effectiveSeverity.Value, rule.IsEnabledByDefault, rule.Description, rule.HelpLinkUri, rule.CustomTags.ToArray());
+ effectiveSeverity.Value, rule.IsEnabledByDefault, rule.Description, rule.HelpLinkUri, [.. rule.CustomTags]);
#pragma warning restore RS0030
}
diff --git a/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/IOperationExtensions.cs b/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/IOperationExtensions.cs
index b4f48fb09f..e3ec94bd4c 100644
--- a/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/IOperationExtensions.cs
+++ b/src/Analyzers/MSTest.Analyzers/RoslynAnalyzerHelpers/IOperationExtensions.cs
@@ -5,6 +5,7 @@
using Microsoft.CodeAnalysis.Operations;
namespace MSTest.Analyzers.RoslynAnalyzerHelpers;
+
internal static class IOperationExtensions
{
public static ISymbol? GetReferencedMemberOrLocalOrParameter(this IOperation? operation) => operation switch
diff --git a/src/Analyzers/MSTest.Analyzers/StringAssertToAssertAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/StringAssertToAssertAnalyzer.cs
new file mode 100644
index 0000000000..eb0f44ffaf
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/StringAssertToAssertAnalyzer.cs
@@ -0,0 +1,128 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.CodeAnalysis.Operations;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0046: Use 'Assert' instead of 'StringAssert'.
+///
+///
+/// The analyzer captures StringAssert method calls and suggests using equivalent Assert methods:
+///
+///
+///
+/// StringAssert.Contains(value, substring) → Assert.Contains(substring, value)
+///
+///
+///
+///
+/// StringAssert.StartsWith(value, substring) → Assert.StartsWith(substring, value)
+///
+///
+///
+///
+/// StringAssert.EndsWith(value, substring) → Assert.EndsWith(substring, value)
+///
+///
+///
+///
+/// StringAssert.Matches(value, pattern) → Assert.Matches(pattern, value)
+///
+///
+///
+///
+/// StringAssert.DoesNotMatch(value, pattern) → Assert.DoesNotMatch(pattern, value)
+///
+///
+///
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+internal sealed class StringAssertToAssertAnalyzer : DiagnosticAnalyzer
+{
+ ///
+ /// Key to retrieve the proper assert method name from the properties bag.
+ ///
+ internal const string ProperAssertMethodNameKey = nameof(ProperAssertMethodNameKey);
+
+ private static readonly LocalizableResourceString Title = new(nameof(Resources.StringAssertToAssertTitle), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.StringAssertToAssertMessageFormat), Resources.ResourceManager, typeof(Resources));
+
+ internal static readonly DiagnosticDescriptor Rule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.StringAssertToAssertRuleId,
+ Title,
+ MessageFormat,
+ null,
+ Category.Usage,
+ DiagnosticSeverity.Info,
+ isEnabledByDefault: true);
+
+ public override ImmutableArray SupportedDiagnostics { get; }
+ = ImmutableArray.Create(Rule);
+
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ if (!context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingStringAssert, out INamedTypeSymbol? stringAssertTypeSymbol))
+ {
+ return;
+ }
+
+ context.RegisterOperationAction(context => AnalyzeInvocationOperation(context, stringAssertTypeSymbol), OperationKind.Invocation);
+ });
+ }
+
+ private static void AnalyzeInvocationOperation(OperationAnalysisContext context, INamedTypeSymbol stringAssertTypeSymbol)
+ {
+ var operation = (IInvocationOperation)context.Operation;
+ IMethodSymbol targetMethod = operation.TargetMethod;
+
+ if (!SymbolEqualityComparer.Default.Equals(targetMethod.ContainingType, stringAssertTypeSymbol))
+ {
+ return;
+ }
+
+ // Map StringAssert methods to their equivalent Assert methods
+ string? assertMethodName = targetMethod.Name switch
+ {
+ "Contains" => "Contains",
+ "StartsWith" => "StartsWith",
+ "EndsWith" => "EndsWith",
+ "Matches" => "MatchesRegex",
+ "DoesNotMatch" => "DoesNotMatchRegex",
+ _ => null,
+ };
+
+ if (assertMethodName == null)
+ {
+ return;
+ }
+
+ // StringAssert methods all have at least 2 arguments that need to be swapped
+ if (operation.Arguments.Length < 2)
+ {
+ return;
+ }
+
+ ImmutableDictionary properties = ImmutableDictionary.Empty.Add(ProperAssertMethodNameKey, assertMethodName);
+
+ context.ReportDiagnostic(context.Operation.CreateDiagnostic(
+ Rule,
+ properties: properties,
+ assertMethodName,
+ targetMethod.Name));
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/TestClassShouldHaveTestMethodAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/TestClassShouldHaveTestMethodAnalyzer.cs
index c8f38fac34..5ba9dde1b6 100644
--- a/src/Analyzers/MSTest.Analyzers/TestClassShouldHaveTestMethodAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/TestClassShouldHaveTestMethodAnalyzer.cs
@@ -48,15 +48,17 @@ public override void Initialize(AnalysisContext context)
INamedTypeSymbol? testMethodAttributeSymbol = context.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestMethodAttribute);
INamedTypeSymbol? assemblyInitializationAttributeSymbol = context.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingAssemblyInitializeAttribute);
INamedTypeSymbol? assemblyCleanupAttributeSymbol = context.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingAssemblyCleanupAttribute);
+ INamedTypeSymbol? globalTestInitializeAttributeSymbol = context.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingGlobalTestInitializeAttribute);
+ INamedTypeSymbol? globalTestCleanupAttributeSymbol = context.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingGlobalTestCleanupAttribute);
context.RegisterSymbolAction(
- context => AnalyzeSymbol(context, testClassAttributeSymbol, testMethodAttributeSymbol, assemblyInitializationAttributeSymbol, assemblyCleanupAttributeSymbol),
+ context => AnalyzeSymbol(context, testClassAttributeSymbol, testMethodAttributeSymbol, assemblyInitializationAttributeSymbol, assemblyCleanupAttributeSymbol, globalTestInitializeAttributeSymbol, globalTestCleanupAttributeSymbol),
SymbolKind.NamedType);
}
});
}
private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbol testClassAttributeSymbol, INamedTypeSymbol? testMethodAttributeSymbol,
- INamedTypeSymbol? assemblyInitializationAttributeSymbol, INamedTypeSymbol? assemblyCleanupAttributeSymbol)
+ INamedTypeSymbol? assemblyInitializationAttributeSymbol, INamedTypeSymbol? assemblyCleanupAttributeSymbol, INamedTypeSymbol? globalTestInitializeAttributeSymbol, INamedTypeSymbol? globalTestCleanupAttributeSymbol)
{
var classSymbol = (INamedTypeSymbol)context.Symbol;
@@ -91,7 +93,9 @@ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbo
}
if (SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, assemblyInitializationAttributeSymbol)
- || SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, assemblyCleanupAttributeSymbol))
+ || SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, assemblyCleanupAttributeSymbol)
+ || SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, globalTestInitializeAttributeSymbol)
+ || SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, globalTestCleanupAttributeSymbol))
{
hasAssemblyAttribute = true;
}
diff --git a/src/Analyzers/MSTest.Analyzers/TestContextPropertyUsageAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/TestContextPropertyUsageAnalyzer.cs
new file mode 100644
index 0000000000..1cedf89c78
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/TestContextPropertyUsageAnalyzer.cs
@@ -0,0 +1,128 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.CodeAnalysis.Operations;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0047: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class TestContextPropertyUsageAnalyzer : DiagnosticAnalyzer
+{
+ private static readonly LocalizableResourceString Title = new(nameof(Resources.TestContextPropertyUsageTitle), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.TestContextPropertyUsageMessageFormat), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString Description = new(nameof(Resources.TestContextPropertyUsageDescription), Resources.ResourceManager, typeof(Resources));
+
+ internal static readonly DiagnosticDescriptor Rule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.TestContextPropertyUsageRuleId,
+ Title,
+ MessageFormat,
+ Description,
+ Category.Usage,
+ DiagnosticSeverity.Warning,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; } = ImmutableArray.Create(Rule);
+
+ // Properties that cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup
+ private static readonly ImmutableHashSet RestrictedInAllFixtureMethods = ImmutableHashSet.Create(
+ StringComparer.Ordinal,
+ "TestData",
+ "TestDisplayName",
+ "DataRow",
+ "DataConnection",
+ "TestName",
+ "ManagedMethod");
+
+ // Properties that cannot be accessed in assembly initialize or assembly cleanup
+ private static readonly ImmutableHashSet RestrictedInAssemblyMethods = ImmutableHashSet.Create(
+ StringComparer.Ordinal,
+ "FullyQualifiedTestClassName",
+ "ManagedType");
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ if (!context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestContext, out INamedTypeSymbol? testContextSymbol)
+ || !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingAssemblyInitializeAttribute, out INamedTypeSymbol? assemblyInitializeAttributeSymbol)
+ || !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingAssemblyCleanupAttribute, out INamedTypeSymbol? assemblyCleanupAttributeSymbol)
+ || !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingClassInitializeAttribute, out INamedTypeSymbol? classInitializeAttributeSymbol)
+ || !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingClassCleanupAttribute, out INamedTypeSymbol? classCleanupAttributeSymbol))
+ {
+ return;
+ }
+
+ context.RegisterOperationAction(context => AnalyzePropertyReference(context, testContextSymbol, assemblyInitializeAttributeSymbol, assemblyCleanupAttributeSymbol, classInitializeAttributeSymbol, classCleanupAttributeSymbol), OperationKind.PropertyReference);
+ });
+ }
+
+ private static void AnalyzePropertyReference(
+ OperationAnalysisContext context,
+ INamedTypeSymbol testContextSymbol,
+ INamedTypeSymbol assemblyInitializeAttributeSymbol,
+ INamedTypeSymbol assemblyCleanupAttributeSymbol,
+ INamedTypeSymbol classInitializeAttributeSymbol,
+ INamedTypeSymbol classCleanupAttributeSymbol)
+ {
+ var propertyReference = (IPropertyReferenceOperation)context.Operation;
+
+ // Check if the property is a TestContext property
+ if (!SymbolEqualityComparer.Default.Equals(propertyReference.Property.ContainingType, testContextSymbol))
+ {
+ return;
+ }
+
+ string propertyName = propertyReference.Property.Name;
+
+ // Check if we're in a forbidden context
+ if (context.ContainingSymbol is not IMethodSymbol containingMethod)
+ {
+ return;
+ }
+
+ // Check for assembly initialize/cleanup methods
+ bool isAssemblyInitialize = containingMethod.HasAttribute(assemblyInitializeAttributeSymbol);
+ bool isAssemblyCleanup = containingMethod.HasAttribute(assemblyCleanupAttributeSymbol);
+ bool isClassInitialize = containingMethod.HasAttribute(classInitializeAttributeSymbol);
+ bool isClassCleanup = containingMethod.HasAttribute(classCleanupAttributeSymbol);
+
+ bool isInAssemblyMethod = isAssemblyInitialize || isAssemblyCleanup;
+ bool isInFixtureMethod = isInAssemblyMethod || isClassInitialize || isClassCleanup;
+
+ // Check if the property is restricted in the current context
+ if (isInFixtureMethod && RestrictedInAllFixtureMethods.Contains(propertyName))
+ {
+ context.ReportDiagnostic(propertyReference.CreateDiagnostic(Rule, propertyName, GetMethodType(isAssemblyInitialize, isAssemblyCleanup, isClassInitialize, isClassCleanup)));
+ }
+ else if (isInAssemblyMethod && RestrictedInAssemblyMethods.Contains(propertyName))
+ {
+ context.ReportDiagnostic(propertyReference.CreateDiagnostic(Rule, propertyName, GetMethodType(isAssemblyInitialize, isAssemblyCleanup, isClassInitialize, isClassCleanup)));
+ }
+ }
+
+ private static string GetMethodType(bool isAssemblyInitialize, bool isAssemblyCleanup, bool isClassInitialize, bool isClassCleanup)
+ => (isAssemblyInitialize, isAssemblyCleanup, isClassInitialize, isClassCleanup) switch
+ {
+ (true, _, _, _) => "AssemblyInitialize",
+ (_, true, _, _) => "AssemblyCleanup",
+ (_, _, true, _) => "ClassInitialize",
+ (_, _, _, true) => "ClassCleanup",
+ _ => "unknown",
+ };
+}
diff --git a/src/Analyzers/MSTest.Analyzers/TestContextShouldBeValidAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/TestContextShouldBeValidAnalyzer.cs
index 4297c944d7..6838d3bbc7 100644
--- a/src/Analyzers/MSTest.Analyzers/TestContextShouldBeValidAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/TestContextShouldBeValidAnalyzer.cs
@@ -92,11 +92,26 @@ private static bool AssignsParameterToMember(IParameterSymbol parameter, ISymbol
operation = expressionStatementOperation.Operation;
}
- return operation is ISimpleAssignmentOperation assignmentOperation &&
+ if (operation is ISimpleAssignmentOperation assignmentOperation &&
assignmentOperation.Target is IMemberReferenceOperation targetMemberReference &&
- SymbolEqualityComparer.Default.Equals(targetMemberReference.Member, member) &&
- assignmentOperation.Value is IParameterReferenceOperation parameterReference &&
- SymbolEqualityComparer.Default.Equals(parameterReference.Parameter, parameter);
+ SymbolEqualityComparer.Default.Equals(targetMemberReference.Member, member))
+ {
+ // Extract parameter reference from the value, unwrapping from coalesce operation if necessary
+ IOperation effectiveValue = assignmentOperation.Value;
+ if (effectiveValue is ICoalesceOperation coalesceOperation)
+ {
+ effectiveValue = coalesceOperation.Value;
+ }
+
+ // Check if the effective value is a parameter reference to our target parameter
+ if (effectiveValue is IParameterReferenceOperation parameterReference &&
+ SymbolEqualityComparer.Default.Equals(parameterReference.Parameter, parameter))
+ {
+ return true;
+ }
+ }
+
+ return false;
}
private static void CollectTestContextFieldsAssignedInConstructor(
@@ -125,11 +140,21 @@ private static void CollectTestContextFieldsAssignedInConstructor(
}
if (operation is ISimpleAssignmentOperation assignmentOperation &&
- assignmentOperation.Target is IMemberReferenceOperation { Member: IFieldSymbol { } candidateField } &&
- assignmentOperation.Value is IParameterReferenceOperation parameterReference &&
- SymbolEqualityComparer.Default.Equals(parameterReference.Parameter, testContextParameter))
+ assignmentOperation.Target is IMemberReferenceOperation { Member: IFieldSymbol { } candidateField })
{
- fieldsAssignedInConstructor.Add(candidateField);
+ // Extract parameter reference from the value, unwrapping from coalesce operation if necessary
+ IOperation effectiveValue = assignmentOperation.Value;
+ if (effectiveValue is ICoalesceOperation coalesceOperation)
+ {
+ effectiveValue = coalesceOperation.Value;
+ }
+
+ // Check if the effective value is a parameter reference to our target parameter
+ if (effectiveValue is IParameterReferenceOperation parameterReference &&
+ SymbolEqualityComparer.Default.Equals(parameterReference.Parameter, testContextParameter))
+ {
+ fieldsAssignedInConstructor.Add(candidateField);
+ }
}
}
@@ -187,7 +212,7 @@ public override void Initialize(AnalysisContext context)
return;
}
- fieldsAssignedInConstructor = new();
+ fieldsAssignedInConstructor = [];
context.RegisterOperationBlockAction(context =>
{
diff --git a/src/Analyzers/MSTest.Analyzers/TypeContainingTestMethodShouldBeATestClassAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/TypeContainingTestMethodShouldBeATestClassAnalyzer.cs
index f5c4d19827..998f4f1ba5 100644
--- a/src/Analyzers/MSTest.Analyzers/TypeContainingTestMethodShouldBeATestClassAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/TypeContainingTestMethodShouldBeATestClassAnalyzer.cs
@@ -56,7 +56,7 @@ public override void Initialize(AnalysisContext context)
private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbol testClassAttributeSymbol, INamedTypeSymbol testMethodAttributeSymbol)
{
var namedTypeSymbol = (INamedTypeSymbol)context.Symbol;
- if (namedTypeSymbol.TypeKind != TypeKind.Class
+ if ((namedTypeSymbol.TypeKind != TypeKind.Class && namedTypeSymbol.TypeKind != TypeKind.Struct)
|| namedTypeSymbol.IsAbstract)
{
return;
diff --git a/src/Analyzers/MSTest.Analyzers/UnusedParameterSuppressor.cs b/src/Analyzers/MSTest.Analyzers/UnusedParameterSuppressor.cs
new file mode 100644
index 0000000000..3bc64d707f
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/UnusedParameterSuppressor.cs
@@ -0,0 +1,71 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0047: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class UnusedParameterSuppressor : DiagnosticSuppressor
+{
+ // IDE0060: Remove unused parameter 'name' if it is not part of a shipped public API
+ // https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0060
+ private const string SuppressedDiagnosticId = "IDE0060";
+
+ internal static readonly SuppressionDescriptor Rule =
+ new(DiagnosticIds.UnusedParameterSuppressorRuleId, SuppressedDiagnosticId, Resources.UnusedParameterSuppressorJustification);
+
+ ///
+ public override ImmutableArray SupportedSuppressions { get; } = ImmutableArray.Create(Rule);
+
+ ///
+ public override void ReportSuppressions(SuppressionAnalysisContext context)
+ {
+ if (!context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingAssemblyInitializeAttribute, out INamedTypeSymbol? assemblyInitializeAttributeSymbol)
+ || !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingClassInitializeAttribute, out INamedTypeSymbol? classInitializeAttributeSymbol)
+ || !context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestContext, out INamedTypeSymbol? testContextSymbol))
+ {
+ return;
+ }
+
+ INamedTypeSymbol? globalTestInitializeAttributeSymbol = context.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingGlobalTestInitializeAttribute);
+ INamedTypeSymbol? globalTestCleanupAttributeSymbol = context.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingGlobalTestCleanupAttribute);
+
+ foreach (Diagnostic diagnostic in context.ReportedDiagnostics)
+ {
+ // The diagnostic is reported on the parameter
+ if (diagnostic.Location.SourceTree is not { } tree)
+ {
+ continue;
+ }
+
+ SyntaxNode root = tree.GetRoot(context.CancellationToken);
+ SyntaxNode node = root.FindNode(diagnostic.Location.SourceSpan, getInnermostNodeForTie: true);
+
+ SemanticModel semanticModel = context.GetSemanticModel(tree);
+ ISymbol? declaredSymbol = semanticModel.GetDeclaredSymbol(node, context.CancellationToken);
+
+ if (declaredSymbol is IParameterSymbol parameter
+ && SymbolEqualityComparer.Default.Equals(testContextSymbol, parameter.Type)
+ && parameter.ContainingSymbol is IMethodSymbol method
+ && method.GetAttributes().Any(attr =>
+ SymbolEqualityComparer.Default.Equals(attr.AttributeClass, assemblyInitializeAttributeSymbol) ||
+ SymbolEqualityComparer.Default.Equals(attr.AttributeClass, classInitializeAttributeSymbol) ||
+ SymbolEqualityComparer.Default.Equals(attr.AttributeClass, globalTestInitializeAttributeSymbol) ||
+ SymbolEqualityComparer.Default.Equals(attr.AttributeClass, globalTestCleanupAttributeSymbol)))
+ {
+ context.ReportSuppression(Suppression.Create(Rule, diagnostic));
+ }
+ }
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/UseAsyncSuffixTestFixtureMethodSuppressor.cs b/src/Analyzers/MSTest.Analyzers/UseAsyncSuffixTestFixtureMethodSuppressor.cs
index 9f7995e4cf..3cd37a4c22 100644
--- a/src/Analyzers/MSTest.Analyzers/UseAsyncSuffixTestFixtureMethodSuppressor.cs
+++ b/src/Analyzers/MSTest.Analyzers/UseAsyncSuffixTestFixtureMethodSuppressor.cs
@@ -41,6 +41,9 @@ public override void ReportSuppressions(SuppressionAnalysisContext context)
return;
}
+ INamedTypeSymbol? globalTestInitializeAttributeSymbol = context.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingGlobalTestInitializeAttribute);
+ INamedTypeSymbol? globalTestCleanupAttributeSymbol = context.Compilation.GetTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingGlobalTestCleanupAttribute);
+
foreach (Diagnostic diagnostic in context.ReportedDiagnostics)
{
// The diagnostic is reported on the test method
@@ -61,7 +64,9 @@ public override void ReportSuppressions(SuppressionAnalysisContext context)
|| SymbolEqualityComparer.Default.Equals(attr.AttributeClass, classInitializeAttributeSymbol)
|| SymbolEqualityComparer.Default.Equals(attr.AttributeClass, classCleanupAttributeSymbol)
|| SymbolEqualityComparer.Default.Equals(attr.AttributeClass, testInitializeAttributeSymbol)
- || SymbolEqualityComparer.Default.Equals(attr.AttributeClass, testCleanupAttributeSymbol)))
+ || SymbolEqualityComparer.Default.Equals(attr.AttributeClass, testCleanupAttributeSymbol)
+ || SymbolEqualityComparer.Default.Equals(attr.AttributeClass, globalTestInitializeAttributeSymbol)
+ || SymbolEqualityComparer.Default.Equals(attr.AttributeClass, globalTestCleanupAttributeSymbol)))
{
context.ReportSuppression(Suppression.Create(Rule, diagnostic));
}
diff --git a/src/Analyzers/MSTest.Analyzers/UseAttributeOnTestMethodAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/UseAttributeOnTestMethodAnalyzer.cs
index 63c73fd004..f3f8b2a28f 100644
--- a/src/Analyzers/MSTest.Analyzers/UseAttributeOnTestMethodAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/UseAttributeOnTestMethodAnalyzer.cs
@@ -127,13 +127,15 @@ public sealed class UseAttributeOnTestMethodAnalyzer : DiagnosticAnalyzer
isEnabledByDefault: true);
// IMPORTANT: Remember to add any new rule to the rule tuple.
+ // IMPORTANT: The order is important. For example, Owner, Priority, and Description are also TestProperty. We report the first violation and then bail-out.
+ // It may be a better idea to consolidate OwnerRule, PriorityRule, DescriptionRule, and TestPropertyRule into a single rule.
private static readonly List<(string AttributeFullyQualifiedName, DiagnosticDescriptor Rule)> RuleTuples =
[
(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingOwnerAttribute, OwnerRule),
(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingPriorityAttribute, PriorityRule),
+ (WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingDescriptionAttribute, DescriptionRule),
(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestPropertyAttribute, TestPropertyRule),
(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingWorkItemAttribute, WorkItemRule),
- (WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingDescriptionAttribute, DescriptionRule),
(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingExpectedExceptionBaseAttribute, ExpectedExceptionRule),
(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingCssIterationAttribute, CssIterationRule),
(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingCssProjectStructureAttribute, CssProjectStructureRule),
@@ -214,6 +216,7 @@ private static void AnalyzeSymbol(
if (methodAttribute.AttributeClass.Inherits(attributeSymbol))
{
attributes.Add((methodAttribute, rule));
+ break;
}
}
}
diff --git a/src/Analyzers/MSTest.Analyzers/UseCancellationTokenPropertyAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/UseCancellationTokenPropertyAnalyzer.cs
new file mode 100644
index 0000000000..5e58cae96b
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/UseCancellationTokenPropertyAnalyzer.cs
@@ -0,0 +1,63 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+using Microsoft.CodeAnalysis.Operations;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0054: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class UseCancellationTokenPropertyAnalyzer : DiagnosticAnalyzer
+{
+ private static readonly LocalizableResourceString Title = new(nameof(Resources.UseCancellationTokenPropertyTitle), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString Description = new(nameof(Resources.UseCancellationTokenPropertyDescription), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.UseCancellationTokenPropertyMessageFormat), Resources.ResourceManager, typeof(Resources));
+
+ internal static readonly DiagnosticDescriptor UseCancellationTokenPropertyRule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.UseCancellationTokenPropertyRuleId,
+ Title,
+ MessageFormat,
+ Description,
+ Category.Usage,
+ DiagnosticSeverity.Info,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; }
+ = ImmutableArray.Create(UseCancellationTokenPropertyRule);
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ if (context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTestContext, out INamedTypeSymbol? testContextSymbol) &&
+ testContextSymbol.GetMembers("CancellationTokenSource") is [IPropertySymbol cancellationTokenSourcePropertySymbol])
+ {
+ context.RegisterOperationAction(context => AnalyzePropertyReference(context, cancellationTokenSourcePropertySymbol), OperationKind.PropertyReference);
+ }
+ });
+ }
+
+ private static void AnalyzePropertyReference(OperationAnalysisContext context, IPropertySymbol cancellationTokenSourcePropertySymbol)
+ {
+ var propertyReferenceOperation = (IPropertyReferenceOperation)context.Operation;
+ if (propertyReferenceOperation.Property.Equals(cancellationTokenSourcePropertySymbol, SymbolEqualityComparer.Default))
+ {
+ context.ReportDiagnostic(propertyReferenceOperation.Syntax.CreateDiagnostic(UseCancellationTokenPropertyRule));
+ }
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/UseCooperativeCancellationForTimeoutAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/UseCooperativeCancellationForTimeoutAnalyzer.cs
new file mode 100644
index 0000000000..d73e67d3c0
--- /dev/null
+++ b/src/Analyzers/MSTest.Analyzers/UseCooperativeCancellationForTimeoutAnalyzer.cs
@@ -0,0 +1,79 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System.Collections.Immutable;
+
+using Analyzer.Utilities.Extensions;
+
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.Diagnostics;
+
+using MSTest.Analyzers.Helpers;
+
+namespace MSTest.Analyzers;
+
+///
+/// MSTEST0045: .
+///
+[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
+public sealed class UseCooperativeCancellationForTimeoutAnalyzer : DiagnosticAnalyzer
+{
+ private static readonly LocalizableResourceString Title = new(nameof(Resources.UseCooperativeCancellationForTimeoutTitle), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString Description = new(nameof(Resources.UseCooperativeCancellationForTimeoutDescription), Resources.ResourceManager, typeof(Resources));
+ private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.UseCooperativeCancellationForTimeoutMessageFormat), Resources.ResourceManager, typeof(Resources));
+
+ internal static readonly DiagnosticDescriptor UseCooperativeCancellationForTimeoutRule = DiagnosticDescriptorHelper.Create(
+ DiagnosticIds.UseCooperativeCancellationForTimeoutRuleId,
+ Title,
+ MessageFormat,
+ Description,
+ Category.Design,
+ DiagnosticSeverity.Info,
+ isEnabledByDefault: true);
+
+ ///
+ public override ImmutableArray SupportedDiagnostics { get; }
+ = ImmutableArray.Create(UseCooperativeCancellationForTimeoutRule);
+
+ ///
+ public override void Initialize(AnalysisContext context)
+ {
+ context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
+ context.EnableConcurrentExecution();
+
+ context.RegisterCompilationStartAction(context =>
+ {
+ if (context.Compilation.TryGetOrCreateTypeByMetadataName(WellKnownTypeNames.MicrosoftVisualStudioTestToolsUnitTestingTimeoutAttribute, out INamedTypeSymbol? timeoutAttributeSymbol))
+ {
+ context.RegisterSymbolAction(
+ context => AnalyzeSymbol(context, timeoutAttributeSymbol),
+ SymbolKind.Method);
+ }
+ });
+ }
+
+ private static void AnalyzeSymbol(SymbolAnalysisContext context, INamedTypeSymbol timeoutAttributeSymbol)
+ {
+ var methodSymbol = (IMethodSymbol)context.Symbol;
+
+ AttributeData? timeoutAttribute = null;
+ foreach (AttributeData attribute in methodSymbol.GetAttributes())
+ {
+ if (SymbolEqualityComparer.Default.Equals(attribute.AttributeClass, timeoutAttributeSymbol))
+ {
+ timeoutAttribute = attribute;
+ break;
+ }
+ }
+
+ // Report diagnostic if CooperativeCancellation is not explicitly set to true
+ if (timeoutAttribute is not null
+ && !timeoutAttribute.NamedArguments.Any(x => x.Key == "CooperativeCancellation" && x.Value.Value is bool boolValue && boolValue))
+ {
+ if (timeoutAttribute.ApplicationSyntaxReference?.GetSyntax() is { } syntax)
+ {
+ context.ReportDiagnostic(syntax.CreateDiagnostic(UseCooperativeCancellationForTimeoutRule));
+ }
+ }
+ }
+}
diff --git a/src/Analyzers/MSTest.Analyzers/UseNewerAssertThrowsAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/UseNewerAssertThrowsAnalyzer.cs
index d28aa7890f..0888a9d72d 100644
--- a/src/Analyzers/MSTest.Analyzers/UseNewerAssertThrowsAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/UseNewerAssertThrowsAnalyzer.cs
@@ -28,7 +28,7 @@ internal sealed class UseNewerAssertThrowsAnalyzer : DiagnosticAnalyzer
MessageFormat,
null,
Category.Usage,
- DiagnosticSeverity.Info,
+ DiagnosticSeverity.Warning,
isEnabledByDefault: true);
public override ImmutableArray SupportedDiagnostics { get; }
diff --git a/src/Analyzers/MSTest.Analyzers/UseParallelizeAttributeAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/UseParallelizeAttributeAnalyzer.cs
index 3ab2f55f99..7afe6c69fc 100644
--- a/src/Analyzers/MSTest.Analyzers/UseParallelizeAttributeAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/UseParallelizeAttributeAnalyzer.cs
@@ -45,7 +45,10 @@ public override void Initialize(AnalysisContext context)
private static void AnalyzeCompilation(CompilationAnalysisContext context)
{
- bool hasTestAdapter = context.Compilation.ReferencedAssemblyNames.Any(asm => asm.Name == "Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter");
+ bool hasTestAdapter = context.Options.AnalyzerConfigOptionsProvider.GlobalOptions.TryGetValue("build_property.IsMSTestTestAdapterReferenced", out string? isAdapterReferenced) &&
+ bool.TryParse(isAdapterReferenced, out bool isAdapterReferencedValue) &&
+ isAdapterReferencedValue;
+
if (!hasTestAdapter)
{
// We shouldn't produce a diagnostic if only the test framework is referenced, but not the adapter.
diff --git a/src/Analyzers/MSTest.Analyzers/UseProperAssertMethodsAnalyzer.cs b/src/Analyzers/MSTest.Analyzers/UseProperAssertMethodsAnalyzer.cs
index ef26733c67..47141d2c2e 100644
--- a/src/Analyzers/MSTest.Analyzers/UseProperAssertMethodsAnalyzer.cs
+++ b/src/Analyzers/MSTest.Analyzers/UseProperAssertMethodsAnalyzer.cs
@@ -41,6 +41,41 @@ namespace MSTest.Analyzers;
/// Assert.[AreEqual|AreNotEqual](null, x)
///
///
+///
+///
+/// Assert.IsTrue(myString.[StartsWith|EndsWith|Contains]("..."))
+///
+///
+///
+///
+/// Assert.IsFalse(myString.[StartsWith|EndsWith|Contains]("..."))
+///
+///
+///
+///
+/// Assert.IsTrue(myCollection.Contains(...))
+///
+///
+///
+///
+/// Assert.IsFalse(myCollection.Contains(...))
+///
+///
+///
+///
+/// Assert.[IsTrue|IsFalse](x [>|>=|<|<=] y)
+///
+///
+///
+///
+/// Assert.AreEqual([0|X], myCollection.[Count|Length])
+///
+///
+///
+///
+/// Assert.IsTrue(myCollection.[Count|Length] [>|!=|==] 0)
+///
+///
///
///
[DiagnosticAnalyzer(LanguageNames.CSharp, LanguageNames.VisualBasic)]
@@ -60,6 +95,36 @@ private enum EqualityCheckStatus
NotEquals,
}
+ private enum StringMethodCheckStatus
+ {
+ Unknown,
+ StartsWith,
+ EndsWith,
+ Contains,
+ }
+
+ private enum ComparisonCheckStatus
+ {
+ Unknown,
+ GreaterThan,
+ GreaterThanOrEqual,
+ LessThan,
+ LessThanOrEqual,
+ }
+
+ private enum CollectionCheckStatus
+ {
+ Unknown,
+ Contains,
+ }
+
+ private enum CountCheckStatus
+ {
+ Unknown,
+ IsEmpty,
+ HasCount,
+ }
+
internal const string ProperAssertMethodNameKey = nameof(ProperAssertMethodNameKey);
///
@@ -84,6 +149,7 @@ private enum EqualityCheckStatus
/// The value for ProperAssertMethodNameKey is "IsNull".
/// The first additional location will point to the "x == null" node.
/// The second additional location will point to the "x" node.
+ /// Optionally, more additional locations will also be interpreted as "replace" operations.
///
internal const string CodeFixModeSimple = nameof(CodeFixModeSimple);
@@ -108,7 +174,7 @@ private enum EqualityCheckStatus
///
/// Find the right assert method name from the properties bag using .
/// Replace the identifier syntax for the invocation with the right assert method name. The identifier syntax is calculated by the codefix.
- /// Remove the argument which the second additional locations points to.
+ /// Remove the argument which the first additional location points to.
///
/// Example: For Assert.AreEqual(false, x), it will become Assert.IsFalse(x).
/// The value for ProperAssertMethodNameKey is "IsFalse".
@@ -120,6 +186,22 @@ private enum EqualityCheckStatus
///
internal const string CodeFixModeRemoveArgument = nameof(CodeFixModeRemoveArgument);
+ ///
+ /// This mode means the codefix operation is as follows:
+ ///
+ /// Find the right assert method name from the properties bag using .
+ /// Replace the identifier syntax for the invocation with the right assert method name. The identifier syntax is calculated by the codefix.
+ /// Remove the argument which the first additional location points to.
+ /// Replace the argument which the second additional location points to with the expression pointed to by the third additional location
+ ///
+ /// Example: For Assert.AreEqual(0, list.Count), it will become Assert.IsEmpty(list).
+ /// The value for ProperAssertMethodNameKey is "IsEmpty".
+ /// The first additional location will point to the "0" node.
+ /// The second additional location will point to the "list.Count" node.
+ /// The third additional location will point to the "list" node.
+ ///
+ internal const string CodeFixModeRemoveArgumentAndReplaceArgument = nameof(CodeFixModeRemoveArgumentAndReplaceArgument);
+
private static readonly LocalizableResourceString Title = new(nameof(Resources.UseProperAssertMethodsTitle), Resources.ResourceManager, typeof(Resources));
private static readonly LocalizableResourceString MessageFormat = new(nameof(Resources.UseProperAssertMethodsMessageFormat), Resources.ResourceManager, typeof(Resources));
@@ -147,11 +229,13 @@ public override void Initialize(AnalysisContext context)
return;
}
- context.RegisterOperationAction(context => AnalyzeInvocationOperation(context, assertTypeSymbol), OperationKind.Invocation);
+ INamedTypeSymbol objectTypeSymbol = context.Compilation.GetSpecialType(SpecialType.System_Object);
+
+ context.RegisterOperationAction(context => AnalyzeInvocationOperation(context, assertTypeSymbol, objectTypeSymbol), OperationKind.Invocation);
});
}
- private static void AnalyzeInvocationOperation(OperationAnalysisContext context, INamedTypeSymbol assertTypeSymbol)
+ private static void AnalyzeInvocationOperation(OperationAnalysisContext context, INamedTypeSymbol assertTypeSymbol, INamedTypeSymbol objectTypeSymbol)
{
var operation = (IInvocationOperation)context.Operation;
IMethodSymbol targetMethod = operation.TargetMethod;
@@ -168,19 +252,19 @@ private static void AnalyzeInvocationOperation(OperationAnalysisContext context,
switch (targetMethod.Name)
{
case "IsTrue":
- AnalyzeIsTrueOrIsFalseInvocation(context, firstArgument, isTrueInvocation: true);
+ AnalyzeIsTrueOrIsFalseInvocation(context, firstArgument, isTrueInvocation: true, objectTypeSymbol);
break;
case "IsFalse":
- AnalyzeIsTrueOrIsFalseInvocation(context, firstArgument, isTrueInvocation: false);
+ AnalyzeIsTrueOrIsFalseInvocation(context, firstArgument, isTrueInvocation: false, objectTypeSymbol);
break;
case "AreEqual":
- AnalyzeAreEqualOrAreNotEqualInvocation(context, firstArgument, isAreEqualInvocation: true);
+ AnalyzeAreEqualOrAreNotEqualInvocation(context, firstArgument, isAreEqualInvocation: true, objectTypeSymbol);
break;
case "AreNotEqual":
- AnalyzeAreEqualOrAreNotEqualInvocation(context, firstArgument, isAreEqualInvocation: false);
+ AnalyzeAreEqualOrAreNotEqualInvocation(context, firstArgument, isAreEqualInvocation: false, objectTypeSymbol);
break;
}
}
@@ -325,7 +409,115 @@ private static bool CanUseTypeAsObject(Compilation compilation, ITypeSymbol? typ
=> type is null ||
compilation.ClassifyCommonConversion(type, compilation.GetSpecialType(SpecialType.System_Object)).Exists;
- private static void AnalyzeIsTrueOrIsFalseInvocation(OperationAnalysisContext context, IOperation conditionArgument, bool isTrueInvocation)
+ private static StringMethodCheckStatus RecognizeStringMethodCheck(
+ IOperation operation,
+ out SyntaxNode? stringExpression,
+ out SyntaxNode? substringExpression)
+ {
+ if (operation is IInvocationOperation invocation &&
+ invocation.TargetMethod.ContainingType?.SpecialType == SpecialType.System_String &&
+ invocation.Arguments.Length == 1)
+ {
+ string methodName = invocation.TargetMethod.Name;
+ if (methodName is "StartsWith" or "EndsWith" or "Contains")
+ {
+ stringExpression = invocation.Instance?.Syntax;
+ substringExpression = invocation.Arguments[0].Value.Syntax;
+
+ return methodName switch
+ {
+ "StartsWith" => StringMethodCheckStatus.StartsWith,
+ "EndsWith" => StringMethodCheckStatus.EndsWith,
+ "Contains" => StringMethodCheckStatus.Contains,
+ _ => StringMethodCheckStatus.Unknown,
+ };
+ }
+ }
+
+ stringExpression = null;
+ substringExpression = null;
+ return StringMethodCheckStatus.Unknown;
+ }
+
+ private static CollectionCheckStatus RecognizeCollectionMethodCheck(
+ IOperation operation,
+ INamedTypeSymbol objectTypeSymbol,
+ out SyntaxNode? collectionExpression,
+ out SyntaxNode? itemExpression)
+ {
+ if (operation is IInvocationOperation invocation)
+ {
+ string methodName = invocation.TargetMethod.Name;
+
+ // Check for Collection.Contains(item)
+ // We need to also ensure that invocation.TargetMethod.OriginalDefinition.Parameters[0] matches the type of the ienumerable returned by invocation.TargetMethod.ContainingType.OriginalDefinition.AllInterfaces
+ if (methodName == "Contains" &&
+ invocation.Arguments.Length == 1 &&
+ invocation.TargetMethod.OriginalDefinition.Parameters.Length == 1 &&
+ invocation.TargetMethod.OriginalDefinition.Parameters[0].Type is { } containsParameterType)
+ {
+ if (IsBCLCollectionType(invocation.TargetMethod.ContainingType, objectTypeSymbol))
+ {
+ ITypeSymbol? enumerableElementType = invocation.TargetMethod.ContainingType.OriginalDefinition.AllInterfaces.FirstOrDefault(
+ i => i.OriginalDefinition.SpecialType == SpecialType.System_Collections_Generic_IEnumerable_T)?.TypeArguments[0];
+
+ if (enumerableElementType is null || enumerableElementType.Equals(containsParameterType, SymbolEqualityComparer.Default))
+ {
+ // If enumerableElementType is null, we expect that this is a non-generic IEnumerable. So we simply report the diagnostic.
+ // If it's not null, ensure that the "T" of "IEnumerable" matches the type of the Contains method.
+ // The type comparison here is not for "substituted" types.
+ // So, when analyzing KeyedCollection.Contains(TKey), we will have:
+ // 1. containsParameterType as the symbol referring to "TKey".
+ // 2. enumerableElementType as the symbol referring to "TItem".
+ // So, even if we are dealing with KeyedCollection, the types won't match, and we won't produce a diagnostic.
+ collectionExpression = invocation.Instance?.Syntax;
+ itemExpression = invocation.Arguments[0].Value.Syntax;
+ return CollectionCheckStatus.Contains;
+ }
+ }
+ }
+ }
+
+ collectionExpression = null;
+ itemExpression = null;
+ return CollectionCheckStatus.Unknown;
+ }
+
+ private static bool IsBCLCollectionType(ITypeSymbol type, INamedTypeSymbol objectTypeSymbol)
+ // Check if the type implements IEnumerable (but is not string)
+ => type.SpecialType != SpecialType.System_String && type.AllInterfaces.Any(i =>
+ i.OriginalDefinition.SpecialType == SpecialType.System_Collections_IEnumerable) &&
+ // object is coming from BCL and it's expected to always have a public key.
+ type.ContainingAssembly.Identity.HasPublicKey == objectTypeSymbol.ContainingAssembly.Identity.HasPublicKey &&
+ type.ContainingAssembly.Identity.PublicKey.SequenceEqual(objectTypeSymbol.ContainingAssembly.Identity.PublicKey);
+
+ private static ComparisonCheckStatus RecognizeComparisonCheck(
+ IOperation operation,
+ out SyntaxNode? leftExpression,
+ out SyntaxNode? rightExpression)
+ {
+ if (operation is IBinaryOperation binaryOperation &&
+ binaryOperation.OperatorMethod is not { MethodKind: MethodKind.UserDefinedOperator })
+ {
+ leftExpression = binaryOperation.LeftOperand.Syntax;
+ rightExpression = binaryOperation.RightOperand.Syntax;
+
+ return binaryOperation.OperatorKind switch
+ {
+ BinaryOperatorKind.GreaterThan => ComparisonCheckStatus.GreaterThan,
+ BinaryOperatorKind.GreaterThanOrEqual => ComparisonCheckStatus.GreaterThanOrEqual,
+ BinaryOperatorKind.LessThan => ComparisonCheckStatus.LessThan,
+ BinaryOperatorKind.LessThanOrEqual => ComparisonCheckStatus.LessThanOrEqual,
+ _ => ComparisonCheckStatus.Unknown,
+ };
+ }
+
+ leftExpression = null;
+ rightExpression = null;
+ return ComparisonCheckStatus.Unknown;
+ }
+
+ private static void AnalyzeIsTrueOrIsFalseInvocation(OperationAnalysisContext context, IOperation conditionArgument, bool isTrueInvocation, INamedTypeSymbol objectTypeSymbol)
{
RoslynDebug.Assert(context.Operation is IInvocationOperation, "Expected IInvocationOperation.");
@@ -361,6 +553,137 @@ private static void AnalyzeIsTrueOrIsFalseInvocation(OperationAnalysisContext co
return;
}
+ // Check for string method patterns: myString.StartsWith/EndsWith/Contains(...)
+ StringMethodCheckStatus stringMethodStatus = RecognizeStringMethodCheck(conditionArgument, out SyntaxNode? stringExpr, out SyntaxNode? substringExpr);
+ if (stringMethodStatus != StringMethodCheckStatus.Unknown)
+ {
+ // Handle both IsTrue and IsFalse cases with string methods
+ string properAssertMethod = stringMethodStatus switch
+ {
+ StringMethodCheckStatus.StartsWith => isTrueInvocation ? "StartsWith" : "DoesNotStartWith",
+ StringMethodCheckStatus.EndsWith => isTrueInvocation ? "EndsWith" : "DoesNotEndWith",
+ StringMethodCheckStatus.Contains => isTrueInvocation ? "Contains" : "DoesNotContain",
+ _ => throw new InvalidOperationException("Unexpected StringMethodCheckStatus value."),
+ };
+
+ ImmutableDictionary.Builder properties = ImmutableDictionary.CreateBuilder();
+ properties.Add(ProperAssertMethodNameKey, properAssertMethod);
+ properties.Add(CodeFixModeKey, CodeFixModeAddArgument);
+ context.ReportDiagnostic(context.Operation.CreateDiagnostic(
+ Rule,
+ additionalLocations: ImmutableArray.Create(conditionArgument.Syntax.GetLocation(), substringExpr!.GetLocation(), stringExpr!.GetLocation()),
+ properties: properties.ToImmutable(),
+ properAssertMethod,
+ isTrueInvocation ? "IsTrue" : "IsFalse"));
+ return;
+ }
+
+ // Check for collection method patterns: myCollection.Contains(...)
+ CollectionCheckStatus collectionMethodStatus = RecognizeCollectionMethodCheck(conditionArgument, objectTypeSymbol, out SyntaxNode? collectionExpr, out SyntaxNode? itemExpr);
+ if (collectionMethodStatus != CollectionCheckStatus.Unknown)
+ {
+ if (collectionMethodStatus == CollectionCheckStatus.Contains)
+ {
+ string properAssertMethod = isTrueInvocation ? "Contains" : "DoesNotContain";
+
+ ImmutableDictionary.Builder properties = ImmutableDictionary.CreateBuilder();
+ properties.Add(ProperAssertMethodNameKey, properAssertMethod);
+ properties.Add(CodeFixModeKey, CodeFixModeAddArgument);
+ context.ReportDiagnostic(context.Operation.CreateDiagnostic(
+ Rule,
+ additionalLocations: ImmutableArray.Create(conditionArgument.Syntax.GetLocation(), itemExpr!.GetLocation(), collectionExpr!.GetLocation()),
+ properties: properties.ToImmutable(),
+ properAssertMethod,
+ isTrueInvocation ? "IsTrue" : "IsFalse"));
+ return;
+ }
+ }
+
+ // Check for collection emptiness patterns: myCollection.Count > 0, myCollection.Count != 0, or myCollection.Count == 0
+ CountCheckStatus countStatus = RecognizeCountCheck(conditionArgument, objectTypeSymbol, out SyntaxNode? collectionEmptinessExpr);
+ if (countStatus != CountCheckStatus.Unknown)
+ {
+ string properAssertMethod = countStatus switch
+ {
+ CountCheckStatus.IsEmpty => isTrueInvocation ? "IsEmpty" : "IsNotEmpty",
+ CountCheckStatus.HasCount => isTrueInvocation ? "IsNotEmpty" : "IsEmpty",
+ _ => throw ApplicationStateGuard.Unreachable(),
+ };
+
+ ImmutableDictionary.Builder properties = ImmutableDictionary.CreateBuilder();
+ properties.Add(ProperAssertMethodNameKey, properAssertMethod);
+ properties.Add(CodeFixModeKey, CodeFixModeSimple);
+ context.ReportDiagnostic(context.Operation.CreateDiagnostic(
+ Rule,
+ additionalLocations: ImmutableArray.Create(conditionArgument.Syntax.GetLocation(), collectionEmptinessExpr!.GetLocation()),
+ properties: properties.ToImmutable(),
+ properAssertMethod,
+ isTrueInvocation ? "IsTrue" : "IsFalse"));
+ return;
+ }
+
+ // Check for comparison patterns: a > b, a >= b, a < b, a <= b
+ ComparisonCheckStatus comparisonStatus = RecognizeComparisonCheck(conditionArgument, out SyntaxNode? leftExpr, out SyntaxNode? rightExpr);
+ if (comparisonStatus != ComparisonCheckStatus.Unknown)
+ {
+ string properAssertMethod = (isTrueInvocation, comparisonStatus) switch
+ {
+ (true, ComparisonCheckStatus.GreaterThan) => "IsGreaterThan",
+ (true, ComparisonCheckStatus.GreaterThanOrEqual) => "IsGreaterThanOrEqualTo",
+ (true, ComparisonCheckStatus.LessThan) => "IsLessThan",
+ (true, ComparisonCheckStatus.LessThanOrEqual) => "IsLessThanOrEqualTo",
+ (false, ComparisonCheckStatus.GreaterThan) => "IsLessThanOrEqualTo",
+ (false, ComparisonCheckStatus.GreaterThanOrEqual) => "IsLessThan",
+ (false, ComparisonCheckStatus.LessThan) => "IsGreaterThanOrEqualTo",
+ (false, ComparisonCheckStatus.LessThanOrEqual) => "IsGreaterThan",
+ _ => throw new InvalidOperationException("Unexpected ComparisonCheckStatus value."),
+ };
+
+ // For Assert.IsGreaterThan, IsLessThan etc., the method signature is (lowerBound, value) or (upperBound, value)
+ // So for a > b -> Assert.IsGreaterThan(b, a) where b is the lower bound and a is the value
+ // For a < b -> Assert.IsLessThan(b, a) where b is the upper bound and a is the value
+ SyntaxNode? firstArg, secondArg;
+ switch ((isTrueInvocation, comparisonStatus))
+ {
+ // a > b -> IsGreaterThan(b, a)
+ case (true, ComparisonCheckStatus.GreaterThan):
+ // a >= b -> IsGreaterThanOrEqualTo(b, a)
+ case (true, ComparisonCheckStatus.GreaterThanOrEqual):
+ // !(a < b) -> IsGreaterThanOrEqualTo(b, a)
+ case (false, ComparisonCheckStatus.LessThan):
+ // !(a <= b) -> IsGreaterThan(b, a)
+ case (false, ComparisonCheckStatus.LessThanOrEqual):
+ firstArg = rightExpr; // b becomes first arg (lower bound)
+ secondArg = leftExpr; // a becomes second arg (value)
+ break;
+ // a < b -> IsLessThan(b, a)
+ case (true, ComparisonCheckStatus.LessThan):
+ // a <= b -> IsLessThanOrEqualTo(b, a)
+ case (true, ComparisonCheckStatus.LessThanOrEqual):
+ // !(a > b) -> IsLessThanOrEqualTo(b, a)
+ case (false, ComparisonCheckStatus.GreaterThan):
+ // !(a >= b) -> IsLessThan(b, a)
+ case (false, ComparisonCheckStatus.GreaterThanOrEqual):
+ firstArg = rightExpr; // b becomes first arg (upper bound)
+ secondArg = leftExpr; // a becomes second arg (value)
+ break;
+
+ default:
+ throw new InvalidOperationException("Unexpected comparison case.");
+ }
+
+ ImmutableDictionary.Builder properties = ImmutableDictionary.CreateBuilder();
+ properties.Add(ProperAssertMethodNameKey, properAssertMethod);
+ properties.Add(CodeFixModeKey, CodeFixModeAddArgument);
+ context.ReportDiagnostic(context.Operation.CreateDiagnostic(
+ Rule,
+ additionalLocations: ImmutableArray.Create(conditionArgument.Syntax.GetLocation(), firstArg!.GetLocation(), secondArg!.GetLocation()),
+ properties: properties.ToImmutable(),
+ properAssertMethod,
+ isTrueInvocation ? "IsTrue" : "IsFalse"));
+ return;
+ }
+
EqualityCheckStatus equalityCheckStatus = RecognizeEqualityCheck(conditionArgument, out SyntaxNode? toBecomeExpected, out SyntaxNode? toBecomeActual, out ITypeSymbol? leftType, out ITypeSymbol? rightType);
if (equalityCheckStatus != EqualityCheckStatus.Unknown &&
CanUseTypeAsObject(context.Compilation, leftType) &&
@@ -390,8 +713,68 @@ private static void AnalyzeIsTrueOrIsFalseInvocation(OperationAnalysisContext co
}
}
- private static void AnalyzeAreEqualOrAreNotEqualInvocation(OperationAnalysisContext context, IOperation expectedArgument, bool isAreEqualInvocation)
+ private static void AnalyzeAreEqualOrAreNotEqualInvocation(OperationAnalysisContext context, IOperation expectedArgument, bool isAreEqualInvocation, INamedTypeSymbol objectTypeSymbol)
{
+ // Check for collection count patterns: collection.Count/Length == 0 or collection.Count/Length == X
+ if (isAreEqualInvocation)
+ {
+ if (TryGetSecondArgumentValue((IInvocationOperation)context.Operation, out IOperation? actualArgumentValue))
+ {
+ // Check if we're comparing a count/length property
+ CountCheckStatus countStatus = RecognizeCountCheck(
+ expectedArgument,
+ actualArgumentValue,
+ objectTypeSymbol,
+ out SyntaxNode? nodeToBeReplaced1,
+ out SyntaxNode? replacement1,
+ out SyntaxNode? nodeToBeReplaced2,
+ out SyntaxNode? replacement2);
+
+ if (countStatus != CountCheckStatus.Unknown)
+ {
+ if (nodeToBeReplaced1 is null || replacement1 is null)
+ {
+ throw ApplicationStateGuard.Unreachable();
+ }
+
+ string properAssertMethod = countStatus == CountCheckStatus.IsEmpty ? "IsEmpty" : "HasCount";
+
+ ImmutableDictionary.Builder properties = ImmutableDictionary.CreateBuilder();
+ properties.Add(ProperAssertMethodNameKey, properAssertMethod);
+
+ if (nodeToBeReplaced2 is not null && replacement2 is null)
+ {
+ // Here we suggest Assert.IsEmpty(collection)
+ properties.Add(CodeFixModeKey, CodeFixModeRemoveArgumentAndReplaceArgument);
+ context.ReportDiagnostic(context.Operation.CreateDiagnostic(
+ Rule,
+ additionalLocations: ImmutableArray.Create(
+ nodeToBeReplaced2.GetLocation(),
+ nodeToBeReplaced1.GetLocation(),
+ replacement1.GetLocation()),
+ properties: properties.ToImmutable(),
+ properAssertMethod,
+ "AreEqual"));
+ }
+ else
+ {
+ // Here we suggest Assert.HasCount(expectedCount, collection)
+ properties.Add(CodeFixModeKey, CodeFixModeSimple);
+ context.ReportDiagnostic(context.Operation.CreateDiagnostic(
+ Rule,
+ additionalLocations: nodeToBeReplaced2 is not null && replacement2 is not null
+ ? ImmutableArray.Create(nodeToBeReplaced1.GetLocation(), replacement1.GetLocation(), nodeToBeReplaced2.GetLocation(), replacement2.GetLocation())
+ : ImmutableArray.Create(nodeToBeReplaced1.GetLocation(), replacement1.GetLocation()),
+ properties: properties.ToImmutable(),
+ properAssertMethod,
+ "AreEqual"));
+ }
+
+ return;
+ }
+ }
+ }
+
// Don't flag a warning for Assert.AreNotEqual([true|false], x).
// This is not the same as Assert.IsFalse(x).
if (isAreEqualInvocation && expectedArgument is ILiteralOperation { ConstantValue: { HasValue: true, Value: bool expectedLiteralBoolean } })
@@ -446,6 +829,119 @@ actualArgumentValue.Type is { } actualType &&
}
}
+ private static CountCheckStatus RecognizeCountCheck(
+ IOperation operation,
+ INamedTypeSymbol objectTypeSymbol,
+ out SyntaxNode? collectionExpression)
+ {
+ collectionExpression = null;
+
+ // Check for collection.Count > 0 or collection.Length > 0
+ if (operation is IBinaryOperation { OperatorKind: BinaryOperatorKind.GreaterThan, LeftOperand: IPropertyReferenceOperation propertyRef, RightOperand: ILiteralOperation { ConstantValue: { HasValue: true, Value: 0 } } } &&
+ TryGetCollectionExpressionIfBCLCollectionLengthOrCount(propertyRef, objectTypeSymbol) is { } expression)
+ {
+ collectionExpression = expression;
+ return CountCheckStatus.HasCount;
+ }
+
+ // Check for 0 < collection.Count or 0 < collection.Length
+ if (operation is IBinaryOperation { OperatorKind: BinaryOperatorKind.LessThan, LeftOperand: ILiteralOperation { ConstantValue: { HasValue: true, Value: 0 } }, RightOperand: IPropertyReferenceOperation propertyRef2 } &&
+ TryGetCollectionExpressionIfBCLCollectionLengthOrCount(propertyRef2, objectTypeSymbol) is { } expression2)
+ {
+ collectionExpression = expression2;
+ return CountCheckStatus.HasCount;
+ }
+
+ // Check for collection.Count != 0 or collection.Length != 0
+ if (operation is IBinaryOperation { OperatorKind: BinaryOperatorKind.NotEquals, LeftOperand: IPropertyReferenceOperation propertyRef3, RightOperand: ILiteralOperation { ConstantValue: { HasValue: true, Value: 0 } } } &&
+ TryGetCollectionExpressionIfBCLCollectionLengthOrCount(propertyRef3, objectTypeSymbol) is { } expression3)
+ {
+ collectionExpression = expression3;
+ return CountCheckStatus.HasCount;
+ }
+
+ // Check for 0 != collection.Count or 0 != collection.Length (reverse order)
+ if (operation is IBinaryOperation { OperatorKind: BinaryOperatorKind.NotEquals, LeftOperand: ILiteralOperation { ConstantValue: { HasValue: true, Value: 0 } }, RightOperand: IPropertyReferenceOperation propertyRef4 } &&
+ TryGetCollectionExpressionIfBCLCollectionLengthOrCount(propertyRef4, objectTypeSymbol) is { } expression4)
+ {
+ collectionExpression = expression4;
+ return CountCheckStatus.HasCount;
+ }
+
+ // Check for collection.Count == 0 or collection.Length == 0
+ if (operation is IBinaryOperation { OperatorKind: BinaryOperatorKind.Equals, LeftOperand: IPropertyReferenceOperation propertyRef5, RightOperand: ILiteralOperation { ConstantValue: { HasValue: true, Value: 0 } } } &&
+ TryGetCollectionExpressionIfBCLCollectionLengthOrCount(propertyRef5, objectTypeSymbol) is { } expression5)
+ {
+ collectionExpression = expression5;
+ return CountCheckStatus.IsEmpty;
+ }
+
+ // Check for 0 == collection.Count or 0 == collection.Length (reverse order)
+ if (operation is IBinaryOperation { OperatorKind: BinaryOperatorKind.Equals, LeftOperand: ILiteralOperation { ConstantValue: { HasValue: true, Value: 0 } }, RightOperand: IPropertyReferenceOperation propertyRef6 } &&
+ TryGetCollectionExpressionIfBCLCollectionLengthOrCount(propertyRef6, objectTypeSymbol) is { } expression6)
+ {
+ collectionExpression = expression6;
+ return CountCheckStatus.IsEmpty;
+ }
+
+ return CountCheckStatus.Unknown;
+ }
+
+ private static CountCheckStatus RecognizeCountCheck(
+ IOperation expectedArgument,
+ IOperation actualArgument,
+ INamedTypeSymbol objectTypeSymbol,
+ out SyntaxNode? nodeToBeReplaced1,
+ out SyntaxNode? replacement1,
+ out SyntaxNode? nodeToBeReplaced2,
+ out SyntaxNode? replacement2)
+ {
+ // Check if actualArgument is a count/length property
+ if (actualArgument is IPropertyReferenceOperation propertyRef &&
+ TryGetCollectionExpressionIfBCLCollectionLengthOrCount(propertyRef, objectTypeSymbol) is { } expression)
+ {
+ bool isEmpty = expectedArgument.ConstantValue.HasValue &&
+ expectedArgument.ConstantValue.Value is int expectedValue &&
+ expectedValue == 0;
+
+ if (isEmpty)
+ {
+ // We have Assert.AreEqual(0, collection.Count/Length)
+ // We want Assert.IsEmpty(collection)
+ // So, only a single replacement is needed. We replace collection.Count with collection.
+ nodeToBeReplaced1 = actualArgument.Syntax; // collection.Count
+ replacement1 = expression; // collection
+ nodeToBeReplaced2 = expectedArgument.Syntax; // 0
+ replacement2 = null;
+ return CountCheckStatus.IsEmpty;
+ }
+ else
+ {
+ // We have Assert.AreEqual(expectedCount, collection.Count/Length)
+ // We want Assert.HasCount(expectedCount, collection)
+ // So, only a single replacement is needed. We replace collection.Count with collection.
+ nodeToBeReplaced1 = actualArgument.Syntax; // collection.Count
+ replacement1 = expression; // collection
+ nodeToBeReplaced2 = null;
+ replacement2 = null;
+ return CountCheckStatus.HasCount;
+ }
+ }
+
+ nodeToBeReplaced1 = null;
+ replacement1 = null;
+ nodeToBeReplaced2 = null;
+ replacement2 = null;
+ return CountCheckStatus.Unknown;
+ }
+
+ private static SyntaxNode? TryGetCollectionExpressionIfBCLCollectionLengthOrCount(IPropertyReferenceOperation propertyReference, INamedTypeSymbol objectTypeSymbol)
+ => propertyReference.Property.Name is "Count" or "Length" &&
+ propertyReference.Instance?.Type is not null &&
+ (propertyReference.Instance.Type.TypeKind == TypeKind.Array || IsBCLCollectionType(propertyReference.Property.ContainingType, objectTypeSymbol))
+ ? propertyReference.Instance.Syntax
+ : null;
+
private static bool TryGetFirstArgumentValue(IInvocationOperation operation, [NotNullWhen(true)] out IOperation? argumentValue)
=> TryGetArgumentValueForParameterOrdinal(operation, 0, out argumentValue);
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.cs.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.cs.xlf
index d40df19f9c..e6328c19f1 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.cs.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.cs.xlf
@@ -132,6 +132,16 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Nepoužívejte Assert.AreSame ani Assert.AreNotSame s typy hodnot.
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ Nahraďte {0} parametry formátu pomocí string.Format nebo interpolace řetězce.
+
+
+
+ Avoid using Assert methods with format parameters
+ Vyhněte se použití metod Assert s parametry formátu
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.Preferujte Assert.ThrowsExactly nebo Assert.ThrowsExactlyAsync před [ExpectedException], protože zajišťuje, že očekávanou výjimku vyvolá pouze očekávané volání. Rozhraní API pro vyhodnocení také poskytují větší flexibilitu a umožňují vyhodnocovat další vlastnosti výjimky.
@@ -147,6 +157,16 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Vyhněte se [ExpectedException]
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ Pokud chcete použít výchozí chování automatického zjišťování, odeberte argument DynamicDataSourceType.
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ Vyhněte se předávání explicitního typu DynamicDataSourceType a použijte výchozí chování automatického zjišťování.
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.Nepoužívejte výraz uvnitř metod async void, místních funkcí nebo výrazů lambda. Výjimky vyvolané v tomto kontextu budou neošetřené výjimky. Když používáte VSTest v .NET Framework, budou se bezobslužně používat. Když používáte Microsoft.Testing.Platform nebo VSTest v moderním rozhraní .NET, může dojít k chybovému ukončení procesu.
@@ -277,8 +297,13 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- Typ argumentu DataRow by měl odpovídat typu parametru metody. V indexech dochází k neshodě: {0}
+ DataRow argument types do not match method parameter types. {0}
+ Typy argumentů DataRow neodpovídají typům parametrů metody. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ Parametr '{0}' očekává typ '{1}', ale zadaná hodnota má typ '{2}'
@@ -402,11 +427,21 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Položka [DynamicData] by měla být nastavená jenom u testovací metody.
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ Člen [DynamicData] {0}.{1} je pole, měli byste použít DynamicDataSourceType.AutoDetect nebo DynamicDataSourceType.Field (výchozí nastavení je automatické rozpoznávání, pokud není zadané explicitně, a je doporučeno).
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' člen {0}.{1} je metoda, takže byste měli použít DynamicDataSourceType.AutoDetect nebo DynamicDataSourceType.Method (automatické zjišťování je výchozí, pokud není explicitně zadáno, a doporučuje se)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ Člen [DynamicData] {0}.{1} není vlastnost, metoda ani pole. Podporují se jen vlastnosti, metody a pole.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' člen {0}.{1} není vlastnost ani metoda. Jsou podporovány pouze vlastnosti a metody.
@@ -427,6 +462,81 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Položka DynamicData by měla být platná.
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ Při volání asynchronních metod, které mají přetížení akceptující parametr CancellationToken, upřednostňujte použití přetížení s TestContext.CancellationToken, aby se umožnilo kooperativní rušení a dodržování časových limitů testů.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ Zvažte použití přetížení, které přijímá CancellationToken a předejte TestContext.CancellationToken.
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ Přenesení TestContext.CancellationToken do asynchronních operací
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ Aby byly metody s označením [GlobalTestInitialize] nebo [GlobalTestCleanup] platné, musí se řídit následujícím rozložením:
+– Nesmí být deklarované pro obecnou třídu.
+– Musí být „public“.
+– Musí být „static“.
+– Nesmí být „async void“.
+– Nesmí být speciální metodou („finalizer“, „operator“...).
+– Nesmí být obecné.
+– Musí mít jeden parametr typu TestContext.
+– Návratový typ musí být „void“, „Task“ nebo „ValueTask“.
+
+Typ deklarující tyto metody by měl také respektovat následující pravidla:
+– Typ by měl být třída.
+– Třída by měla být „public“.
+– Třída by neměla být „static“.
+– Třída by měla být označena atributem [TestClass] (nebo odvozeným atributem).
+– Třída by neměla být obecná.
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ Podpis metody globálního testovacího přípravku {0} je neplatný.
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ Metody GlobalTestInitialize a GlobalTestCleanup by měly mít platné rozložení.
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Metody jako Contains, StartsWith a EndsWith vracejí logické hodnoty, které označují, jestli byla podmínka splněna. Ignorování těchto vrácených hodnot je pravděpodobně chyba.
+
+
+
+ The return value of '{0}' should not be ignored
+ Návratová hodnota {0} by neměla být ignorována
+
+
+
+ Do not ignore the return value of string methods
+ Neignorovat návratovou hodnotu řetězcových metod
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assertMísto trvalého neúspěšného vyhodnocovacího výrazu „Assert.{0}“ použijte „Assert.Fail“.
@@ -437,6 +547,21 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Místo trvalého neúspěšného vyhodnocovacího výrazu použijte „Assert.Fail“.
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ Možnost DataTestMethodAttribute je zastaralá a neposkytuje žádné funkce navíc oproti možnosti TestMethodAttribute. Pro všechny testovací metody, včetně parametrizovaných testů, použijte možnost TestMethodAttribute.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ Možnost DataTestMethod je zastaralá. Místo ní použijte možnost TestMethod.
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ Preferovat TestMethod před DataTestMethod
+
+ Review or remove the assertion as its condition is known to be always trueZkontrolujte nebo odeberte kontrolní výraz, protože jeho podmínka je vždy true.
@@ -517,6 +642,16 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Veřejné typy by měly být testovací třídy.
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ Použijte Assert.{0}' místo StringAssert.{1}'
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ Použijte Assert místo StringAssert
+
+ Test class '{0}' should be validTestovací třída {0} by měla být platná.
@@ -532,6 +667,21 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Signatura {0} metody Test je neplatná.
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken poskytuje přímější způsob přístupu k tokenu zrušení v porovnání s TestContext.CancellationTokenSource.Token.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ Místo TestContext.CancellationTokenSource.Token použijte TestContext.CancellationToken.
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ Místo TestContext.CancellationTokenSource.Token použijte TestContext.CancellationToken.
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.Když nepoužijete ClassCleanupBehavior.EndOfClass, [ClassCleanup] se ve výchozím nastavení spustí na konci sestavení, nikoli na konci třídy.
@@ -720,12 +870,12 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
- Typ obsahující [TestMethod] by měl mít označení [TestClass], jinak bude testovací metoda bez jakéhokoli upozornění ignorována.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Typ obsahující [TestMethod] by měl mít označení [TestClass], jinak se bude testovací metoda bez upozornění ignorovat.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
+ Type '{0}' contains test methods and should be marked with '[TestClass]'Třída {0} obsahuje testovací metody a měla by mít označení [TestClass].
@@ -744,6 +894,11 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Asynchronní testovací metody nevyžadují příponu Async.
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ Parametr TestContext vyžaduje MSTest pro metody AssemblyInitialize a ClassInitialize.
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] lze nastavit pouze u metod označených pomocí metody [TestMethod].
@@ -764,6 +919,21 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Použít ConditionBaseAttribute u testovacích tříd
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ Použití „[Timeout]“ bez explicitního nastavení „CooperativeCancellation = true“ se nedoporučuje. V budoucí verzi se kooperativní zrušení stane výchozím chováním. Nastavte „CooperativeCancellation = true“, abyste zapnuli doporučené chování a vyhnuli se změnám, které by mohly způsobit problémy.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ Použijte „CooperativeCancellation = true“ s „[Timeout]“, abyste povolili chování kooperativního zrušení
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ Použijte „CooperativeCancellation = true“ s „[Timeout]“
+
+ '[DeploymentItem]' can be specified only on test class or test method[DeploymentItem] se dá zadat jenom pro testovací třídu nebo testovací metodu.
@@ -819,6 +989,36 @@ Typ deklarující tyto metody by měl také respektovat následující pravidla:
Použití atributu opakování u testovací metody
+
+ TestContext property cannot be accessed in this context
+ Vlastnost TestContext není v tomto kontextu přístupná
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ Vlastnost TestContext {0} není přístupná v metodě {1}
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ Některé vlastnosti TestContext jsou k dispozici pouze během provádění testu a nelze k nim přistupovat v metodách inicializace sestavení, inicializace třídy, vyčištění třídy nebo vyčištění sestavení.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Metody Assert.Throws by měly obsahovat pouze jeden příkaz nebo výraz. Více příkazů může být zavádějící – pokud se vyvolá první příkaz, následující příkazy se nikdy neprovedou. Pokud se nevyvolá, měl by se přesunout mimo Assert.Throws.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Parametr Assert.Throws by měl obsahovat jenom jeden příkaz nebo výraz
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Parametr Assert.Throws by měl obsahovat jenom jeden příkaz nebo výraz
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.de.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.de.xlf
index ed0272a850..ec569abfd5 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.de.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.de.xlf
@@ -132,6 +132,16 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
Verwenden Sie "Assert.AreSame" oder "Assert.AreNotSame" nicht mit Werttypen.
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ „{0}“ durch Formatparameter mit string.Format oder Zeichenfolgeninterpolation ersetzen
+
+
+
+ Avoid using Assert methods with format parameters
+ Verwendung von Assert-Methoden mit Formatparametern vermeiden
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.„Assert.ThrowsExactly“ oder „Assert.ThrowsExactlyAsync“ gegenüber „[ExpectedException]“ bevorzugen, da dadurch sichergestellt wird, dass nur der erwartete Aufruf die erwartete Ausnahme auslöst. Die Assert-APIs bieten außerdem mehr Flexibilität und ermöglichen es Ihnen, zusätzliche Eigenschaften der Ausführung zu bestätigen.
@@ -147,6 +157,16 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
„[ExpectedException]“ vermeiden
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ Entfernen Sie das Argument „DynamicDataSourceType“, um das standardmäßige automatische Erkennungsverhalten zu verwenden.
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ Vermeiden Sie die explizite Übergabe von „DynamicDataSourceType” und verwenden Sie das standardmäßige automatische Erkennungsverhalten.
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.Nicht innerhalb von "async void"-Methoden, lokalen Funktionen oder Lambdafunktionen bestätigen. Ausnahmen, die in diesem Kontext ausgelöst werden, werden nicht behandelt. Bei Verwendung von VSTest unter .NET Framework werden diese im Hintergrund verschlungen. Wenn Sie Microsoft.Testing.Platform oder VSTest unter modernem .NET verwenden, kann der Prozess abgestürzt werden.
@@ -278,8 +298,13 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- Der DataRow-Argumenttyp muss mit dem Methodenparametertyp übereinstimmen. Nichtübereinstimmungen treten bei Indizes auf: {0}
+ DataRow argument types do not match method parameter types. {0}
+ DataRow-Argumenttypen stimmen nicht mit Methodenparametertypen überein. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ Der Parameter „{0}“ erwartet den Typ „{1}“, aber der übergebene Wert hat den Typ „{2}“.
@@ -403,11 +428,21 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
"[DynamicData]" sollte nur für eine Testmethode festgelegt werden.
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ '[DynamicData]' Mitglied '{0}.{1}' ist ein Feld, daher sollten Sie 'DynamicDataSourceType.AutoDetect' oder 'DynamicDataSourceType.Field' verwenden (die automatische Erkennung ist der Standardwert, wenn sie nicht explizit angegeben wird und wird empfohlen).
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' Member "{0}.{1}" ist eine Methode, daher sollten Sie "DynamicDataSourceType.AutoDetect" oder "DynamicDataSourceType.Method" verwenden (die automatische Erkennung ist der Standardwert, wenn sie nicht explizit angegeben wird und empfohlen wird).
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ '[DynamicData]' Mitglied '{0}.{1}' ist keine Eigenschaft, Methode oder kein Feld. Nur Eigenschaften, Methoden und Felder werden unterstützt.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' Member "{0}.{1}" ist weder eine Eigenschaft noch eine Methode. Nur Eigenschaften und Methoden werden unterstützt.
@@ -428,6 +463,81 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
DynamicData muss gültig sein.
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ Wenn Sie asynchrone Methoden aufrufen, die über Überladungen verfügen, die einen CancellationToken-Parameter akzeptieren, bevorzugen Sie die Verwendung der Überladung mit TestContext.CancellationToken, um einen kooperativen Abbruch zu ermöglichen und Testtimeouts zu berücksichtigen.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ Verwendung der Überladung erwägen, die ein CancellationToken akzeptiert, und „TestContext.CancellationToken“ übergeben
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ Fluss von TestContext.CancellationToken zu asynchronen Vorgängen
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ Methoden, die mit „[GlobalTestInitialize]“ oder „[GlobalTestCleanup]“ gekennzeichnet sind, sollten dem folgenden Layout folgen, um gültig zu sein:
+– kann nicht für eine generische Klasse deklariert werden
+– muss „public“ sein
+– muss „static“ sein
+– darf nicht „async void“ sein
+– darf keine spezielle Methode sein (Finalizer, Operator...).
+– darf nicht „generic“ sein
+– muss einen Parameter vom Typ „TestContext“ annehmen
+– der Rückgabetyp muss „void“, „Task“ oder „ValueTask“ sein
+
+Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachten:
+– Der Typ sollte eine Klasse sein
+– Die Klasse sollte „public“ sein
+– Die Klasse darf nicht „static“ sein
+– Die Klasse muss mit „[TestClass]“ (oder einem abgeleiteten Attribut) markiert werden
+– die Klasse darf nicht generisch sein.
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ Die Signatur der globalen Testfixierungsmethode „{0}“ ist ungültig
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ Die Methoden „GlobalTestInitialize“ und „GlobalTestCleanup“ müssen ein gültiges Layout aufweisen
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Methoden wie Contains, StartsWith und EndsWith geben boolesche Werte zurück, die angeben, ob die Bedingung erfüllt wurde. Das Ignorieren dieser Rückgabewerte ist wahrscheinlich ein Fehler.
+
+
+
+ The return value of '{0}' should not be ignored
+ Der Rückgabewert von „{0}“ darf nicht ignoriert werden
+
+
+
+ Do not ignore the return value of string methods
+ Rückgabewert von Zeichenfolgenmethoden nicht ignorieren
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assertVerwenden Sie „Assert.Fail“ anstelle einer Assert-Anweisung „Assert.{0}“, bei der immer ein Fehler auftritt.
@@ -438,6 +548,21 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
Verwenden Sie „Assert.Fail“ anstelle einer Assert-Anweisung, bei der immer ein Fehler auftritt.
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ „DataTestMethodAttribute“ ist veraltet und bietet keine zusätzliche Funktionalität im Vergleich zu „TestMethodAttribute“. Verwenden Sie „TestMethodAttribute“ für alle Testmethoden, einschließlich parametrisierter Tests.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ „DataTestMethod“ ist veraltet. Verwenden Sie stattdessen „TestMethod“.
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ „TestMethod“ gegenüber „DataTestMethod“ bevorzugen
+
+ Review or remove the assertion as its condition is known to be always trueÜberprüfen oder entfernen Sie die Assertion, weil ihre Bedingung bekanntermaßen immer TRUE ist.
@@ -518,6 +643,16 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
Öffentliche Typen sollten Testklassen sein.
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ Verwenden Sie „Assert.{0}“ anstelle von „StringAssert.{1}“.
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ Verwenden Sie „Assert“ anstelle von „StringAssert“.
+
+ Test class '{0}' should be validDie Testklasse „{0}“ muss gültig sein
@@ -533,6 +668,21 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
Signatur der Testmethode "{0}" ist ungültig
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken bietet im Vergleich mit TestContext.CancellationTokenSource.Token eine direktere Möglichkeit, auf das Abbruchtoken zuzugreifen.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ „TestContext.CancellationToken“ anstelle von „TestContext.CancellationTokenSource.Token“ verwenden
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ TestContext.CancellationToken anstelle von TestContext.CancellationTokenSource.Token verwenden
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.Ohne Verwendung von „ClassCleanupBehavior.EndOfClass“ wird „[ClassCleanup]“ standardmäßig am Ende der Assembly und nicht am Ende der Klasse ausgeführt.
@@ -721,13 +871,13 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
- Der Typ, der "[TestMethod]" enthält, sollte mit "[TestClass]" gekennzeichnet werden, andernfalls wird die Testmethode im Hintergrund ignoriert.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Der Typ, der „[Testmethode]“ enthält, sollte mit „[Testklasse]“ gekennzeichnet werden, andernfalls wird die Testmethode still im Hintergrund ignoriert.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- Die Klasse "{0}" enthält Testmethoden und muss mit "[TestClass]" gekennzeichnet werden.
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ Der Typ „{0}“ enthält Testmethoden und sollte mit „[TestClass]“ gekennzeichnet werden
@@ -745,6 +895,11 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
Für asynchrone Testmethoden ist das Suffix "Async" nicht erforderlich.
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ Der TestContext-Parameter ist für MSTest für AssemblyInitialize- und ClassInitialize-Methoden erforderlich
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] kann nur für Methoden festgelegt werden, die mit [TestMethod] markiert sind.
@@ -765,6 +920,21 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
"ConditionBaseAttribute" für Testklassen verwenden
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ Es wird davon abgeraten, „[Timeout]“ ohne die explizite Festlegung von „CooperativeCancellation = true“ zu verwenden. In einer zukünftigen Version wird der kooperative Abbruch das Standardverhalten sein. Legen Sie „CooperativeCancellation = true“ fest, um das empfohlene Verhalten zu aktivieren und Breaking Changes zu vermeiden.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ Verwenden Sie „CooperativeCancellation = true“ mit „[Timeout]“, um das kooperative Abbruchverhalten zu aktivieren.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ Verwenden Sie „CooperativeCancellation = true“ mit „[Timeout]“.
+
+ '[DeploymentItem]' can be specified only on test class or test method„[DeploymentItem]“ kann nur für die Testklasse oder Testmethode angegeben werden.
@@ -820,6 +990,36 @@ Der Typ, der diese Methoden deklariert, sollte auch die folgenden Regeln beachte
Verwenden des Wiederholungsattributs für die Testmethode
+
+ TestContext property cannot be accessed in this context
+ Auf die TestContext-Eigenschaft kann in diesem Kontext nicht zugegriffen werden
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ Auf die TestContext-Eigenschaft „{0}“ kann in der Methode „{1}“ nicht zugegriffen werden
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ Einige TestContext-Eigenschaften sind nur während der Testausführung verfügbar und können nicht in Assemblyinitialisierungs-, Klasseninitialisierungs-, Klassenbereinigungs- oder Assemblybereinigungsmethoden aufgerufen werden.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Assert.Throws-Methoden dürfen nur eine einzelne Anweisung oder einen einzelnen Ausdruck enthalten. Mehrere Anweisungen können irreführend sein: Wenn die erste Anweisung eine Ausnahme auslöst, werden nachfolgende Anweisungen nie ausgeführt; wenn sie keine Ausnahme auslöst, sollte sie nach außerhalb von Assert.Throws verschoben werden.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws darf nur eine einzelne Anweisung/einen einzelnen Ausdruck enthalten
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws darf nur eine einzelne Anweisung/einen einzelnen Ausdruck enthalten
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.es.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.es.xlf
index 75d54fde75..8509932845 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.es.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.es.xlf
@@ -132,6 +132,16 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
No use "Assert.AreSame" o "Assert.AreNotSame" con tipos de valor
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ Reemplace '{0}' con parámetros de formato utilizando string.Format o interpolación de cadenas
+
+
+
+ Avoid using Assert methods with format parameters
+ Evite el uso de métodos Assert con parámetros de formato
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.Preferir "Assert.ThrowsExactly" o "Assert.ThrowsExactlyAsync" en lugar de "[ExpectedException]", ya que garantiza que solo la llamada esperada inicie la excepción esperada. Las API de aserción también proporcionan más flexibilidad y permiten declarar propiedades adicionales de la ejecución.
@@ -147,6 +157,16 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
Evitar '[ExpectedException]'
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ Elimine el argumento 'DynamicDataSourceType' para utilizar el comportamiento de detección automática predeterminado
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ Evite pasar un 'DynamicDataSourceType' explícito y utilice el comportamiento de detección automática predeterminado
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.No realice ninguna aserción dentro de métodos 'async void', funciones locales o expresiones lambda. Las excepciones que se inicien en este contexto serán excepciones no controladas. Al usar VSTest en .NET Framework, se ingerirán silenciosamente. Cuando se usa Microsoft.Testing.Platform o VSTest en .NET moderno, es posible que se bloquee el proceso.
@@ -277,8 +297,13 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- El tipo de argumento DataRow debe coincidir con el tipo de parámetro de método. Se producen errores de coincidencia en los índices: {0}
+ DataRow argument types do not match method parameter types. {0}
+ Los tipos de argumentos DataRow no coinciden con los tipos de parámetro de método. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ El parámetro '{0}' espera el tipo '{1}', pero el valor proporcionado tiene el tipo '{2}'
@@ -402,11 +427,21 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
'[DynamicData]' solo debe establecerse en un método de prueba
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ El miembro '{0}.{1}' de '[DynamicData]' es un campo, por lo que debe usar 'DynamicDataSourceType.AutoDetect' o 'DynamicDataSourceType.Field' (la detección automática es el valor predeterminado cuando no se especifica explícitamente y se recomienda)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' miembro '{0}.{1}' es un método, por lo que debe usar 'DynamicDataSourceType.AutoDetect' o 'DynamicDataSourceType.Method' (la detección automática es el valor predeterminado cuando no se especifica explícitamente y se recomienda)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ El miembro '{0}.{1}' de '[DynamicData]' no es una propiedad, un método o un campo. Solo se admiten propiedades, métodos y campos.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' miembro '{0}.{1}' no es una propiedad ni un método. Solo se admiten propiedades y métodos.
@@ -427,6 +462,81 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
DynamicData debe ser válido
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ Al llamar a métodos asincrónicos que tienen sobrecargas que aceptan un parámetro CancellationToken, es preferible utilizar la sobrecarga con TestContext.CancellationToken para habilitar la cancelación cooperativa y respetar los tiempos de espera de las pruebas.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ Considere utilizar la sobrecarga que acepta un CancellationToken y pase 'TestContext.CancellationToken'
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ Flujo de TestContext.CancellationToken a operaciones asincrónicas
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ Los métodos marcados con '[GlobalTestInitialize]' o '[GlobalTestCleanup]' deben seguir el siguiente diseño para ser válidos:
+-no se puede declarar en una clase genérica
+- debería ser 'público'
+- debería estar 'estático'
+-no debe ser 'async void'
+-no debe ser un método especial (finalizador, operador...).
+-no debe ser genérico
+-debe tomar un parámetro de tipo 'TestContext'
+- El tipo de valor devuelto debe ser 'void', 'Task' o 'ValueTask'
+
+El tipo que declara estos métodos también debe respetar las reglas siguientes:
+-El tipo debe ser una clase
+-La clase debe ser 'public'
+-La clase no debe ser 'static'
+-La clase debe marcarse con '[TestClass]' (o un atributo derivado)
+-la clase no debe ser genérica.
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ La firma del método del accesorio de pruebas global '{0}' no es válida
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ Los métodos GlobalTestInitialize y GlobalTestCleanup deben tener un diseño válido
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Los métodos como Contains, StartsWith y EndsWith devuelven valores booleanos que indican si se cumplió la condición. Ignorar estos valores devueltos probablemente sea un error.
+
+
+
+ The return value of '{0}' should not be ignored
+ No se debe ignorar el valor devuelto de '{0}'
+
+
+
+ Do not ignore the return value of string methods
+ No ignore el valor devuelto de los métodos de cadena
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assertUsar "Assert.Fail" en lugar de una aserción 'Assert.{0}' que siempre tiene errores
@@ -437,6 +547,21 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
Usar "Assert.Fail" en lugar de una aserción que siempre tiene errores
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ "DataTestMethodAttribute" está obsoleto y no proporciona ninguna funcionalidad adicional sobre "TestMethodAttribute". Use "TestMethodAttribute" para todos los métodos de prueba, incluidas las pruebas parametrizadas.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ "DataTestMethod" está obsoleto. Use "TestMethod" en su lugar.
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ Preferir "TestMethod" a "DataTestMethod"
+
+ Review or remove the assertion as its condition is known to be always trueRevise o quite la aserción porque se sabe que su condición siempre es true
@@ -517,6 +642,16 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
Los tipos públicos deben ser clases de prueba
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ Use 'Assert'{0}. en lugar de 'StringAssert.'{1}
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ Usar 'Assert' en lugar de 'StringAssert'
+
+ Test class '{0}' should be validLa clase de prueba '{0}' debe ser válida
@@ -532,6 +667,21 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
La firma del método de prueba '{0}' no es válida
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken proporciona una manera más directa de acceder al token de cancelación en comparación con TestContext.CancellationTokenSource.Token.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ Use 'TestContext.CancellationToken' en lugar de 'TestContext.CancellationTokenSource.Token'
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ Use TestContext.CancellationToken en lugar de TestContext.CancellationTokenSource.Token
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.Sin usar 'ClassCleanupBehavior.EndOfClass', el '[ClassCleanup]' se ejecutará de forma predeterminada al final del ensamblado y no al final de la clase.
@@ -720,13 +870,13 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.El tipo que contiene '[TestMethod]' debe marcarse con '[TestClass]'; de lo contrario, el método de prueba se omitirá de forma silenciosa.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- La clase '{0}' contiene métodos de prueba y debe marcarse con '[TestClass]'
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ El tipo '{0}' contiene métodos de prueba y debe marcarse con '[TestClass]'
@@ -744,6 +894,11 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
Los métodos de prueba asincrónicos no requieren el sufijo "Async".
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ MSTest requiere el parámetro TestContext para los métodos AssemblyInitialize y ClassInitialize
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] solo se puede establecer en métodos marcados con [TestMethod]
@@ -764,6 +919,21 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
Usar 'ConditionBaseAttribute' en clases de prueba
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ No se recomienda usar "[Timeout]" sin establecer explícitamente "CooperativeCancellation = true". En una versión futura, la cancelación cooperativa se convertirá en el comportamiento predeterminado. Establece "CooperativeCancellation = true" para participar en el comportamiento recomendado y evitar cambios importantes.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ Usa "CooperativeCancellation = true" con "[Timeout]" para habilitar el comportamiento de cancelación cooperativa.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ Usa "CooperativeCancellation = true" con "[Timeout]"
+
+ '[DeploymentItem]' can be specified only on test class or test method'[DeploymentItem]' solo se puede especificar en la clase de prueba o el método de prueba
@@ -819,6 +989,36 @@ El tipo que declara estos métodos también debe respetar las reglas siguientes:
Usar el atributo de reintento en el método de prueba
+
+ TestContext property cannot be accessed in this context
+ No se puede tener acceso a la propiedad TestContext en este contexto
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ No se puede tener acceso a la propiedad TestContext "{0}" en el método "{1}"
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ Algunas propiedades de TestContext solo están disponibles durante la ejecución de la prueba y no se puede acceder a ellas en los métodos assembly initialize, class initialize, class cleanup o assembly cleanup.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Los métodos Assert.Throws solo deben contener una sola instrucción o expresión. Varias instrucciones pueden ser engañosas: si se lanza la primera instrucción, las instrucciones posteriores nunca se ejecutan; si no se lanza, se debe mover fuera de Assert.Throws.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws debe contener solo una única instrucción o expresión
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws debe contener solo una única instrucción o expresión
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.fr.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.fr.xlf
index 8bdc50155d..8a75b123d9 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.fr.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.fr.xlf
@@ -132,6 +132,16 @@ Le type doit être une classe
N’utilisez pas 'Assert.AreSame' ou 'Assert.AreNotSame' avec des types valeur
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ Remplacez « {0} » par des paramètres de format par une chaîne. Mise en forme ou interpolation de chaîne
+
+
+
+ Avoid using Assert methods with format parameters
+ Évitez d’utiliser des méthodes Assert avec des paramètres de format
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.Préférez « Assert.ThrowsExactly » ou « Assert.ThrowsExactlyAsync » à « [ExpectedException] », car il garantit que seul l’appel attendu lève l’exception attendue. Les API d’assertion offrent également plus de flexibilité et vous permettent de déclarer des propriétés supplémentaires de l’exception.
@@ -147,6 +157,16 @@ Le type doit être une classe
Éviter « [ExpectedException] »
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ Supprimez l’argument « DynamicDataSourceType » pour utiliser le comportement de détection automatique par défaut
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ Évitez de passer un type « DynamicDataSourceType » explicite et utilisez le comportement de détection automatique par défaut
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.N’effectuez pas d’assertion dans les méthodes 'async void', les fonctions locales ou les expressions lambda. Les exceptions levées dans ce contexte seront des exceptions non gérées. Lors de l’utilisation de VSTest sous .NET Framework, ils sont silencieusement coupés. Quand vous utilisez Microsoft.Testing.Platform ou VSTest sous .NET moderne, ils peuvent bloquer le processus.
@@ -277,8 +297,13 @@ Le type doit être une classe
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- Le type d’argument DataRow doit correspondre au type de paramètre de la méthode. Des incompatibilités se produisent aux index :{0}
+ DataRow argument types do not match method parameter types. {0}
+ Les types d’argument DataRow ne correspondent pas aux types de paramètre de la méthode. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ Le paramètre « {0} » attend un type « {1} », mais la valeur fournie a un type « {2} »
@@ -402,11 +427,21 @@ Le type doit être une classe
'[DynamicData]' ne doit être défini que sur une méthode de test
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ Le membre « [DynamicData] » « {0}.{1} » est un champ, vous devez donc utiliser « DynamicDataSourceType.AutoDetect » ou « DynamicDataSourceType.Field » (la détection automatique est la valeur par défaut lorsqu’elle n’est pas spécifiée explicitement et est recommandée)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' membre ' {0}.{1}' est une méthode, vous devez donc utiliser 'DynamicDataSourceType.AutoDetect' ou 'DynamicDataSourceType.Method' (la détection automatique est la valeur par défaut quand elle n’est pas spécifiée explicitement et est recommandée)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ Le membre « [Données dynamiques] » « {0}.{1} » n’est pas une propriété, une méthode ou un champ. Seules les propriétés, les méthodes et les champs sont pris en charge.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' membre '{0}.{1}' n’est ni une propriété ni une méthode. Seules les propriétés et les méthodes sont prises en charge.
@@ -427,6 +462,81 @@ Le type doit être une classe
DynamicData doit être valide
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ Lors de l’appel de méthodes asynchrones qui ont des surcharges acceptant un paramètre CancellationToken, préférez utiliser la surcharge avec TestContext.CancellationToken pour activer l’annulation collaborative et respecter les délais d’expiration des tests.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ Envisagez d’utiliser la surcharge qui accepte un CancellationToken et passe « TestContext.CancellationToken »
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ Transmettez TestContext.CancellationToken aux opérations asynchrones
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ Les méthodes marquées par « [GlobalTestInitialize] » ou « [GlobalTestCleanup] » doivent respecter le schéma suivant pour être valides :
+- elle ne peut pas être déclarée dans une classe générique
+– elle doit être « public »
+– elle doit être « static »
+– elle ne doit pas être « async void »
+– il ne doit pas s’agir d’une méthode spéciale (finaliseur, opérateur...).
+– elle ne doit pas être générique
+– il doit prendre un paramètre de type « TestContext »
+- le type de retour doit être « void », « Task » ou « ValueTask »
+
+Le type déclarant ces méthodes doit également respecter les règles suivantes :
+- le type doit être une classe
+- la classe doit être « public »
+- la classe ne doit pas être « static »
+- la classe doit être marquée par « [TestClass] » (ou un attribut dérivé)
+- la classe ne doit pas être générique.
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ La signature de la méthode « {0} » de la fixture de test globale est invalide
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ Les méthodes GlobalTestInitialize et GlobalTestCleanup doivent avoir une structure valide
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Les méthodes telles que Contains, StartsWith et EndsWith retournent des valeurs booléennes qui indiquent si la condition a été remplie. Ignorer ces valeurs de retour est certainement une erreur.
+
+
+
+ The return value of '{0}' should not be ignored
+ La valeur de retour « {0} » ne doit pas être ignorée
+
+
+
+ Do not ignore the return value of string methods
+ Ne négligez pas la valeur de retour des méthodes de chaîne
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assertUtilisez « Assert.Fail » à la place d’une assertion « Assert.{0} » toujours en échec
@@ -437,6 +547,21 @@ Le type doit être une classe
Utilisez « Assert.Fail » à la place d’une assertion toujours en échec
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ « DataTestMethodAttribute » est obsolète et ne fournit aucune fonctionnalité supplémentaire par rapport à « TestMethodAttribute ». Utiliser « TestMethodAttribute » pour toutes les méthodes de test, y compris les tests paramétrés.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ « DataTestMethod » est obsolète. Utilisez « TestMethod » à la place.
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ Préférer « TestMethod » à « DataTestMethod »
+
+ Review or remove the assertion as its condition is known to be always trueVérifier ou supprimer l’assertion, car sa condition est connue pour être toujours vraie
@@ -517,6 +642,16 @@ Le type doit être une classe
Les types publics doivent être des classes de test
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ Utilisez « Assert.{0} » au lieu de « StringAssert.{1} »
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ Utilisez « Assert » au lieu de « StringAssert »
+
+ Test class '{0}' should be validLa classe de test « {0} » doit être valide
@@ -532,6 +667,21 @@ Le type doit être une classe
La signature « {0} » de la méthode de test n’est pas valide
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken offre un moyen plus direct d’accéder au jeton d’annulation par rapport à TestContext.CancellationTokenSource.Token.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ Utilisez « TestContext.CancellationToken » au lieu de « TestContext.CancellationTokenSource.Token »
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ Utilisez TestContext.CancellationToken au lieu de TestContext.CancellationTokenSource.Token
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.Sans utiliser 'ClassCleanupBehavior.EndOfClass', '[ClassCleanup]' sera exécuté par défaut à la fin de l’assemblée et non à la fin de la classe.
@@ -720,13 +870,13 @@ Le type doit être une classe
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.Le type contenant « [TestMethod] » doit être marqué avec « [TestClass] », sans quoi la méthode de test sera ignorée silencieusement.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- La classe « {0} » contient des méthodes de test et doit être marquée avec « [TestClass] »
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ Le type « {0} » contient des méthodes de test et doit être marquée avec « [TestClass] »
@@ -744,6 +894,11 @@ Le type doit être une classe
Les méthodes de test asynchrones ne nécessitent pas le suffixe 'Async'
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ Le paramètre TestContext est requis par MSTest pour les méthodes AssemblyInitialize et ClassInitialize
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] ne peut être défini que sur les méthodes marquées avec [TestMethod]
@@ -764,6 +919,21 @@ Le type doit être une classe
Utiliser 'ConditionBaseAttribute' sur les classes de test
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ L’utilisation de '[Timeout]' sans définir explicitement 'CooperativeCancellation = true' est déconseillée. Dans une future version, l’annulation coopérative deviendra le comportement par défaut. Définissez 'CooperativeCancellation = true' pour adopter le comportement recommandé et éviter les changements incompatibles.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ Utilisez 'CooperativeCancellation = true' avec '[Timeout]' pour activer le comportement d’annulation coopératif
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ Utiliser 'CooperativeCancellation = true' avec '[Timeout]'
+
+ '[DeploymentItem]' can be specified only on test class or test method« [DeploymentItem] » ne peut être spécifié que sur une classe de test ou une méthode de test
@@ -819,6 +989,36 @@ Le type doit être une classe
Utilisez l’attribut de nouvelle tentative sur la méthode de test
+
+ TestContext property cannot be accessed in this context
+ Impossible d’accéder à la propriété TestContext dans ce contexte
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ Impossible d’accéder à la propriété TestContext « {0} » dans la méthode « {1} »
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ Certaines propriétés TestContext sont disponibles uniquement pendant l’exécution du test et ne sont pas accessibles dans les méthodes d’initialisation d’assembly, d’initialisation de classe, de nettoyage de classe ou de nettoyage d’assembly.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Les méthodes Assert.Throws ne doivent contenir qu’une seule instruction ou expression. Plusieurs instructions peuvent prêter à confusion : si la première instruction lève une exception, les instructions suivantes ne sont jamais exécutées ; si elle ne lève pas d'exception, elle doit être déplacée en dehors de Assert.Throws.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws ne doit contenir qu’une seule instruction
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws ne doit contenir qu’une seule instruction
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.it.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.it.xlf
index 3201a18d17..3c029d6838 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.it.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.it.xlf
@@ -132,6 +132,16 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
Non usare 'Assert.AreSame' o 'Assert.AreNotSame' con i tipi di valore
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ Sostituire '{0}' con i parametri di formato utilizzando string.Format o l'interpolazione di stringa
+
+
+
+ Avoid using Assert methods with format parameters
+ Evitare di usare metodi Assert con parametri di formato
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.Preferire 'Assert.ThrowsExactly' o 'Assert.ThrowsExactlyAsync' a '[ExpectedException]' perché assicura che solo la chiamata prevista generi l'eccezione prevista. Le API di asserzione offrono anche maggiore flessibilità e consentono di dichiarare proprietà aggiuntive dell'eccezione.
@@ -147,6 +157,16 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
Evita '[ExpectedException]'
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ Rimuovere l'argomento 'DynamicDataSourceType' per utilizzare il comportamento di rilevamento automatico predefinito
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ Evitare di passare l'argomento 'DynamicDataSourceType' in modo esplicito e utilizzare il comportamento di rilevamento automatico predefinito
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.Non dichiarare all'interno di metodi 'async void', funzioni locali o espressioni lambda. Le eccezioni generate in questo contesto saranno eccezioni non gestite. Quando si usa VSTest in .NET Framework, verranno eliminati automaticamente. Quando si usa Microsoft.Testing.Platform o VSTest nella versione moderna di .NET, è possibile che il processo venga arrestato in modo anomalo.
@@ -277,8 +297,13 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- Il tipo di argomento di DataRow deve corrispondere al tipo di parametro del metodo. Errori di corrispondenza in corrispondenza degli indici: {0}
+ DataRow argument types do not match method parameter types. {0}
+ Il tipo di argomento di DataRow deve corrispondere ai tipi di parametro del metodo. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ Il parametro '{0}' prevede il tipo '{1}', ma il tipo del valore specificato è '{2}'
@@ -402,11 +427,21 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
'[DynamicData]' deve essere impostato solo su un metodo di test
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ Il membro di '[DynamicData]' '{0}.{1}' è un campo, quindi è necessario usare 'DynamicDataSourceType.AutoDetect' o 'DynamicDataSourceType.Field' (il rilevamento automatico è l'impostazione predefinita quando non è specificato esplicitamente ed è l'opzione consigliata)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' membro '{0}.{1}' è un metodo, quindi è consigliabile usare 'DynamicDataSourceType.AutoDetect' o 'DynamicDataSourceType.Method'. Il rilevamento automatico è l'impostazione predefinita quando non è specificata in modo esplicito ed è consigliabile
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ Il membro di '[DynamicData]' '{0}.{1}' non è una proprietà, un metodo o un campo. Sono supportati solo le proprietà, i metodi e i campi.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' membro '{0}.{1}' non è una proprietà né un metodo. Sono supportati solo metodi e proprietà.
@@ -427,6 +462,81 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
DynamicData deve essere valido
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ Quando si chiamano metodi asincroni con overload che accettano un parametro CancellationToken, preferire l'uso dell'overload con TestContext.CancellationToken per abilitare l'annullamento cooperativo e rispettare i timeout di test.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ Valutare la possibilità di usare l'overload che accetta un CancellationToken e a passare 'TestContext.CancellationToken'
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ Flusso da TestContext.CancellationToken a operazioni asincrone
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ I metodi contrassegnati con ‘[GlobalTestInitialize]’ o ‘[GlobalTestCleanup]’ devono seguire il layout seguente per essere validi:
+- Non può essere dichiarato in una classe generica
+- Deve essere 'public'
+- Deve essere 'static'
+- Non deve essere 'async void'
+- Non deve essere un metodo speciale (finalizzatore, operatore...).
+- Non deve essere generico
+- Deve accettare un parametro di tipo 'TestContext'
+- Il tipo restituito deve essere 'void', 'Task' o 'ValueTask'
+
+Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
+- Il tipo deve essere una classe
+- La classe deve essere 'public'
+- La classe non deve essere 'static'
+- La classe deve essere contrassegnata con '[TestClass]' (o un attributo derivato)
+- La classe non deve essere generica.
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ La firma del metodo di fixture di test globale '{0}' non è valida
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ I metodi GlobalTestInitialize e GlobalTestCleanup devono avere un layout valido
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Metodi come Contains, StartsWith e EndsWith restituiscono valori booleani che indicano se la condizione è stata soddisfatta. Ignorare questi valori restituiti è probabilmente un errore.
+
+
+
+ The return value of '{0}' should not be ignored
+ Il valore restituito di '{0}' non deve essere ignorato
+
+
+
+ Do not ignore the return value of string methods
+ Non ignorare il valore restituito dei metodi stringa
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assertUsare 'Assert.Fail' invece di un'asserzione 'Assert.{0}' che ha sempre esito negativo.
@@ -437,6 +547,21 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
Usare 'Assert.Fail' invece di un'asserzione che ha sempre esito negativo
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ 'DataTestMethodAttribute' è obsoleto e non offre funzionalità aggiuntive rispetto a 'TestMethodAttribute'. Utilizzare 'TestMethodAttribute' per tutti i metodi di test, inclusi i test con parametri.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ 'DataTestMethod' è obsoleto. Utilizzare 'TestMethod' invece.
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ Preferisci 'TestMethod' a 'DataTestMethod'
+
+ Review or remove the assertion as its condition is known to be always trueRivedere o rimuovere l'asserzione perché la relativa condizione è sempre true
@@ -517,6 +642,16 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
I tipi di pubblico dovrebbero essere classi di test
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ Usa 'Assert.{0}' invece di 'StringAssert.{1}'
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ Usa 'Assert' invece di 'StringAssert'
+
+ Test class '{0}' should be validLa classe di test '{0}' deve essere valida
@@ -532,6 +667,21 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
La firma del metodo di test '{0}' non è valida
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken offre un modo più diretto per accedere al token di annullamento rispetto a TestContext.CancellationTokenSource.Token.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ Usare 'TestContext.CancellationToken' invece di 'TestContext.CancellationTokenSource.Token'
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ Usare TestContext.CancellationToken invece di TestContext.CancellationTokenSource.Token
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.Se non si usa 'ClassCleanupBehavior.EndOfClass', '[ClassCleanup]' verrà eseguito per impostazione predefinita alla fine dell'assembly e non alla fine della classe.
@@ -720,13 +870,13 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.Il tipo contenente '[TestMethod]' deve essere contrassegnato con '[TestClass]', altrimenti il metodo di test verrà ignorato automaticamente.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- La classe '{0}' contiene metodi di test e deve essere contrassegnata come '[TestClass]'
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ Il tipo '{0}' contiene metodi di test e deve essere contrassegnato come '[TestClass]'
@@ -744,6 +894,11 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
I metodi di test asincroni non richiedono il suffisso 'Async'
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ Il parametro TestContext è necessario a MSTest per i metodi AssemblyInitialize e ClassInitialize
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] può essere impostato solo su metodi contrassegnati con [TestMethod]
@@ -764,6 +919,21 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
Usa 'ConditionBaseAttribute' nelle classi di test
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ L'uso di "[Timeout]" senza impostare esplicitamente "CooperativeCancellation = true" è sconsigliato. In una versione futura l'annullamento cooperativo diventerà il comportamento predefinito. Impostare "CooperativeCancellation = true" per acconsentire esplicitamente al comportamento consigliato ed evitare modifiche che causano un'interruzione.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ Usare "CooperativeCancellation = true" con "[Timeout]" per abilitare il comportamento di annullamento cooperativo
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ Usa "CooperativeCancellation = true" con "[Timeout]"
+
+ '[DeploymentItem]' can be specified only on test class or test method'[DeploymentItem]' può essere specificato solo per la classe di test o il metodo di test
@@ -819,6 +989,36 @@ Anche il tipo che dichiara questi metodi deve rispettare le regole seguenti:
Utilizzare l'attributo di ripetizione nel metodo di test
+
+ TestContext property cannot be accessed in this context
+ Non è possibile accedere alla proprietà TestContext in questo contesto
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ Non è possibile accedere alla proprietà TestContext '{0}' nel metodo '{1}'
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ Alcune proprietà TestContext sono disponibili solo durante l'esecuzione dei test e non è possibile accedervi nei metodi di inizializzazione degli assembly, inizializzazione delle classi, pulizia delle classi o pulizia degli assembly.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ I metodi Assert.Throws devono contenere solo una singola istruzione o espressione. Istruzioni multiple possono essere fuorvianti: se la prima istruzione genera, le istruzioni successive non vengono mai eseguite; se non genera, è necessario spostarla all'esterno di Assert.Throws.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws deve contenere solo una singola istruzione/espressione
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws deve contenere solo una singola istruzione/espressione
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.ja.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.ja.xlf
index 695f062ace..5d80076bd1 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.ja.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.ja.xlf
@@ -132,6 +132,16 @@ The type declaring these methods should also respect the following rules:
値型に 'Assert.AreSame' または 'Assert.AreNotSame' を使用しないでください
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ '{0}' を string.Format または文字列の補間で書式設定パラメーターに置き換える
+
+
+
+ Avoid using Assert methods with format parameters
+ 書式設定パラメーターで Assert メソッドを使用しないようにする
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.'[ExpectedException]' よりも 'Assert.ThrowsExactly' または 'Assert.ThrowsExactlyAsync' を優先します。これは、予期された呼び出しのみが予期された例外をスローするようにするためです。アサート API もさらに柔軟性が高く、これにより例外の追加プロパティをアサートできます。
@@ -147,6 +157,16 @@ The type declaring these methods should also respect the following rules:
'[ExpectedException]' を回避する
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ 既定の自動検出動作を使用するには、'DynamicDataSourceType' 引数を削除してください
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ 明示的な 'DynamicDataSourceType' を渡さず、既定の自動検出動作を使用してください
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.'async void' メソッド、ローカル関数、またはラムダ内ではアサートしないでください。このコンテキストでスローされる例外は、ハンドルされない例外になります。.NET Frameworkで VSTest を使用すると、警告なしに飲み込まれるようになります。最新の .NET で Microsoft.Testing.Platform または VSTest を使用すると、プロセスがクラッシュする可能性があります。
@@ -277,8 +297,13 @@ The type declaring these methods should also respect the following rules:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- DataRow 引数の型は、メソッド パラメーターの型と一致させる必要があります。インデックスで不一致が発生しました: {0}
+ DataRow argument types do not match method parameter types. {0}
+ DataRow 引数の型がメソッド パラメーターの型と一致しません。 {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ パラメーター '{0}' の型は '{1}' が想定されていますが、指定された値の型は '{2}' です
@@ -402,11 +427,21 @@ The type declaring these methods should also respect the following rules:
'[DynamicData]' はテスト メソッドでのみ設定する必要があります
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ '[DynamicData]' のメンバー '{0}.{1}' はフィールドであるため、'DynamicDataSourceType.AutoDetect' または 'DynamicDataSourceType.Field' を使用する必要があります (明示的に指定しない場合は既定で自動検出され、これが推奨されます)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' メンバー '{0}.{1}' はメソッドであるため、'DynamicDataSourceType.AutoDetect' または 'DynamicDataSourceType.Method' を使用する必要があります (自動検出は明示的に指定されていない場合の既定値であり、推奨されます)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ '[DynamicData]' のメンバー '{0}.{1}' は、プロパティ、メソッド、フィールドではありません。サポートされているのは、プロパティ、メソッド、フィールドのみです。
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.メンバー '{0}.{1}' '[DynamicData]' プロパティでもメソッドでもありません。プロパティとメソッドのみがサポートされています。
@@ -427,6 +462,81 @@ The type declaring these methods should also respect the following rules:
DynamicData は有効である必要があります
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ CancellationToken パラメーターを受け入れるオーバーロードを持つ非同期メソッドを呼び出す場合は、TestContext.CancellationToken でオーバーロードを使用して協調的な取り消しを有効にし、テスト タイムアウトを考慮します。
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ CancellationToken を受け取り、'TestContext.CancellationToken' を渡すオーバーロードの使用を検討してください
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ TestContext.CancellationToken を非同期操作にフローする
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ '[GlobalTestInitialize]' または '[GlobalTestCleanup]' でマークされたメソッドを有効にするには、次のレイアウトに従う必要があります:
+- ジェネリック クラスで宣言することはできません
+- 'public' である必要があります
+- 'static' である必要があります
+- 'async void' にすることはできません
+- 特殊なメソッド (ファイナライザー、演算子...) にすることはできません。
+- ジェネリックにすることはできません
+- 'TestContext' 型のパラメーターを 1 つ受け取る必要があります
+- 戻り値の型が 'void'、'Task'、または 'ValueTask' である必要があります
+
+これらのメソッドを宣言する型も、次の規則に従う必要があります:
+- 型はクラスである必要があります
+-クラスは 'public' である必要があります
+- クラスを 'static' にすることはできません
+- クラスは '[TestClass]' (または派生属性) でマークする必要があります
+- クラスをジェネリックにすることはできません。
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ グローバル テスト フィクスチャ メソッド '{0}' シグネチャが無効です
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ GlobalTestInitialize および GlobalTestCleanup メソッドには有効なレイアウトが必要です
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Contains、StartsWith、EndsWith などのメソッドは、条件が満たされたかどうかを示すブール値を返します。これらの戻り値を無視するのは間違いである可能性が高いです。
+
+
+
+ The return value of '{0}' should not be ignored
+ '{0}' の戻り値は無視しないでください
+
+
+
+ Do not ignore the return value of string methods
+ 文字列メソッドの戻り値を無視しない
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assert常に失敗している 'Assert.{0}' アサートの代わりに 'Assert.Fail' を使用する。
@@ -437,6 +547,21 @@ The type declaring these methods should also respect the following rules:
常に失敗しているアサートの代わりに 'Assert.Fail' を使用する
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ 'DataTestMethodAttribute' は廃止されており、'TestMethodAttribute' に対して追加の機能は提供しません。パラメーター化されたテストを含むすべてのテスト メソッドには、'TestMethodAttribute' を使用してください。
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ 'DataTestMethod' は廃止されました。代わりに 'TestMethod' を使用してください。
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ 'DataTestMethod' よりも 'TestMethod' を優先する
+
+ Review or remove the assertion as its condition is known to be always trueアサーションの条件が常に TRUE であることが判明しているため、アサーションを確認または削除してください
@@ -517,6 +642,16 @@ The type declaring these methods should also respect the following rules:
パブリック型はテスト クラスである必要があります
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ 'StringAssert.{1}' の代わりに 'Assert.{0}' を使用します
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ 'StringAssert' の代わりに 'Assert' を使用
+
+ Test class '{0}' should be validテスト クラス '{0}' は有効である必要があります
@@ -532,6 +667,21 @@ The type declaring these methods should also respect the following rules:
テスト メソッド '{0}' シグネチャが無効です
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken は、TestContext.CancellationTokenSource.Token と比較して、より直接的に取り消しトークンにアクセスできます。
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ 'TestContext.CancellationTokenSource.Token' の代わりに 'TestContext.CancellationToken' を使用する
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ TestContext.CancellationTokenSource.Token の代わりに TestContext.CancellationToken を使用する
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.'ClassCleanupBehavior.EndOfClass' を使用しない場合、'[ClassCleanup]' は既定でアセンブリの最後に実行され、クラスの最後には実行されません。
@@ -720,13 +870,13 @@ The type declaring these methods should also respect the following rules:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
- 連続する型 '[TestMethod]' は '[TestClass]' でマークする必要があります。それ以外の場合、テスト メソッドは暗黙的に無視されます。
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ '[TestMethod]' を含む型は '[TestClass]' でマークする必要があります。そうしないとテスト メソッドは暗黙的に無視されます。
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- クラス '{0}' にはテスト メソッドが含まれており、'[TestClass]' でマークする必要があります
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ 型 '{0}' にはテスト メソッドが含まれており、'[TestClass]' でマークする必要があります
@@ -744,6 +894,11 @@ The type declaring these methods should also respect the following rules:
非同期テスト メソッドには 'Async' サフィックスは不要です
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ AssemblyInitialize メソッドと ClassInitialize メソッドに対する MSTest には TestContext パラメーターが必要です
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] は、[TestMethod] でマークされたメソッドにのみ設定できます
@@ -764,6 +919,21 @@ The type declaring these methods should also respect the following rules:
テスト クラスで 'ConditionBaseAttribute' を使用する
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ 'CooperativeCancellation = true' を明示的にを設定せずに '[Timeout]' を使用することは推奨されません。将来のバージョンでは、協調的キャンセルが既定の動作になります。推奨される動作をオプトインし、破壊的な変更を避けるために、'CooperativeCancellation = true' を設定します。
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ '[Timeout]' と共に 'CooperativeCancellation = true' を使用して、協調的キャンセルの動作を有効にします
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ '[Timeout]' と共に 'CooperativeCancellation = true' を使用する
+
+ '[DeploymentItem]' can be specified only on test class or test method'[DeploymentItem]' は、テスト クラスまたはテスト メソッドでのみ指定できます
@@ -819,6 +989,36 @@ The type declaring these methods should also respect the following rules:
テスト メソッドで retry 属性を使用する
+
+ TestContext property cannot be accessed in this context
+ このコンテキストでは TestContext プロパティにアクセスできません
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ TestContext プロパティ '{0}' に '{1}' メソッドでアクセスできません
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ TestContext プロパティの一部はテストの実行中にのみ使用でき、assenbly initialize、class initialize、class cleanup、または assembly cleanup メソッドではアクセスできません。
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Assert.Throws メソッドには 1 つのステートメントまたは式のみを含める必要があります。複数のステートメントは誤解を招く可能性があります。最初のステートメントがスローされた場合、後続のステートメントは実行されません。スローされない場合は、Assert.Throws の外部に移動する必要があります。
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws には 1 つのステートメントまたは式のみを含める必要があります
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws には 1 つのステートメントまたは式のみを含める必要があります
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.ko.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.ko.xlf
index 1f862f2ac8..0a46f0e065 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.ko.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.ko.xlf
@@ -132,6 +132,16 @@ The type declaring these methods should also respect the following rules:
값 형식에 'Assert.AreSame' 또는 'Assert.AreNotSame'을 사용하지 마세요.
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ '{0}'을(를) string.Format이나 문자열 보간을 사용하는 포맷 매개변수로 변경하기
+
+
+
+ Avoid using Assert methods with format parameters
+ 형식 매개 변수를 사용하여 Assert 메서드는 사용하지 마세요
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.예상되는 호출만 예상되는 예외를 던지도록 하기 위해 '[ExpectedException]보다 'Assert.ThrowsExactly' 또는 'Assert.ThrowsExactlyAsync'를 사용하는 것이 좋습니다. 또한 어설션 API는 더 많은 유연성을 제공하고 예외의 추가 속성을 어설션할 수 있습니다.
@@ -147,6 +157,16 @@ The type declaring these methods should also respect the following rules:
'[ExpectedException]' 사용 지양
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ 기본 자동 검색 동작을 사용하려면 'DynamicDataSourceType' 인수를 제거합니다.
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ 명시적 'DynamicDataSourceType'을 전달하지 말고 기본 자동 검색 동작을 사용합니다.
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.'async void' 메서드, 로컬 함수 또는 람다 내에서 어설션하지 마십시오. 이 컨텍스트에서 throw된 예외는 처리되지 않은 예외가 됩니다. .NET Framework 아래에서 VSTest를 사용하면 자동으로 무시됩니다. 최신 .NET에서 Microsoft.Testing.Platform 또는 VSTest를 사용하는 경우 프로세스가 중단될 수 있습니다.
@@ -277,8 +297,13 @@ The type declaring these methods should also respect the following rules:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- DataRow 인수 형식은 메서드 매개 변수 형식과 일치해야 합니다. 인덱스에서 불일치 발생: {0}
+ DataRow argument types do not match method parameter types. {0}
+ DataRow 인수 형식이 메서드 매개 변수 형식과 일치하지 않습니다. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ '{0}' 매개 변수에는 '{1}' 형식이 필요한데 제공된 값의 형식은 '{2}'입니다.
@@ -402,11 +427,21 @@ The type declaring these methods should also respect the following rules:
'[DynamicData]'는 테스트 메서드에서만 설정해야 합니다.
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ '[DynamicData]' 구성원 '{0}.{1}'은(는) 필드이므로 'DynamicDataSourceType.AutoDetect' 또는 'DynamicDataSourceType.Field'를 사용해야 합니다(명시적으로 지정하지 않은 경우 자동 검색이 기본값이며 권장됨).
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' 멤버 '{0}.{1}'은(는) 'DynamicDataSourceType.AutoDetect' 또는 'DynamicDataSourceType.Method'를 사용해야 하는 메서드입니다.(명시적으로 지정하지 않은 경우 자동 검색이 기본값이며 권장)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ '[DynamicData]' 구성원 '{0}.{1}'은(는) 속성, 메서드 또는 필드가 아닙니다. 속성, 메서드 및 필드만 지원됩니다.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' 멤버 '{0}.{1}'은(는) 속성이나 메서드가 아닙니다. 속성 및 메서드만 지원됩니다.
@@ -427,6 +462,81 @@ The type declaring these methods should also respect the following rules:
DynamicData는 유효해야 합니다.
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ CancellationToken 매개변수를 허용하는 오버로드가 있는 비동기 메서드를 호출할 때는 협력적 취소를 활성화하고 테스트 시간 제한을 준수하기 위해 TestContext.CancellationToken이 있는 오버로드를 사용하는 것이 좋습니다.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ CancellationToken을 수락하고 'TestContext.CancellationToken'을 전달하는 오버로드를 사용하는 것이 좋습니다.
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ 비동기 작업으로 TestContext.CancellationToken 흐름
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ '[GlobalTestInitialize]' 또는 '[GlobalTestCleanup]'으로 표시된 메서드는 다음 레이아웃을 따라야 유효합니다.
+- 제네릭 클래스에서 선언할 수 없습니다.
+- 'public'이어야 합니다.
+- 'static'이어야 합니다.
+- 'async void'가 아니어야 합니다.
+- 특수 메서드(종료자, 연산자...)가 아니어야 합니다.
+- 제네릭이 아니어야 합니다.
+- 'TestContext' 형식의 매개 변수를 하나 사용해야 합니다.
+- 반환 형식은 'void', 'Task' 또는 'ValueTask'여야 합니다.
+
+이러한 메서드를 선언하는 형식은 다음 규칙도 준수해야 합니다.
+- 형식은 클래스여야 합니다.
+-클래스는 'public'이어야 합니다.
+- 클래스는 'static'이 되어서는 안 됩니다.
+- 클래스는 '[TestClass]'(또는 파생 특성)로 표시되어야 합니다.
+- 클래스는 제네릭이 아니어야 합니다.
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ 전역 테스트 fixture 메서드 '{0}' 시그니처가 잘못되었습니다.
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ GlobalTestInitialize 및 GlobalTestCleanup 메서드에는 유효한 레이아웃이 있어야 합니다.
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Contains, StartsWith 및 EndsWith와 같은 메서드는 조건이 충족되었는지 여부를 나타내는 부울 값을 반환합니다. 이 반환 값을 무시하는 것은 아마 실수일 것입니다.
+
+
+
+ The return value of '{0}' should not be ignored
+ '{0}'의 반환 값은 무시하면 안 됩니다.
+
+
+
+ Do not ignore the return value of string methods
+ 문자열 메서드의 반환 값을 무시하지 마세요.
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assert항상 실패하는 'Assert.{0}' 어설션 대신 'Assert.Fail'을 사용합니다.
@@ -437,6 +547,21 @@ The type declaring these methods should also respect the following rules:
항상 실패하는 어설션 대신 'Assert.Fail' 사용
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ 'DataTestMethodAttribute'는 더 이상 사용되지 않으며 'TestMethodAttribute'에 대한 추가 기능을 제공하지 않습니다. 매개 변수가 있는 테스트를 포함하여 모든 테스트 메서드에 'TestMethodAttribute'를 사용하세요.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ 'DataTestMethod'는 사용되지 않습니다. 대신 'TestMethod'를 사용하세요.
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ 'DataTestMethod'보다 'TestMethod' 선호
+
+ Review or remove the assertion as its condition is known to be always true조건이 항상 true인 것으로 알려진 어설션 검토 또는 제거
@@ -517,6 +642,16 @@ The type declaring these methods should also respect the following rules:
공용 형식은 테스트 클래스여야 합니다.
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ 'StringAssert.{1}' 대신 'Assert.{0}' 사용
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ 'StringAssert' 대신 'Assert' 사용
+
+ Test class '{0}' should be valid테스트 클래스 '{0}'은(는) 유효해야 합니다.
@@ -532,6 +667,21 @@ The type declaring these methods should also respect the following rules:
테스트 메서드 '{0}' 시그니처가 잘못되었습니다.
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken은 TestContext.CancellationTokenSource.Token보다 취소 토큰에 더 직접적으로 액세스할 수 있는 방법을 제공합니다.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ 'TestContext.CancellationTokenSource.Token' 대신 'TestContext.CancellationToken' 사용
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ TestContext.CancellationTokenSource.Token 대신 TestContext.CancellationToken 사용
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.'ClassCleanupBehavior.EndOfClass'를 사용하지 않으면 '[ClassCleanup]'은 기본적으로 클래스의 끝이 아니라 어셈블리의 끝에서 실행됩니다.
@@ -720,13 +870,13 @@ The type declaring these methods should also respect the following rules:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.'[TestMethod]'를 포함하는 유형은 '[TestClass]'로 표시되어야 합니다. 그렇지 않으면 테스트 메서드가 자동으로 무시됩니다.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- '{0}' 클래스에는 테스트 메서드가 포함되어 있으며 '[TestClass]'로 표시되어야 합니다.
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ '{0}' 유형에는 테스트 메서드가 포함되어 있으며 '[TestClass]'로 표시되어야 합니다.
@@ -744,6 +894,11 @@ The type declaring these methods should also respect the following rules:
비동기 테스트 메서드에는 'Async' 접미사가 필요하지 않습니다.
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ AssemblyInitialize 및 ClassInitialize 메서드에 대해 MSTest에 의한 TestContext 매개 변수가 필요합니다.
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}]은(는) [TestMethod] 표시된 메서드에만 설정할 수 있습니다.
@@ -764,6 +919,21 @@ The type declaring these methods should also respect the following rules:
테스트 클래스에 'ConditionBaseAttribute' 사용
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ 'CooperativeCancellation = true'를 명시적으로 설정하지 않고 '[Timeout]'을 사용하는 것은 권장되지 않습니다. 향후 버전에서는 협동 취소가 기본 동작으로 설정될 것입니다. 권장 동작을 선택하고 변경 사항으로 인한 문제를 피하려면 'CooperativeCancellation = true'를 설정하세요.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ '[Timeout]'와 함께 'CooperativeCancellation = true'를 사용하여 협동 취소 동작을 활성화하세요.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ '[Timeout]'와 함께 'CooperativeCancellation = true'를 사용하세요.
+
+ '[DeploymentItem]' can be specified only on test class or test method'[DeploymentItem]'은(는) 테스트 클래스 또는 테스트 메서드에만 지정할 수 있습니다.
@@ -819,6 +989,36 @@ The type declaring these methods should also respect the following rules:
테스트 메서드에 재시도 속성 사용
+
+ TestContext property cannot be accessed in this context
+ 이 컨텍스트에서 TestContext 속성에 액세스할 수 없습니다.
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ '{1}' 메서드에서 TestContext 속성 '{0}'에 액세스할 수 없습니다.
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ 일부 TestContext 속성은 테스트 실행 중에만 사용할 수 있으며, 어셈블리 초기화, 클래스 초기화, 클래스 정리 또는 어셈블리 정리 메서드에서는 액세스할 수 없습니다.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Assert.Throws 메서드는 단일 문 또는 식만 포함해야 합니다. 여러 문이 있을 경우 혼란을 줄 수 있습니다. 첫 번째 문이 예외를 발생시키면 후속 문은 실행되지 않으며, 예외가 발생하지 않는 경우에는 Assert.Throws 외부로 이동해야 합니다.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws는 단일 문/식만 포함해야 합니다.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws는 단일 문/식만 포함해야 합니다.
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.pl.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.pl.xlf
index b82fdc2980..436d3c6be8 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.pl.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.pl.xlf
@@ -132,6 +132,16 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
Nie używaj elementu "Assert.AreSame" ani "Assert.AreNotSame" z typami wartości
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ Zamień „{0}” na parametry formatu za pomocą string.Format lub interpolacji ciągu
+
+
+
+ Avoid using Assert methods with format parameters
+ Unikaj używania metod Assert z parametrami formatu
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.Preferuj opcję „Assert.ThrowsExactly” lub „Assert.ThrowsExactlyAsync” zamiast „[ExpectedException]”, ponieważ gwarantuje ona, że tylko oczekiwane wywołanie rzuci oczekiwany wyjątek. Interfejsy API potwierdzenia zapewniają również większą elastyczność i pozwalają na potwierdzenie dodatkowych właściwości wyjątku.
@@ -147,6 +157,16 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
Unikaj elementu „[ExpectedException]”
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ Usuń argument „DynamicDataSourceType”, aby użyć domyślnego zachowania wykrywania automatycznego
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ Unikaj przekazywania jawnego elementu „DynamicDataSourceType” i użyj domyślnego zachowania wykrywania automatycznego
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.Nie potwierdzaj wewnątrz metod "async void", funkcji lokalnych ani lambda. Wyjątki, które są zgłaszane w tym kontekście, będą nieobsługiwanymi wyjątkami. W przypadku korzystania z narzędzia VSTest w .NET Framework będą one dyskretnie ściszone. W przypadku korzystania z elementu Microsoft.Testing.Platform lub VSTest w nowoczesnych programach .NET mogą one spowodować awarię procesu.
@@ -277,8 +297,13 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- Typ argumentu DataRow powinien być zgodny z typem parametru metody. W indeksach występują niezgodności: {0}
+ DataRow argument types do not match method parameter types. {0}
+ Typy argumentów DataRow nie są zgodne z typami parametrów metody. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ Parametr „{0}” oczekuje typu „{1}”, ale podana wartość ma typ „{2}”
@@ -402,11 +427,21 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
„[DynamicData]” należy ustawić tylko dla metody testowej
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ Składowa „[DynamicData]” „{0}.{1}” jest polem, dlatego należy użyć elementu „DynamicDataSourceType.AutoDetect” lub „DynamicDataSourceType.Field” (wykrywanie automatyczne jest ustawieniem domyślnym, gdy nie zostanie jawnie określone i jest zalecane)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' składowej "{0}.{1}" jest metodą, dlatego należy użyć elementu "DynamicDataSourceType.AutoDetect" lub "DynamicDataSourceType.Method" (autowykrywanie jest domyślne, gdy nie zostało jawnie określone i jest zalecane)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ Składowa „[DynamicData]” „{0}.{1}” nie jest właściwością, metodą ani polem. Obsługiwane są tylko właściwości, metody i pola.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.składowa '[DynamicData]' "{0}.{1}" nie jest właściwością ani metodą. Obsługiwane są tylko właściwości i metody.
@@ -427,6 +462,81 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
Wartość DynamicData powinna być prawidłowa
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ W przypadku wywoływania metod asynchronicznych, które mają przeciążenia akceptujące parametr CancellationToken, preferuj użycie przeciążenia z argumentem TestContext.CancellationToken, aby umożliwić anulowanie w trybie współpracy i respektowanie limitów czasu testu.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ Rozważ użycie przeciążenia, które akceptuje element CancellationToken i przekaż argument „TestContext.CancellationToken”
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ Przekaż TestContext.CancellationToken do operacji asynchronicznych
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ Metody oznaczone znakiem „[GlobalTestInitialize]” lub „[GlobalTestCleanup]” powinny być zgodne z następującym układem, aby były prawidłowe:
+— nie może być zadeklarowana w klasie ogólnej
+— powinna być typu „public”
+— powinna mieć wartość „static”
+— nie powinna to być wartość „async void”
+— nie powinna to być metoda specjalna (finalizator, operator...).
+— nie powinna być ogólna
+— powinna przyjmować jeden parametr typu „TestContext”
+— zwracany typ powinien mieć wartość „void”, „Taks” lub „ValueTask”
+
+Typ deklarujący te metody powinien również przestrzegać następujących reguł:
+— typ powinien być klasą
+— klasa powinna być „publiczna”
+— klasa nie powinna mieć wartości „static”
+— klasa powinna być oznaczona „[TestClass]” (lub atrybutem pochodnym)
+— klasa nie powinna być ogólna.
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ Podpis globalnej metody warunków początkowych testu „{0}” jest nieprawidłowy
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ Metody GlobalTestInitialize i GlobalTestCleanup powinny mieć prawidłowy układ
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Metody takie jak Contains, StartsWith i EndsWith zwracają wartości logiczne wskazujące, czy warunek został spełniony. Ignorowanie tych wartości zwrotnych jest prawdopodobnie błędem.
+
+
+
+ The return value of '{0}' should not be ignored
+ Zwracana wartość „{0}” nie powinna być ignorowana
+
+
+
+ Do not ignore the return value of string methods
+ Nie ignoruj zwracanej wartości metod ciągu
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assertUżyj trybu „Assert.Fail” zamiast kończącej się zawsze niepowodzeniem instrukcji „Assert.{0}”
@@ -437,6 +547,21 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
Użyj trybu „Assert.Fail” zamiast kończącej się zawsze niepowodzeniem instrukcji asercji
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ Atrybut „DataTestMethodAttribute” jest przestarzały i nie zapewnia dodatkowych funkcji w stosunku do atrybutu „TestMethodAttribute”. Użyj atrybutu „TestMethodAttribute” dla wszystkich metod testowych, w tym testów sparametryzowanych.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ Element „DataTestMethod” jest przestarzały. Zamiast niego użyj elementu „TestMethod”.
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ Wybieraj element „TestMethod”, anie „DataTestMethod”
+
+ Review or remove the assertion as its condition is known to be always truePrzejrzyj lub usuń asercję, ponieważ wiadomo, że jej warunek ma zawsze wartość true
@@ -517,6 +642,16 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
Typy publiczne powinny być klasami testowymi
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ Użyj ciągu „Assert.{0}” zamiast ciągu „StringAssert.{1}”
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ Użyj ciągu „Assert” zamiast ciągu „StringAssert”
+
+ Test class '{0}' should be validKlasa testowa „{0}” powinna być prawidłowa
@@ -532,6 +667,21 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
Podpis metody testowej „{0}” jest nieprawidłowy
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ Element TestContext.CancellationToken zapewnia bardziej bezpośredni sposób uzyskiwania dostępu do tokenu anulowania w porównaniu z elementem TestContext.CancellationTokenSource.Token.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ Użyj argumentu „TestContext.CancellationToken” zamiast argumentu „TestContext.CancellationTokenSource.Token”
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ Użyj argumentu TestContext.CancellationToken zamiast argumentu TestContext.CancellationTokenSource.Token
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.Bez użycia elementu „ClassCleanupBehavior.EndOfClass” element „[ClassCleanup]” będzie domyślnie uruchamiany na końcu zestawu, a nie na końcu klasy.
@@ -720,13 +870,13 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
- Typ zwierający metodę „[TestMethod]” powinien być oznaczony klasa „[TestClass]”. W przeciwnym razie metoda testowa zostanie zignorowana w trybie dyskretnym.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Typ zawierający element „[TestMethod]” powinien być oznaczony znakiem „[TestClass]”. W przeciwnym razie metoda testowa zostanie zignorowana w trybie dyskretnym.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- Klasa „{0}” zawiera metody testowe i powinna być oznaczona klasą „[TestClass]”
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ Typ „{0}” zawiera metody testowe i powinien być oznaczony znakiem „[TestClass]”
@@ -744,6 +894,11 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
Asynchroniczne metody testowe nie wymagają sufiksu „Async”
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ Parametr TestContext jest wymagany przez narzędzie MSTest dla metod AssemblyInitialize i ClassInitialize
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] można ustawić tylko dla metod oznaczonych znakiem [TestMethod]
@@ -764,6 +919,21 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
Użyj atrybutu "ConditionBaseAttribute" w klasach testu
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ Nie rekomenduje się używania elementu „[Timeout]” bez jawnego ustawiania wartości „CooperativeCancellation = true”. W przyszłej wersji anulowanie trybu współpracy będzie zachowaniem domyślnym. Ustaw opcję „CooperativeCancellation = true”, aby włączyć rekomendowane zachowanie i uniknąć zmian powodujących niezgodność.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ Użyj opcji „CooperativeCancellation = true” z limitem czasu „[Timeout]”, aby włączyć zachowanie anulowania trybu współpracy
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ Użyj opcji „CooperativeCancellation = true” w limitem czasu „[Timeout]”
+
+ '[DeploymentItem]' can be specified only on test class or test methodElement „[DeploymentItem]” można określić tylko dla klasy testowej lub metody testowej
@@ -819,6 +989,36 @@ Typ deklarujący te metody powinien również przestrzegać następujących regu
Użyj atrybutu ponawiania dla metody testowej
+
+ TestContext property cannot be accessed in this context
+ W tym kontekście nie można uzyskać dostępu do właściwości TestContext
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ Nie można uzyskać dostępu do właściwości TestContext „{0}” w metodzie „{1}”
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ Niektóre właściwości TestContext są dostępne tylko podczas wykonywania testu i nie można uzyskać do nich dostępu w metodach inicjowania, inicjowania klasy, oczyszczania klasy ani oczyszczania zestawów.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Metody Assert.Throws powinny zawierać tylko jedną instrukcję lub wyrażenie. Wiele instrukcji może być mylących – jeśli pierwsza instrukcja zgłosi wyjątek, kolejne instrukcje nigdy nie zostaną wykonane; jeśli nie zgłosi wyjątku, powinna zostać przeniesiona poza Assert.Throws.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Element Assert.Throws powinien zawierać tylko jedną instrukcję/wyrażenie
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Element Assert.Throws powinien zawierać tylko jedną instrukcję/wyrażenie
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.pt-BR.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.pt-BR.xlf
index db27da787d..232924c5a6 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.pt-BR.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.pt-BR.xlf
@@ -132,6 +132,16 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
Não use 'Assert.AreSame' ou 'Assert.AreNotSame' com tipos de valor
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ Substitua '{0}' com parâmetros de formato por cadeia de caracteres. Interpolação de formato ou cadeia de caracteres
+
+
+
+ Avoid using Assert methods with format parameters
+ Evite usar métodos Assert com parâmetros de formato
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.Prefira 'Assert.ThrowsExactly' ou 'Assert.ThrowsExactlyAsync' em vez de '[ExpectedException]', pois isso garante que apenas a chamada esperada lance a exceção esperada. As APIs de assert também oferecem mais flexibilidade e permitem que você afirme propriedades adicionais da exceção.
@@ -147,6 +157,16 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
Evitar '[ExpectedException]'
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ Remova o argumento "DynamicDataSourceType" para usar o comportamento de detecção automática padrão
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ Evitar passar um "DynamicDataSourceType" explícito e usar o comportamento de detecção automática padrão
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.Não asserção dentro de métodos 'async void', funções locais ou lambdas. Exceções lançadas neste contexto serão exceções sem tratamento. Ao usar VSTest sob .NET Framework, eles serão silenciosamente ignoradas. Ao usar Microsoft.Testing.Platform ou VSTest em .NET moderno, o processo pode falhar.
@@ -277,8 +297,13 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- O tipo de argumento DataRow deve corresponder ao tipo de parâmetro do método. Incompatibilidades ocorrem nos índices: {0}
+ DataRow argument types do not match method parameter types. {0}
+ Os tipos de argumento do DataRow não correspondem aos tipos de parâmetro do método. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ O parâmetro "{0}" espera o tipo "{1}", mas o valor fornecido tem o tipo "{2}"
@@ -402,11 +427,21 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
"[DynamicData]" só deve ser definido em um método de teste
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ O membro "[DynamicData]" "{0}.{1}" é um campo — portanto, você deve usar "DynamicDataSourceType.AutoDetect" ou "DynamicDataSourceType.Field" (detectar automaticamente é o padrão quando não especificado explicitamente, e é recomendado)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' membro '{0}.{1}' é um método, portanto, você deve usar 'DynamicDataSourceType.AutoDetect' ou 'DynamicDataSourceType.Method' (detectar automaticamente é o padrão quando não especificado explicitamente e é recomendado)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ O membro "[DynamicData]" "{0}.{1}" não é uma propriedade, método ou campo. Somente propriedades, métodos e campos têm suporte.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' membro '{0}.{1}' não é uma propriedade nem um método. Somente propriedades e métodos têm suporte.
@@ -427,6 +462,81 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
DynamicData deve ser válido
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ Ao chamar métodos assíncronos que têm sobrecargas que aceitam um parâmetro CancellationToken, prefira usar a sobrecarga com TestContext.CancellationToken para habilitar o cancelamento cooperativo e respeitar os limites de tempo do teste.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ Considere usar a sobrecarga que aceita um CancellationToken e passar 'TestContext.CancellationToken'
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ Fluxo TestContext.CancellationToken para operações assíncronas
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ Os métodos marcados com "[GlobalTestInitialize]" ou "[GlobalTestCleanup]" devem seguir o seguinte layout para serem válidos:
+-não podem ser declarados em uma classe genérica
+-devem ser "públicos"
+-devem ser "estáticos"
+-não devem ser "nulos assíncronos"
+-não devem ser um método especial (finalizador, operador...).
+-não devem ser genéricos
+-devem usar um parâmetro do tipo “TestContext”
+-o tipo de retorno deve ser “nulo”, “Tarefa” ou “ValueTask”
+
+O tipo que declara esses métodos também deve respeitar as seguintes regras:
+-O tipo deve ser uma classe
+-A classe deve ser "público"
+-A classe não deve ser “estático”
+-A classe deve ser marcada com “[TestClass]” (ou um atributo derivado)
+-a classe não deve ser genérica.
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ A assinatura do método de acessório de teste global "{0}" é inválida
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ Os métodos GlobalTestInitialize e GlobalTestCleanup devem ter um layout válido
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Métodos como Contains, StartsWith e EndsWith retornam valores boolianos que indicam se a condição foi atendida. Ignorar esses valores retornados provavelmente é um erro.
+
+
+
+ The return value of '{0}' should not be ignored
+ O valor retornado de "{0}" não deve ser ignorado
+
+
+
+ Do not ignore the return value of string methods
+ Não ignore o valor retornado dos métodos de cadeia de caracteres
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assertUse "Assert.Fail" em vez de uma asserção "Assert.{0}" sempre com falha
@@ -437,6 +547,21 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
Usar "Assert.Fail" em vez de uma asserção sempre com falha
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ 'DataTestMethodAttribute' está obsoleto e não oferece funcionalidade adicional em relação a 'TestMethodAttribute'. Use 'TestMethodAttribute' para todos os métodos de teste, inclusive testes parametrizados.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ 'DataTestMethod' está obsoleto. Use 'TestMethod' em vez disso.
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ Prefira 'TestMethod' a 'DataTestMethod'
+
+ Review or remove the assertion as its condition is known to be always trueExamine ou remova a asserção, pois a sua condição é conhecida por ser sempre verdadeira
@@ -517,6 +642,16 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
Os tipos públicos devem ser classes de teste
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ Use "Assert.{0}" em vez de "StringAssert.{1}"
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ Usar "Assert" em vez de "StringAssert"
+
+ Test class '{0}' should be validA classe de teste ''{0}'' deve ser válida
@@ -532,6 +667,21 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
A assinatura "{0}" do método de teste é inválida
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken oferece uma maneira mais direta de acessar o token de cancelamento em comparação com TestContext.CancellationTokenSource.Token.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ Use 'TestContext.CancellationToken' em vez de 'TestContext.CancellationTokenSource.Token'
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ Use TestContext.CancellationToken em vez de TestContext.CancellationTokenSource.Token
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.Sem usar o "ClassCleanupBehavior.EndOfClass", o "[ClassCleanup]" será executado, por padrão, no final do assembly e não no final da classe.
@@ -720,13 +870,13 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
- O tipo contendo '[TestMethod]' deve ser marcado com '[TestClass]', caso contrário, o método de teste será ignorado silenciosamente.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ O tipo que contém '[TestMethod]' deve ser marcado com '[TestClass]', caso contrário, o método de teste será ignorado sem aviso.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- A classe '{0}' contém métodos de teste e deve ser marcada com '[TestClass]'
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ O tipo '{0}' contém métodos de teste e deve ser marcado com '[TestClass]'
@@ -744,6 +894,11 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
Os métodos de teste assíncronos não exigem o sufixo 'Async'
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ O parâmetro TestContext é obrigatório para métodos AssemblyInitialize e ClassInitialize do MSTest
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] só pode ser definido em métodos marcados com [TestMethod]
@@ -764,6 +919,21 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
Usar 'ConditionBaseAttribute' em classes de teste
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ Usar '\[Timeout]' sem definir explicitamente 'CooperativeCancellation = true' não é recomendado. Em uma versão futura, o cancelamento cooperativo se tornará o comportamento padrão. Defina 'CooperativeCancellation = true' para optar pelo comportamento recomendado e evitar quebras.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ Use 'CooperativeCancellation = true' com '\[Timeout]' para habilitar o comportamento de cancelamento cooperativo
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ Use 'CooperativeCancellation = true' com '\[Timeout]'
+
+ '[DeploymentItem]' can be specified only on test class or test method'[DeploymentItem]' pode ser especificado apenas na classe de teste ou método de teste
@@ -819,6 +989,36 @@ O tipo que declara esses métodos também deve respeitar as seguintes regras:
Usar o atributo de repetição no método de teste
+
+ TestContext property cannot be accessed in this context
+ A propriedade TestContext não pode ser acessada neste contexto
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ A propriedade "{0}" de TestContext não pode ser acessada no método "{1}"
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ Algumas propriedades TestContext só estão disponíveis durante a execução do teste e não podem ser acessadas em métodos de inicialização de assembly, inicialização de classe, limpeza de classe ou limpeza de assembly.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Os métodos Assert.Throws devem conter apenas uma única declaração ou expressão. Várias declarações podem ser enganosas: se a primeira declaração for lançada, as declarações subsequentes nunca serão executadas; se não lançar, ela deverá ser movida para fora do Assert.Throws.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws deve conter apenas uma única declaração/expressão
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws deve conter apenas uma única declaração/expressão
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.ru.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.ru.xlf
index f2770a865e..9ec21cbef5 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.ru.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.ru.xlf
@@ -135,6 +135,16 @@ The type declaring these methods should also respect the following rules:
Не используйте Assert.AreSame или Assert.AreNotSame с типами значений
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ Замените "{0}" на параметры формата с помощью string.Format или интерполяции строк
+
+
+
+ Avoid using Assert methods with format parameters
+ Избегайте использования методов Assert с параметрами форматирования
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.Предпочтите "Assert.ThrowsExactly' или 'Assert.ThrowsExactlyAsync" вместо "[ExpectedException]", так как это гарантирует, что только ожидаемый вызов вызовет ожидаемое исключение. API-интерфейсы утверждения также обеспечивают дополнительную гибкость и позволяют утверждать дополнительные свойства исключения.
@@ -150,6 +160,16 @@ The type declaring these methods should also respect the following rules:
Избегать "[ExpectedException]"
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ Удалите аргумент DynamicDataSourceType, чтобы использовать поведение автоматического обнаружения по умолчанию
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ Избегайте передачи явного DynamicDataSourceType и используйте поведение автоматического обнаружения по умолчанию
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.Не подтверяйте внутри методов async void, локальных функций или лямбда-выражений. Исключения, вызванные в этом контексте, будут необработанные исключения. При использовании VSTest платформа .NET Framework, они будут пропущены без уведомления. При использовании Microsoft.Testing.Platform или VSTest в современной версии .NET они могут привести к сбою процесса.
@@ -283,8 +303,13 @@ The type declaring these methods should also respect the following rules:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- Тип аргумента DataRow должен соответствовать типу параметра метода. Обнаружены несовпадения в следующих индексах: {0}
+ DataRow argument types do not match method parameter types. {0}
+ Типы аргументов DataRow не соответствуют типам параметров метода. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ Параметр "{0}" ожидает тип "{1}", но предоставленное значение относится к типу "{2}"
@@ -408,11 +433,21 @@ The type declaring these methods should also respect the following rules:
"[DynamicData]" следует задавать только для метода теста
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ Элемент "[DynamicData]" "{0}.{1}" является полем, поэтому следует использовать "DynamicDataSourceType.AutoDetect" или "DynamicDataSourceType.Field" (автообнаружение используется по умолчанию, если не указано явно, и является рекомендуемым)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' "{0}.{1}" является методом, поэтому следует использовать "DynamicDataSourceType.AutoDetect" или "DynamicDataSourceType.Method" (автообнаружение используется по умолчанию, если не указано явно, и рекомендуется)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ Элемент "[DynamicData]" "{0}.{1}" не является свойством, методом или полем. Поддерживаются только свойства, методы и поля.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' "{0}.{1}" не является свойством или методом. Поддерживаются только свойства и методы.
@@ -433,6 +468,81 @@ The type declaring these methods should also respect the following rules:
Значение DynamicData должно быть допустимым
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ При вызове асинхронных методов с перегрузками, принимающими параметр CancellationToken, рекомендуется использовать перегрузку с TestContext.CancellationTokenSource.Token, чтобы обеспечить совместные действия по отмене и учитывать лимиты времени ожидания тестов.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ Рассмотрите возможность использования перегрузки, которая принимает CancellationToken, и передавайте "TestContext.CancellationToken"
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ Передача TestContext.CancellationToken в асинхронные операции
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ Чтобы метод, помеченный "[GlobalTestInitialize]" или "[GlobalTestCleanup]", был допустимым, он должен соответствовать следующей структуре:
+– не может быть объявлен для универсального класса ("generic")
+– должен быть общедоступным ("public")
+– должен быть статическим ("static")
+– не должен быть асинхронным и не возвращающим значения ("async void")
+– не должен быть специальным (метод завершения, оператор…).
+– не должен быть общим ("generic")
+– должен принимать один параметр типа "TestContext"
+– должен иметь тип возвращаемого значения "void", "Task" или "ValueTask"
+
+Тип, объявляющий такие методы, также должен соответствовать следующим правилам:
+– должен быть классом
+– класс должен быть общедоступным ("public")
+– не должен быть статическим ("static")
+– должен быть помечен как "[TestClass]" (или производный атрибут)
+– не должен быть универсальным ("generic").
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ Подпись метода глобального средства тестирования "{0}" недопустима
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ Методы GlobalTestInitialize и GlobalTestCleanup должны использовать допустимый макет
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Такие методы, как Contains, StartsWith и EndsWith, возвращают логические значения, указывающие, выполнено ли условие. Игнорирование этих возвращаемых значений, скорее всего, является ошибкой.
+
+
+
+ The return value of '{0}' should not be ignored
+ Возвращаемое значение "{0}" не должно игнорироваться
+
+
+
+ Do not ignore the return value of string methods
+ Не игнорируйте возвращаемое значение строковых методов
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assertИспользуйте "Assert.Fail" вместо утверждения с постоянным сбоем "Assert.{0}"
@@ -443,6 +553,21 @@ The type declaring these methods should also respect the following rules:
Используйте "Assert.Fail" вместо утверждения с постоянным сбоем
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ Атрибут "DataTestMethodAttribute" устарел и не предоставляет дополнительных функций по сравнению с "TestMethodAttribute". Используйте '"TestMethodAttribute" для всех методов тестирования, включая параметризованные тесты.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ "DataTestMethod" устарел. Используйте вместо него "TestMethod".
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ Следует предпочитать метод "TestMethod" методу "DataTestMethod"
+
+ Review or remove the assertion as its condition is known to be always trueПроверьте или удалите утверждение, так как известно, что его условие всегда истинно.
@@ -523,6 +648,16 @@ The type declaring these methods should also respect the following rules:
Общедоступные типы должны быть тестовыми классами
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ Используйте "Assert.{0}" вместо "StringAssert.{1}"
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ Используйте "Assert" вместо "StringAssert"
+
+ Test class '{0}' should be validТестовый класс "{0}" должен быть допустимым
@@ -538,6 +673,21 @@ The type declaring these methods should also respect the following rules:
Подпись тестового метода "{0}" недействительна
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken предоставляет более прямой доступ к маркеру отмены по сравнению с TestContext.CancellationTokenSource.Token.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ Используйте "TestContext.CancellationToken" вместо "TestContext.CancellationTokenSource.Token"
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ Используйте TestContext.CancellationToken вместо TestContext.CancellationTokenSource.Token
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.Без использования "ClassCleanupBehavior.EndOfClass" "[ClassCleanup]" по умолчанию будет выполняться в конце сборки, а не в конце класса.
@@ -732,13 +882,13 @@ The type declaring these methods should also respect the following rules:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.У типа, содержащего "[TestMethod]", должна быть пометка "[TestClass]", иначе метод тестирования будет проигнорирован без уведомления пользователя.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- Класс "{0}" тестовые методы. У этого класса должна быть пометка "[TestClass]".
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ Тип "{0}" содержит тестовые методы и должен быть помечен как "[TestClass]"
@@ -756,6 +906,11 @@ The type declaring these methods should also respect the following rules:
Асинхронные методы теста не требуют суффикса Async
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ Параметр TestContext необходим для MSTest в методах AssemblyInitialize и ClassInitialize
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] можно задать только для методов с пометкой [TestMethod]
@@ -776,6 +931,21 @@ The type declaring these methods should also respect the following rules:
Использовать ConditionBaseAttribute для тестовых классов
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ Использование "[Timeout]" без явной настройки "CooperativeCancellation = true" не рекомендуется. В будущей версии кооперативная отмена станет поведением по умолчанию. Настройте "CooperativeCancellation = true", чтобы согласиться с рекомендуемым поведением и избежать критических изменений.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ Используйте "CooperativeCancellation = true" с "[Timeout]", чтобы включить поведение кооперативной отмены
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ Использовать "CooperativeCancellation = true" с "[Timeout]"
+
+ '[DeploymentItem]' can be specified only on test class or test methodУказать "[DeploymentItem]" можно только для тестового класса или метода.
@@ -831,6 +1001,36 @@ The type declaring these methods should also respect the following rules:
Использовать атрибут retry в тестовом методе
+
+ TestContext property cannot be accessed in this context
+ Свойство TestContext недоступно в этом контексте
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ Свойство TestContext "{0}" недоступно в методе "{1}"
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ Некоторые свойства TestContext доступны только во время выполнения теста и недоступны в методах инициализации сборки, инициализации класса, очистки класса или очистки сборки.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Методы Assert.Throws должны содержать только одну инструкцию или выражение. Несколько инструкций могут вводить в заблуждение: если первое выражение вызывает исключение, последующие инструкции не выполняются; если исключение не возникает, его следует вынести за пределы Assert.Throws.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws должен содержать только одну инструкцию/выражение
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws должен содержать только одну инструкцию/выражение
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.tr.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.tr.xlf
index 5e0f02d87f..e30a584b2a 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.tr.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.tr.xlf
@@ -132,6 +132,16 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
Değer türleriyle 'Assert.AreSame' veya 'Assert.AreNotSame' kullanma
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ '{0}' ifadesini string.Format veya string interpolation format parametreleriyle değiştirin
+
+
+
+ Avoid using Assert methods with format parameters
+ Biçim parametreleri ile Assert yöntemlerini kullanmaktan kaçının
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.Yalnızca beklenen çağrının beklenen özel durumu oluşturmasını sağladığı için '[ExpectedException]' yerine 'Assert.ThrowsExactly' veya 'Assert.ThrowsExceptionAsync' tercih edin. Onaylama API'leri de daha fazla esneklik sağlar ve özel durumun ek özelliklerini onaylamanıza izin verir.
@@ -147,6 +157,16 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
'[ExpectedException]' kullanmayın
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ Varsayılan otomatik algılama davranışını kullanmak için ‘DynamicDataSourceType’ bağımsız değişkenini kaldırın
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ Açık bir ‘DynamicDataSourceType’ geçirmeyin ve varsayılan otomatik algılama davranışını kullanın
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.'async void' metotları, yerel işlevler veya lambdalar içinde onaylamayın. Bu bağlamda oluşturulan özel durumlar işlenmeyen özel durumlar olacak. VsTest'i .NET Framework, sessizce kırılır. Modern .NET altında Microsoft.Testing.Platform veya VSTest kullanırken işlemi kilitler.
@@ -277,8 +297,13 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- DataRow bağımsız değişken türü, yöntem parametresinin türüyle eşleşmelidir. Dizinler sırasında uyuşmazlıklar oluştu: {0}
+ DataRow argument types do not match method parameter types. {0}
+ DataRow bağımsız değişken türleri, yöntem parametre türleriyle eşleşmiyor. {0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ Parametre ‘{0}’ tipi ‘{1}’ bekliyor, ancak verilen değer ‘{2}’ tipindedir
@@ -402,11 +427,21 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
'[DynamicData]' yalnızca bir test yönteminde ayarlanmalıdır
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ ‘[DynamicData]’ üyesi ‘{0}.{1}’, bir alandır, bu nedenle ‘DynamicDataSourceType.AutoDetect’ veya ‘DynamicDataSourceType.Field’ kullanmalısınız (otomatik algılama, açıkça belirtilmediğinde varsayılan ayardır ve önerilir)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' üyesi '{0}.{1}' bir metot olduğundan 'DynamicDataSourceType.AutoDetect' veya 'DynamicDataSourceType.Method' kullanmalısınız (otomatik algılama açıkça belirtilmediğinden varsayılandır ve önerilir)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ ‘[DynamicData]’ üyesi ‘{0}.{1}’, bir özellik, yöntem veya alan değildir. Yalnızca özellikler, yöntemler ve alanlar desteklenir.
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' '{0}.{1}' üyesi bir özellik veya yöntem değil. Yalnızca özellikler ve yöntemler desteklenir.
@@ -427,6 +462,81 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
DynamicData geçerli olmalıdır
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ CancellationToken parametresini kabul eden aşırı yüklemeleri olan asenkron yöntemleri çağırırken, işbirliğine dayalı iptal işlemini etkinleştirmek ve test zaman aşımlarını dikkate almak için TestContext.CancellationToken ile aşırı yüklemeyi kullanmayı tercih edin.
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ CancellationToken'ı kabul eden aşırı yüklemeyi kullanmayı düşünün ve 'TestContext.CancellationToken'i geçirin
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ TestContext.CancellationToken'ı asenkron işlemler için akışa aktarın
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ ‘[GlobalTestInitialize]’ veya ‘[GlobalTestCleanup]’ ile işaretlenmiş yöntemlerin geçerli olabilmesi için şu düzeni izlemesi gerekir:
+-genel bir sınıfta tanımlanamaz
+-'public' olmalıdır
+-'static' olmalıdır
+-'async void' olmamalıdır
+-özel bir metot (sonlandırıcı, işleç...) olmamalıdır.
+- genel olmamalıdır
+- 'TestContext' türünden bir parametre almalıdır
+- dönüş türü 'void', 'Task' veya 'ValueTask' olmalıdır
+
+Bu metotları bildiren türün ayrıca aşağıdaki kurallara uyması gerekir:
+-Tür bir sınıf olmalıdır
+-Sınıf ‘public’ olmalıdır
+-Sınıf 'static' olmamalıdır
+-Sınıf '[TestClass]' (veya türetilmiş bir öznitelik) ile işaretlenmelidir
+-sınıf genel olmamalıdır.
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ Global test düzeni yöntemi ‘{0}’ imzası geçersiz
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ GlobalTestInitialize ve GlobalTestCleanup yöntemleri geçerli bir düzene sahip olmalıdır
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Contains, StartsWith ve EndsWith gibi yöntemler, koşulun karşılanıp karşılanmadığını belirten boole değerleri döndürür. Bu dönüş değerlerini yok saymak büyük olasılıkla bir hataya yol açar.
+
+
+
+ The return value of '{0}' should not be ignored
+ '{0}' değerinin dönüş değeri yok sayılmamalıdır
+
+
+
+ Do not ignore the return value of string methods
+ Dize yöntemlerinin dönüş değerini yok saymayın
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assertHer zaman başarısız olan 'Assert.{0}' onaylaması yerine 'Assert.Fail' seçeneğini kullanın
@@ -437,6 +547,21 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
Her zaman başarısız olan onaylama yerine 'Assert.Fail' seçeneğini kullanın
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ 'DataTestMethodAttribute' artık kullanılmıyor ve 'TestMethodAttribute' üzerinde ek bir işlevsellik sunmuyor. Parametreli testler de dahil, tüm test yöntemleri için 'TestMethodAttribute' kullanın.
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ 'DataTestMethod' artık kullanılmıyor. Bunun yerine 'TestMethod' kullanın.
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ 'DataTestMethod' yerine 'TestMethod' yöntemini tercih edin
+
+ Review or remove the assertion as its condition is known to be always trueKoşulu her zaman true olarak bilinen onaylamayı gözden geçirin veya kaldırın
@@ -517,6 +642,16 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
Genel türler test sınıfları olmalıdır
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ ‘StringAssert.{1}’ yerine ‘Assert.{0}’ kullanın
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ ‘StringAssert’ yerine ‘Assert’ kullanın
+
+ Test class '{0}' should be valid'{0}' test sınıfı geçerli olmalıdır
@@ -532,6 +667,21 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
'{0}' test yöntemi imzası geçersiz
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ TestContext.CancellationToken, TestContext.CancellationTokenSource.Token'a kıyasla iptal belirtecine erişmek için daha doğrudan bir yol sağlar.
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ 'TestContext.CancellationTokenSource.Token' yerine ‘TestContext.CancellationToken’ kullanın
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ TestContext.CancellationTokenSource.Token yerine TestContext.CancellationToken kullanın
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.'ClassCleanupBehavior.EndOfClass' kullanılmadığında, '[ClassCleanup]' varsayılan olarak sınıfın sonunda değil derlemenin sonunda çalıştırılır.
@@ -722,13 +872,13 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.'[TestMethod]' içeren tür '[TestClass]' ile işaretlenmeli, aksi takdirde test yöntemi sessizce yoksayılır.
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- '{0}' sınıfı test yöntemleri içeriyor ve '[TestClass]' ile işaretlenmeli
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ '{0}' türü test yöntemleri içeriyor ve '[TestClass]' ile işaretlenmeli
@@ -746,6 +896,11 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
Asenkron test metotları için 'Async' soneki gerekmez
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ AssemblyInitialize ve ClassInitialize yöntemleri için MSTest tarafından TestContext parametresi gereklidir.
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] yalnızca [TestMethod] ile işaretli yöntemlerde ayarlanabilir
@@ -766,6 +921,21 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
Test sınıflarda 'ConditionBaseAttribute' kullanın
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ '[Timeout]' ayarını 'CooperativeCancellation = true' olarak açıkça ayarlamadan kullanmak önerilmez. Gelecek bir sürümde, birlikte iptal etme varsayılan davranış haline gelecektir. Önerilen davranışı kabul etmek ve uyumsuzlukları önlemek için 'CooperativeCancellation = true' değerini ayarlayın.
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ '[Timeout]' ile 'CooperativeCancellation = true' kullanarak birlikte iptal etme davranışını etkinleştirin
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ '[Timeout]' ile 'CooperativeCancellation = true' kullanın
+
+ '[DeploymentItem]' can be specified only on test class or test method'[DeploymentItem]' yalnızca test sınıfında veya test yönteminde belirtilebilir
@@ -821,6 +991,36 @@ Bu yöntemleri bildiren tipin ayrıca aşağıdaki kurallara uyması gerekir:
Test yönteminde yeniden deneme özniteliğini kullan
+
+ TestContext property cannot be accessed in this context
+ TestContext özelliğine bu bağlamda erişilemiyor
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ TestContext '{0}' özelliğine '{1}' yönteminde erişilemiyor
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ Bazı TestContext özellikleri yalnızca test yürütmesi sırasında kullanılabilir ve derleme başlatma, sınıf başlatma, sınıf temizleme veya derleme temizleme yöntemlerinde erişilemez.
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Assert.Throws yöntemleri yalnızca tek bir deyim veya ifade içermelidir. Birden fazla deyim yanıltıcı olabilir; eğer ilk deyim bir sonuç oluşturursa, sonraki deyimler asla çalıştırılmaz; eğer sonuç oluşturmazsa, bu deyim Assert.Throws dışına alınmalıdır.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws yalnızca tek bir deyim/ifade içermelidir.
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws yalnızca tek bir deyim/ifade içermelidir.
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.zh-Hans.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.zh-Hans.xlf
index ff54e2c6e7..329c91d36f 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.zh-Hans.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.zh-Hans.xlf
@@ -132,6 +132,16 @@ The type declaring these methods should also respect the following rules:
不要将 “Assert.AreSame” 或 “Assert.AreNotSame” 与值类型一起使用
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ 将 ‘{0}’ 替换为 string.Format 或字符串内插
+
+
+
+ Avoid using Assert methods with format parameters
+ 避免将 Assert 方法与格式参数配合使用
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.首选“Assert.ThrowsExactly”或“Assert.ThrowsExactlyAsync”,而不是“[ExpectedException]”,因为它确保只有预期调用才会引发预期异常。断言 API 还提供更多的灵活性,并允许你断言异常的额外属性。
@@ -147,6 +157,16 @@ The type declaring these methods should also respect the following rules:
避免 "[ExpectedException]"
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ 移除 "DynamicDataSourceType" 参数以使用默认的自动检测行为
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ 避免传递显式 "DynamicDataSourceType" 并使用默认的自动检测行为
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.不要在 “async void” 方法、本地函数或 lambdas 内断言。在此上下文中引发的异常将是未经处理的异常。在.NET Framework下使用 VSTest 时,将无提示地接受这些测试。在现代 .NET 下使用 Microsoft.Testing.Platform 或 VSTest 时,它们可能会导致进程崩溃。
@@ -277,8 +297,13 @@ The type declaring these methods should also respect the following rules:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- DataRow 参数类型应与方法参数类型匹配。索引处出现不匹配: {0}
+ DataRow argument types do not match method parameter types. {0}
+ DataRow 参数类型与方法参数类型不匹配。{0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ 参数 ‘{0}’ 需要类型 ‘{1}’,但提供的值类型为 ‘{2}’
@@ -402,11 +427,21 @@ The type declaring these methods should also respect the following rules:
应仅对测试方法设置 "[DynamicData]"
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ "[DynamicData]" 成员“{0}.{1}”是字段,因此应使用 "DynamicDataSourceType.AutoDetect" 或 "DynamicDataSourceType.Field" (未显式指定时,默认为自动检测,建议使用此设置)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' 成员 “{0}.{1}” 是一个方法,因此应使用 “DynamicDataSourceType.AutoDetect” 或 “DynamicDataSourceType.Method”,(未显式指定时,自动检测为默认值,建议)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ "[DynamicData]" 成员“{0}.{1}”不是属性、方法或字段。仅支持属性、方法和字段。
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' 成员 “{0}.{1}” 既不是属性也不是方法。仅支持属性和方法。
@@ -427,6 +462,81 @@ The type declaring these methods should also respect the following rules:
DynamicData 应有效
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ 在调用包含接受 CancellationToken 参数的重载的异步方法时,请优先使用带 TestContext.CancellationToken 的重载以启用协作取消并遵守测试超时。
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ 考虑使用接受 CancellationToken 的重载,并传递 'TestContext.CancellationToken'
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ 将 TestContext.CancellationToken 传递给异步操作
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ 标记有 "[GlobalTestInitialize]" 或 "[GlobalTestCleanup]" 的方法应遵循以下布局才会有效:
+- 不能在泛型类上声明它
+- 它应为 "public"
+- 它应为 "static"
+- 它不应为 "async void"
+- 它不应是特殊方法(终结器、运算符...)。
+- 它不应是泛型的
+- 它应采用 "TestContext" 类型的一个参数
+- 返回类型应为 "void"、"Task" 或 "ValueTask"
+
+声明这些方法的类型还应遵循以下规则:
+- 类型应为类
+- 类应该为 "public"
+- 类不应为 "static"
+- 应使用 "[TestClass]"(或派生属性)标记类
+- 类不应是泛型的。
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ 全局测试固定例程方法 "{0}" 签名无效
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ GlobalTestInitialize 和 GlobalTestCleanup 方法应具有有效的布局
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Contains、StartsWith 和 EndsWith 等方法会返回指示是否满足条件的布尔值。忽略这些返回值可能是一个错误。
+
+
+
+ The return value of '{0}' should not be ignored
+ 不应忽略 ‘{0}’ 的返回值
+
+
+
+ Do not ignore the return value of string methods
+ 不要忽略字符串方法的返回值
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assert使用 “Assert.Fail” 而不是始终失败的 “Assert.{0}” 断言
@@ -437,6 +547,21 @@ The type declaring these methods should also respect the following rules:
使用 “Assert.Fail” 而不是始终失败的断言
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ 'DataTestMethodAttribute' 已过时,并且不再提供 'TestMethodAttribute' 之外的其他功能。对所有测试方法(包括参数化测试)使用 'TestMethodAttribute'。
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ 'DataTestMethod' 已过时。请改用 'TestMethod'。
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ 首选 'TestMethod' 而不是 'DataTestMethod'
+
+ Review or remove the assertion as its condition is known to be always true查看或移除断言,因为已知其条件始终为 true
@@ -517,6 +642,16 @@ The type declaring these methods should also respect the following rules:
公共类型应为测试类
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ 使用 'Assert.{0}' 而不是 'StringAssert.{1}'
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ 使用 'Assert' 而不是 'StringAssert'
+
+ Test class '{0}' should be valid测试类“{0}”应该有效
@@ -532,6 +667,21 @@ The type declaring these methods should also respect the following rules:
测试方法“{0}”签名无效
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ 与 TestContext.CancellationTokenSource.Token 相比,TestContext.CancellationToken 提供了更直接的方式来访问取消令牌。
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ 使用 'TestContext.CancellationToken' 而不是 'TestContext.CancellationTokenSource.Token'
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ 使用 TestContext.CancellationToken 而不是 TestContext.CancellationTokenSource.Token
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.如果不使用 "ClassCleanupBehavior.EndOfClass","[ClassCleanup]" 将默认在程序集末尾运行,而不是在类的末尾运行。
@@ -720,13 +870,13 @@ The type declaring these methods should also respect the following rules:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
- 应使用“[TestClass]”标记包含“[TestMethod]”的类型,否则将以静默方式忽略该测试方法。
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ 应使用 "[TestClass]" 标记包含 "[TestMethod]" 的类型,否则将以静默方式忽略该测试方法。
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- 类“{0}”包含测试方法,应使用“[TestClass]”进行标记
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ 类型 "{0}" 包含测试方法,应使用 "[TestClass]" 进行标记
@@ -744,6 +894,11 @@ The type declaring these methods should also respect the following rules:
异步测试方法不需要 "Async" 后缀
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ AssemblyInitialize 和 ClassInitialize 方法的 MSTest 需要 TestContext 参数
+
+ [{0}] can only be set on methods marked with [TestMethod]只能对标记了 [TestMethod] 的方法设置 [{0}]
@@ -764,6 +919,21 @@ The type declaring these methods should also respect the following rules:
对测试类使用 “ConditionBaseAttribute”
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ 不建议在不显式设置 'CooperativeCancellation = true' 的情况下使用 '[Timeout]'。在将来的版本中,协作取消将成为默认行为。设置 'CooperativeCancellation = true' 以选择加入建议的行为,并避免中断性变更。
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ 将 'CooperativeCancellation = true' 与 '[Timeout]' 配合使用以启用协作取消行为
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ 将 'CooperativeCancellation = true' 与 '[Timeout]' 配合使用
+
+ '[DeploymentItem]' can be specified only on test class or test method只能对测试类或测试方法指定 "[DeploymentItem]"
@@ -819,6 +989,36 @@ The type declaring these methods should also respect the following rules:
对测试方法使用重试属性
+
+ TestContext property cannot be accessed in this context
+ 无法在此上下文中访问 TestContext 属性
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ 无法在 ‘{1}’ 方法中访问 TestContext 属性 ‘{0}’
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ 一些 TestContext 属性仅在测试执行期间可用,并且无法在程序集初始化、类初始化、类清理或程序集清理方法中访问。
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Assert.Throws 方法应只包含单个语句或表达式。多个语句可能会产生误导性 - 如果第一个语句引发,则永远不会执行后续语句;如果不引发,则应将其移到 Assert.Throws 外部。
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws 应仅包含单个语句/表达式
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws 应仅包含单个语句/表达式
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.Analyzers/xlf/Resources.zh-Hant.xlf b/src/Analyzers/MSTest.Analyzers/xlf/Resources.zh-Hant.xlf
index dca44939e7..3b1c94232d 100644
--- a/src/Analyzers/MSTest.Analyzers/xlf/Resources.zh-Hant.xlf
+++ b/src/Analyzers/MSTest.Analyzers/xlf/Resources.zh-Hant.xlf
@@ -132,6 +132,16 @@ The type declaring these methods should also respect the following rules:
不要在值類型中使用 'Assert.AreSame' 或 'Assert.AreNotSame'
+
+ Replace '{0}' with format parameters with string.Format or string interpolation
+ 將 '{0}' 取代為具有 string.Format 或字串內插補點的格式參數
+
+
+
+ Avoid using Assert methods with format parameters
+ 避免使用 Assert 方法搭配格式參數
+
+ Prefer 'Assert.ThrowsExactly' or 'Assert.ThrowsExactlyAsync' over '[ExpectedException]' as it ensures that only the expected call throws the expected exception. The assert APIs also provide more flexibility and allow you to assert extra properties of the exception.偏好 'Assert.ThrowsExactly' 或 'Assert.ThrowsExactlyAsync' 而不是 '[ExpectedException]',因為它可確保只有預期的呼叫會擲出預期的例外狀況。判斷提示 API 也提供更多彈性,並允許您判斷提示例外狀況的額外屬性。
@@ -147,6 +157,16 @@ The type declaring these methods should also respect the following rules:
避免 '[ExpectedException]'
+
+ Remove the 'DynamicDataSourceType' argument to use the default auto detect behavior
+ 移除 'DynamicDataSourceType' 引數,以使用預設的自動偵測行為
+
+
+
+ Avoid passing an explicit 'DynamicDataSourceType' and use the default auto detect behavior
+ 避免傳遞明確的 'DynamicDataSourceType',並使用預設的自動偵測行為
+
+ Do not assert inside 'async void' methods, local functions, or lambdas. Exceptions that are thrown in this context will be unhandled exceptions. When using VSTest under .NET Framework, they will be silently swallowed. When using Microsoft.Testing.Platform or VSTest under modern .NET, they may crash the process.不要在 'async void' 方法、本機函數或 lambdas 內判斷提示。在此內容中擲回的例外狀況將會是未處理的例外狀況。在 .NET Framework 下使用 VSTest 時,會以無訊息方式接受。在現代 .NET 下使用 Microsoft.Testing.Platform 或 VSTest 時,可能會損毀進程。
@@ -277,8 +297,13 @@ The type declaring these methods should also respect the following rules:
- DataRow argument type should match method parameter type. Mismatches occur at indices: {0}
- DataRow 引數類型應符合方法參數類型。索引發生不符: {0}
+ DataRow argument types do not match method parameter types. {0}
+ DataRow 引數類型不符合方法參數類型。{0}
+
+
+
+ Parameter '{0}' expects type '{1}', but the provided value has type '{2}'
+ 參數 '{0}' 期望類型為 '{1}',但提供的值的類型為 '{2}'
@@ -402,11 +427,21 @@ The type declaring these methods should also respect the following rules:
[DynamicData]' 只能在測試方法上設定
+
+ '[DynamicData]' member '{0}.{1}' is a field so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Field' (auto detect is the default when not specified explicitly, and is recommended)
+ '[DynamicData]' 成員 '{0}.{1}' 是欄位,因此您應該使用 'DynamicDataSourceType.AutoDetect' 或 'DynamicDataSourceType.Field' (未明確指定時,自動偵測為預設值,建議使用)
+
+ '[DynamicData]' member '{0}.{1}' is a method so you should use 'DynamicDataSourceType.AutoDetect' or 'DynamicDataSourceType.Method' (auto detect is the default when not specified explicitly, and is recommended)'[DynamicData]' 成員 '{0}.{1}' 是方法,因此您應該使用 'DynamicDataSourceType.AutoDetect' 或 'DynamicDataSourceType.Method' (未明確指定時,自動偵測是預設值,建議)
+
+ '[DynamicData]' member '{0}.{1}' is not a property, method, or field. Only properties, methods, and fields are supported.
+ '[DynamicData]' 成員 '{0}.{1}' 不是屬性、方法或欄位。僅支援屬性、方法和欄位。
+
+ '[DynamicData]' member '{0}.{1}' is not a property nor a method. Only properties and methods are supported.'[DynamicData]' 成員 『{0}.{1}』 不是屬性也不是方法。只支援屬性和方法。
@@ -427,6 +462,81 @@ The type declaring these methods should also respect the following rules:
DynamicData 應該有效
+
+ When calling async methods that have overloads accepting a CancellationToken parameter, prefer using the overload with TestContext.CancellationToken to enable cooperative cancellation and respect test timeouts.
+ 在呼叫接受 CancellationToken 參數的多載非同步方法時,建議使用 TestContext.CancellationToken 的多載,以啟用共同取消並遵守測試逾時。
+
+
+
+ Consider using the overload that accepts a CancellationToken and pass 'TestContext.CancellationToken'
+ 考慮使用接受 CancellationToken 的多載,並傳遞 'TestContext.CancellationToken'
+
+
+
+ Flow TestContext.CancellationToken to async operations
+ 將 TestContext.CancellationToken 傳遞給非同步作業
+
+
+
+ Methods marked with '[GlobalTestInitialize]' or '[GlobalTestCleanup]' should follow the following layout to be valid:
+-it can't be declared on a generic class
+-it should be 'public'
+-it should be 'static'
+-it should not be 'async void'
+-it should not be a special method (finalizer, operator...).
+-it should not be generic
+-it should take one parameter of type 'TestContext'
+-return type should be 'void', 'Task' or 'ValueTask'
+
+The type declaring these methods should also respect the following rules:
+-The type should be a class
+-The class should be 'public'
+-The class shouldn't be 'static'
+-The class should be marked with '[TestClass]' (or a derived attribute)
+-the class should not be generic.
+ 標示為 '[GlobalTestInitialize]' 或 '[GlobalTestCleanup]' 的方法應該遵循下列配置才能有效:
+-其不能在泛型類別上宣告
+-其應為 'public'
+-其應為 'static'
+-其不應為 'async void'
+-其不應為特殊方法 (完成項、運算子...)。
+-其不應為泛型
+-其應該接受類型為 'TestContext' 的一個參數
+-傳回類型應為 'void'、'Task' 或 'ValueTask'
+
+宣告這些方法的類型還應遵循以下規則:
+-類型應為類別
+-類別應為 'public'
+-類別不應為 'static'
+-類別應標示為 '[TestClass]' (或衍生屬性)
+-類別不應為泛型。
+
+
+
+ Global test fixture method '{0}' signature is invalid
+ 全域測試固件方法 '{0}' 的簽名無效
+
+
+
+ GlobalTestInitialize and GlobalTestCleanup methods should have valid layout
+ GlobalTestInitialize 和 GlobalTestCleanup 方法應具備有效的配置
+
+
+
+ Methods like Contains, StartsWith, and EndsWith return boolean values that indicate whether the condition was met. Ignoring these return values is likely a mistake.
+ Contains、StartsWith 和 EndsWith 等方法會傳回布林值,指出是否已符合條件。忽略這些傳回值可能導致錯誤。
+
+
+
+ The return value of '{0}' should not be ignored
+ 不應忽略傳回值 '{0}'
+
+
+
+ Do not ignore the return value of string methods
+ 請勿忽略字串方法的傳回值
+
+ Use 'Assert.Fail' instead of an always-failing 'Assert.{0}' assert使用 'Assert.Fail',而不是一直失敗的 'Assert.{0}' 聲明
@@ -437,6 +547,21 @@ The type declaring these methods should also respect the following rules:
使用 'Assert.Fail',而不是一直失敗的聲明
+
+ 'DataTestMethodAttribute' is obsolete and provides no additional functionality over 'TestMethodAttribute'. Use 'TestMethodAttribute' for all test methods, including parameterized tests.
+ 'DataTestMethodAttribute' 已過時,未提供比 'TestMethodAttribute' 更多的功能。針對所有測試方法使用 'TestMethodAttribute',包括參數化測試。
+
+
+
+ 'DataTestMethod' is obsolete. Use 'TestMethod' instead.
+ 'DataTestMethod' 已過時。請改用 'TestMethod'。
+
+
+
+ Prefer 'TestMethod' over 'DataTestMethod'
+ 優先使用 'TestMethod' 而不是 'DataTestMethod'
+
+ Review or remove the assertion as its condition is known to be always true檢閱或移除判斷提示,因為已知其條件一律為 True
@@ -517,6 +642,16 @@ The type declaring these methods should also respect the following rules:
公用類型應為測試類別
+
+ Use 'Assert.{0}' instead of 'StringAssert.{1}'
+ 使用 'Assert.{0}' 而不是 'StringAssert.{1}'
+
+
+
+ Use 'Assert' instead of 'StringAssert'
+ 使用 'Assert' 而不是 'StringAssert'
+
+ Test class '{0}' should be valid測試類別 '{0}' 應為有效
@@ -532,6 +667,21 @@ The type declaring these methods should also respect the following rules:
測試方法 '{0}' 簽章無效
+
+ TestContext.CancellationToken provides a more direct way to access the cancellation token compared to TestContext.CancellationTokenSource.Token.
+ 相較於 TestContext.CancellationTokenSource.Token,TestContext.CancellationToken 提供存取取消權杖更直接的方法。
+
+
+
+ Use 'TestContext.CancellationToken' instead of 'TestContext.CancellationTokenSource.Token'
+ 使用 'TestContext.CancellationToken' 而不是 'TestContext.CancellationTokenSource.Token'
+
+
+
+ Use TestContext.CancellationToken instead of TestContext.CancellationTokenSource.Token
+ 使用 TestContext.CancellationToken 而不是 TestContext.CancellationTokenSource.Token
+
+ Without using 'ClassCleanupBehavior.EndOfClass', the '[ClassCleanup]' will by default be run at the end of the assembly and not at the end of the class.如不使用 'ClassCleanupBehavior.EndOfClass',則預設會在組件結尾執行 '[ClassCleanup]',而非在類別的結尾執行。
@@ -720,13 +870,13 @@ The type declaring these methods should also respect the following rules:
- Type contaning '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.
+ Type containing '[TestMethod]' should be marked with '[TestClass]', otherwise the test method will be silently ignored.包含 '[TestMethod]' 的類型應標記為 '[TestClass]',否則將以無訊息的方式忽略測試方法。
- Class '{0}' contains test methods and should be marked with '[TestClass]'
- 類別 '{0}' 包含測試方法,應以 '[TestClass]' 標記
+ Type '{0}' contains test methods and should be marked with '[TestClass]'
+ 類型 '{0}' 包含測試方法,應以 '[TestClass]' 標記
@@ -744,6 +894,11 @@ The type declaring these methods should also respect the following rules:
非同步測試方法不需要 'Async' 尾碼
+
+ TestContext parameter is required by MSTest for AssemblyInitialize and ClassInitialize methods
+ MSTest 需要 TestContext 參數,以用於 AssemblyInitialize 和 ClassInitialize 方法
+
+ [{0}] can only be set on methods marked with [TestMethod][{0}] 只能在標示為 [TestMethod] 的方法上設定
@@ -764,6 +919,21 @@ The type declaring these methods should also respect the following rules:
在測試類別上使用 'ConditionBaseAttribute'
+
+ Using '[Timeout]' without explicitly setting 'CooperativeCancellation = true' is discouraged. In a future version, cooperative cancellation will become the default behavior. Set 'CooperativeCancellation = true' to opt into the recommended behavior and avoid breaking changes.
+ 在未明確設定 'CooperativeCancellation = true' 的情況下,不建議使用 '[Timeout]'。在未來的版本中,合作取消將成為預設行為。請設定 'CooperativeCancellation = true' 以選擇加入推薦的行為,並避免破壞性變更。
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]' to enable cooperative cancellation behavior
+ 使用 'CooperativeCancellation = true' 搭配 '[Timeout]' 以啟用合作取消行為
+
+
+
+ Use 'CooperativeCancellation = true' with '[Timeout]'
+ 使用 'CellCancellation = true' 搭配 '[Timeout]'
+
+ '[DeploymentItem]' can be specified only on test class or test method'[DeploymentItem]' 只能在測試類或測試方法上指定
@@ -819,6 +989,36 @@ The type declaring these methods should also respect the following rules:
在測試方法上使用重試屬性
+
+ TestContext property cannot be accessed in this context
+ 無法在此內容中存取 TestContext 屬性
+
+
+
+ TestContext property '{0}' cannot be accessed in '{1}' method
+ 無法在 '{1}' 方法中存取 TestContext 屬性 '{0}'
+
+
+
+ Some TestContext properties are only available during test execution and cannot be accessed in assembly initialize, class initialize, class cleanup, or assembly cleanup methods.
+ 某些 TestContext 屬性僅在測試執行期間可供使用,無法在組件初始化、類別初始化、類別清理或組件清理方法中存取。
+
+
+
+ Assert.Throws methods should contain only a single statement or expression. Multiple statements can be misleading - if the first statement throws, subsequent statements are never executed; if it doesn't throw, it should be moved outside the Assert.Throws.
+ Assert.Throws 方法應該只包含單一陳述式或運算式。多個陳述式可能會產生誤導 - 如果擲出第一個陳述式,後續陳述式永遠不會執行; 如果未擲回,則應該移到 Assert.Throws 之外。
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws 應該只包含單一陳述式/運算式
+
+
+
+ Assert.Throws should contain only a single statement/expression
+ Assert.Throws 應該只包含單一陳述式/運算式
+
+
\ No newline at end of file
diff --git a/src/Analyzers/MSTest.GlobalConfigsGenerator/AnalyzerSeverityDecider.cs b/src/Analyzers/MSTest.GlobalConfigsGenerator/AnalyzerSeverityDecider.cs
index adf182083e..ac1370ab38 100644
--- a/src/Analyzers/MSTest.GlobalConfigsGenerator/AnalyzerSeverityDecider.cs
+++ b/src/Analyzers/MSTest.GlobalConfigsGenerator/AnalyzerSeverityDecider.cs
@@ -86,7 +86,8 @@ internal static class AnalyzerSeverityDecider
if (rule.IsEnabledByDefault && rule.DefaultSeverity >= DiagnosticSeverity.Info)
{
// Recommended mode will elevate info to warning only if the rule is enabled by default.
- return DiagnosticSeverity.Warning;
+ // In addition, if the rule is already error by default, we keep it as error. So, choose the max between warning and default severity.
+ return (DiagnosticSeverity)Math.Max((int)rule.DefaultSeverity, (int)DiagnosticSeverity.Warning);
}
if (rule.DefaultSeverity >= DiagnosticSeverity.Warning)
@@ -117,6 +118,8 @@ internal static class AnalyzerSeverityDecider
return rule.IsEnabledByDefault ? rule.DefaultSeverity : null;
}
- private static DiagnosticSeverity? DecideForModeNone(DiagnosticDescriptor _)
- => null;
+ private static DiagnosticSeverity? DecideForModeNone(DiagnosticDescriptor rule)
+ // Even with 'None' mode, we still keep the rules that are errors by default.
+ // Such rules are likely to be critical and shouldn't be suppressed by MSTestAnalysisMode None.
+ => rule.DefaultSeverity == DiagnosticSeverity.Error ? DiagnosticSeverity.Error : null;
}
diff --git a/src/Analyzers/MSTest.GlobalConfigsGenerator/GlobalConfigBuilder.cs b/src/Analyzers/MSTest.GlobalConfigsGenerator/GlobalConfigBuilder.cs
index d0940b34f5..9eb780c850 100644
--- a/src/Analyzers/MSTest.GlobalConfigsGenerator/GlobalConfigBuilder.cs
+++ b/src/Analyzers/MSTest.GlobalConfigsGenerator/GlobalConfigBuilder.cs
@@ -6,7 +6,7 @@
internal sealed class GlobalConfigBuilder
{
private readonly StringBuilder _builder = new();
- private readonly Dictionary _severityDictionary = new();
+ private readonly Dictionary _severityDictionary = [];
public GlobalConfigBuilder(MSTestAnalysisMode mode)
{
diff --git a/src/Analyzers/MSTest.SourceGeneration/Generators/TestNodesGenerator.cs b/src/Analyzers/MSTest.SourceGeneration/Generators/TestNodesGenerator.cs
index c841f5d90d..a1ca1ed89c 100644
--- a/src/Analyzers/MSTest.SourceGeneration/Generators/TestNodesGenerator.cs
+++ b/src/Analyzers/MSTest.SourceGeneration/Generators/TestNodesGenerator.cs
@@ -50,10 +50,9 @@ private static void AddAssemblyTestNode(SourceProductionContext context, (string
sourceStringBuilder.AppendAutoGeneratedHeader();
sourceStringBuilder.AppendLine();
- TestNamespaceInfo[] uniqueUsedNamespaces = testClasses
+ TestNamespaceInfo[] uniqueUsedNamespaces = [.. testClasses
.Select(x => x.ContainingNamespace)
- .Distinct()
- .ToArray();
+ .Distinct()];
string? safeAssemblyName = null;
IDisposable? namespaceBlock = null;
@@ -148,7 +147,7 @@ private static void AddAssemblyTestNode(SourceProductionContext context, (string
private static void AppendAssemblyTestNodeBuilderContent(IndentedStringBuilder sourceStringBuilder, string assemblyName,
ImmutableArray testClasses)
{
- Dictionary rootVariablesPerNamespace = new();
+ Dictionary rootVariablesPerNamespace = [];
int variableIndex = 1;
IEnumerable> classesPerNamespaces = testClasses.GroupBy(x => x.ContainingNamespace);
foreach (IGrouping namespaceClasses in classesPerNamespaces)
@@ -159,7 +158,6 @@ private static void AppendAssemblyTestNodeBuilderContent(IndentedStringBuilder s
foreach (TestTypeInfo testClassInfo in namespaceClasses)
{
- string escapedClassFullName = TestNodeHelpers.GenerateEscapedName(testClassInfo.FullyQualifiedName);
sourceStringBuilder.AppendLine($"{namespaceTestsVariableName}.Add({testClassInfo.GeneratedTypeName}.TestNode);");
}
@@ -169,7 +167,7 @@ private static void AppendAssemblyTestNodeBuilderContent(IndentedStringBuilder s
sourceStringBuilder.Append("MSTF::TestNode root = ");
- using (sourceStringBuilder.AppendTestNode(assemblyName, assemblyName, Array.Empty(), ';'))
+ using (sourceStringBuilder.AppendTestNode(assemblyName, assemblyName, [], ';'))
{
foreach (IGrouping group in classesPerNamespaces)
{
diff --git a/src/Analyzers/MSTest.SourceGeneration/Helpers/IndentedStringBuilder.cs b/src/Analyzers/MSTest.SourceGeneration/Helpers/IndentedStringBuilder.cs
index 39fdb20ba0..a9b2c407f4 100644
--- a/src/Analyzers/MSTest.SourceGeneration/Helpers/IndentedStringBuilder.cs
+++ b/src/Analyzers/MSTest.SourceGeneration/Helpers/IndentedStringBuilder.cs
@@ -76,7 +76,7 @@ private StringBuilder MaybeAppendIndent()
{
if (_needsIndent)
{
- _builder.Append(new string(' ', IndentationLevel * 4));
+ _builder.Append(' ', IndentationLevel * 4);
}
return _builder;
diff --git a/src/Analyzers/MSTest.SourceGeneration/Helpers/SystemPolyfills.cs b/src/Analyzers/MSTest.SourceGeneration/Helpers/SystemPolyfills.cs
index 7a3645233e..6a80a1ca13 100644
--- a/src/Analyzers/MSTest.SourceGeneration/Helpers/SystemPolyfills.cs
+++ b/src/Analyzers/MSTest.SourceGeneration/Helpers/SystemPolyfills.cs
@@ -3,62 +3,21 @@
#if !NETCOREAPP
#pragma warning disable SA1403 // File may only contain a single namespace
-#pragma warning disable SA1623 // Property summary documentation should match accessors
#pragma warning disable SA1642 // Constructor summary documentation should begin with standard text
-#pragma warning disable SA1502 // Element should not be on a single line
+#pragma warning disable SA1623 // Property summary documentation should match accessors
using System.ComponentModel;
namespace System.Runtime.CompilerServices
{
[EditorBrowsable(EditorBrowsableState.Never)]
- internal static class IsExternalInit { }
+ internal static class IsExternalInit;
}
// This was copied from https://github.com/dotnet/coreclr/blob/60f1e6265bd1039f023a82e0643b524d6aaf7845/src/System.Private.CoreLib/shared/System/Diagnostics/CodeAnalysis/NullableAttributes.cs
// and updated to have the scope of the attributes be internal.
namespace System.Diagnostics.CodeAnalysis
{
- /// Specifies that null is allowed as an input even if the corresponding type disallows it.
- [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]
- internal sealed class AllowNullAttribute : Attribute { }
-
- /// Specifies that null is disallowed as an input even if the corresponding type allows it.
- [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]
- internal sealed class DisallowNullAttribute : Attribute { }
-
- /// Specifies that an output may be null even if the corresponding type disallows it.
- [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]
- internal sealed class MaybeNullAttribute : Attribute { }
-
- /// Specifies that when a method returns , the parameter may be null even if the corresponding type disallows it.
- [AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
- internal sealed class MaybeNullWhenAttribute : Attribute
- {
- /// Initializes the attribute with the specified return value condition.
- ///
- /// The return value condition. If the method returns this value, the associated parameter may be null.
- ///
- public MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;
-
- /// Gets the return value condition.
- public bool ReturnValue { get; }
- }
-
- /// Specifies that the output will be non-null if the named parameter is non-null.
- [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)]
- internal sealed class NotNullIfNotNullAttribute : Attribute
- {
- /// Initializes the attribute with the associated parameter name.
- ///
- /// The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null.
- ///
- public NotNullIfNotNullAttribute(string parameterName) => ParameterName = parameterName;
-
- /// Gets the associated parameter name.
- public string ParameterName { get; }
- }
-
/// Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it.
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
internal sealed class NotNullWhenAttribute : Attribute
@@ -72,127 +31,6 @@ internal sealed class NotNullWhenAttribute : Attribute
/// Gets the return value condition.
public bool ReturnValue { get; }
}
-
- /// Specifies that the method or property will ensure that the listed field and property members have not-null values.
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
- internal sealed class MemberNotNullAttribute : Attribute
- {
- /// Initializes the attribute with a field or property member.
- ///
- /// The field or property member that is promised to be not-null.
- ///
- public MemberNotNullAttribute(string member) => Members = new[] { member };
-
- /// Initializes the attribute with the list of field and property members.
- ///
- /// The list of field and property members that are promised to be not-null.
- ///
- public MemberNotNullAttribute(params string[] members) => Members = members;
-
- /// Gets field or property member names.
- public string[] Members { get; }
- }
-
- /// Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition.
- [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
- internal sealed class MemberNotNullWhenAttribute : Attribute
- {
- /// Initializes the attribute with the specified return value condition and a field or property member.
- ///
- /// The return value condition. If the method returns this value, the associated parameter will not be null.
- ///
- ///
- /// The field or property member that is promised to be not-null.
- ///
- public MemberNotNullWhenAttribute(bool returnValue, string member)
- {
- ReturnValue = returnValue;
- Members = new[] { member };
- }
-
- /// Initializes the attribute with the specified return value condition and list of field and property members.
- ///
- /// The return value condition. If the method returns this value, the associated parameter will not be null.
- ///
- ///
- /// The list of field and property members that are promised to be not-null.
- ///
- public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
- {
- ReturnValue = returnValue;
- Members = members;
- }
-
- /// Gets the return value condition.
- public bool ReturnValue { get; }
-
- /// Gets field or property member names.
- public string[] Members { get; }
- }
}
#endif
-
-#if !NET7_0_OR_GREATER
-namespace System.Diagnostics.CodeAnalysis
-{
- ///
- /// Specifies that this constructor sets all required members for the current type,
- /// and callers do not need to set any required members themselves.
- ///
- [AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)]
- internal sealed class SetsRequiredMembersAttribute : Attribute
- {
- }
-}
-
-namespace System.Runtime.CompilerServices
-{
- ///
- /// Indicates that compiler support for a particular feature is required for the location where this attribute is applied.
- ///
- [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)]
- internal sealed class CompilerFeatureRequiredAttribute : Attribute
- {
- ///
- /// Creates a new instance of the type.
- ///
- /// The name of the feature to indicate.
- public CompilerFeatureRequiredAttribute(string featureName) => FeatureName = featureName;
-
- ///
- /// The name of the compiler feature.
- ///
- public string FeatureName { get; }
-
- ///
- /// If true, the compiler can choose to allow access to the location where this attribute is applied if it does not understand .
- ///
- public bool IsOptional { get; set; }
-
- ///
- /// The used for the ref structs C# feature.
- ///
- public const string RefStructs = nameof(RefStructs);
-
- ///
- /// The used for the required members C# feature.
- ///
- public const string RequiredMembers = nameof(RequiredMembers);
- }
-
- ///
- /// Specifies that a type has required members or that a member is required.
- ///
- [AttributeUsage(
- AttributeTargets.Class |
- AttributeTargets.Struct |
- AttributeTargets.Field |
- AttributeTargets.Property,
- AllowMultiple = false,
- Inherited = false)]
- internal sealed class RequiredMemberAttribute : Attribute
- {
- }
-}
-#endif
diff --git a/src/Analyzers/MSTest.SourceGeneration/MSTest.SourceGeneration.csproj b/src/Analyzers/MSTest.SourceGeneration/MSTest.SourceGeneration.csproj
index af7c69027c..3eb6317ab6 100644
--- a/src/Analyzers/MSTest.SourceGeneration/MSTest.SourceGeneration.csproj
+++ b/src/Analyzers/MSTest.SourceGeneration/MSTest.SourceGeneration.csproj
@@ -3,8 +3,6 @@
netstandard2.0
-
- truefalseNU5128
@@ -41,7 +39,7 @@ This package provides the C# source generators for MSTest test framework.]]>
-
+
diff --git a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/DataRowTestMethodArgumentsInfo.cs b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/DataRowTestMethodArgumentsInfo.cs
index 5380802d1d..7bc9a24b18 100644
--- a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/DataRowTestMethodArgumentsInfo.cs
+++ b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/DataRowTestMethodArgumentsInfo.cs
@@ -14,7 +14,7 @@ internal sealed class DataRowTestMethodArgumentsInfo : ITestMethodArgumentsInfo
private readonly ImmutableArray> _argumentsRows;
private readonly TestMethodParametersInfo _parametersInfo;
- public bool IsTestArgumentsEntryReturnType { get; } = true;
+ public bool IsTestArgumentsEntryReturnType => true;
public string? GeneratorMethodFullName { get; }
@@ -43,7 +43,7 @@ public void AppendArguments(IndentedStringBuilder nodeBuilder)
string argumentsEntry = arguments.Length > 1
? "(" + string.Join(", ", arguments) + ")"
: arguments[0];
- string argumentsUid = GetArgumentsUid(_parametersInfo.Parameters.Select(x => x.Name).ToArray(), arguments);
+ string argumentsUid = GetArgumentsUid([.. _parametersInfo.Parameters.Select(x => x.Name)], arguments);
nodeBuilder.AppendLine($"new {TestMethodInfo.TestArgumentsEntryTypeName}<{_parametersInfo.ParametersTuple}>({argumentsEntry}, \"{argumentsUid}\"),");
}
}
diff --git a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/DynamicDataTestMethodArgumentsInfo.cs b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/DynamicDataTestMethodArgumentsInfo.cs
index e40db92762..0d08f672a8 100644
--- a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/DynamicDataTestMethodArgumentsInfo.cs
+++ b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/DynamicDataTestMethodArgumentsInfo.cs
@@ -19,6 +19,7 @@ internal sealed class DynamicDataTestMethodArgumentsInfo : ITestMethodArgumentsI
private const int DynamicDataSourceTypeProperty = 0;
private const int DynamicDataSourceTypeMethod = 1;
private const int DynamicDataSourceTypeAutoDetect = 2;
+ private const int DynamicDataSourceTypeField = 3;
internal const string TestArgumentsEntryTypeName = "MSTF::InternalUnsafeTestArgumentsEntry";
internal const string DynamicDataNameProviderTypeName = "MSTF::DynamicDataNameProvider";
@@ -94,6 +95,7 @@ private DynamicDataTestMethodArgumentsInfo(string memberName, string memberFullT
{
DynamicDataSourceTypeProperty => SymbolKind.Property,
DynamicDataSourceTypeMethod => SymbolKind.Method,
+ DynamicDataSourceTypeField => SymbolKind.Field,
DynamicDataSourceTypeAutoDetect => null,
_ => throw ApplicationStateGuard.Unreachable(),
};
@@ -102,33 +104,31 @@ private DynamicDataTestMethodArgumentsInfo(string memberName, string memberFullT
private static DynamicDataTestMethodArgumentsInfo? TryBuildFromDynamicData(INamedTypeSymbol memberTypeSymbol, string memberName, SymbolKind? symbolKind,
WellKnownTypes wellKnownTypes, IMethodSymbol testMethodSymbol)
{
- // Dynamic data only support Properties and Methods, but not fields.
+ // Dynamic data supports Properties, Methods, and Fields.
// null is also possible and means "AutoDetect"
- if (symbolKind is not (SymbolKind.Property or SymbolKind.Method or null))
+ if (symbolKind is not (SymbolKind.Property or SymbolKind.Method or SymbolKind.Field or null))
{
return null;
}
ISymbol? firstMatchingMember = memberTypeSymbol.GetAllMembers(memberName)
.SelectMany(x => x)
- // DynamicData does not have option to not specify the kind of member we are looking for at the moment.
- // But the code below can easily handle searching for all kinds of supported members, and only
- // take the kind into consideration when needed. If a ctor is added to DynamicData, or if we can tell if
- // user specified the value explicitly or if it was taken from the default value, then `symbolKind` can be made nullable
- // and only filtered below.
+ // DynamicData supports properties, methods, and fields.
// .Where(s => s.IsStatic && (s.Kind is SymbolKind.Field or SymbolKind.Property or SymbolKind.Method))
// .Where(s => symbolKind == null || s.Kind == symbolKind)
- .Where(s => s.IsStatic && (s.Kind == symbolKind || (symbolKind is null && s.Kind is SymbolKind.Property or SymbolKind.Method)))
+ .Where(s => s.IsStatic && (s.Kind == symbolKind || (symbolKind is null && s.Kind is SymbolKind.Property or SymbolKind.Method or SymbolKind.Field)))
.Select(s => s switch
{
IPropertySymbol propertySymbol => (ISymbol)propertySymbol,
IMethodSymbol methodSymbol => methodSymbol,
+ IFieldSymbol fieldSymbol => fieldSymbol,
_ => throw ApplicationStateGuard.Unreachable(),
})
.OrderBy(tuple => tuple.Kind switch
{
SymbolKind.Property => 1,
SymbolKind.Method => 2,
+ SymbolKind.Field => 3,
_ => throw ApplicationStateGuard.Unreachable(),
})
.FirstOrDefault();
@@ -205,7 +205,7 @@ public void AppendArguments(IndentedStringBuilder nodeBuilder)
nodeBuilder.Append("()");
}
- nodeBuilder.AppendLine(";");
+ nodeBuilder.AppendLine(';');
if (!_targetMethodReturnsCollectionOfTestArgumentsEntry)
{
@@ -225,6 +225,6 @@ public void AppendArguments(IndentedStringBuilder nodeBuilder)
}
}
- nodeBuilder.AppendLine(",");
+ nodeBuilder.AppendLine(',');
}
}
diff --git a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestMethodInfo.cs b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestMethodInfo.cs
index 4cad071a97..708dce9b17 100644
--- a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestMethodInfo.cs
+++ b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestMethodInfo.cs
@@ -89,10 +89,10 @@ private TestMethodInfo(IMethodSymbol methodSymbol, INamedTypeSymbol typeUsingMet
return null;
}
- List dataRowAttributes = new();
- List dynamicDataAttributes = new();
- List testPropertyAttributes = new();
- List<(string RuleId, string Description)> pragmas = new();
+ List dataRowAttributes = [];
+ List dynamicDataAttributes = [];
+ List testPropertyAttributes = [];
+ List<(string RuleId, string Description)> pragmas = [];
TimeSpan? testExecutionTimeout = null;
foreach (AttributeData attribute in attributes)
{
diff --git a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestNamespaceInfo.cs b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestNamespaceInfo.cs
index a17a31fc11..308a04ebea 100644
--- a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestNamespaceInfo.cs
+++ b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestNamespaceInfo.cs
@@ -30,8 +30,7 @@ public TestNamespaceInfo(INamespaceSymbol namespaceSymbol)
public void AppendNamespaceTestNode(IndentedStringBuilder nodeStringBuilder, string testsVariableName)
{
- using (nodeStringBuilder.AppendTestNode(_containingAssembly + "." + _nameOrGlobalNamespace, _nameOrGlobalNamespace,
- Array.Empty(), testsVariableName))
+ using (nodeStringBuilder.AppendTestNode(_containingAssembly + "." + _nameOrGlobalNamespace, _nameOrGlobalNamespace, [], testsVariableName))
{
}
}
diff --git a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestTypeInfo.cs b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestTypeInfo.cs
index 60d46150ed..c1ec3a610e 100644
--- a/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestTypeInfo.cs
+++ b/src/Analyzers/MSTest.SourceGeneration/ObjectModels/TestTypeInfo.cs
@@ -156,7 +156,7 @@ public void AppendTestNode(IndentedStringBuilder sourceStringBuilder)
private void AppendTestNodeCreation(IndentedStringBuilder sourceStringBuilder)
{
- List properties = new();
+ List properties = [];
foreach ((string filePath, int startLine, int endLine) in _declarationReferences)
{
properties.Add($"new Msg::TestFileLocationProperty(@\"{filePath}\", new(new({startLine}, -1), new({endLine}, -1))),");
diff --git a/src/Package/MSTest.Sdk/Sdk/Runner/ClassicEngine.targets b/src/Package/MSTest.Sdk/Sdk/Runner/ClassicEngine.targets
index 0ba5bac6c4..8ff884ae40 100644
--- a/src/Package/MSTest.Sdk/Sdk/Runner/ClassicEngine.targets
+++ b/src/Package/MSTest.Sdk/Sdk/Runner/ClassicEngine.targets
@@ -34,6 +34,10 @@
true$(MicrosoftTestingExtensionsCommonVersion)
+
+ true
+ $(MicrosoftTestingExtensionsCommonVersion)
+
true$(MicrosoftTestingExtensionsFakesVersion)
@@ -48,6 +52,7 @@
-
-
-
-
diff --git a/src/Package/MSTest.Sdk/Sdk/Sdk.props.template b/src/Package/MSTest.Sdk/Sdk/Sdk.props.template
index 2c6fe5ca7d..73530c9e0d 100644
--- a/src/Package/MSTest.Sdk/Sdk/Sdk.props.template
+++ b/src/Package/MSTest.Sdk/Sdk/Sdk.props.template
@@ -12,6 +12,8 @@
+
+ falsetrue
diff --git a/src/Package/MSTest/MSTest.csproj b/src/Package/MSTest/MSTest.csproj
index ecbba42c9e..52763d8709 100644
--- a/src/Package/MSTest/MSTest.csproj
+++ b/src/Package/MSTest/MSTest.csproj
@@ -46,7 +46,6 @@
-
diff --git a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/AzureDevOpsReporter.cs b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/AzureDevOpsReporter.cs
index 9e7093ba63..5d9c0f65b3 100644
--- a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/AzureDevOpsReporter.cs
+++ b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/AzureDevOpsReporter.cs
@@ -11,6 +11,7 @@
using Microsoft.Testing.Platform.Helpers;
using Microsoft.Testing.Platform.Logging;
using Microsoft.Testing.Platform.OutputDevice;
+using Microsoft.Testing.TestInfrastructure;
namespace Microsoft.Testing.Extensions.AzureDevOpsReport;
@@ -23,7 +24,7 @@ internal sealed class AzureDevOpsReporter :
private readonly IOutputDevice _outputDisplay;
private readonly ILogger _logger;
- private static readonly char[] NewlineCharacters = new char[] { '\r', '\n' };
+ private static readonly char[] NewlineCharacters = ['\r', '\n'];
private readonly ICommandLineOptions _commandLine;
private readonly IEnvironment _environment;
private readonly IFileSystem _fileSystem;
@@ -51,10 +52,10 @@ public AzureDevOpsReporter(
public Type[] DataTypesProduced { get; } = [typeof(SessionFileArtifact)];
///
- public string Uid { get; } = nameof(AzureDevOpsReporter);
+ public string Uid => nameof(AzureDevOpsReporter);
///
- public string Version { get; } = AppVersion.DefaultSemVer;
+ public string Version => AppVersion.DefaultSemVer;
///
public string DisplayName { get; } = AzureDevOpsResources.DisplayName;
@@ -124,16 +125,16 @@ public async Task ConsumeAsync(IDataProducer dataProducer, IData value, Cancella
switch (nodeState)
{
case FailedTestNodeStateProperty failed:
- await WriteExceptionAsync(failed.Explanation, failed.Exception);
+ await WriteExceptionAsync(failed.Explanation, failed.Exception).ConfigureAwait(false);
break;
case ErrorTestNodeStateProperty error:
- await WriteExceptionAsync(error.Explanation, error.Exception);
+ await WriteExceptionAsync(error.Explanation, error.Exception).ConfigureAwait(false);
break;
case CancelledTestNodeStateProperty cancelled:
- await WriteExceptionAsync(cancelled.Explanation, cancelled.Exception);
+ await WriteExceptionAsync(cancelled.Explanation, cancelled.Exception).ConfigureAwait(false);
break;
case TimeoutTestNodeStateProperty timeout:
- await WriteExceptionAsync(timeout.Explanation, timeout.Exception);
+ await WriteExceptionAsync(timeout.Explanation, timeout.Exception).ConfigureAwait(false);
break;
}
}
@@ -161,7 +162,7 @@ private async Task WriteExceptionAsync(string? explanation, Exception? exception
_logger.LogTrace($"Showing failure message '{line}'.");
}
- await _outputDisplay.DisplayAsync(this, new FormattedTextOutputDeviceData(line));
+ await _outputDisplay.DisplayAsync(this, new FormattedTextOutputDeviceData(line)).ConfigureAwait(false);
}
internal static /* for testing */ string? GetErrorText(string? explanation, Exception? exception, string severity, IFileSystem fileSystem, ILogger logger)
@@ -263,7 +264,7 @@ private async Task WriteExceptionAsync(string? explanation, Exception? exception
// Combine with repo root, to be able to resolve deterministic build paths.
string fullPath = Path.Combine(repoRoot, relativePath);
- if (!fileSystem.Exists(fullPath))
+ if (!fileSystem.ExistFile(fullPath))
{
// Path does not belong to current repository or does not exist, no need to report it because it will not show up in the PR error, we will only see it details of the run, which is the same
// as not reporting it this way. Maybe there can be 2 modes, but right now we want this to be usable for GitHub + AzDo, not for pure AzDo.
diff --git a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/BannedSymbols.txt b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/BannedSymbols.txt
index ea8617fcb0..09d715c49c 100644
--- a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/BannedSymbols.txt
+++ b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/BannedSymbols.txt
@@ -6,5 +6,5 @@ M:System.Threading.Tasks.Task.WhenAll(System.Threading.Tasks.Task[]); Use 'ITask
M:System.Threading.Tasks.Task.WhenAll(System.Collections.Generic.IEnumerable{System.Threading.Tasks.Task}); Use 'ITask' instead
M:System.String.IsNullOrEmpty(System.String); Use 'RoslynString.IsNullOrEmpty' instead
M:System.String.IsNullOrWhiteSpace(System.String); Use 'RoslynString.IsNullOrWhiteSpace' instead
-M:System.Diagnostics.Debug.Assert(System.Boolean); Use 'RoslynDebug.Assert' instead
+M:System.Diagnostics.Debug.Assert(System.Boolean); Use 'RoslynDebug.Assert' instead
M:System.Diagnostics.Debug.Assert(System.Boolean,System.String); Use 'RoslynDebug.Assert' instead
diff --git a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Microsoft.Testing.Extensions.AzureDevOpsReport.csproj b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Microsoft.Testing.Extensions.AzureDevOpsReport.csproj
index c509126613..02e9d786da 100644
--- a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Microsoft.Testing.Extensions.AzureDevOpsReport.csproj
+++ b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Microsoft.Testing.Extensions.AzureDevOpsReport.csproj
@@ -2,10 +2,6 @@
netstandard2.0;$(MicrosoftTestingTargetFrameworks)
-
-
- 1.0.0
- alpha
@@ -39,11 +35,11 @@ This package extends Microsoft Testing Platform to provide a Azure DevOps report
-
+
-
+
diff --git a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/PublicAPI/PublicAPI.Shipped.txt b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/PublicAPI/PublicAPI.Shipped.txt
index 7dc5c58110..3b7a744721 100644
--- a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/PublicAPI/PublicAPI.Shipped.txt
+++ b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/PublicAPI/PublicAPI.Shipped.txt
@@ -1 +1,5 @@
#nullable enable
+Microsoft.Testing.Extensions.AzureDevOpsExtensions
+Microsoft.Testing.Extensions.AzureDevOpsReport.TestingPlatformBuilderHook
+static Microsoft.Testing.Extensions.AzureDevOpsExtensions.AddAzureDevOpsProvider(this Microsoft.Testing.Platform.Builder.ITestApplicationBuilder! builder) -> void
+static Microsoft.Testing.Extensions.AzureDevOpsReport.TestingPlatformBuilderHook.AddExtensions(Microsoft.Testing.Platform.Builder.ITestApplicationBuilder! testApplicationBuilder, string![]! _) -> void
diff --git a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/PublicAPI/PublicAPI.Unshipped.txt b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/PublicAPI/PublicAPI.Unshipped.txt
index 2ad77b868e..7dc5c58110 100644
--- a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/PublicAPI/PublicAPI.Unshipped.txt
+++ b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/PublicAPI/PublicAPI.Unshipped.txt
@@ -1,5 +1 @@
#nullable enable
-Microsoft.Testing.Extensions.AzureDevOpsReport.TestingPlatformBuilderHook
-Microsoft.Testing.Extensions.AzureDevOpsExtensions
-static Microsoft.Testing.Extensions.AzureDevOpsReport.TestingPlatformBuilderHook.AddExtensions(Microsoft.Testing.Platform.Builder.ITestApplicationBuilder! testApplicationBuilder, string![]! _) -> void
-static Microsoft.Testing.Extensions.AzureDevOpsExtensions.AddAzureDevOpsProvider(this Microsoft.Testing.Platform.Builder.ITestApplicationBuilder! builder) -> void
diff --git a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Resources/AzureDevOpsResources.resx b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Resources/AzureDevOpsResources.resx
index cc27c6c8b4..516d5d4382 100644
--- a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Resources/AzureDevOpsResources.resx
+++ b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Resources/AzureDevOpsResources.resx
@@ -134,6 +134,6 @@
Severity to use for the reported event. Options are: error (default) and warning.
- Do not translated 'error' or 'warning' those are literal values.
+ {Locked="error"}{Locked="warning"}
\ No newline at end of file
diff --git a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Resources/xlf/AzureDevOpsResources.cs.xlf b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Resources/xlf/AzureDevOpsResources.cs.xlf
index 4689eb6b49..076a3037b9 100644
--- a/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Resources/xlf/AzureDevOpsResources.cs.xlf
+++ b/src/Platform/Microsoft.Testing.Extensions.AzureDevOpsReport/Resources/xlf/AzureDevOpsResources.cs.xlf
@@ -29,8 +29,8 @@
Severity to use for the reported event. Options are: error (default) and warning.
- Závažnost, která se má použít pro hlášenou událost. Možnosti: chyba (výchozí) a upozornění.
- Do not translated 'error' or 'warning' those are literal values.
+ Závažnost, která se má použít pro hlášenou událost. Možnosti: error (výchozí) a warning.
+ {Locked="error"}{Locked="warning"}