From 9e5c3912b6cfce0348aa2d88d30a11fe5b410e9c Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Tue, 10 Apr 2018 18:22:16 -0400 Subject: move mock classes out of sample code (#471) --- .../Framework/DiagnosticVerifier.Helper.cs | 2 ++ .../Mock/Netcode/NetFieldBase.cs | 16 +++++++++++++ .../Mock/Netcode/NetInt.cs | 6 +++++ .../Mock/Netcode/NetRef.cs | 6 +++++ .../Mock/StardewValley/Item.cs | 18 +++++++++++++++ .../Mock/StardewValley/Object.cs | 6 +++++ .../UnitTests.cs | 27 +++------------------- 7 files changed, 57 insertions(+), 24 deletions(-) create mode 100644 src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetFieldBase.cs create mode 100644 src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetInt.cs create mode 100644 src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetRef.cs create mode 100644 src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/StardewValley/Item.cs create mode 100644 src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/StardewValley/Object.cs (limited to 'src') diff --git a/src/SMAPI.ModBuildConfig.Analyzer.Tests/Framework/DiagnosticVerifier.Helper.cs b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Framework/DiagnosticVerifier.Helper.cs index d33455fc..0247288e 100644 --- a/src/SMAPI.ModBuildConfig.Analyzer.Tests/Framework/DiagnosticVerifier.Helper.cs +++ b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Framework/DiagnosticVerifier.Helper.cs @@ -20,6 +20,7 @@ namespace SMAPI.ModBuildConfig.Analyzer.Tests.Framework private static readonly MetadataReference SystemCoreReference = MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location); private static readonly MetadataReference CSharpSymbolsReference = MetadataReference.CreateFromFile(typeof(CSharpCompilation).Assembly.Location); private static readonly MetadataReference CodeAnalysisReference = MetadataReference.CreateFromFile(typeof(Compilation).Assembly.Location); + private static readonly MetadataReference SelfReference = MetadataReference.CreateFromFile(typeof(DiagnosticVerifier).Assembly.Location); internal static string DefaultFilePathPrefix = "Test"; internal static string CSharpDefaultFileExt = "cs"; @@ -150,6 +151,7 @@ namespace SMAPI.ModBuildConfig.Analyzer.Tests.Framework var solution = new AdhocWorkspace() .CurrentSolution .AddProject(projectId, TestProjectName, TestProjectName, language) + .AddMetadataReference(projectId, DiagnosticVerifier.SelfReference) .AddMetadataReference(projectId, CorlibReference) .AddMetadataReference(projectId, SystemCoreReference) .AddMetadataReference(projectId, CSharpSymbolsReference) diff --git a/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetFieldBase.cs b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetFieldBase.cs new file mode 100644 index 00000000..1684229a --- /dev/null +++ b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetFieldBase.cs @@ -0,0 +1,16 @@ +// ReSharper disable CheckNamespace -- matches Stardew Valley's code +namespace Netcode +{ + /// A simplified version of Stardew Valley's Netcode.NetFieldBase for unit testing. + /// The type of the synchronised value. + /// The type of the current instance. + public class NetFieldBase where TSelf : NetFieldBase + { + /// The synchronised value. + public T Value { get; set; } + + /// Implicitly convert a net field to the its type. + /// The field to convert. + public static implicit operator T(NetFieldBase field) => field.Value; + } +} diff --git a/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetInt.cs b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetInt.cs new file mode 100644 index 00000000..b3abc467 --- /dev/null +++ b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetInt.cs @@ -0,0 +1,6 @@ +// ReSharper disable CheckNamespace -- matches Stardew Valley's code +namespace Netcode +{ + /// A simplified version of Stardew Valley's Netcode.NetInt for unit testing. + public class NetInt : NetFieldBase { } +} diff --git a/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetRef.cs b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetRef.cs new file mode 100644 index 00000000..714c4a8d --- /dev/null +++ b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/Netcode/NetRef.cs @@ -0,0 +1,6 @@ +// ReSharper disable CheckNamespace -- matches Stardew Valley's code +namespace Netcode +{ + /// A simplified version of Stardew Valley's Netcode.NetRef for unit testing. + public class NetRef : NetFieldBase { } +} diff --git a/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/StardewValley/Item.cs b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/StardewValley/Item.cs new file mode 100644 index 00000000..88723a56 --- /dev/null +++ b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/StardewValley/Item.cs @@ -0,0 +1,18 @@ +// ReSharper disable CheckNamespace, InconsistentNaming -- matches Stardew Valley's code +using Netcode; + +namespace StardewValley +{ + /// A simplified version of Stardew Valley's StardewValley.Item class for unit testing. + public class Item + { + /// A net int field with an equivalent non-net Category property. + public NetInt category { get; } = new NetInt { Value = 42 }; + + /// A net int field with no equivalent non-net property. + public NetInt type { get; } = new NetInt { Value = 42 }; + + /// A net reference field. + public NetRef refField { get; } = null; + } +} diff --git a/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/StardewValley/Object.cs b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/StardewValley/Object.cs new file mode 100644 index 00000000..498c38c1 --- /dev/null +++ b/src/SMAPI.ModBuildConfig.Analyzer.Tests/Mock/StardewValley/Object.cs @@ -0,0 +1,6 @@ +// ReSharper disable CheckNamespace -- matches Stardew Valley's code +namespace StardewValley +{ + /// A simplified version of Stardew Valley's StardewValley.Object class for unit testing. + public class Object : Item { } +} diff --git a/src/SMAPI.ModBuildConfig.Analyzer.Tests/UnitTests.cs b/src/SMAPI.ModBuildConfig.Analyzer.Tests/UnitTests.cs index f3919f78..c12bb839 100644 --- a/src/SMAPI.ModBuildConfig.Analyzer.Tests/UnitTests.cs +++ b/src/SMAPI.ModBuildConfig.Analyzer.Tests/UnitTests.cs @@ -18,28 +18,7 @@ namespace SMAPI.ModBuildConfig.Analyzer.Tests using System; using StardewValley; using Netcode; - - namespace Netcode - { - public class NetInt : NetFieldBase { } - public class NetRef : NetFieldBase { } - public class NetFieldBase where TSelf : NetFieldBase - { - public T Value { get; set; } - public static implicit operator T(NetFieldBase field) => field.Value; - } - } - - namespace StardewValley - { - class Item - { - public NetInt category { get; } = new NetInt { Value = 42 }; // SMAPI002: use Category instead - public NetInt type { get; } = new NetInt { Value = 42 }; - public NetRef refField { get; } = null; - } - class SObject : Item { } - } + using SObject = StardewValley.Object; namespace SampleMod { @@ -51,7 +30,7 @@ namespace SMAPI.ModBuildConfig.Analyzer.Tests SObject obj = null; // this line should raise diagnostics - {{test-code}} // line 38 + {{test-code}} // these lines should not if (item.type.Value != 42); @@ -61,7 +40,7 @@ namespace SMAPI.ModBuildConfig.Analyzer.Tests "; /// The line number where the unit tested code is injected into . - private const int SampleCodeLine = 38; + private const int SampleCodeLine = 17; /// The column number where the unit tested code is injected into . private const int SampleCodeColumn = 25; -- cgit