public void IgnoresImplicitlyDefinedVariables()
        {
            var generatedFile = Path.Combine(_tempDir, "deps.props");
            var csproj        = Path.Combine(_tempDir, "test.csproj");

            File.WriteAllText(csproj, $@"
<Project Sdk=`Microsoft.NET.Sdk`>
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
</Project>".Replace('`', '"'));

            var task = new GenerateDependenciesPropsFile
            {
                BuildEngine      = new MockEngine(_output),
                DependenciesFile = generatedFile,
                Projects         = new[] { new TaskItem(csproj) },
                Properties       = Array.Empty <string>(),
            };

            Assert.True(task.Execute(), "Task is expected to pass");
            var depsFile = ProjectRootElement.Open(generatedFile);

            _output.WriteLine(File.ReadAllText(generatedFile));
            var pg = Assert.Single(depsFile.PropertyGroups, p => p.Label == DependencyVersionsFile.AutoPackageVersionsLabel);

            Assert.Empty(pg.Properties);
        }
        public void DoesNotFailWhenConflictingVersionsAreSuppressed()
        {
            var generatedFile = Path.Combine(_tempDir, "deps.props");
            var csproj1       = Path.Combine(_tempDir, "test1.csproj");
            var csproj2       = Path.Combine(_tempDir, "test2.csproj");

            CreateProject(csproj1, "1.2.3");

            File.WriteAllText(csproj2, $@"
<Project Sdk=`Microsoft.NET.Sdk`>
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include=`MyDependency` Version=`4.5.6` NoWarn=`KRB4002` />
  </ItemGroup>
</Project>".Replace('`', '"'));

            var task = new GenerateDependenciesPropsFile
            {
                BuildEngine      = new MockEngine(_output),
                DependenciesFile = generatedFile,
                Projects         = new[] { new TaskItem(csproj1), new TaskItem(csproj2) },
                Properties       = Array.Empty <string>(),
            };

            Assert.True(task.Execute(), "Task is expected to oass");
        }
        public void FailsWhenConflictingVersions()
        {
            var generatedFile = Path.Combine(_tempDir, "deps.props");
            var csproj1       = Path.Combine(_tempDir, "test1.csproj");
            var csproj2       = Path.Combine(_tempDir, "test2.csproj");

            CreateProject(csproj1, "1.2.3");
            CreateProject(csproj2, "4.5.6");

            var engine = new MockEngine(_output)
            {
                ContinueOnError = true
            };
            var task = new GenerateDependenciesPropsFile
            {
                BuildEngine      = engine,
                DependenciesFile = generatedFile,
                Projects         = new[] { new TaskItem(csproj1), new TaskItem(csproj2) },
                Properties       = Array.Empty <string>(),
            };

            Assert.False(task.Execute(), "Task is expected to fail");
            Assert.Single(engine.Errors, e => e.Code == KoreBuildErrors.Prefix + KoreBuildErrors.ConflictingPackageReferenceVersions);
        }
        public void GeneratesVariableName()
        {
            var generatedFile = Path.Combine(_tempDir, "deps.props");
            var csproj        = Path.Combine(_tempDir, "test.csproj");

            CreateProject(csproj, "1.2.3");

            var task = new GenerateDependenciesPropsFile
            {
                BuildEngine      = new MockEngine(_output),
                DependenciesFile = generatedFile,
                Projects         = new[] { new TaskItem(csproj) },
                Properties       = Array.Empty <string>(),
            };

            Assert.True(task.Execute(), "Task is expected to pass");
            var depsFile = ProjectRootElement.Open(generatedFile);

            _output.WriteLine(File.ReadAllText(generatedFile));
            var pg   = Assert.Single(depsFile.PropertyGroups, p => p.Label == DependencyVersionsFile.AutoPackageVersionsLabel);
            var prop = Assert.Single(pg.Properties, p => p.Name == "MyDependencyPackageVersion");

            Assert.Equal("1.2.3", prop.Value);
        }