Skip to content

Some fixes to AutoSerializable source generator #4656

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

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="AwesomeAssertions" Version="8.1.0" />
<PackageReference Include="AwesomeAssertions.Analyzers" Version="0.34.2">
<PackageReference Include="AwesomeAssertions" Version="8.2.0" />
<PackageReference Include="AwesomeAssertions.Analyzers" Version="8.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.13.0" />
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.14.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing" Version="1.1.2" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing" Version="1.1.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
<PackageReference Include="Verify.MSTest" Version="29.3.1" />
<PackageReference Include="Verify.MSTest" Version="30.1.0" />
<PackageReference Include="Verify.SourceGenerators" Version="2.5.0" />
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PrivateAssets>all</PrivateAssets>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.Runtime.CompilerServices;
using VerifyTests;


namespace Csla.Generator.Tests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,27 +17,25 @@ namespace Csla.Generator.AutoSerialization.CSharp.TestObjects
[AutoSerializable]
public partial class NestingPOCO
{

[AutoSerialized]
private NestedPOCO _poco = new NestedPOCO() { Value = "Hello" };

[AutoSerializable]
protected internal partial class NestedPOCO
{

public string Value { get; set; } = string.Empty;
public string? Value { get; set; } = string.Empty;

}

public string GetValue()
public string? GetValue()
{
return _poco.Value;
}

public void SetValue(string value)
public void SetValue(string? value)
{
_poco.Value = value;
}

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,16 @@ public partial class NestingPOCO2
protected internal partial class NestedPOCO
{

public string Value { get; set; } = string.Empty;
public string? Value { get; set; } = string.Empty;

}

public string GetValue()
public string? GetValue()
{
return _poco.Value;
}

public void SetValue(string value)
public void SetValue(string? value)
{
_poco.Value = value;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
using Csla.Generator.AutoSerialization.CSharp.AutoSerialization;
using Csla.Generator.Tests;

namespace Csla.Generator.AutoSerialization.CSharp.Tests;

[TestClass]
public class AutoSerializationGeneratorTests : VerifyBase
{
[TestMethod("User class uses file scoped namespace which should be possible to use.")]
public async Task Case01()
{
var source = """
namespace Test;

[Csla.Serialization.AutoSerializable]
public partial class AutoSerializableTest
{
public string Name { get; private set; } = "";
}

""";

await TestHelperVerify(source);
}

[TestMethod("User class uses non file scoped namespace which should be possible to use.")]
public async Task Case02()
{
var source = """
namespace Test
{
[Csla.Serialization.AutoSerializable]
public partial class AutoSerializableTest
{
public string Name { get; private set; } = "";
}
}
""";

await TestHelperVerify(source);
}

[TestMethod("Property with a type containing generics must be generated correctly to be used.")]
public async Task Case03()
{
var additionalSources = """
namespace Test2;

public class Foo<T>;

""";

var source = """
using Csla.Core;
using Test2;

namespace Test
{
[Csla.Serialization.AutoSerializable]
public partial class AutoSerializableTest
{
public string? Name { get; set; } = "";

public MobileDictionary<string, Foo<Foo<AutoSerializableTest>>>? Name2 { get; private set; }
}
}
""";

await TestHelperVerify(source, additionalSources);
}



private static async Task TestHelperVerify(string source, params string[]? additionalSources)
{
await TestHelper<IncrementalSerializationPartialsGenerator>.Verify(source, additionalSources);
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,41 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net8.0</TargetFrameworks>
<LangVersion>latest</LangVersion>
<LangVersion>preview</LangVersion>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="MSTest.TestAdapter" Version="3.3.1" />
<PackageReference Include="MSTest.TestFramework" Version="3.3.1" />
<Compile Include="..\..\AutoImplementProperties\Csla.Generator.AutoImplementProperties.CSharp.Tests\ModuleInitializer.cs" Link="ModuleInitializer.cs" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="MSTest.TestAdapter" Version="3.8.3" />
<PackageReference Include="MSTest.TestFramework" Version="3.8.3" />
<PackageReference Include="coverlet.collector" Version="6.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="AwesomeAssertions" Version="8.2.0" />
<PackageReference Include="AwesomeAssertions.Analyzers" Version="8.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Verify.MSTest" Version="30.1.0" />
<PackageReference Include="Verify.SourceGenerators" Version="2.5.0" />
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.14.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing" Version="1.1.2" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.SourceGenerators.Testing" Version="1.1.2" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\..\Csla.TestHelpers\Csla.TestHelpers.csproj" />
<ProjectReference Include="..\Csla.Generator.AutoSerialization.Attributes.CSharp\Csla.Generator.AutoSerialization.Attributes.CSharp.csproj" />
<ProjectReference Include="..\Csla.Generator.AutoSerialization.CSharp.TestObjects\Csla.Generator.AutoSerialization.CSharp.TestObjects.csproj" />
<ProjectReference Include="..\Csla.Generator.AutoSerialization.CSharp\Csla.Generator.AutoSerialization.CSharp.csproj" OutputItemType="Analyzer" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,8 @@
// </copyright>
// <summary>Tests of serialization behaviour on the AutoSerializable class NestingPOCO2</summary>
//-----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using Csla.Serialization.Mobile;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Csla.Generator.AutoSerialization.CSharp.TestObjects;
using Microsoft.Extensions.DependencyInjection;
using Csla.Configuration;
using Csla.Serialization.Mobile;
using Csla.TestHelpers;

namespace Csla.Generator.AutoSerialization.CSharp.Tests
Expand All @@ -24,7 +18,7 @@ namespace Csla.Generator.AutoSerialization.CSharp.Tests
[TestClass]
public class NestingPOCO2Tests
{
private static TestDIContext _testDIContext;
private static TestDIContext _testDIContext = default!;

[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
Expand All @@ -39,7 +33,7 @@ public void SerializeThenDeserialize_NestingPOCO2WithValueOfTesty2_HasValueOfTes
{

// Arrange
string actual;
string? actual;
string expected = "Testy2";
NestingPOCO2 poco = new NestingPOCO2();
poco.SetValue("Testy2");
Expand All @@ -59,7 +53,7 @@ public void SerializeThenDeserialize_NestingPOCO2WithNullValue_HasNullValue()
{

// Arrange
string actual;
string? actual;
NestingPOCO2 poco = new NestingPOCO2();
poco.SetValue(null);
NestingPOCO2 deserializedPOCO;
Expand Down Expand Up @@ -90,7 +84,7 @@ private NestingPOCO2 SerializeThenDeserialiseNestingPOCO2(NestingPOCO2 valueToSe
{
formatter.Serialize(serializationStream, valueToSerialize);
serializationStream.Seek(0, System.IO.SeekOrigin.Begin);
deserializedValue = formatter.Deserialize(serializationStream) as NestingPOCO2;
deserializedValue = (NestingPOCO2)formatter.Deserialize(serializationStream);
}

return deserializedValue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,8 @@
// </copyright>
// <summary>Tests of serialization behaviour on the AutoSerializable class NestingPOCO</summary>
//-----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using Csla.Serialization.Mobile;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Csla.Generator.AutoSerialization.CSharp.TestObjects;
using Microsoft.Extensions.DependencyInjection;
using Csla.Configuration;
using Csla.Serialization.Mobile;
using Csla.TestHelpers;

namespace Csla.Generator.AutoSerialization.CSharp.Tests
Expand All @@ -24,7 +18,7 @@ namespace Csla.Generator.AutoSerialization.CSharp.Tests
[TestClass]
public class NestingPOCOTests
{
private static TestDIContext _testDIContext;
private static TestDIContext _testDIContext = default!;

[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
Expand All @@ -39,7 +33,7 @@ public void SerializeThenDeserialize_NestingPOCOWithValueOfTesty_HasValueOfTesty
{

// Arrange
string actual;
string? actual;
string expected = "Testy";
NestingPOCO poco = new NestingPOCO();
poco.SetValue("Testy");
Expand All @@ -59,7 +53,7 @@ public void SerializeThenDeserialize_NestingPOCOWithNullValue_HasNullValue()
{

// Arrange
string actual;
string? actual;
NestingPOCO poco = new NestingPOCO();
poco.SetValue(null);
NestingPOCO deserializedPOCO;
Expand Down Expand Up @@ -90,7 +84,7 @@ private NestingPOCO SerializeThenDeserialiseNestingPOCO(NestingPOCO valueToSeria
{
formatter.Serialize(serializationStream, valueToSerialize);
serializationStream.Seek(0, System.IO.SeekOrigin.Begin);
deserializedValue = formatter.Deserialize(serializationStream) as NestingPOCO;
deserializedValue = (NestingPOCO)formatter.Deserialize(serializationStream);
}

return deserializedValue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,9 @@
// </copyright>
// <summary>Tests of serialization behaviour on the AutoSerializable class PersonPOCO</summary>
//-----------------------------------------------------------------------
using Csla.Serialization.Mobile;
using Csla.Serialization;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using Csla.Generator.AutoSerialization.CSharp.TestObjects;
using Csla.Generator.AutoSerialization.CSharp.Tests.Helpers;
using Microsoft.Extensions.DependencyInjection;
using Csla.Configuration;
using Csla.Serialization.Mobile;
using Csla.TestHelpers;

namespace Csla.Generator.AutoSerialization.CSharp.Tests
Expand All @@ -21,10 +16,10 @@ namespace Csla.Generator.AutoSerialization.CSharp.Tests
/// <summary>
/// Tests of serialization on the PersonPOCO class and its children
/// </summary>
[TestClass]
[TestClass]
public class PersonPOCOTests
{
private static TestDIContext _testDIContext;
private static TestDIContext _testDIContext = default!;

[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
Expand Down Expand Up @@ -571,7 +566,7 @@ public void SerializeThenDeserialize_WithAutoSerializableAddress1HighStreet_HasA
{

// Arrange
string actual;
string? actual;
string expected = "1 High Street";
PersonPOCO person = new PersonPOCO();
person.Address = new AddressPOCO() { AddressLine1 = "1 High Street" };
Expand All @@ -591,7 +586,7 @@ public void SerializeThenDeserialize_WithAutoSerializableAddressNull_HasNullAddr
{

// Arrange
AddressPOCO actual;
AddressPOCO? actual;
PersonPOCO person = new PersonPOCO();
PersonPOCO deserializedPerson;

Expand All @@ -609,7 +604,7 @@ public void SerializeThenDeserialize_WithAutoSerializableAddressTownsville_HasAd
{

// Arrange
string actual;
string? actual;
string expected = "Townsville";
PersonPOCO person = new PersonPOCO();
person.Address = new AddressPOCO() { Town = "Townsville" };
Expand All @@ -629,7 +624,7 @@ public void SerializeThenDeserialize_WithIMobileObjectEmailAddressNull_HasEmailA
{

// Arrange
EmailAddress actual;
EmailAddress? actual;
PersonPOCO person = new PersonPOCO();
PersonPOCO deserializedPerson;

Expand All @@ -647,7 +642,7 @@ public void SerializeThenDeserialize_WithIMobileObjectEmailAddressAatBdotCom_Has
{

// Arrange
string actual;
string? actual;
string expected = "[email protected]";
PersonPOCO person = new PersonPOCO();
person.EmailAddress = new EmailAddress() { Email = "[email protected]" };
Expand Down Expand Up @@ -685,7 +680,7 @@ private PersonPOCO SerializeThenDeserialisePersonPOCO(PersonPOCO valueToSerializ
{
formatter.Serialize(serializationStream, valueToSerialize);
serializationStream.Seek(0, System.IO.SeekOrigin.Begin);
deserializedValue = formatter.Deserialize(serializationStream) as PersonPOCO;
deserializedValue = (PersonPOCO)formatter.Deserialize(serializationStream);
}

return deserializedValue;
Expand Down
Loading