Takoooooo 4 years ago
parent
commit
5c1fd27d1f
2 changed files with 12 additions and 184 deletions
  1. 1 4
      src/Avalonia.Visuals/Visual.cs
  2. 11 180
      tests/Avalonia.Base.UnitTests/Logging/LoggingTests.cs

+ 1 - 4
src/Avalonia.Visuals/Visual.cs

@@ -489,10 +489,7 @@ namespace Avalonia
 
         protected internal sealed override void LogBindingError(AvaloniaProperty property, Exception e)
         {
-            // Don't log a binding error unless the control is attached to a logical or visual tree.
-            // In theory this should only need to check for logical tree attachment, but in practise
-            // due to ContentControlMixin only taking effect when the template has finished being
-            // applied, some controls are attached to the visual tree before the logical tree.
+            // Don't log a binding error unless the control is attached to a logical tree.
             if (((ILogical)this).IsAttachedToLogicalTree)
             {
                 if (e is BindingChainException b &&

+ 11 - 180
tests/Avalonia.Base.UnitTests/Logging/LoggingTests.cs

@@ -1,12 +1,7 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using Avalonia.Controls;
+using Avalonia.Controls;
 using Avalonia.Controls.Shapes;
-using Avalonia.Logging;
 using Avalonia.Markup.Xaml;
 using Avalonia.UnitTests;
-using Avalonia.Utilities;
 using Xunit;
 
 namespace Avalonia.Base.UnitTests.Logging
@@ -28,187 +23,23 @@ namespace Avalonia.Base.UnitTests.Logging
 </Window>";
 
                 var window = (Window)AvaloniaRuntimeXamlLoader.Load(xaml);
-                using var logSink = new StubLogSink(LogEventLevel.Warning);
+                var calledTimes = 0;
+                using var logSink = TestLogSink.Start((l, a, s, m, d) =>
+                {
+                    if (l >= Avalonia.Logging.LogEventLevel.Warning)
+                    {
+                        calledTimes++;
+                    }
+                });
                 var panel = window.FindControl<Panel>("panel");
                 var rect = window.FindControl<Rectangle>("rect");
                 window.ApplyTemplate();
                 window.Presenter.ApplyTemplate();
                 panel.Children.Remove(rect);
-                Assert.Equal(0, logSink.Results.Count);
-            }
-        }
-    } 
-
-    class StubLogSink : ILogSink, IDisposable
-    {
-        LogEventLevel _level;
-        public StubLogSink(LogEventLevel level)
-        {
-            _level = level;
-            Logger.Sink = this;
-        }
-        public void Dispose()
-        {
-            Logger.Sink = null;
-        }
-        public List<string> Results { get; set; } = new List<string>();
-
-        public bool IsEnabled(LogEventLevel level, string area)
-        {
-            return true;
-        }
-
-        public void Log(LogEventLevel level, string area, object source, string messageTemplate)
-        {
-            if (level >= _level)
-            {
-                Results.Add(Format<object, object, object>(area, messageTemplate, source));
-            }
-        }
-
-        public void Log<T0>(LogEventLevel level, string area, object source, string messageTemplate, T0 propertyValue0)
-        {
-            if (level >= _level)
-            {
-                Results.Add(Format<T0, object, object>(area, messageTemplate, source, propertyValue0));
-            }
-        }
-
-        public void Log<T0, T1>(LogEventLevel level, string area, object source, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
-        {
-            if (level >= _level)
-            {
-                Results.Add(Format<T0, T1, object>(area, messageTemplate, source, propertyValue0, propertyValue1));
-            }
-        }
-
-        public void Log<T0, T1, T2>(LogEventLevel level, string area, object source, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
-        {
-            if (level >= _level)
-            {
-                Results.Add(Format(area, messageTemplate, source, propertyValue0, propertyValue1, propertyValue2));
-            }
-        }
-
-        public void Log(LogEventLevel level, string area, object source, string messageTemplate, params object[] propertyValues)
-        {
-            if (level >= _level)
-            {
-                Results.Add(Format(area, messageTemplate, source, propertyValues));
-            }
-        }
-        #region Copy-Pasta
-        private static string Format<T0, T1, T2>(
-           string area,
-           string template,
-           object source,
-           T0 v0 = default,
-           T1 v1 = default,
-           T2 v2 = default)
-        {
-            var result = new StringBuilder(template.Length);
-            var r = new CharacterReader(template.AsSpan());
-            var i = 0;
-
-            result.Append('[');
-            result.Append(area);
-            result.Append("] ");
-
-            while (!r.End)
-            {
-                var c = r.Take();
-
-                if (c != '{')
-                {
-                    result.Append(c);
-                }
-                else
-                {
-                    if (r.Peek != '{')
-                    {
-                        result.Append('\'');
-                        result.Append(i++ switch
-                        {
-                            0 => v0,
-                            1 => v1,
-                            2 => v2,
-                            _ => null
-                        });
-                        result.Append('\'');
-                        r.TakeUntil('}');
-                        r.Take();
-                    }
-                    else
-                    {
-                        result.Append('{');
-                        r.Take();
-                    }
-                }
+                Assert.Equal(0, calledTimes);
             }
-
-            if (source is object)
-            {
-                result.Append(" (");
-                result.Append(source.GetType().Name);
-                result.Append(" #");
-                result.Append(source.GetHashCode());
-                result.Append(')');
-            }
-
-            return result.ToString();
         }
+    }
 
-        private static string Format(
-            string area,
-            string template,
-            object source,
-            object[] v)
-        {
-            var result = new StringBuilder(template.Length);
-            var r = new CharacterReader(template.AsSpan());
-            var i = 0;
-
-            result.Append('[');
-            result.Append(area);
-            result.Append(']');
-
-            while (!r.End)
-            {
-                var c = r.Take();
-
-                if (c != '{')
-                {
-                    result.Append(c);
-                }
-                else
-                {
-                    if (r.Peek != '{')
-                    {
-                        result.Append('\'');
-                        result.Append(i < v.Length ? v[i++] : null);
-                        result.Append('\'');
-                        r.TakeUntil('}');
-                        r.Take();
-                    }
-                    else
-                    {
-                        result.Append('{');
-                        r.Take();
-                    }
-                }
-            }
-
-            if (source is object)
-            {
-                result.Append('(');
-                result.Append(source.GetType().Name);
-                result.Append(" #");
-                result.Append(source.GetHashCode());
-                result.Append(')');
-            }
 
-            return result.ToString();
-        }
-        #endregion
-    }
 }