From 3064b58719060a145058ab295792d8c97128b433 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Thu, 10 Feb 2022 22:03:09 -0500 Subject: add basic unit tests for API interface proxying --- .../Framework/BaseApi.cs | 12 +++ .../Framework/SimpleApi.cs | 108 +++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs create mode 100644 src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs (limited to 'src/SMAPI.Tests.ModApiProvider/Framework') diff --git a/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs b/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs new file mode 100644 index 00000000..8092e3e7 --- /dev/null +++ b/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs @@ -0,0 +1,12 @@ +namespace SMAPI.Tests.ModApiProvider.Framework +{ + /// The base class for . + public class BaseApi + { + /********* + ** Test interface + *********/ + /// A property inherited from a base class. + public string InheritedProperty { get; set; } + } +} diff --git a/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs b/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs new file mode 100644 index 00000000..1100af36 --- /dev/null +++ b/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace SMAPI.Tests.ModApiProvider.Framework +{ + /// A mod-provided API which provides basic events, properties, and methods. + public class SimpleApi : BaseApi + { + /********* + ** Test interface + *********/ + /**** + ** Events + ****/ + /// A simple event field. + public event EventHandler OnEventRaised; + + /// A simple event property with custom add/remove logic. + public event EventHandler OnEventRaisedProperty + { + add => this.OnEventRaised += value; + remove => this.OnEventRaised -= value; + } + + + /**** + ** Properties + ****/ + /// A simple numeric property. + public int NumberProperty { get; set; } + + /// A simple object property. + public object ObjectProperty { get; set; } + + /// A simple list property. + public List ListProperty { get; set; } + + /// A simple list property with an interface. + public IList ListPropertyWithInterface { get; set; } + + /// A property with nested generics. + public IDictionary> GenericsProperty { get; set; } + + /// A property using an enum available to both mods. + public BindingFlags EnumProperty { get; set; } + + /// A read-only property. + public int GetterProperty => 42; + + + /**** + ** Methods + ****/ + /// A simple method with no return value. + public void GetNothing() { } + + /// A simple method which returns a number. + public int GetInt(int value) + { + return value; + } + + /// A simple method which returns an object. + public object GetObject(object value) + { + return value; + } + + /// A simple method which returns a list. + public List GetList(string value) + { + return new() { value }; + } + + /// A simple method which returns a list with an interface. + public IList GetListWithInterface(string value) + { + return new List { value }; + } + + /// A simple method which returns nested generics. + public IDictionary> GetGenerics(string key, string value) + { + return new Dictionary> + { + [key] = new List { value } + }; + } + + /// A simple method which returns a lambda. + public Func GetLambda(Func value) + { + return value; + } + + + /********* + ** Helper methods + *********/ + /// Raise the event. + /// The value to pass to the event. + public void RaiseEventField(int value) + { + this.OnEventRaised?.Invoke(null, value); + } + } +} -- cgit From 2e7c233f6c9bf6430672b39f970a3324deba79dd Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Wed, 6 Apr 2022 21:48:55 -0400 Subject: enable nullable annotations by default (#837) This adds `#nullable disable` to all existing code (except where null is impossible like enum files), so it can be migrated incrementally. --- src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs | 2 ++ src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs | 2 ++ 2 files changed, 4 insertions(+) (limited to 'src/SMAPI.Tests.ModApiProvider/Framework') diff --git a/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs b/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs index 8092e3e7..b5870baa 100644 --- a/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs +++ b/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace SMAPI.Tests.ModApiProvider.Framework { /// The base class for . diff --git a/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs b/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs index 1100af36..82e902f5 100644 --- a/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs +++ b/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Reflection; -- cgit From 5f7a92a74592a53529890eebb1ee9fe519afd92f Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Tue, 12 Apr 2022 20:52:01 -0400 Subject: enable nullable annotations in unit tests (#837) --- src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs | 4 +--- src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs | 12 ++++++------ 2 files changed, 7 insertions(+), 9 deletions(-) (limited to 'src/SMAPI.Tests.ModApiProvider/Framework') diff --git a/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs b/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs index b5870baa..77001e4c 100644 --- a/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs +++ b/src/SMAPI.Tests.ModApiProvider/Framework/BaseApi.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace SMAPI.Tests.ModApiProvider.Framework { /// The base class for . @@ -9,6 +7,6 @@ namespace SMAPI.Tests.ModApiProvider.Framework ** Test interface *********/ /// A property inherited from a base class. - public string InheritedProperty { get; set; } + public string? InheritedProperty { get; set; } } } diff --git a/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs b/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs index 82e902f5..e7e1ccef 100644 --- a/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs +++ b/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs @@ -1,4 +1,4 @@ -#nullable disable +// ReSharper disable UnusedMember.Global -- used dynamically through proxies using System; using System.Collections.Generic; @@ -16,7 +16,7 @@ namespace SMAPI.Tests.ModApiProvider.Framework ** Events ****/ /// A simple event field. - public event EventHandler OnEventRaised; + public event EventHandler? OnEventRaised; /// A simple event property with custom add/remove logic. public event EventHandler OnEventRaisedProperty @@ -33,16 +33,16 @@ namespace SMAPI.Tests.ModApiProvider.Framework public int NumberProperty { get; set; } /// A simple object property. - public object ObjectProperty { get; set; } + public object? ObjectProperty { get; set; } /// A simple list property. - public List ListProperty { get; set; } + public List? ListProperty { get; set; } /// A simple list property with an interface. - public IList ListPropertyWithInterface { get; set; } + public IList? ListPropertyWithInterface { get; set; } /// A property with nested generics. - public IDictionary> GenericsProperty { get; set; } + public IDictionary>? GenericsProperty { get; set; } /// A property using an enum available to both mods. public BindingFlags EnumProperty { get; set; } -- cgit From 20224d293d03d34860505980cabdb4bc5cf13319 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 16 Apr 2022 16:59:53 -0400 Subject: add unit test for proxied out parameters --- src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/SMAPI.Tests.ModApiProvider/Framework') diff --git a/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs b/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs index e7e1ccef..c8781da5 100644 --- a/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs +++ b/src/SMAPI.Tests.ModApiProvider/Framework/SimpleApi.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Reflection; +using StardewModdingAPI.Utilities; namespace SMAPI.Tests.ModApiProvider.Framework { @@ -96,6 +97,20 @@ namespace SMAPI.Tests.ModApiProvider.Framework return value; } + /// A simple method which returns out parameters. + public bool TryGetOutParameter(int inputNumber, out int outNumber, out string outString, out PerScreen outReference, out IDictionary> outComplexType) + { + outNumber = inputNumber; + outString = inputNumber.ToString(); + outReference = new PerScreen(() => inputNumber); + outComplexType = new Dictionary> + { + [inputNumber] = new PerScreen(() => inputNumber) + }; + + return true; + } + /********* ** Helper methods -- cgit