/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/VisualStudio/TestUtilities2/PropertyChangedTestMonitor.vb
61 строка
3 KB
Jason Malinowski
Switch code that was using Assert.True/False as a replacement for .Fail
21 апр 2026, 23:28
21 апр 2026, 23:28
3bf59ba
Код
Авторство
О чём код?
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. ' See the LICENSE file in the project root for more information. Imports System.Linq.Expressions Imports System.ComponentModel Namespace Microsoft.VisualStudio.LanguageServices.UnitTests Public Class PropertyChangedTestMonitor Private ReadOnly _propertyChangedObject As INotifyPropertyChanged Private ReadOnly _expectationCountMap As Dictionary(Of String, Integer) Private ReadOnly _failures As List(Of String) Public Sub New(propertyChangedObject As INotifyPropertyChanged, Optional strict As Boolean = False) AddHandler propertyChangedObject.PropertyChanged, AddressOf PropertyChangedHandler Me._propertyChangedObject = propertyChangedObject Me.strict = strict _failures = New List(Of String) _expectationCountMap = New Dictionary(Of String, Integer) End Sub Private Property strict As Boolean Public Sub AddExpectation(Of TResult)(expectation As Expression(Of Func(Of TResult)), Optional count As Integer = 1) Dim propertyName = DirectCast(expectation.Body, MemberExpression).Member.Name If _expectationCountMap.ContainsKey(propertyName) Then _expectationCountMap(propertyName) += count Else _expectationCountMap(propertyName) = count End If End Sub Private Sub PropertyChangedHandler(sender As Object, e As PropertyChangedEventArgs) If _expectationCountMap.ContainsKey(e.PropertyName) Then _expectationCountMap(e.PropertyName) -= 1 If _expectationCountMap(e.PropertyName) < 0 AndAlso strict Then _failures.Add(String.Format("Property '{0}' was updated more times than expected.", e.PropertyName)) End If ElseIf strict Then _failures.Add(String.Format("Property '{0}' was unexpectedly updated.", e.PropertyName)) End If End Sub Public Sub VerifyExpectations() For Each failureCase In _expectationCountMap.Where(Function(e) e.Value > 0) _failures.Add(String.Format("Property '{0}' was expected to be updated {1} more time(s) than it was", failureCase.Key, failureCase.Value)) Next If _failures.Any() Then Assert.Fail(String.Format("The following INotifyPropertyChanged expectations were not met: {0}", Environment.NewLine + String.Join(Environment.NewLine, _failures))) End If End Sub Public Sub Detach() RemoveHandler _propertyChangedObject.PropertyChanged, AddressOf PropertyChangedHandler End Sub End Class End Namespace