public void PrintTypeNameIsFalseByDefault() { string code = @" [StructGenerators.GenerateToString] public partial struct MyStruct { } "; var generatorTestHelper = new GeneratorTestHelper <ToStringGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().Contain(@"// sb.Append(""MyStruct "");"); }
public void StructWithNoFields() { string code = @" [StructGenerators.GenerateEquality] public partial struct MyStruct { } "; var generatorTestHelper = new GeneratorTestHelper <EqualityGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().Contain("Equals"); output.Should().Contain("42"); }
public void Record() { string code = @" [StructGenerators.GenerateToString] public partial record MyRecord { } "; var generatorTestHelper = new GeneratorTestHelper <ToStringGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().Contain(@"sb.Append(""MyRecord "");"); output.Should().Contain("virtual bool PrintMembers(StringBuilder sb)"); }
public void SkipIsRespected() { string code = @" [StructGenerators.GenerateToString] public partial struct MyStruct { [StructGenerators.ToStringBehavior(Skip = true)] public int[] S2 => null; } "; var generatorTestHelper = new GeneratorTestHelper <ToStringGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().NotContain("PrintCollection"); }
public void StructWithOneField() { string code = @" [StructGenerators.GenerateEquality] public partial struct MyStruct { private readonly string _s; } "; var generatorTestHelper = new GeneratorTestHelper <EqualityGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().Contain("Equals"); output.Should().Contain("_s"); output.Should().NotContain("42"); }
public void RespectTheLimits() { string code = @" [StructGenerators.GenerateToString(MaxStringLength = 142)] public partial struct MyStruct { [StructGenerators.ToStringBehavior(CollectionCountLimit = 99)] private readonly string[] _s; } "; var generatorTestHelper = new GeneratorTestHelper <ToStringGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().Contain(", limit: 99"); output.Should().Contain("142"); }
public void RecordWithPrimaryConstructor() { string code = @" [StructGenerators.GenerateToString] public partial record MyRecord(int Property1) { } "; var generatorTestHelper = new GeneratorTestHelper <ToStringGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().Contain(@"sb.Append(""MyRecord "");"); output.Should().Contain("virtual bool PrintMembers(StringBuilder sb)"); output.Should().Contain("Property1"); output.Should().NotContain("EqualityContract"); }
public void StructAlreadyHasGetHashCode() { // TODO: this test can do a better job and detect exactly what is going on. // This should be fine: the generated code should just skip it. string code = @" [StructGenerators.GenerateEquality] public partial struct MyStruct { private readonly string _s; public override int GetHashCode() => 42; } "; var generatorTestHelper = new GeneratorTestHelper <EqualityGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().NotContain("GetHashCode"); }
public void LegacyCollectionToStringBehavior() { string code = @" [StructGenerators.GenerateToString] public partial struct MyStruct { private readonly string[] _s; public string[] S => _s; [StructGenerators.ToStringBehavior(CollectionsBehavior = StructGenerators.CollectionsBehavior.PrintContent)] public int[] S2 => null; } "; var generatorTestHelper = new GeneratorTestHelper <ToStringGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().Contain("behavior: CollectionsBehavior.PrintContent"); output.Should().Contain("limit: 100"); }
public void GenericStructWithOneFieldAndStatic() { string code = @" [StructGenerators.GenerateEquality] public partial struct MyStruct<T1, T2, T3, T4, T5> { private readonly T1 _t1; private readonly T2 _t2; private readonly T3 _t3; private readonly T4 _t4; private readonly T5 _t5; private static string _staticS; } "; var generatorTestHelper = new GeneratorTestHelper <EqualityGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().Contain("Equals"); output.Should().NotContain("42"); output.Should().NotContain("_staticS"); }
public void SkipFieldsAndProperties() { string code = @" [StructGenerators.GenerateToString] public partial struct MyStruct { [StructGenerators.ToStringBehavior(Skip = true)] private readonly string _s; [StructGenerators.ToStringBehavior(Skip = true)] public string S => _s; public string Y => _s; } "; var generatorTestHelper = new GeneratorTestHelper <ToStringGenerator>(); var output = generatorTestHelper.GetGeneratedOutput(code); output.Should().NotContain("Append((object)_s)"); output.Should().NotContain("Append((object)S)"); output.Should().Contain("Append((object)Y)"); }