public void EmptyClass()
        {
            string source = @"
class O
{
}
";

            TestTypeDefinitionDocuments(new[] { source },
                                        ("O", "1.cs"));
        }
        public void ExternMethod()
        {
            string source = @"
class C
{
    public extern void M();
}
";

            TestTypeDefinitionDocuments(new[] { source },
                                        ("C", "1.cs"));
        }
        public void AbstractMethod()
        {
            string source = @"
abstract class C
{
    public abstract void M();
}
";

            TestTypeDefinitionDocuments(new[] { source },
                                        ("C", "1.cs"));
        }
        public void Fields()
        {
            string source = @"
class C
{
    int x;
    const int z = 2;
    int y;
}
";

            TestTypeDefinitionDocuments(new[] { source },
                                        ("C", "1.cs"));
        }
        public void Record_SynthesizedMember()
        {
            string source = @"
record R(int X)
{
    protected virtual bool PrintMembers(System.Text.StringBuilder builder)
    {
        return true;
    }
}
";

            TestTypeDefinitionDocuments(new[] { source, IsExternalInitTypeDefinition },
                                        ("IsExternalInit", "2.cs"));
        }
        public void PartialClasses()
        {
            string source1 = @"
partial class C
{
}
";
            string source2 = @"
partial class C
{
}
";

            TestTypeDefinitionDocuments(new[] { source1, source2 },
                                        ("C", "1.cs, 2.cs"));
        }
        public void Delegate()
        {
            string source = @"
delegate void D(int a);

class C
{
    void M()
    {
        var x = (int a, ref int b) => a;
    }
}
";

            TestTypeDefinitionDocuments(new[] { source },
                                        ("D", "1.cs"));
        }
        public void EmptyMultiNestedClass()
        {
            string source = @"
class O
{
    class N
    {
        class N2
        {
        }
    }
}
";

            TestTypeDefinitionDocuments(new[] { source },
                                        ("O", "1.cs"));
        }
        public void Enum()
        {
            string source = @"
enum E
{
}

enum E2
{
    A,
    B
}
";

            TestTypeDefinitionDocuments(new[] { source },
                                        ("E", "1.cs"),
                                        ("E2", "1.cs"));
        }
        public void LineDirectives()
        {
            string source = @"
class C
{
#line 1 ""C.cs""
    void M()
    {
    }
#line default
}

class D
{
#line 1 ""D.cs""
    private int _x = 1;
    private int X { get; set; } = 1;
}

#line 1 ""E.cs""
class E
{
    void M()
    {
    }
}

#line 1 ""F.cs""
class F
{
}
";

            TestTypeDefinitionDocuments(new[] { source },
                                        ("C", "1.cs"),
                                        ("D", "1.cs"),
                                        ("E", "1.cs"),
                                        ("F", "1.cs"));
        }
        public void Interfaces()
        {
            string source1 = @"
interface I1
{
}

partial interface I2
{
    public void F();
}
";
            string source2 = @"
partial interface I2
{
}
";

            TestTypeDefinitionDocuments(new[] { source1, source2 },
                                        ("I1", "1.cs"),
                                        ("I2", "1.cs, 2.cs"));
        }
        public void MultipleClassesAndFiles()
        {
            string source1 = @"
class M
{
    public static void A()
    {
        System.Console.WriteLine();
    }
}

class N
{
}

class O
{
}
";

            string source2 = @"
class C
{
}

class D
{
}
";

            TestTypeDefinitionDocuments(new[] { source1, source2 },
                                        ("N", "1.cs"),
                                        ("O", "1.cs"),
                                        ("C", "2.cs"),
                                        ("D", "2.cs"));
        }