Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adopt Non-Nullable Refereces #72

Merged
merged 35 commits into from Apr 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
d4ad05b
Adopt non-nullable reference types.
adamhewitt627 Feb 5, 2020
121c381
Address compile erros after rebase
adamhewitt627 Feb 5, 2020
a5ac7ef
Remove netstandard2.1, remove suppressed warnings
adamhewitt627 Feb 5, 2020
fb50404
Create dotnetcore.yml
adamhewitt627 Feb 6, 2020
aea087c
Merge remote-tracking branch 'origin/dev/github-actions' into dev/nul…
adamhewitt627 Feb 6, 2020
c5069b8
Bump .NET SDK version
adamhewitt627 Feb 6, 2020
37193c0
Disable warnings (for now)
adamhewitt627 Feb 6, 2020
46a26e1
Enable matrix build
adamhewitt627 Feb 6, 2020
ea49fd9
Try CI-versioned pack
adamhewitt627 Feb 6, 2020
fa2df05
Include ci in version suffix
adamhewitt627 Feb 6, 2020
a6a8c37
Correct pack command
adamhewitt627 Feb 6, 2020
9a75d39
Provide source-url for GPR
adamhewitt627 Feb 6, 2020
39b517d
Move pack steps to publish action
adamhewitt627 Feb 6, 2020
f7d33fa
Resolve warnings
adamhewitt627 Feb 6, 2020
fe4ec55
Restore net45
adamhewitt627 Feb 6, 2020
e8d0318
Remove ubuntu and mac from build matrix
adamhewitt627 Feb 6, 2020
4b93f46
Remove AppVeyor
adamhewitt627 Feb 6, 2020
db00599
Try publish to NuGet
adamhewitt627 Feb 6, 2020
33135ca
Correct source-url
adamhewitt627 Feb 6, 2020
4be95b0
Inline API key
adamhewitt627 Feb 6, 2020
013dc68
Set NUGET_AUTH_TOKEN
adamhewitt627 Feb 6, 2020
10c7789
Finalize publish script
adamhewitt627 Feb 6, 2020
6ff0f45
Try setting version
adamhewitt627 Feb 6, 2020
7454915
Update dotnetcore.yml
adamhewitt627 Feb 6, 2020
f46243d
Update dotnetcore.yml
adamhewitt627 Feb 6, 2020
11445b1
Correct CI version setter
adamhewitt627 Feb 6, 2020
1436ba4
Additional nullable annotation on out parameter
adamhewitt627 Feb 6, 2020
f28beb4
Being explicit about lang version.
Keboo Feb 6, 2020
27cbce1
Nullable cleanup
Keboo Feb 6, 2020
4c1e6e4
Allow for non-nullable returns
adamhewitt627 Feb 7, 2020
beb3415
Updates for nullable support.
Keboo Apr 6, 2020
7f83a89
Removed un-used appveyor.yml file
Keboo Apr 6, 2020
23af2e7
Update netcore version
Keboo Apr 6, 2020
44a6706
Fixing null reference return
Keboo Apr 6, 2020
fe27796
Fixing null types in tests
Keboo Apr 6, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
23 changes: 23 additions & 0 deletions .github/workflows/dotnetcore.yml
@@ -0,0 +1,23 @@
name: .NET Core

on: [push]


jobs:

build:
runs-on: windows-2019

steps:
- uses: actions/checkout@v2

- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.102

- name: Build
run: dotnet build --configuration Release

- name: Test
run: dotnet test --configuration Release
31 changes: 31 additions & 0 deletions .github/workflows/publish.yml
@@ -0,0 +1,31 @@
name: Publish to NuGet
on:
push:
branches:
- master
- release

jobs:

publish:
runs-on: ubuntu-latest
env:
NUGET_AUTH_TOKEN: ${{ secrets.NUGET_TOKEN }}

steps:
- uses: actions/checkout@v2

- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.100

- name: Set CI Version
if: github.ref != 'refs/heads/release'
run: echo "::set-env name=VersionSuffix::ci${{ github.run_number }}"

- name: Pack
run: dotnet pack --configuration release --include-symbols --output .

- name: Publish
run: dotnet nuget push *.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_TOKEN }} --skip-duplicate
9 changes: 9 additions & 0 deletions Analysis.ruleset
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<RuleSet Name="New Rule Set" Description=" " ToolsVersion="16.0">
<Rules AnalyzerId="Microsoft.CodeQuality.Analyzers" RuleNamespace="Microsoft.CodeQuality.Analyzers">

<Rule Id="CA1303" Action="Info" /><!-- Method '...' passes a literal string as parameter '...' of a call to '...'. Retrieve the following string(s) from a resource table instead: "..." -->
<Rule Id="CS1591" Action="Warning" /><!-- Missing XML comment for publicly visible type or member '...' -->

