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");
        }
Example #3
0
        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");
        }
Example #7
0
        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)");
        }