diff --git a/docs/Changelog-Platform.md b/docs/Changelog-Platform.md
index 9cd5d69c3e..c1fd58d44b 100644
--- a/docs/Changelog-Platform.md
+++ b/docs/Changelog-Platform.md
@@ -4,6 +4,12 @@ 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/)
+## [Unreleased]
+
+### Fixed
+
+* Clarify TreeNodeFilter OR-pattern diagnostics for unsupported parenthesized full-path expressions by @Evangelink in [#7415](https://github.com/microsoft/testfx/pull/7415)
+
## [2.2.3] - 2026-05-14
See full log [of v4.2.2...v4.2.3](https://github.com/microsoft/testfx/compare/v4.2.2...v4.2.3)
diff --git a/src/Platform/Microsoft.Testing.Platform/Requests/TreeNodeFilter/TreeNodeFilter.cs b/src/Platform/Microsoft.Testing.Platform/Requests/TreeNodeFilter/TreeNodeFilter.cs
index da7178a629..8b2493ed05 100644
--- a/src/Platform/Microsoft.Testing.Platform/Requests/TreeNodeFilter/TreeNodeFilter.cs
+++ b/src/Platform/Microsoft.Testing.Platform/Requests/TreeNodeFilter/TreeNodeFilter.cs
@@ -58,6 +58,12 @@ internal TreeNodeFilter(string filter)
/// OP = '&' | '|'
/// NODE_VALUE = TOKEN | TOKEN '[' FILTER_EXPR ']'
/// TOKEN = string
+ ///
+ /// OR expressions are supported for a single path segment, for example:
+ /// /A/B/C/(Test1|Test2).
+ ///
+ /// OR expressions over full paths are not supported, for example:
+ /// (/A/B/C/Test1)|(/A/B/C/Test2).
///
///
///
@@ -105,14 +111,14 @@ private static List ParseFilter(string filter)
_ => throw ApplicationStateGuard.Unreachable(),
};
- ProcessHigherPrecedenceOperators(expressionStack, operatorStack, currentOp);
+ ProcessHigherPrecedenceOperators(expressionStack, operatorStack, currentOp, filter);
isOperatorAllowed = false;
isPropAllowed = false;
break;
case "/":
- ProcessHigherPrecedenceOperators(expressionStack, operatorStack, OperatorKind.Separator);
+ ProcessHigherPrecedenceOperators(expressionStack, operatorStack, OperatorKind.Separator, filter);
isOperatorAllowed = false;
isPropAllowed = false;
@@ -155,7 +161,7 @@ private static List ParseFilter(string filter)
break;
}
- ProcessStackOperator(topStackOperator, expressionStack, operatorStack);
+ ProcessStackOperator(topStackOperator, expressionStack, operatorStack, filter);
}
isOperatorAllowed = true;
@@ -187,7 +193,7 @@ private static List ParseFilter(string filter)
break;
}
- ProcessStackOperator(topStackOperator, expressionStack, operatorStack);
+ ProcessStackOperator(topStackOperator, expressionStack, operatorStack, filter);
}
// We should end up with an expression and a property.
@@ -252,7 +258,7 @@ private static List ParseFilter(string filter)
while (operatorStack.Count > 0 && operatorStack.Peek() != OperatorKind.Separator)
{
topStackOperator = operatorStack.Pop();
- ProcessStackOperator(topStackOperator, expressionStack, operatorStack);
+ ProcessStackOperator(topStackOperator, expressionStack, operatorStack, filter);
}
var parsedFilter = expressionStack.Reverse().ToList();
@@ -273,12 +279,13 @@ private static List ParseFilter(string filter)
static void ProcessHigherPrecedenceOperators(
Stack expressionStack,
Stack operatorStack,
- OperatorKind currentOp)
+ OperatorKind currentOp,
+ string currentFilter)
{
while (operatorStack.Count != 0 && operatorStack.Peek() > currentOp)
{
OperatorKind topStackOperator = operatorStack.Pop();
- ProcessStackOperator(topStackOperator, expressionStack, operatorStack);
+ ProcessStackOperator(topStackOperator, expressionStack, operatorStack, currentFilter);
break;
}
@@ -311,7 +318,7 @@ private static void ValidateExpression(FilterExpression expr, bool isMatchAllAll
}
}
- private static void ProcessStackOperator(OperatorKind op, Stack expr, Stack ops)
+ private static void ProcessStackOperator(OperatorKind op, Stack expr, Stack ops, string filter)
{
switch (op)
{
@@ -333,14 +340,14 @@ private static void ProcessStackOperator(OperatorKind op, Stack FilterOperator.And,
OperatorKind.Or => FilterOperator.Or,
_ => throw ApplicationStateGuard.Unreachable(),
};
- expr.Push(new OperatorExpression(filter, subexprs));
+ expr.Push(new OperatorExpression(filterOperator, subexprs));
break;
case OperatorKind.FilterEquals:
@@ -372,7 +379,8 @@ private static void ProcessStackOperator(OperatorKind op, StackFilter contains an unexpected '/' operator inside a parenthesized expression
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+
An 'ITestExecutionFilterFactory' factory is already set
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlf
index eb50d2d177..fb948f74bc 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlf
@@ -974,6 +974,11 @@ Platné hodnoty jsou All, Failed, None. Výchozí hodnota je All.
Filtr uvnitř výrazu v závorkách obsahuje neočekávaný operátor /.
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.Neočekávané volání telemetrie, telemetrie je zakázaná.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlf
index 95a59bc488..1fd03c086d 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlf
@@ -974,6 +974,11 @@ Gültige Werte sind „Alle“, „Fehlgeschlagen“ und „Keine“. Der Standa
Der Filter enthält einen unerwarteten "/"-Operator in einem in Klammern gesetzten Ausdruck
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.Unerwarteter Telemetrieaufruf. Die Telemetrie ist deaktiviert.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlf
index 7498efda2d..4fae5b7c9f 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlf
@@ -974,6 +974,11 @@ Los valores válidos son "All", "Failed", "None". El valor predeterminado es "Al
El filtro contiene un operador "/" inesperado dentro de una expresión entre paréntesis
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.Llamada de telemetría inesperada, la telemetría está deshabilitada.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlf
index 84f1baa049..bff8c7c582 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlf
@@ -974,6 +974,11 @@ Les valeurs valides sont « All », « Failed » et « None ». La valeur
Désolé, le filtre contient un opérateur '/' inattendu dans une expression entre parenthèses
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.Appel de télémétrie inattendu, la télémétrie est désactivée.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlf
index 7dcc50f3cc..54a150fe6b 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlf
@@ -974,6 +974,11 @@ I valori validi sono 'All', 'Failed', 'None'. L'impostazione predefinita è 'All
Il filtro contiene un operatore '/' imprevisto all'interno di un'espressione tra parentesi
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.Chiamata di telemetria imprevista. La telemetria è disabilitata.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlf
index fd6c736980..0886388bb2 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlf
@@ -975,6 +975,11 @@ Valid values are 'All', 'Failed', 'None'. Default is 'All'.
かっこで囲まれた式内に、予期しない '/' 演算子がフィルターに含まれています
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.予期しないテレメトリ呼び出しです。テレメトリは無効になっています。
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlf
index ddbc83c020..b0cf71b4a1 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlf
@@ -974,6 +974,11 @@ Valid values are 'All', 'Failed', 'None'. Default is 'All'.
필터는 괄호가 있는 식 내에 예기치 않은 '/' 연산자를 포함함
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.예기치 않은 원격 분석 호출로 인해 원격 분석을 사용할 수 없습니다.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlf
index 3f4afe566f..34af201b3c 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlf
@@ -974,6 +974,11 @@ Prawidłowe wartości to „All”, „Failed”, „None”. Wartość domyśln
Filtr zawiera nieoczekiwany operator „/” wewnątrz wyrażenia w nawiasach
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.Nieoczekiwane wywołanie telemetrii, a telemetria jest wyłączona.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlf
index 6e7cd587d1..f8f47f709e 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlf
@@ -974,6 +974,11 @@ Os valores válidos são 'All', 'Failed', 'None'. O padrão é 'All'.
O filtro contém um operador “/” inesperado dentro de uma expressão entre parênteses
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.Chamada de telemetria inesperada, a telemetria está desabilitada.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlf
index e6e8098163..4f34980336 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlf
@@ -974,6 +974,11 @@ Valid values are 'All', 'Failed', 'None'. Default is 'All'.
Фильтр содержит непредвиденный оператор "/" внутри выражения в круглых скобах
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.Непредвиденный вызов телеметрии. Телеметрия отключена.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlf
index 2a70594081..d28b8c6cc2 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlf
@@ -974,6 +974,11 @@ Geçerli değerler: 'Tümü', 'Başarısız', 'Yok'. Varsayılan değer: 'Tümü
Filtre, parantez içine alınmış bir ifadenin içinde beklenmeyen bir '/' işleci içeriyor
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.Beklenmeyen telemetri çağrısı, telemetri devre dışı bırakıldı.
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlf
index 51121cef90..a5237f7f74 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlf
@@ -974,6 +974,11 @@ Valid values are 'All', 'Failed', 'None'. Default is 'All'.
筛选在带圆括号的表达式中包含意外“/”运算符
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.意外的遥测调用,遥测功能已被禁用。
diff --git a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlf b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlf
index 266c6d62bb..82406192a9 100644
--- a/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlf
+++ b/src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlf
@@ -974,6 +974,11 @@ Valid values are 'All', 'Failed', 'None'. Default is 'All'.
篩選條件在小括號內的運算子中包含未預期的 '/' 運算子
+
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ Filter contains an unexpected '/' operator inside a parenthesized expression. Filter: '{0}'. To combine alternatives for one path segment, use syntax like '/A/B/C/(X|Y)'.
+ {0} is the filter expression string. Diagnostic thrown by the TreeNodeFilter parser when a '/' is encountered inside a parenthesized alternative such as '/A/(B/C)'.
+ Unexpected telemetry call, the telemetry is disabled.未預期的遙測呼叫,遙測已停用。
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.cs.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.cs.xlf
index 2d91e4afc7..b2828f2192 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.cs.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.cs.xlf
@@ -68,6 +68,111 @@
Očekávaná délka řetězce je {0}, ale byla {1}.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}Nebyla očekávána žádná hodnota kromě:<{1}>. Aktuálně:<{2}>. {0}
@@ -78,6 +183,26 @@
Očekáván rozdíl, který je větší jak <{3}> mezi očekávanou hodnotou <{1}> a aktuální hodnotou <{2}>. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}Obě hodnoty jsou <null>. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.de.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.de.xlf
index bc6994fd6a..3b0497e62d 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.de.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.de.xlf
@@ -68,6 +68,111 @@
Die erwartete Länge der Zeichenfolge ist {0}, war aber {1}.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}Es wurde ein beliebiger Wert erwartet außer:<{1}>. Tatsächlich:<{2}>. {0}
@@ -78,6 +183,26 @@
Es wurde eine Differenz größer als <{3}> zwischen dem erwarteten Wert <{1}> und dem tatsächlichen Wert <{2}> erwartet. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}Beide Werte sind <null>. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.es.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.es.xlf
index add81a9682..eadedba044 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.es.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.es.xlf
@@ -68,6 +68,111 @@
Se esperaba una longitud de cadena {0} pero fue {1}.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}Se esperaba cualquier valor excepto <{1}>, pero es <{2}>. {0}
@@ -78,6 +183,26 @@
Se esperaba una diferencia mayor que <{3}> entre el valor esperado <{1}> y el valor actual <{2}>. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}Ambos valores son <null>. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.fr.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.fr.xlf
index b910b08c9e..21e859b0b8 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.fr.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.fr.xlf
@@ -68,6 +68,111 @@
La longueur de chaîne attendue {0} mais était {1}.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}Toute valeur attendue sauf :<{1}>. Réel :<{2}>. {0}
@@ -78,6 +183,26 @@
Différence attendue supérieure à <{3}> comprise entre la valeur attendue <{1}> et la valeur réelle <{2}>. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}Les deux valeurs sont <null>. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.it.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.it.xlf
index a4706cea2d..6d2040c828 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.it.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.it.xlf
@@ -68,6 +68,111 @@
La lunghezza della stringa prevista è {0} ma era {1}.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}Previsto qualsiasi valore tranne:<{1}>. Effettivo:<{2}>. {0}
@@ -78,6 +183,26 @@
Prevista una differenza maggiore di <{3}> tra il valore previsto <{1}> e il valore effettivo <{2}>. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}Entrambi i valori sono <null>. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ja.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ja.xlf
index 5f3fa8c2ab..3fa2da18a2 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ja.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ja.xlf
@@ -68,6 +68,111 @@
期待される文字列の長さは {0} ですが、実際は {1} でした。
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}<{1}> 以外の任意の値が必要ですが、<{2}> が指定されています。{0}
@@ -78,6 +183,26 @@
指定する値 <{1}> と実際の値 <{2}> との間には、<{3}> を超える差が必要です。{0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}どちらの値も<null>です。{0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ko.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ko.xlf
index 12c6954c61..caed5cd6c5 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ko.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ko.xlf
@@ -68,6 +68,111 @@
문자열 길이 {0}(을)를 예상했지만 {1}입니다.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}예상 값: <{1}>을(를) 제외한 모든 값. 실제 값: <{2}>. {0}
@@ -78,6 +183,26 @@
예상 값 <{1}>과(와) 실제 값 <{2}>의 차이가 <{3}>보다 커야 합니다. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}두 값 모두 <null>입니다. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.pl.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.pl.xlf
index 17ae1b9d3c..5da692e8b6 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.pl.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.pl.xlf
@@ -68,6 +68,111 @@
Oczekiwano ciągu o długości {0}, ale miał wartość {1}.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}Oczekiwano dowolnej wartości za wyjątkiem:<{1}>. Rzeczywista:<{2}>. {0}
@@ -78,6 +183,26 @@
Oczekiwano różnicy większej niż <{3}> pomiędzy oczekiwaną wartością <{1}> a rzeczywistą wartością <{2}>. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}Obie wartości to <null>. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.pt-BR.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.pt-BR.xlf
index 598fb3b128..935e661ad4 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.pt-BR.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.pt-BR.xlf
@@ -68,6 +68,111 @@
Comprimento esperado da cadeia de caracteres {0}, mas foi {1}.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}Esperado qualquer valor exceto:<{1}>. Real:<{2}>. {0}
@@ -78,6 +183,26 @@
Esperada uma diferença maior que <{3}> entre o valor esperado <{1}> e o valor real <{2}>. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}Ambos os valores são <null>. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ru.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ru.xlf
index a9796fb817..310e5898df 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ru.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.ru.xlf
@@ -68,6 +68,111 @@
Ожидалась длина строки: {0}, фактическая длина строки: {1}.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}Ожидается любое значение, кроме: <{1}>. Фактически: <{2}>. {0}
@@ -78,6 +183,26 @@
Между ожидаемым значением <{1}> и фактическим значением <{2}> требуется разница более чем <{3}>. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}Оба значения равны <null>. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.tr.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.tr.xlf
index e6a9ba121b..fea50fcbe0 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.tr.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.tr.xlf
@@ -68,6 +68,111 @@
Beklenen dize uzunluğu {0} idi, ancak dize uzunluğu {1} oldu.
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}Şunun dışında bir değer bekleniyor:<{1}>. Gerçek:<{2}>. {0}
@@ -78,6 +183,26 @@
Beklenen değer <{1}> ile gerçek değer <{2}> arasında, şundan büyük olan fark bekleniyor: <{3}>. {0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}Her iki değer: <null>. {0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.zh-Hans.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.zh-Hans.xlf
index 19197e286b..6fa3cb17f3 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.zh-Hans.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.zh-Hans.xlf
@@ -68,6 +68,111 @@
字符串长度应为 {0},但为 {1}。
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}应为: <{1}> 以外的任意值,实际为: <{2}>。{0}
@@ -78,6 +183,26 @@
预期值 <{1}> 和实际值 <{2}> 之间的差应大于 <{3}>。{0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}两个值均为 <null>。{0}
diff --git a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.zh-Hant.xlf b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.zh-Hant.xlf
index 6876681112..366ab94673 100644
--- a/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.zh-Hant.xlf
+++ b/src/TestFramework/TestFramework/Resources/xlf/FrameworkMessages.zh-Hant.xlf
@@ -68,6 +68,111 @@
預期的字串長度為 {0},但為 {1}。
+
+ Expected values to be structurally equivalent.
+ Expected values to be structurally equivalent.
+
+
+
+ Expected values to be structurally equivalent (strict mode).
+ Expected values to be structurally equivalent (strict mode).
+
+
+
+ reading the actual dictionary threw {0}: {1}.
+ reading the actual dictionary threw {0}: {1}.
+
+
+
+ enumerating the actual collection threw {0}: {1}.
+ enumerating the actual collection threw {0}: {1}.
+
+
+
+ reading the actual member threw {0}: {1}.
+ reading the actual member threw {0}: {1}.
+
+
+
+ Mismatch at '{0}': {1}
+ Mismatch at '{0}': {1}
+ {0} is a member path (e.g., 'Order.Items[2].Price'), {1} is a localized reason describing the kind of mismatch.
+
+
+ reading the expected dictionary threw {0}: {1}.
+ reading the expected dictionary threw {0}: {1}.
+
+
+
+ enumerating the expected collection threw {0}: {1}.
+ enumerating the expected collection threw {0}: {1}.
+
+
+
+ reading the expected member threw {0}: {1}.
+ reading the expected member threw {0}: {1}.
+
+
+
+ actual has unexpected members not present on expected: {0}.
+ actual has unexpected members not present on expected: {0}.
+
+
+
+ IEquatable.Equals threw {0}: {1}.
+ IEquatable.Equals threw {0}: {1}.
+
+
+
+ collections differ in length (expected {0} elements, actual {1}).
+ collections differ in length (expected {0} elements, actual {1}).
+
+
+
+ comparison exceeded the maximum supported depth of {0}.
+ comparison exceeded the maximum supported depth of {0}.
+
+
+
+ key {0} present on expected is missing from actual.
+ key {0} present on expected is missing from actual.
+
+
+
+ member '{0}' present on expected is missing from actual.
+ member '{0}' present on expected is missing from actual.
+
+
+
+ one side is null, the other is not.
+ one side is null, the other is not.
+
+
+
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+ graph topology differs (the same reference on one side appears paired with different references on the other side).
+
+
+
+ incompatible types (expected '{0}', actual '{1}').
+ incompatible types (expected '{0}', actual '{1}').
+
+
+
+ key {0} present on actual is not on expected.
+ key {0} present on actual is not on expected.
+
+
+
+ values are not equal.
+ values are not equal.
+
+
+
+ <root>
+ <root>
+ Placeholder used in equivalence-mismatch messages when the difference is at the top of the object graph.
+ Expected any value except:<{1}>. Actual:<{2}>. {0}預期任何值 (<{1}> 除外)。實際: <{2}>。{0}
@@ -78,6 +183,26 @@
預期值 <{1}> 和實際值 <{2}> 之間的預期差異大於 <{3}>。{0}
+
+ Could not complete structural comparison.
+ Could not complete structural comparison.
+
+
+
+ Could not complete structural comparison (strict mode).
+ Could not complete structural comparison (strict mode).
+
+
+
+ Expected values to be structurally different.
+ Expected values to be structurally different.
+
+
+
+ Expected values to be structurally different (strict mode).
+ Expected values to be structurally different (strict mode).
+
+ Both values are <null>. {0}兩個值均為 <null>。{0}
diff --git a/test/UnitTests/Microsoft.Testing.Platform.UnitTests/Requests/TreeNodeFilterTests.cs b/test/UnitTests/Microsoft.Testing.Platform.UnitTests/Requests/TreeNodeFilterTests.cs
index 78f7406778..75eebbfc38 100644
--- a/test/UnitTests/Microsoft.Testing.Platform.UnitTests/Requests/TreeNodeFilterTests.cs
+++ b/test/UnitTests/Microsoft.Testing.Platform.UnitTests/Requests/TreeNodeFilterTests.cs
@@ -70,6 +70,34 @@ public void OrExpression_WorksForLiteralStrings()
Assert.IsFalse(filter.MatchesFilter("/C", new PropertyBag()));
}
+ [TestMethod]
+ public void OrExpression_WorksForSinglePathSegmentInsideParentheses()
+ {
+ TreeNodeFilter filter = new("/*/*/*/(MyTest1|MyTest2)");
+
+ Assert.IsTrue(filter.MatchesFilter("/A/B/C/MyTest1", new PropertyBag()));
+ Assert.IsTrue(filter.MatchesFilter("/A/B/C/MyTest2", new PropertyBag()));
+ Assert.IsFalse(filter.MatchesFilter("/A/B/C/MyTest3", new PropertyBag()));
+ }
+
+ [TestMethod]
+ public void ExactMatch_DoesNotMatchAdditionalSuffixUnlessWildcardIsUsed()
+ {
+ TreeNodeFilter filter = new("/*/*/*/(MyTest1|MyTest2)");
+
+ Assert.IsFalse(filter.MatchesFilter("/A/B/C/MyTest1()", new PropertyBag()));
+ Assert.IsFalse(filter.MatchesFilter("/A/B/C/MyTest2()", new PropertyBag()));
+ }
+
+ [TestMethod]
+ public void FullPathOrInsideParenthesizedExpressions_IsNotSupported_ThrowsActionableMessage()
+ {
+ InvalidOperationException exception = Assert.ThrowsExactly(
+ () => _ = new TreeNodeFilter("(/*/*/*/MyTest1)|(/*/*/*/MyTest2)"));
+
+ Assert.IsTrue(exception.Message.Contains("/A/B/C/(X|Y)", StringComparison.Ordinal));
+ }
+
[TestMethod]
public void AndExpression()
{