File: CsiTests.cs
Web Access
Project: src\src\Compilers\Core\MSBuildTaskTests\Microsoft.Build.Tasks.CodeAnalysis.UnitTests.csproj (Microsoft.Build.Tasks.CodeAnalysis.UnitTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
using Xunit;
 
namespace Microsoft.CodeAnalysis.BuildTasks.UnitTests
{
    public sealed class CsiTests
    {
        [Fact]
        public void SingleSource()
        {
            var csi = new Csi();
            csi.Source = MSBuildUtil.CreateTaskItem("test.csx");
            Assert.Equal("/i- test.csx", csi.GenerateResponseFileContents());
        }
 
        [Fact]
        public void Features()
        {
            Action<string> test = (s) =>
            {
                var csi = new Csi();
                csi.Features = s;
                csi.Source = MSBuildUtil.CreateTaskItem("test.csx");
                Assert.Equal("/i- /features:a /features:b test.csx", csi.GenerateResponseFileContents());
            };
 
            test("a;b");
            test("a,b");
            test("a b");
            test(",a;b ");
            test(";a;;b;");
            test(",a,,b,");
        }
 
        [Fact]
        public void FeaturesEmpty()
        {
            foreach (var cur in new[] { "", null })
            {
                var csi = new Csi();
                csi.Features = cur;
                csi.Source = MSBuildUtil.CreateTaskItem("test.csx");
                Assert.Equal("/i- test.csx", csi.GenerateResponseFileContents());
            }
        }
 
        [Fact]
        public void ScriptArguments()
        {
            var csi = new Csi();
            csi.Source = MSBuildUtil.CreateTaskItem("test.csx");
            csi.ScriptArguments = new[] { "-Arg1", "-Arg2" };
            Assert.Equal("/i- test.csx -Arg1 -Arg2", csi.GenerateResponseFileContents());
        }
 
        [Fact]
        public void ScriptArgumentsNeedQuotes()
        {
            var csi = new Csi();
            csi.Source = MSBuildUtil.CreateTaskItem("test.csx");
            csi.ScriptArguments = new[] { @"C:\Some Path\Some File.ini", @"C:\Some Path\Some Other File.bak" };
            Assert.Equal(@"/i- test.csx ""C:\Some Path\Some File.ini"" ""C:\Some Path\Some Other File.bak""", csi.GenerateResponseFileContents());
        }
 
        [Fact]
        public void QuotedScriptArguments()
        {
            var csi = new Csi();
            csi.Source = MSBuildUtil.CreateTaskItem("test.csx");
            csi.ScriptArguments = new[] { @"""C:\Some Path\Some File.ini""", @"""C:\Some Path\Some Other File.bak""" };
            Assert.Equal(@"/i- test.csx ""\""C:\Some Path\Some File.ini\"""" ""\""C:\Some Path\Some Other File.bak\""""", csi.GenerateResponseFileContents());
        }
 
        [Fact]
        public void NoScriptArguments()
        {
            var csi = new Csi();
            csi.Source = MSBuildUtil.CreateTaskItem("test.csx");
            csi.ScriptArguments = null;
            Assert.Equal(@"/i- test.csx", csi.GenerateResponseFileContents());
        }
 
        [Fact]
        public void EmptyScriptArguments()
        {
            var csi = new Csi();
            csi.Source = MSBuildUtil.CreateTaskItem("test.csx");
            csi.ScriptArguments = new string[0];
            Assert.Equal(@"/i- test.csx", csi.GenerateResponseFileContents());
        }
    }
}