Skip to content

Commit

Permalink
fix: add comments and add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
TimothyMakkison committed Jun 16, 2023
1 parent 9d4bfd8 commit e99c604
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,17 +79,14 @@ private IEnumerable<string> GetIgnoredObsoleteTargetMembers()
{
var obsoleteStrategy = BuilderContext.Configuration.Properties.IgnoreObsoleteMembersStrategy;

if (obsoleteStrategy.HasFlag(IgnoreObsoleteMembersStrategy.Target))
{
var obsoleteAttribute = BuilderContext.Types.Get<ObsoleteAttribute>();

return Mapping.TargetType
.GetAccessibleMappableMembers()
.Where(x => x.MemberSymbol.HasAttribute(obsoleteAttribute))
.Select(x => x.Name);
}

return Enumerable.Empty<string>();
if (!obsoleteStrategy.HasFlag(IgnoreObsoleteMembersStrategy.Target))
return Enumerable.Empty<string>();

var obsoleteAttribute = BuilderContext.Types.Get<ObsoleteAttribute>();
return Mapping.TargetType
.GetAccessibleMappableMembers()
.Where(x => x.MemberSymbol.HasAttribute(obsoleteAttribute))
.Select(x => x.Name);
}

private IEnumerable<string> GetIgnoredObsoleteSourceMembers()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ out var sourceMemberPath
BuildInitMemberMapping(ctx, targetMember, sourceMemberPath);
}

// check for any configured mappings that match the ignored targets
// this way explicit property mapping will map ignored members
var initOnlyIgnoredTargetMembers = includeAllMembers
? ctx.IgnoredTargetMembers.Values.ToArray()
: ctx.IgnoredTargetMembers.Values.Where(x => x.CanOnlySetViaInitializer()).ToArray();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ out var sourceMemberPath
}
}

// check for any configured mappings that match the ignored targets
// this way explicit property mapping will map ignored members
foreach (var targetMember in ctx.IgnoredTargetMembers.Values)
{
if (ctx.MemberConfigsByRootTargetName.Remove(targetMember.Name, out var memberConfigs))
Expand Down
17 changes: 17 additions & 0 deletions test/Riok.Mapperly.Tests/Helpers/DictionaryExtensionsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,21 @@ public void RemoveRangeShouldRemoveEntries()
d.RemoveRange(new[] { "a", "c" });
d.Keys.Should().BeEquivalentTo("b");
}

[Fact]
public void ExtractRangeShouldRemoveEntries()
{
var d = new Dictionary<string, int>
{
["a"] = 10,
["b"] = 20,
["c"] = 30
};
var expectedRemoved = new Dictionary<string, int> { ["a"] = 10, ["c"] = 30 };

var removedItems = d.ExtractRange(new[] { "a", "c", "d" });

d.Keys.Should().BeEquivalentTo("b");
removedItems.Should().BeEquivalentTo(expectedRemoved);
}
}
82 changes: 77 additions & 5 deletions test/Riok.Mapperly.Tests/Mapping/IgnoreObsoleteTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,20 @@ public class IgnoreObsoleteTest
private const string _classA = """
class A
{
public int Value { get; set;}
public int Value { get; set; }

[Obsolete]
public int Ignored { get; set;}
public int Ignored { get; set; }
}
""";

private const string _classB = """
class B
{
public int Value { get; set;}
public int Value { get; set; }

[Obsolete]
public int Ignored { get; set;}
public int Ignored { get; set; }
}
""";

Expand Down Expand Up @@ -292,7 +292,7 @@ public void MapPropertyOverridesIgnoreObsoleteTarget()
);

TestHelper
.GenerateMapper(source, TestHelperOptions.AllowInfoDiagnostics)
.GenerateMapper(source)
.Should()
.HaveSingleMethodBody(
"""
Expand All @@ -303,4 +303,76 @@ public void MapPropertyOverridesIgnoreObsoleteTarget()
"""
);
}

[Fact]
public void MapInitPropertyWhenIgnoreObsoleteTarget()
{
var source = TestSourceBuilder.MapperWithBodyAndTypes(
"""
[MapProperty("Ignored", "Ignored")]
[MapperIgnoreObsoleteMembers(IgnoreObsoleteMembersStrategy.Target)]
partial B Map(A source);
""",
_classA,
"""
class B
{
public int Value { get; set; }

[Obsolete]
public int Ignored { get; init; }
}
"""
);

TestHelper
.GenerateMapper(source)
.Should()
.HaveSingleMethodBody(
"""
var target = new global::B()
{
Ignored = source.Ignored
};
target.Value = source.Value;
return target;
"""
);
}

[Fact]
public void MapRequiredPropertyWhenIgnoreObsoleteTarget()
{
var source = TestSourceBuilder.MapperWithBodyAndTypes(
"""
[MapProperty("Ignored", "Ignored")]
[MapperIgnoreObsoleteMembers(IgnoreObsoleteMembersStrategy.Target)]
partial B Map(A source);
""",
_classA,
"""
class B
{
public int Value { get; set; }

[Obsolete]
public required int Ignored { get; set; }
}
"""
);

TestHelper
.GenerateMapper(source)
.Should()
.HaveSingleMethodBody(
"""
var target = new global::B()
{
Ignored = source.Ignored
};
target.Value = source.Value;
return target;
"""
);
}
}

0 comments on commit e99c604

Please sign in to comment.