From 5a21194984bfaf3c0816df33a1d2466d4a0ef607 Mon Sep 17 00:00:00 2001 From: Max Doerner Date: Wed, 24 Jun 2020 16:13:35 +0200 Subject: [PATCH] Adjust AnnotateDeclarationViewModel for new AdjustAttribute capability --- .../AnnotateDeclarationViewModel.cs | 19 +++++++++ Rubberduck.Parsing/Symbols/Declaration.cs | 2 +- .../AnnotateDeclarationViewModelTests.cs | 42 +++++++++++++++++-- 3 files changed, 59 insertions(+), 4 deletions(-) diff --git a/Rubberduck.Core/UI/Refactorings/AnnotateDeclaration/AnnotateDeclarationViewModel.cs b/Rubberduck.Core/UI/Refactorings/AnnotateDeclaration/AnnotateDeclarationViewModel.cs index 44da90d3d6..5b4ce9ba88 100644 --- a/Rubberduck.Core/UI/Refactorings/AnnotateDeclaration/AnnotateDeclarationViewModel.cs +++ b/Rubberduck.Core/UI/Refactorings/AnnotateDeclaration/AnnotateDeclarationViewModel.cs @@ -80,11 +80,30 @@ public IAnnotation Annotation OnPropertyChanged(); OnPropertyChanged(nameof(IsValidAnnotation)); + OnPropertyChanged(nameof(ShowAdjustAttributeOption)); } } public ObservableViewModelCollection AnnotationArguments { get; } + public bool AdjustAttribute + { + get => Model.AdjustAttribute; + set + { + if (value == Model.AdjustAttribute) + { + return; + } + + Model.AdjustAttribute = value; + + OnPropertyChanged(); + } + } + + public bool ShowAdjustAttributeOption => Model?.Annotation is IAttributeAnnotation; + private void RefreshAnnotationArguments(IAnnotation annotation) { AnnotationArguments.Clear(); diff --git a/Rubberduck.Parsing/Symbols/Declaration.cs b/Rubberduck.Parsing/Symbols/Declaration.cs index 8a31d32d2a..32dac2dc7a 100644 --- a/Rubberduck.Parsing/Symbols/Declaration.cs +++ b/Rubberduck.Parsing/Symbols/Declaration.cs @@ -289,7 +289,7 @@ public string DescriptionString { string literalDescription; - var memberAttribute = Attributes.SingleOrDefault(a => a.Name == $"{IdentifierName}.VB_Description"); + var memberAttribute = Attributes.SingleOrDefault(a => a.Name == Attributes.MemberAttributeName("VB_Description", IdentifierName)); if (memberAttribute != null) { literalDescription = memberAttribute.Values.SingleOrDefault() ?? string.Empty; diff --git a/RubberduckTests/Refactoring/AnnotateDeclaration/AnnotateDeclarationViewModelTests.cs b/RubberduckTests/Refactoring/AnnotateDeclaration/AnnotateDeclarationViewModelTests.cs index 13bd220d1d..5f310603f6 100644 --- a/RubberduckTests/Refactoring/AnnotateDeclaration/AnnotateDeclarationViewModelTests.cs +++ b/RubberduckTests/Refactoring/AnnotateDeclaration/AnnotateDeclarationViewModelTests.cs @@ -269,6 +269,28 @@ public void RemoveArgument_LastArgumentRemoved() } } + [Test] + [Category("Refactorings")] + public void ShowAdjustAttributeOption_AttributeAnnotation_True() + { + var viewModel = TestViewModel(DeclarationType.Procedure); + var annotation = new DescriptionAnnotation(); + viewModel.Annotation = annotation; + + Assert.IsTrue(viewModel.ShowAdjustAttributeOption); + } + + [Test] + [Category("Refactorings")] + public void ShowAdjustAttributeOption_NotAnAttributeAnnotation_False() + { + var viewModel = TestViewModel(DeclarationType.Procedure); + var annotation = new IgnoreAnnotation(); + viewModel.Annotation = annotation; + + Assert.IsFalse(viewModel.ShowAdjustAttributeOption); + } + [Test] [Category("Refactorings")] public void SetAnnotation_ResetsArguments() @@ -291,6 +313,20 @@ public void SetAnnotation_SetsAnnotationOnModel() Assert.AreSame(viewModel.Model.Annotation, annotation); } + [Test] + [Category("Refactorings")] + [TestCase(true, true)] + [TestCase(false, true)] + [TestCase(true, false)] + [TestCase(false, false)] + public void SetAdjustAttribute_SetsAdjustAttributeOnModel(bool initialValue, bool valueToSet) + { + var viewModel = TestViewModel(DeclarationType.Procedure, initialAdjustAttribute: initialValue); + viewModel.AdjustAttribute = valueToSet; + + Assert.AreEqual(viewModel.Model.AdjustAttribute, valueToSet); + } + [Test] [Category("Refactorings")] public void ModelIsInputModelFromCreation() @@ -321,10 +357,10 @@ public void DialogOK_SetsArguments() } - private AnnotateDeclarationViewModel TestViewModel(DeclarationType targetDeclarationType, IAnnotation initialAnnotation = null, bool localScope = false) + private AnnotateDeclarationViewModel TestViewModel(DeclarationType targetDeclarationType, IAnnotation initialAnnotation = null, bool localScope = false, bool initialAdjustAttribute = false) { var argumentFactory = MockArgumentFactory().Object; - return TestViewModel(targetDeclarationType, argumentFactory, initialAnnotation, localScope); + return TestViewModel(targetDeclarationType, argumentFactory, initialAnnotation, localScope, initialAdjustAttribute); } private Mock MockArgumentFactory(IReadOnlyList hasErrorSpecifications = null) @@ -353,7 +389,7 @@ private Mock MockArgument(AnnotationArgumentType a return mockArgument; } - private AnnotateDeclarationViewModel TestViewModel(DeclarationType targetDeclarationType, IAnnotationArgumentViewModelFactory argumentFactory, IAnnotation initialAnnotation = null, bool localScope = false) + private AnnotateDeclarationViewModel TestViewModel(DeclarationType targetDeclarationType, IAnnotationArgumentViewModelFactory argumentFactory, IAnnotation initialAnnotation = null, bool localScope = false, bool initialAdjustAttribute = false) { var targetDeclaration = TestDeclaration(targetDeclarationType, localScope); var model = new AnnotateDeclarationModel(targetDeclaration, initialAnnotation);