Skip to content

Commit

Permalink
Improve Merging tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Struan Judd committed Dec 22, 2023
1 parent 23b2a92 commit 716a16e
Show file tree
Hide file tree
Showing 16 changed files with 62 additions and 41 deletions.
3 changes: 0 additions & 3 deletions src/GqlPlus.Verifier/Merging/AlternatesMerger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ protected override TAlternate MergeGroup(TAlternate[] items)
return first with { Type = first.Type with { Description = items.MergeDescriptions() } };
}

public override bool CanMerge(TAlternate[] items)
=> base.CanMerge(items);

protected override string ItemGroupKey(TAlternate item)
=> item.Type.TypeName;

Expand Down
10 changes: 3 additions & 7 deletions src/GqlPlus.Verifier/Merging/BaseMerger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,7 @@ public virtual bool CanMerge(TItem[] items)
=> items.Length > 0;

public virtual TItem[] Merge(TItem[] items)
{
if (items is null || items.Length == 0) {
throw new InvalidOperationException();
}

return items;
}
=> items is null || items.Length == 0
? throw new InvalidOperationException()
: items;
}
6 changes: 3 additions & 3 deletions src/GqlPlus.Verifier/Merging/DescribedMerger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public abstract class DescribedMerger<TItem>
: DistinctMerger<TItem>
where TItem : IAstDescribed
{
public override bool CanMerge(TItem[] items)
=> base.CanMerge(items)
&& items.CanMerge(item => item.Description);
protected override bool CanMergeGroup(IGrouping<string, TItem> group)
=> base.CanMergeGroup(group)
&& group.CanMerge(item => item.Description);
}
3 changes: 1 addition & 2 deletions src/GqlPlus.Verifier/Merging/FieldsMerger.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using GqlPlus.Verifier.Ast;
using GqlPlus.Verifier.Ast.Schema;
using GqlPlus.Verifier.Ast.Schema;

namespace GqlPlus.Verifier.Merging;

Expand Down
2 changes: 1 addition & 1 deletion src/GqlPlus.Verifier/Merging/MergeDirectives.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ protected override string ItemMatchKey(DirectiveDeclAst item)
public override bool CanMerge(DirectiveDeclAst[] items)
=> base.CanMerge(items)
&& items.CanMerge(item => item.Description)
&& items.ManyGroupMerge(d => d.Parameters, p => p.Type.FullType, parameters);
&& items.ManyGroupCanMerge(d => d.Parameters, p => p.Type.FullType, parameters);

protected override DirectiveDeclAst MergeGroup(DirectiveDeclAst[] items)
=> items.First() with { Description = items.MergeDescriptions() };
Expand Down
2 changes: 1 addition & 1 deletion src/GqlPlus.Verifier/Merging/MergeEnums.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ protected override string ItemMatchKey(EnumDeclAst item)
public override bool CanMerge(EnumDeclAst[] items)
=> base.CanMerge(items)
&& items.CanMerge(item => item.Description)
&& items.ManyMerge(e => e.Values, enumValues);
&& items.ManyCanMerge(e => e.Values, enumValues);

protected override EnumDeclAst MergeGroup(EnumDeclAst[] items)
=> items.First() with { Description = items.MergeDescriptions() };
Expand Down
7 changes: 4 additions & 3 deletions src/GqlPlus.Verifier/Merging/MergeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,15 @@ public static bool CanMerge<TItem>(this IEnumerable<TItem> items, Func<TItem, st
return true;
}

public static bool ManyGroupMerge<TItem, TGroup>(
public static bool ManyGroupCanMerge<TItem, TGroup>(
this IEnumerable<TItem> items,
Func<TItem, IEnumerable<TGroup>> many,
Func<TGroup, string> groupKey,
IMerge<TGroup> merger)
=> items.SelectMany(many).GroupBy(groupKey).All(p => merger.CanMerge([.. p]));
=> items.SelectMany(many).GroupBy(groupKey)
.All(p => merger.CanMerge([.. p]));

public static bool ManyMerge<TItem, TGroup>(
public static bool ManyCanMerge<TItem, TGroup>(
this IEnumerable<TItem> items,
Func<TItem, IEnumerable<TGroup>> many,
IMerge<TGroup> merger)
Expand Down
2 changes: 1 addition & 1 deletion src/GqlPlus.Verifier/Merging/MergeOutputFields.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ IMerge<ParameterAst> parameters
public override bool CanMerge(OutputFieldAst[] items)
=> base.CanMerge(items)
&& items.CanMerge(item => item.EnumValue ?? "-")
&& items.ManyMerge(item => item.Parameters, parameters);
&& items.ManyCanMerge(item => item.Parameters, parameters);
}
4 changes: 2 additions & 2 deletions src/GqlPlus.Verifier/Merging/MergeScalars.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ protected override string ItemMatchKey(ScalarDeclAst item)
public override bool CanMerge(ScalarDeclAst[] items)
=> base.CanMerge(items)
&& items.CanMerge(item => item.Description)
&& items.ManyMerge(i => i.Ranges, ranges)
&& items.ManyGroupMerge(i => i.Regexes, r => r.Regex, regexes);
&& items.ManyCanMerge(i => i.Ranges, ranges)
&& items.ManyGroupCanMerge(i => i.Regexes, r => r.Regex, regexes);

protected override ScalarDeclAst MergeGroup(ScalarDeclAst[] items)
=> items.First() with { Description = items.MergeDescriptions() };
Expand Down
6 changes: 3 additions & 3 deletions src/GqlPlus.Verifier/Merging/ObjectsMerger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ public override bool CanMerge(TObject[] items)
{
var baseCanMerge = base.CanMerge(items);
var descriptionsCanMerge = items.CanMerge(item => item.Description);
var typeParametersCanMerge = items.ManyMerge(item => item.TypeParameters, typeParameters);
var fieldsCanMerge = items.ManyGroupMerge(item => item.Fields, f => f.Name, fields);
var alternatesCanMerge = items.ManyGroupMerge(item => item.Alternates, a => a.Type.FullType, alternates);
var typeParametersCanMerge = items.ManyCanMerge(item => item.TypeParameters, typeParameters);
var fieldsCanMerge = items.ManyGroupCanMerge(item => item.Fields, f => f.Name, fields);
var alternatesCanMerge = items.ManyGroupCanMerge(item => item.Alternates, a => a.Type.FullType, alternates);

return baseCanMerge && descriptionsCanMerge && typeParametersCanMerge && fieldsCanMerge && alternatesCanMerge;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ public void CanMerge_TwoItemsDifferentOption_ReturnsFalse(string category)
new CategoryDeclAst(AstNulls.At, category) { Option = CategoryOption.Single },
new CategoryDeclAst(AstNulls.At, category) { Option = CategoryOption.Sequential }]);

