From d9f9001116b1e5f11d3cafaeae805c6393c2eb85 Mon Sep 17 00:00:00 2001 From: jnm2 Date: Tue, 20 Feb 2018 23:11:59 -0500 Subject: [PATCH] Moved cache into TraitsFeature as instance state --- src/NUnitTestAdapter/TestConverter.cs | 7 +++---- .../{TraitsFeature.cs => TraitsProvider.cs} | 15 ++++++--------- src/NUnitTestAdapterTests/TestConverterTests.cs | 4 ++-- 3 files changed, 11 insertions(+), 15 deletions(-) rename src/NUnitTestAdapter/{TraitsFeature.cs => TraitsProvider.cs} (82%) diff --git a/src/NUnitTestAdapter/TestConverter.cs b/src/NUnitTestAdapter/TestConverter.cs index 6f2b78fe..fcfcd7d4 100644 --- a/src/NUnitTestAdapter/TestConverter.cs +++ b/src/NUnitTestAdapter/TestConverter.cs @@ -40,13 +40,14 @@ public sealed class TestConverter : IDisposable private readonly NavigationDataProvider _navigationDataProvider; private readonly bool _collectSourceInformation; + internal TraitsProvider TraitsProvider { get; } = new TraitsProvider(); + public TestConverter(ITestLogger logger, string sourceAssembly, bool collectSourceInformation) { _logger = logger; _sourceAssembly = sourceAssembly; _vsTestCaseMap = new Dictionary(); _collectSourceInformation = collectSourceInformation; - TraitsCache = new Dictionary(); if (_collectSourceInformation) { @@ -59,8 +60,6 @@ public void Dispose() _navigationDataProvider?.Dispose(); } - public IDictionary TraitsCache { get; } - #region Public Methods /// /// Converts an NUnit test into a TestCase for Visual Studio, @@ -161,7 +160,7 @@ private TestCase MakeTestCaseFromXmlNode(XmlNode testNode) } } - testCase.AddTraitsFromTestNode(testNode, TraitsCache); + TraitsProvider.GetTraitInfo(testNode).ApplyTo(testCase); return testCase; } diff --git a/src/NUnitTestAdapter/TraitsFeature.cs b/src/NUnitTestAdapter/TraitsProvider.cs similarity index 82% rename from src/NUnitTestAdapter/TraitsFeature.cs rename to src/NUnitTestAdapter/TraitsProvider.cs index 1a2c0ed5..fd1598ab 100644 --- a/src/NUnitTestAdapter/TraitsFeature.cs +++ b/src/NUnitTestAdapter/TraitsProvider.cs @@ -27,24 +27,21 @@ namespace NUnit.VisualStudio.TestAdapter { - public static class TraitsFeature + public sealed class TraitsProvider { - public static void AddTraitsFromTestNode(this TestCase testCase, XmlNode testNode, IDictionary traitsCache) - { - var combinedTraitInfo = BuildTestTraitInfo(traitsCache, testNode); + private readonly Dictionary cachedInfoByTestId = new Dictionary(); - combinedTraitInfo.ApplyTo(testCase); - } + internal IDictionary CachedInfoByTestId => cachedInfoByTestId; - private static TestTraitInfo BuildTestTraitInfo(IDictionary traitsCache, XmlNode testNode) + public TestTraitInfo GetTraitInfo(XmlNode testNode) { var currentNodeInfo = ParseNodeTraits(testNode); var parentId = testNode.ParentNode?.Attributes?["id"]?.Value; if (parentId == null) return currentNodeInfo; - if (!traitsCache.TryGetValue(parentId, out var combinedAncestorInfo)) - traitsCache.Add(parentId, combinedAncestorInfo = BuildTestTraitInfo(traitsCache, testNode.ParentNode)); + if (!cachedInfoByTestId.TryGetValue(parentId, out var combinedAncestorInfo)) + cachedInfoByTestId.Add(parentId, combinedAncestorInfo = GetTraitInfo(testNode.ParentNode)); return TestTraitInfo.Combine(combinedAncestorInfo, currentNodeInfo); } diff --git a/src/NUnitTestAdapterTests/TestConverterTests.cs b/src/NUnitTestAdapterTests/TestConverterTests.cs index b81287ba..b3f2f452 100644 --- a/src/NUnitTestAdapterTests/TestConverterTests.cs +++ b/src/NUnitTestAdapterTests/TestConverterTests.cs @@ -67,7 +67,7 @@ public void CanMakeTestCaseFromTestWithCache() CheckTestCase(testCase); - CheckNodeProperties(testConverter.TraitsCache, "121", categories: new[] { "super" }); + CheckNodeProperties(testConverter.TraitsProvider.CachedInfoByTestId, "121", categories: new[] { "super" }); } [Test] @@ -80,7 +80,7 @@ public void CanMakeTestCaseShouldBuildTraitsCache() var testCase = testConverter.ConvertTestCase(node); } - var traitsCache = testConverter.TraitsCache; + var traitsCache = testConverter.TraitsProvider.CachedInfoByTestId; // There are 12 ids in the TestXml2, but will be storing only ancestor properties. // Not the leaf node test-case properties.