File: ParserTests\ResponseFileTests.cs
Web Access
Project: ..\..\..\test\dotnet.Tests\dotnet.Tests.csproj (dotnet.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.DotNet.Cli.Commands.Restore;
using Parser = Microsoft.DotNet.Cli.Parser;
 
namespace Microsoft.DotNet.Tests.ParserTests
{
    public class ResponseFileTests : SdkTest
    {
        public ResponseFileTests(ITestOutputHelper output) : base(output)
        {
        }
 
        [Fact]
        public void Can_safely_expand_response_file_lines()
        {
            var tempFileDir = _testAssetsManager.CreateTestDirectory().Path;
            var tempFilePath = Path.Combine(tempFileDir, "params.rsp");
            var lines = new[] {
                "build",
                "a b",
                "-p:VSTestTestAdapterPath=\".;/opt/buildagent/plugins/dotnet/tools/vstest15\""
            };
            File.WriteAllLines(tempFilePath, lines);
 
            var parseResult = Parser.Parse(new[] { "dotnet", $"@{tempFilePath}" });
 
            var tokens = parseResult.Tokens.Select(t => t.Value);
            var tokenString = string.Join(", ", tokens);
            var bc = (RestoringCommand)Cli.Commands.Build.BuildCommand.FromParseResult(parseResult);
            var tokenized = new[] {
                "build",
                "a b",
                "-p",
                "VSTestTestAdapterPath=\".;/opt/buildagent/plugins/dotnet/tools/vstest15\""
            };
 
            Log.WriteLine($"MSbuild Args are {string.Join(" ", bc.MSBuildArguments)}");
            Log.WriteLine($"Parse Diagram is {parseResult.ToString()}");
            Log.WriteLine($"Token string is {tokenString}");
            tokens.Skip(1).Should().BeEquivalentTo(tokenized);
        }
 
        [Fact]
        public void Can_skip_empty_and_commented_lines()
        {
            var tempFileDir = _testAssetsManager.CreateTestDirectory().Path;
            var tempFilePath = Path.Combine(tempFileDir, "skips.rsp");
            var lines = new[] {
                "build",
                "",
                "  #skip this",
                "run #but don't skip this",
                "# and this"
            };
            File.WriteAllLines(tempFilePath, lines);
 
            var parseResult = Parser.Parse(new[] { "dotnet", $"@{tempFilePath}" });
            var tokens = parseResult.Tokens.Select(t => t.Value);
            var tokenized = new[] {
                "build",
                "run #but don't skip this"
            };
 
            tokens.Skip(1).Should().BeEquivalentTo(tokenized);
        }
    }
}