</Rules>
</RuleSet>
21 changes: 21 additions & 0 deletions Directory.Build.props
@@ -0,0 +1,21 @@
<Project>

<PropertyGroup>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors Condition=" '$(BuildingForLiveUnitTesting)' == '' ">true</TreatWarningsAsErrors>
<CodeAnalysisRuleSet>$(MSBuildThisFileDirectory)Analysis.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.CodeQuality.Analyzers" Version="2.9.8">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NetCore.Analyzers" Version="2.9.8">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

</Project>
10 changes: 5 additions & 5 deletions Moq.AutoMock.Tests/ConstructorSelectorTests.cs
Expand Up @@ -12,28 +12,28 @@ public class ConstructorSelectorTests
[TestMethod]
public void It_chooses_the_ctor_with_arguments()
{
var ctor = typeof(WithDefaultAndSingleParameter).SelectCtor(new Type[0], DefaultBindingFlags);
var ctor = typeof(WithDefaultAndSingleParameter).SelectCtor(Array.Empty<Type>(), DefaultBindingFlags);
Assert.AreEqual(1, ctor.GetParameters().Length);
}

[TestMethod]
public void It_chooses_the_ctor_with_the_most_arguments()
{
var ctor = typeof(With3Parameters).SelectCtor(new Type[0], DefaultBindingFlags);
var ctor = typeof(With3Parameters).SelectCtor(Array.Empty<Type>(), DefaultBindingFlags);
Assert.AreEqual(2, ctor.GetParameters().Length);
}

[TestMethod]
public void It_chooses_the_ctor_with_the_most_arguments_when_arguments_are_arrays()
{
var ctor = typeof(WithArrayParameter).SelectCtor(new Type[0], DefaultBindingFlags);
var ctor = typeof(WithArrayParameter).SelectCtor(Array.Empty<Type>(), DefaultBindingFlags);
Assert.AreEqual(1, ctor.GetParameters().Length);
}

[TestMethod]
public void It_wont_select_if_an_argument_is_sealed_and_not_array()
{
var ctor = typeof(WithSealedParameter).SelectCtor(new Type[0], DefaultBindingFlags);
var ctor = typeof(WithSealedParameter).SelectCtor(Array.Empty<Type>(), DefaultBindingFlags);
Assert.AreEqual(0, ctor.GetParameters().Length);
}

Expand All @@ -48,7 +48,7 @@ public void It_will_select_if_an_argument_is_sealed_and_supplied()
public void It_will_select_a_private_ctor_when_specified()
{
const BindingFlags privateBindingFlags = DefaultBindingFlags | BindingFlags.NonPublic;
var ctor = typeof(WithPrivateConstructor).SelectCtor(new Type[0], privateBindingFlags);
var ctor = typeof(WithPrivateConstructor).SelectCtor(Array.Empty<Type>(), privateBindingFlags);
Assert.AreEqual(2, ctor.GetParameters().Length);
}
}
Expand Down
3 changes: 3 additions & 0 deletions Moq.AutoMock.Tests/DescribeExtractingObjects.cs
Expand Up @@ -21,7 +21,10 @@ public void It_extracts_instances_that_were_placed_with_Use()
public void It_extracts_instances_that_were_setup_with_Use()
{
var mocker = new AutoMocker();
#pragma warning disable CA1820 // Test for empty strings using string length
mocker.Use<IService1>(x => x.ToString() == "");
#pragma warning restore CA1820 // Test for empty strings using string length

// Assert does not throw
mocker.GetMock<IService1>();
}
Expand Down
6 changes: 3 additions & 3 deletions Moq.AutoMock.Tests/DescribeGetMock.cs
Expand Up @@ -17,23 +17,23 @@ public void It_creates_mock_from_interface_from_generic_type_parameter()
public void It_creates_mock_from_interface_from_type_parameter()
{
var mocker = new AutoMocker();
Mock<IService1> mock = mocker.GetMock(typeof(IService1)) as Mock<IService1>;
Mock<IService1>? mock = mocker.GetMock(typeof(IService1)) as Mock<IService1>;
Assert.IsNotNull(mock);
}

[TestMethod]
public void It_creates_mock_from_class_from_generic_type_parameter()
{
var mocker = new AutoMocker();
Mock<Empty> mock = mocker.GetMock<Empty>();
Mock<Empty>? mock = mocker.GetMock<Empty>();
Assert.IsNotNull(mock);
}

