Fix automatic test skipping.

pull/157/head
Laurents Meyer 2 years ago
parent 0d36ea7cb2
commit 43d0002123

@ -0,0 +1,20 @@
using System.Collections.Generic;
// ReSharper disable once CheckNamespace
namespace System;
public static class ExceptionExtensions
{
public static IEnumerable<Exception> FlattenHierarchy(this Exception ex)
{
ArgumentNullException.ThrowIfNull(ex);
var innerException = ex;
do
{
yield return innerException;
innerException = innerException.InnerException;
}
while (innerException != null);
}
}

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
@ -128,44 +129,54 @@ public class JetXunitTestRunner : XunitTestRunner
/// </summary> /// </summary>
protected virtual bool SkipFailedTest(Exception exception) protected virtual bool SkipFailedTest(Exception exception)
{ {
var skip = true; var skip = false;
var unexpectedUnsupportedTranslation = false; var unexpectedUnsupportedTranslation = false;
var aggregateException = exception as AggregateException ?? var aggregateException = exception as AggregateException ??
new AggregateException(exception); new AggregateException(exception);
foreach (var innerException in aggregateException.InnerExceptions) foreach (var innerException in aggregateException.Flatten().InnerExceptions.SelectMany(e => e.FlattenHierarchy()))
{ {
if (!skip || if (innerException is InvalidOperationException)
innerException is not InvalidOperationException)
{ {
return false; var message = innerException.Message;
}
if (innerException.Message.StartsWith("Jet does not support "))
{
var expectedUnsupportedTranslation = innerException.Message.Contains("APPLY statements") ||
innerException.Message.Contains("skipping rows");
skip &= expectedUnsupportedTranslation; if (message.StartsWith("Jet does not support "))
unexpectedUnsupportedTranslation = !expectedUnsupportedTranslation; {
} var expectedUnsupportedTranslation = message.Contains("APPLY statements") ||
else if (innerException.Message.StartsWith("The LINQ expression '") && message.Contains("skipping rows");
innerException.Message.Contains("' could not be translated."))
{
var expectedUnsupportedTranslation = innerException.Message.Contains("RowNumberExpression");
skip &= expectedUnsupportedTranslation; skip = expectedUnsupportedTranslation;
unexpectedUnsupportedTranslation = !expectedUnsupportedTranslation; unexpectedUnsupportedTranslation = !expectedUnsupportedTranslation;
} }
else if (message.StartsWith("The LINQ expression '") &&
message.Contains("' could not be translated."))
{
var expectedUnsupportedTranslation = message.Contains("RowNumberExpression");
if (unexpectedUnsupportedTranslation) skip = expectedUnsupportedTranslation;
{ unexpectedUnsupportedTranslation = !expectedUnsupportedTranslation;
var sb = new StringBuilder(); }
sb.AppendLine(innerException.Message.ReplaceLineEndings(" "));
sb.AppendLine("-----"); if (skip)
{
// var sb = new StringBuilder();
// sb.AppendLine(message.ReplaceLineEndings(" "));
// sb.AppendLine("-----");
//
// File.AppendAllText("ExpectedUnsupportedTranslations.txt", sb.ToString());
File.AppendAllText("UnsupportedTranslations.txt", sb.ToString()); break;
}
if (unexpectedUnsupportedTranslation)
{
// var sb = new StringBuilder();
// sb.AppendLine(message.ReplaceLineEndings(" "));
// sb.AppendLine("-----");
//
// File.AppendAllText("UnsupportedTranslations.txt", sb.ToString());
}
} }
} }

Loading…
Cancel
Save