public static void GenerateWhenSourceGetterIsNotPublic()
        {
            var(diagnostics, output) = MapToGeneratorTests.GetGeneratedOutput(
                @"using InlineMapping;

public class Destination 
{ 
	public string Id { get; set; }
}

[MapTo(typeof(Destination))]
public class Source 
{ 
	public string Id { private get; set; }
}");

            Assert.Multiple(() =>
            {
                Assert.That(diagnostics.Length, Is.EqualTo(2));
                Assert.That(() => diagnostics.Single(_ => _.Id == NoPropertyMapsFoundDescriptorConstants.Id), Throws.Nothing);
                var noMatchMessage = diagnostics.Single(_ => _.Id == NoMatchDescriptorConstants.Id).GetMessage();
                Assert.That(noMatchMessage, Contains.Substring("Id"));
                Assert.That(noMatchMessage, Contains.Substring("destination type Destination"));
                Assert.That(output, Is.EqualTo(string.Empty));
            });
        }
        public static void GenerateWhenDestinationIsNotInSourceNamespace()
        {
            var(diagnostics, output) = MapToGeneratorTests.GetGeneratedOutput(
                @"using InlineMapping;

namespace DestinationNamespace
{
	public class Destination 
	{ 
		public string Id { get; set; }
	}
}

namespace SourceNamespace
{
	[MapTo(typeof(DestinationNamespace.Destination)]
	public class Source 
	{ 
		public string Id { get; set; }
	}
}");

            Assert.Multiple(() =>
            {
                Assert.That(diagnostics.Length, Is.EqualTo(0));
                Assert.That(output, Does.Contain("using DestinationNamespace;"));
                Assert.That(output, Does.Contain("namespace SourceNamespace"));
                Assert.That(output, Does.Contain("Id = self.Id,"));
            });
        }
        public static void GenerateWithClasses()
        {
            var(diagnostics, output) = MapToGeneratorTests.GetGeneratedOutput(
                @"using InlineMapping;

public class Destination 
{ 
	public string Id { get; set; }
}

[MapTo(typeof(Destination))]
public class Source 
{ 
	public string Id { get; set; }
}");

            Assert.Multiple(() =>
            {
                Assert.That(diagnostics.Length, Is.EqualTo(0));
                Assert.That(output, Does.Not.Contain("namespace"));
                Assert.That(output, Does.Contain("using System;"));
                Assert.That(output, Does.Contain("public static Destination MapToDestination(this Source self) =>"));
                Assert.That(output, Does.Contain("self is null ? throw new ArgumentNullException(nameof(self)) :"));
                Assert.That(output, Does.Contain("Id = self.Id,"));
            });
        }
        public static void GenerateWhenNoPropertiesExist()
        {
            var(diagnostics, output) = MapToGeneratorTests.GetGeneratedOutput(
                @"using InlineMapping;

public class Destination { }

[MapTo(typeof(Destination))]
public class Source { }");

            Assert.Multiple(() =>
            {
                Assert.That(diagnostics.Length, Is.EqualTo(1));
                Assert.That(diagnostics[0].Id, Is.EqualTo(NoPropertyMapsFoundDescriptorConstants.Id));
                Assert.That(output, Is.EqualTo(string.Empty));
            });
        }