[TestMethod]
public void It_creates_mock_from_class_from_type_parameter()
{
var mocker = new AutoMocker();
Mock<Empty> mock = mocker.GetMock(typeof(Empty)) as Mock<Empty>;
Mock<Empty>? mock = mocker.GetMock(typeof(Empty)) as Mock<Empty>;
Assert.IsNotNull(mock);
}
}
Expand Down
22 changes: 11 additions & 11 deletions Moq.AutoMock.Tests/DescribeSetups.cs
Expand Up @@ -12,20 +12,20 @@ public class DescribeSetups
public void You_can_setup_a_mock_using_the_classic_Setup_style()
{
var mocker = new AutoMocker();
mocker.Setup<IService2, IService1>(x => x.Other).Returns(Mock.Of<IService1>());
mocker.Setup<IService2, IService1?>(x => x.Other).Returns(Mock.Of<IService1>());
var mock = mocker.Get<IService2>();
Assert.IsNotNull(mock);
Assert.IsNotNull(mock.Other);
Assert.IsNotNull(mock!.Other);
}

[TestMethod]
public void You_can_do_multiple_setups_on_a_single_interface()
{
var mocker = new AutoMocker();
mocker.Setup<IService2, IService1>(x => x.Other).Returns(Mock.Of<IService1>());
mocker.Setup<IService2, string>(x => x.Name).Returns("pure awesomeness");
mocker.Setup<IService2, IService1?>(x => x.Other).Returns(Mock.Of<IService1>());
mocker.Setup<IService2, string?>(x => x.Name).Returns("pure awesomeness");
var mock = mocker.Get<IService2>();
Assert.AreEqual("pure awesomeness", mock.Name);
Assert.AreEqual("pure awesomeness", mock!.Name);
Assert.IsNotNull(mock.Other);
}

Expand All @@ -35,7 +35,7 @@ public void You_can_setup_a_void_void()
var x = 0;
var mocker = new AutoMocker();
mocker.Setup<IService1>(_ => _.Void()).Callback(() => x++);
mocker.Get<IService1>().Void();
mocker.Get<IService1>()!.Void();
Assert.AreEqual(1, x);
}

Expand All @@ -46,7 +46,7 @@ public void You_can_setup_a_method_that_returns_a_value_type()
mocker.Setup<IServiceWithPrimitives, long>(s => s.ReturnsALong()).Returns(100L);

var mock = mocker.Get<IServiceWithPrimitives>();
Assert.AreEqual(100L, mock.ReturnsALong());
Assert.AreEqual(100L, mock!.ReturnsALong());
}

[TestMethod]
Expand All @@ -59,7 +59,7 @@ public void You_can_setup_a_method_that_returns_a_reference_type_via_a_lambda_wi
.Returns<string>(s => s += "2");

var mock = mocker.Get<IServiceWithPrimitives>();
Assert.AreEqual("blah2", mock.ReturnsAReferenceWithParameter("blah"));
Assert.AreEqual("blah2", mock!.ReturnsAReferenceWithParameter("blah"));
}

[TestMethod]
Expand All @@ -72,7 +72,7 @@ public void You_can_setup_a_method_with_a_static_that_returns_a_reference_type_v
.Returns<string>(s => s + "2");

var mock = mocker.Get<IService4>();
Assert.AreEqual("2", mock.MainMethodName(WithStatic.Get()));
Assert.AreEqual("2", mock!.MainMethodName(WithStatic.Get()));
}

[TestMethod]
Expand All @@ -83,7 +83,7 @@ public void You_can_set_up_all_properties_with_one_line()

var mock = mocker.Get<IService5>();

mock.Name = "aname";
mock!.Name = "aname";

Assert.AreEqual("aname", mock.Name);
}
Expand All @@ -98,7 +98,7 @@ public void You_can_setup_a_method_that_returns_diffrent_result_in_sequence()

var mock = mocker.Get<IService4>();

Assert.AreEqual("t1", mock.MainMethodName("any"));
Assert.AreEqual("t1", mock!.MainMethodName("any"));
Assert.AreEqual("t2", mock.MainMethodName("any"));
}
}
Expand Down
6 changes: 3 additions & 3 deletions Moq.AutoMock.Tests/DescribeSingleVerify.cs
Expand Up @@ -13,7 +13,7 @@ public void You_can_verify_a_single_method_call_directly()
var mock = new Mock<IService2>();
mocker.Use(mock);
var name = mock.Object.Name;
mocker.Verify<IService2>(x => x.Name);
mocker.Verify<IService2>(x => x.Name!);
}

[TestMethod]
Expand All @@ -23,7 +23,7 @@ public void You_can_verify_a_method_that_returns_a_value_type()
mocker.Setup<IServiceWithPrimitives, long>(s => s.ReturnsALong()).Returns(100L);

var mock = mocker.Get<IServiceWithPrimitives>();
Assert.AreEqual(100L, mock.ReturnsALong());
Assert.AreEqual(100L, mock!.ReturnsALong());

mocker.Verify<IServiceWithPrimitives, long>(s => s.ReturnsALong(), Times.Once());
}
Expand All @@ -35,7 +35,7 @@ public void You_can_verify_all_setups_marked_as_verifiable()
mocker.Setup<IService1>(x => x.Void()).Verifiable();
mocker.Setup<IService5, string>(x => x.Name).Returns("Test");

