Skip to content

Commit

Permalink
Remove nanoFramework.System.Runtime dependency (#259)
Browse files Browse the repository at this point in the history
  • Loading branch information
CoryCharlton committed Jun 12, 2024
1 parent 60eda74 commit fb7f57a
Show file tree
Hide file tree
Showing 9 changed files with 219 additions and 12 deletions.
1 change: 1 addition & 0 deletions .github/workflows/update-dependencies.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ jobs:
secrets: inherit
with:
solutionsToCheck: 'nanoFramework.TestFramework.sln'
exclusionList: 'NFUnit Test Demo,NFUnit Test DemoByReference'
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<Import Project="$(NanoFrameworkProjectSystemPath)NFProjectSystem.props" Condition="Exists('$(NanoFrameworkProjectSystemPath)NFProjectSystem.props')" />
<PropertyGroup>
<RunSettingsFilePath>$(MSBuildProjectDirectory)\nano.runsettings</RunSettingsFilePath>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup>
<Compile Include="DataRowTests.cs" />
Expand All @@ -49,6 +50,9 @@
<Reference Include="nanoFramework.Runtime.Native">
<HintPath>..\packages\nanoFramework.Runtime.Native.1.6.12\lib\nanoFramework.Runtime.Native.dll</HintPath>
</Reference>
<Reference Include="nanoFramework.System.Runtime">
<HintPath>..\packages\nanoFramework.System.Runtime.1.0.27\lib\nanoFramework.System.Runtime.dll</HintPath>
</Reference>
</ItemGroup>
<Target Name="CopyTestAdapter" AfterTargets="Build">
<Message Text="Copying TestAdapter" Importance="High" />
Expand Down
3 changes: 2 additions & 1 deletion poc/TestOfTestFrameworkByReference/Test.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
//

using System;
using System.Runtime.CompilerServices;
using System.Threading;
using nanoFramework.TestFramework;
using NFUnitTest.Mock;
Expand Down Expand Up @@ -263,7 +264,7 @@ private static void ThrowsException()

public class SomethingElse
{
public void NothingReally()
public void NothingReally(object value, [CallerArgumentExpression(nameof(value))] string parameter = null)
{
Console.WriteLine("Only classes marked with [TestClass] will run tests.");
}
Expand Down
1 change: 1 addition & 0 deletions poc/TestOfTestFrameworkByReference/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@
<packages>
<package id="nanoFramework.CoreLibrary" version="1.15.5" targetFramework="netnano1.0" />
<package id="nanoFramework.Runtime.Native" version="1.6.12" targetFramework="netnano1.0" />
<package id="nanoFramework.System.Runtime" version="1.0.27" targetFramework="netnano1.0" />
</packages>
27 changes: 27 additions & 0 deletions source/TestFramework/CallerArgumentExpressionAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

// ReSharper disable once CheckNamespace
namespace System.Runtime.CompilerServices
{
/// <summary>
/// Indicates that a parameter captures the expression passed for another parameter as a string.
/// </summary>
[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
internal sealed class CallerArgumentExpressionAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the <see cref="CallerArgumentExpressionAttribute"/> class.
/// </summary>
/// <param name="parameterName">The name of the parameter whose expression should be captured as a string.</param>
public CallerArgumentExpressionAttribute(string parameterName)
{
ParameterName = parameterName;
}

/// <summary>
/// Gets the name of the parameter whose expression should be captured as a string.
/// </summary>
public string ParameterName { get; }
}
}
181 changes: 181 additions & 0 deletions source/TestFramework/NullableAttributes.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

// ReSharper disable once CheckNamespace
namespace System.Diagnostics.CodeAnalysis
{
/// <summary>
/// Specifies that <see langword="null"/> is allowed as an input even if the corresponding type disallows it.
/// </summary>
/// <remarks>
/// To override a method that has a parameter annotated with this attribute, use the ? operator. For more information, see Nullable static analysis in the C# guide.
/// </remarks>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]
internal sealed class AllowNullAttribute : Attribute
{ }

/// <summary>
/// Specifies that null is disallowed as an input even if the corresponding type allows it.
/// </summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property, Inherited = false)]
internal sealed class DisallowNullAttribute : Attribute
{ }

/// <summary>
/// Specifies that an output may be null even if the corresponding type disallows it.
/// </summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]
internal sealed class MaybeNullAttribute : Attribute
{ }

/// <summary>
/// Specifies that an output will not be null even if the corresponding type allows it. Specifies that an input argument was not null when the call returns.
/// </summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)]
internal sealed class NotNullAttribute : Attribute
{ }

/// <summary>
/// Specifies that when a method returns <see cref="ReturnValue"/>, the parameter may be null even if the corresponding type disallows it.
/// </summary>
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
internal sealed class MaybeNullWhenAttribute : Attribute
{
/// <summary>
/// Initializes the attribute with the specified return value condition.
/// </summary>
/// <param name="returnValue">
/// The return value condition. If the method returns this value, the associated parameter may be null.
/// </param>
internal MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;

/// <summary>
/// Gets the return value condition.
/// </summary>
internal bool ReturnValue { get; }
}

/// <summary>
/// Specifies that when a method returns <see cref="ReturnValue"/>, the parameter will not be null even if the corresponding type allows it.
/// </summary>
internal sealed class NotNullWhenAttribute : Attribute
{
/// <summary>Initializes the attribute with the specified return value condition.</summary>
/// <param name="returnValue">
/// The return value condition. If the method returns this value, the associated parameter will not be null.
/// </param>
internal NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue;

/// <summary>Gets the return value condition.</summary>
internal bool ReturnValue { get; }
}

/// <summary>
/// Specifies that the output will be non-null if the named parameter is non-null.
/// </summary>
[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)]
internal sealed class NotNullIfNotNullAttribute : Attribute
{
/// <summary>Initializes the attribute with the associated parameter name.</summary>
/// <param name="parameterName">
/// The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null.
/// </param>
internal NotNullIfNotNullAttribute(string parameterName) => ParameterName = parameterName;

/// <summary>Gets the associated parameter name.</summary>
internal string ParameterName { get; }
}

/// <summary>
/// Applied to a method that will never return under any circumstance.
/// </summary>
[AttributeUsage(AttributeTargets.Method, Inherited = false)]
internal sealed class DoesNotReturnAttribute : Attribute
{ }

/// <summary>
/// Specifies that the method will not return if the associated Boolean parameter is passed the specified value.
/// </summary>
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
internal sealed class DoesNotReturnIfAttribute : Attribute
{
/// <summary>Initializes the attribute with the specified parameter value.</summary>
/// <param name="parameterValue">
/// The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to
/// the associated parameter matches this value.
/// </param>
internal DoesNotReturnIfAttribute(bool parameterValue) => ParameterValue = parameterValue;

/// <summary>
/// Gets the condition parameter value.
/// </summary>
internal bool ParameterValue { get; }
}

/// <summary>
/// Specifies that the method or property will ensure that the listed field and property members have not-null values.
/// </summary>
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
internal sealed class MemberNotNullAttribute : Attribute
{
/// <summary>Initializes the attribute with a field or property member.</summary>
/// <param name="member">
/// The field or property member that is promised to be not-null.
/// </param>
internal MemberNotNullAttribute(string member) => Members = new[] { member };

/// <summary>Initializes the attribute with the list of field and property members.</summary>
/// <param name="members">
/// The list of field and property members that are promised to be not-null.
/// </param>
internal MemberNotNullAttribute(params string[] members) => Members = members;

/// <summary>
/// Gets field or property member names.
/// </summary>
internal string[] Members { get; }
}

/// <summary>
/// Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition.
/// </summary>
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
internal sealed class MemberNotNullWhenAttribute : Attribute
{
/// <summary>Initializes the attribute with the specified return value condition and a field or property member.</summary>
/// <param name="returnValue">
/// The return value condition. If the method returns this value, the associated parameter will not be null.
/// </param>
/// <param name="member">
/// The field or property member that is promised to be not-null.
/// </param>
internal MemberNotNullWhenAttribute(bool returnValue, string member)
{
ReturnValue = returnValue;
Members = new[] { member };
}

/// <summary>Initializes the attribute with the specified return value condition and list of field and property members.</summary>
/// <param name="returnValue">
/// The return value condition. If the method returns this value, the associated parameter will not be null.
/// </param>
/// <param name="members">
/// The list of field and property members that are promised to be not-null.
/// </param>
internal MemberNotNullWhenAttribute(bool returnValue, params string[] members)
{
ReturnValue = returnValue;
Members = members;
}

/// <summary>
/// Gets the return value condition.
/// </summary>
internal bool ReturnValue { get; }

/// <summary>
/// Gets field or property member names.
/// </summary>
internal string[] Members { get; }
}
}
5 changes: 2 additions & 3 deletions source/TestFramework/nanoFramework.TestFramework.nfproj
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@
<Compile Include="Assert.Obsolete.cs">
<DependentUpon>Assert.cs</DependentUpon>
</Compile>
<Compile Include="CallerArgumentExpressionAttribute.cs" />
<Compile Include="CollectionAssert.cs" />
<Compile Include="NullableAttributes.cs" />
<Compile Include="OutputHelper.cs" />
<Compile Include="TestExtensions.cs" />
</ItemGroup>
Expand All @@ -57,9 +59,6 @@
<HintPath>..\..\packages\nanoFramework.CoreLibrary.1.15.5\lib\mscorlib.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="nanoFramework.System.Runtime, Version=1.0.27.0, Culture=neutral, PublicKeyToken=c07d481e9758c731">
<HintPath>..\..\packages\nanoFramework.System.Runtime.1.0.27\lib\nanoFramework.System.Runtime.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Content Include="packages.lock.json" />
Expand Down
3 changes: 1 addition & 2 deletions source/TestFramework/packages.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="nanoFramework.CoreLibrary" version="1.15.5" targetFramework="netnano1.0" />
<package id="nanoFramework.System.Runtime" version="1.0.27" targetFramework="netnano1.0" />
<package id="Nerdbank.GitVersioning" version="3.6.139" developmentDependency="true" targetFramework="netnano1.0" />
</packages>
6 changes: 0 additions & 6 deletions source/TestFramework/packages.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,6 @@
"resolved": "1.15.5",
"contentHash": "u2+GvAp1uxLrGdILACAZy+EVKOs28EQ52j8Lz7599egXZ3GBGejjnR2ofhjMQwzrJLlgtyrsx8nSLngDfJNsAg=="
},
"nanoFramework.System.Runtime": {
"type": "Direct",
"requested": "[1.0.27, 1.0.27]",
"resolved": "1.0.27",
"contentHash": "aMwvQV6AR+XlDc+dHR/fWWnTe5dc7LDaqZS0ccfmd31Y39dZnmX3iQB2wXWtZGvXLCC+obc3IF3Vc70FiG0raw=="
},
"Nerdbank.GitVersioning": {
"type": "Direct",
"requested": "[3.6.139, 3.6.139]",
Expand Down

0 comments on commit fb7f57a

Please sign in to comment.