public void AddEntryIndented()
        {
            var data   = @"
    ### Generated by the tool
    ### End of generated by the tool
";
            var writer = new WorkspaceWriter();
            var entry  = new WorkspaceEntry()
            {
                PackageIdentity = new PackageIdentity("remotion.linq", new NuGetVersion(2, 2, 0))
            };

            var result = writer.AddEntry(data, entry, true);

            result = result.Replace("\r", "");

            var tocompare = @"
    ### Generated by the tool
    nuget_package(
        name = ""remotion.linq"",
        package = ""remotion.linq"",
        version = ""2.2.0"",
    )
    ### End of generated by the tool
".Replace("\r", "");

            Assert.Equal(tocompare, result);
        }
        public override async Task <bool> InstallPackageAsync(
            PackageIdentity packageIdentity,
            DownloadResourceResult downloadResourceResult,
            INuGetProjectContext nuGetProjectContext,
            CancellationToken token)
        {
            var dependency = new PackageDependency(packageIdentity.Id, new VersionRange(packageIdentity.Version));

            var json = await GetJsonAsync();

            JsonConfigUtility.AddDependency(json, dependency);
            await SaveJsonAsync(json);

            var packageReader = downloadResourceResult.PackageReader
                                ?? new PackageArchiveReader(downloadResourceResult.PackageStream, leaveStreamOpen: true);
            IAsyncPackageContentReader packageContentReader = packageReader;
            IAsyncPackageCoreReader    packageCoreReader    = packageReader;

            var libItemGroups = await packageContentReader.GetLibItemsAsync(token);

            var referenceItemGroups = await packageContentReader.GetReferenceItemsAsync(token);

            var frameworkReferenceGroups = await packageContentReader.GetFrameworkItemsAsync(token);

            var contentFileGroups = await packageContentReader.GetContentItemsAsync(token);

            var buildFileGroups = await packageContentReader.GetBuildItemsAsync(token);

            var toolItemGroups = await packageContentReader.GetToolItemsAsync(token);

            var depsGroups = await packageContentReader.GetPackageDependenciesAsync(token);

            IEnumerable <FrameworkSpecificGroup> refItemGroups = null;

            if (packageReader is PackageArchiveReader reader)
            {
                refItemGroups = await reader.GetItemsAsync(PackagingConstants.Folders.Ref, token);
            }
            else if (packageReader is PackageFolderReader reader2)
            {
                refItemGroups = await reader2.GetItemsAsync(PackagingConstants.Folders.Ref, token);
            }

            var deps  = (PackageDependencyInfo)NuGetProjectActions.First(x => x.PackageIdentity.Equals(packageIdentity)).PackageIdentity;
            var entry = new WorkspaceEntry(packageIdentity, GetSha(downloadResourceResult.PackageStream),
                                           depsGroups, libItemGroups, toolItemGroups, refItemGroups, _mainFile);

            if (!SdkList.Dlls.Contains(entry.PackageIdentity.Id.ToLower()))
            {
                var workspace = await GetWorkspaceAsync();

                var updater = new WorkspaceWriter();
                var updated = updater.AddEntry(workspace, entry);
                await SaveWorkspaceAsync(updated);
            }

            return(await base.InstallPackageAsync(packageIdentity, downloadResourceResult, nuGetProjectContext, token));
        }
        public virtual async Task AddEntry(WorkspaceEntry entry)
        {
            var workspace = await GetWorkspaceAsync();

            var updater = new WorkspaceWriter();
            var updated = updater.AddEntry(workspace, entry, ProjectConfig.Indent);

            await SaveWorkspaceAsync(updated);
        }
        public override async Task <bool> UninstallPackageAsync(
            PackageIdentity packageIdentity,
            INuGetProjectContext nuGetProjectContext,
            CancellationToken token)
        {
            var json = await GetJsonAsync();

            JsonConfigUtility.RemoveDependency(json, packageIdentity.Id);
            await SaveJsonAsync(json);

            var workspace = await GetWorkspaceAsync();

            var updater = new WorkspaceWriter();
            var updated = updater.RemoveEntry(workspace, packageIdentity.Id);

            await SaveWorkspaceAsync(updated);

            return(await base.UninstallPackageAsync(packageIdentity, nuGetProjectContext, token));
        }
        public void SingleEntry()
        {
            var data    = @"
### Generated by the tool
nuget_package(
   name = ""remotion.linq"",
   package = ""remotion.linq"",
   version = ""2.2.0"",
)
### End of generated by the tool
";
            var writer  = new WorkspaceWriter();
            var section = writer.ExtractSection(data);

            var parser = new WorkspaceParser(section);
            var result = parser.Parse();

            Assert.Single(result);
            var entry = result.First();

            Assert.Equal("remotion.linq", entry.PackageIdentity.Id);
            Assert.Equal("2.2.0", entry.PackageIdentity.Version.ToString());
        }