File: Helpers.cs
Web Access
Project: src\src\Microsoft.DotNet.ApiCompat\tests\Microsoft.DotNet.ApiCompat.Tests.csproj (Microsoft.DotNet.ApiCompat.Tests)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
 
namespace Microsoft.DotNet.ApiCompat.Tests
{
    public static class Helpers
    {
        public static string RunApiCompat(string left, string rightDirs) => RunApiCompat(left, rightDirs, null, null);
 
        public static string RunApiCompat(string left, string rightDirs, string leftName, string rightName) => RunApiCompat(left, new string[] { rightDirs }, Enumerable.Empty<string>(), leftName, rightName);
 
        public static string RunApiCompat(string left, IEnumerable<string> rightDirs, IEnumerable<string> excludeAttributesFile, string leftName, string rightName)
        {
            using var writer = new StringWriter();
 
            var args = GetApiCompatArgs(left, rightDirs, excludeAttributesFile, leftName, rightName);
            new ApiCompatRunner(writer).Run(args);
 
            return writer.ToString();
        }
 
        private static string[] GetApiCompatArgs(string left, IEnumerable<string> rightDirs, IEnumerable<string> excludeAttributesFiles, string leftName, string rightName)
        {
            string frameworkRuntimePath = Path.GetDirectoryName(typeof(object).Assembly.Location);
            List<string> args = new List<string>()
            {
                left,
                "-i",
                $"{string.Join(";", rightDirs.ToArray())};{frameworkRuntimePath}",
                "--contract-depends",
                frameworkRuntimePath
            };
 
            if (!string.IsNullOrEmpty(leftName))
            {
                args.Add("-l");
                args.Add(leftName);
            }
 
            if (!string.IsNullOrEmpty(rightName))
            {
                args.Add("-r");
                args.Add(rightName);
            }
 
            if (excludeAttributesFiles.Count() > 0)
            {
                args.Add("--exclude-attributes");
                args.Add(string.Join(";", excludeAttributesFiles));
            }
 
            return args.ToArray();
        }
    }
}