[Theory, RepeatData(Repeats)]
public void Merge_TwoItemsSameOutput_ReturnsExpected(string category)
=> Merge_Expected(
[new CategoryDeclAst(AstNulls.At, category), new CategoryDeclAst(AstNulls.At, category)],
new CategoryDeclAst(AstNulls.At, category));

protected override CategoryDeclAst MakeDescribed(string name, string description = "")
=> new(AstNulls.At, name, description, name);
}
26 changes: 25 additions & 1 deletion test/GqlPlus.Verifier.ClassTests/Merging/TestGroups.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,33 @@

namespace GqlPlus.Verifier.Merging;

public abstract class TestGroups<TItem> : TestBase<TItem>
public abstract class TestGroups<TItem>
: TestBase<TItem>
where TItem : AstBase
{
[Theory, RepeatData(Repeats)]
public void CanMerge_TwoItemsDifferentNames_ReturnsTrue(string name1, string name2)
{
if (name1 == name2) {
return;
}

CanMerge_True([MakeDistinct(name1), MakeDistinct(name2)]);
}

[Theory, RepeatData(Repeats)]
public void Merge_TwoItemsDifferentName_ReturnsItems(string name1, string name2)
{
if (name1 == name2) {
return;
}

var item1 = MakeDistinct(name1);
var item2 = MakeDistinct(name2);

Merge_Expected([item1, item2], item2, item1);
}

protected abstract GroupsMerger<TItem> MergerGroups { get; }

protected override IMerge<TItem> MergerBase => MergerGroups;
Expand Down
7 changes: 6 additions & 1 deletion test/GqlPlus.Verifier.ClassTests/Merging/TestModified.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,17 @@ public abstract class TestModified<TModified>
: TestDescriptions<TModified>
where TModified : AstBase, IAstDescribed, IAstModified
{

[Theory, RepeatData(Repeats)]
public void CanMerge_TwoItemsSameModifers_ReturnsTrue(string input)
=> CanMerge_True([MakeDescribed(input) with { Modifiers = TestMods() }, MakeDescribed(input) with { Modifiers = TestMods() }]);

[Theory, RepeatData(Repeats)]
public void CanMerge_TwoItemsDifferentModifers_ReturnsFalse(string input)
=> CanMerge_False([MakeDescribed(input) with { Modifiers = TestMods() }, MakeDescribed(input)]);

[Theory, RepeatData(Repeats)]
public void Merge_TwoItemsSameModifers_ReturnsExpected(string input)
=> Merge_Expected(
[MakeDescribed(input) with { Modifiers = TestMods() }, MakeDescribed(input) with { Modifiers = TestMods() }],
MakeDescribed(input) with { Modifiers = TestMods() });
}
12 changes: 4 additions & 8 deletions test/GqlPlus.Verifier.ComponentTests/BuiltInTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,10 @@
public class BuiltInTests
{
[Fact]
public async Task VerifyBasicTypes()
{
await Verify(BuiltIn.Basic.AsString());
}
public Task VerifyBasicTypes()
=> Verify(BuiltIn.Basic.AsString());

[Fact]
public async Task VerifyInternalTypes()
{
await Verify(BuiltIn.Internal.AsString());
}
public Task VerifyInternalTypes()
=> Verify(BuiltIn.Internal.AsString());
}
3 changes: 1 addition & 2 deletions test/GqlPlus.Verifier.ComponentTests/SampleTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using DiffEngine;
using GqlPlus.Verifier.Ast.Operation;
using GqlPlus.Verifier.Ast.Operation;
using GqlPlus.Verifier.Ast.Schema;
using GqlPlus.Verifier.Parse;
using GqlPlus.Verifier.Parse.Operation;
Expand Down
4 changes: 1 addition & 3 deletions test/GqlPlus.Verifier.ComponentTests/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@ namespace GqlPlus.Verifier;
public class Startup
{
static Startup()
{
DiffRunner.MaxInstancesToLaunch(20);
}
=> DiffRunner.MaxInstancesToLaunch(20);

public static void ConfigureServices(IServiceCollection services)
=> services
Expand Down

0 comments on commit 716a16e

Please sign in to comment.