mocker.Get<IService1>().Void();
mocker.Get<IService1>()!.Void();

mocker.Verify();
}
Expand Down
18 changes: 11 additions & 7 deletions Moq.AutoMock.Tests/Moq.AutoMock.Tests.csproj
@@ -1,12 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">

<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<TargetFramework>netcoreapp3.0</TargetFramework>
<RootNamespace>Moq.AutoMock.Tests</RootNamespace>
<AssemblyName>Moq.AutoMock.Tests</AssemblyName>
<Copyright>Copyright © 2016</Copyright>
<Copyright>Copyright © 2020</Copyright>

<IsPackable>false</IsPackable>
<NoWarn>$(NoWarn),CA1707</NoWarn>
</PropertyGroup>

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
Expand All @@ -23,11 +24,14 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Moq" version="4.8.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />
<PackageReference Include="MSTest.TestFramework" Version="1.4.0" />
<ProjectReference Include="..\Moq.AutoMock\Moq.AutoMock.csproj" />
<Compile Include="..\System.Diagnostics.CodeAnalysis.cs" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Moq" version="4.13.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.0" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.0" />
<ProjectReference Include="..\Moq.AutoMock\Moq.AutoMock.csproj" />
</ItemGroup>
</Project>
5 changes: 4 additions & 1 deletion Moq.AutoMock.Tests/ResolvesDelegates.cs
Expand Up @@ -15,10 +15,13 @@ public class ResolvesDelegates
[DataTestMethod, DynamicData(nameof(Funcs))]
public void ResolvesFuncReturningDefinedParameter(Type delegateType, object expected)
{
if (delegateType is null) throw new ArgumentNullException(nameof(delegateType));
if (expected is null) throw new ArgumentNullException(nameof(expected));

var mocker = new AutoMocker { Resolvers = { new FuncResolver() } };
mocker.Use(expected.GetType(), expected);

var func = (Delegate)mocker.Get(delegateType);
var func = (Delegate)mocker.Get(delegateType)!;
Assert.IsNotNull(func);

var @params = new object[delegateType.GetGenericArguments().Length - 1];
Expand Down
13 changes: 9 additions & 4 deletions Moq.AutoMock.Tests/ResolvesLazy.cs
Expand Up @@ -8,9 +8,14 @@ namespace Moq.AutoMock.Tests
[TestClass]
public class ResolvesLazy
{
[TestMethod] public void ResolvesLazyObjectFromContainer() => Resolves(new object());
[TestMethod] public void ResolvesLazyNumberFromContainer() => Resolves(42L);
[TestMethod] public void ResolvesLazyStringFromContainer() => Resolves(nameof(ResolvesLazy));
[TestMethod]
public void ResolvesLazyObjectFromContainer() => Resolves(new object());

[TestMethod]
public void ResolvesLazyNumberFromContainer() => Resolves(42L);

[TestMethod]
public void ResolvesLazyStringFromContainer() => Resolves(nameof(ResolvesLazy));

private static void Resolves<T>(T expected)
{
Expand All @@ -19,7 +24,7 @@ private static void Resolves<T>(T expected)

var lazy = mocker.Get<Lazy<T>>();
Assert.IsNotNull(lazy);
Assert.AreEqual(expected, lazy.Value);
Assert.AreEqual(expected, lazy!.Value);
}
}
}
2 changes: 1 addition & 1 deletion Moq.AutoMock.Tests/Util/ConstructorThrows.cs
Expand Up @@ -6,7 +6,7 @@ public class ConstructorThrows
{
public ConstructorThrows()
{
throw new ArgumentException();
throw new ArgumentException(string.Empty);
}
}
}
2 changes: 2 additions & 0 deletions Moq.AutoMock.Tests/Util/InsecureAboutSelf.cs
Expand Up @@ -4,10 +4,12 @@ public class InsecureAboutSelf
{
public bool SelfDepricated { get; set; }

#pragma warning disable CA1822 //Member does not access instance data and can be marked as static
public void TellJoke()
{

}
#pragma warning restore CA1822

protected virtual void SelfDepricate()
{
Expand Down
2 changes: 1 addition & 1 deletion Moq.AutoMock.Tests/Util/OneConstructor.cs
Expand Up @@ -2,7 +2,7 @@
{
public class OneConstructor
{
public Empty Empty;
public Empty Empty { get; }

public OneConstructor(Empty empty)
{
Expand Down
4 changes: 2 additions & 2 deletions Moq.AutoMock.Tests/Util/Service2.cs
Expand Up @@ -4,9 +4,9 @@ public class Service2 : IService2
{
public IService1 Other
{
get { return null; }
get { return null!; }
}

public string Name { get; set; }
public string Name { get; set; } = default!;
}
}