public void PiecesWithTrailingSlashesAreIgnored() { bool interleaved; bool ignored = !Nupkg.IsValidPartName(Nupkg.GetLogicalPartName("foo.txt/[13].piece/", out interleaved).ToString()); Assert.True(ignored); }
public void PrependsSlash() { bool interleaved; string name = Nupkg.GetLogicalPartName("file1.xml", out interleaved).ToString(); Assert.False(interleaved); Assert.True(name.StartsWith("/", StringComparison.Ordinal)); }
public void UnderstandsNonInterleavedItems() { bool interleaved; string name = Nupkg.GetLogicalPartName("folder1/file1.xml", out interleaved).ToString(); Assert.False(interleaved); Assert.True(name.IndexOf("folder1/file1.xml", StringComparison.Ordinal) > 0); Assert.False(name.EndsWith("/", StringComparison.Ordinal)); }
public void ReturnsNothingForNoFilesAndNoFrameworkReferences() { // Arrange var fakeStream = CreateTestPackageStream(); var fakeNupkg = new Nupkg(fakeStream, leaveOpen: false); // Act var fx = fakeNupkg.GetSupportedFrameworks(); // Assert Assert.Empty(fx); }
public void ExtractTheManifest() { var packageStream = CreateTestPackageStream(); packageStream.Position = 0; // Act using (var nupkg = new Nupkg(packageStream, leaveOpen: false)) { Assert.Equal("TestPackage", nupkg.Metadata.Id); Assert.Equal(SemanticVersion.Parse("0.0.0.1"), nupkg.Metadata.Version); Assert.Equal("Trivial Description", nupkg.Metadata.Description); } }
public void ExtractThePartsList() { var packageStream = CreateTestPackageStream(); packageStream.Position = 0; // Act using (var nupkg = new Nupkg(packageStream, leaveOpen: false)) { var parts = nupkg.Parts; Assert.Contains("/[Content_Types].xml", parts); Assert.Contains("/_rels/.rels", parts); Assert.Contains("/TestPackage.nuspec", parts); Assert.Contains("/content/HelloWorld.cs", parts); } }
public void ReturnsFilePathFrameworksIfPresent(string directoryName, FrameworkName fxName) { // Arrange var fakeStream = CreateTestPackageStream(b => { b.Files.Add(CreateMockPackageFile(@"lib\" + directoryName + @"\file.dll")); }); var fakeNupkg = new Nupkg(fakeStream, leaveOpen: false); // Act var fx = fakeNupkg.GetSupportedFrameworks(); // Assert Assert.Equal(new[] { fxName, }, fx.ToArray()); }
/// <summary> /// Given the nupkg file as a read-write stream with random access (e.g. MemoryStream), /// This will replace the .nuspec file with a new .nuspec generated from /// a) the old .nuspec file /// b) supplied edits /// /// This function leaves readWriteStream open. /// </summary> public static void RewriteNupkgManifest(Stream readWriteStream, IEnumerable <Action <ManifestMetadata> > edits) { if (!readWriteStream.CanRead) { throw new ArgumentException("Must be a readable stream", "readWriteStream"); } if (!readWriteStream.CanWrite) { throw new ArgumentException("Must be a writeable stream", "readWriteStream"); } if (!readWriteStream.CanSeek) { throw new ArgumentException("Must be a seekable stream", "readWriteStream"); } Manifest manifest = Nupkg.SafelyLoadManifest(readWriteStream, leaveOpen: true); foreach (var edit in edits) { edit.Invoke(manifest.Metadata); } using (var newManifestStream = new MemoryStream()) { manifest.Save(newManifestStream); using (var archive = new ZipArchive(readWriteStream, ZipArchiveMode.Update, leaveOpen: true)) { var manifestEntry = archive.Entries.SingleOrDefault(entry => entry.FullName.IndexOf("/", StringComparison.OrdinalIgnoreCase) == -1 && entry.Name.EndsWith(".nuspec", StringComparison.OrdinalIgnoreCase) ); using (var manifestOutputStream = manifestEntry.Open()) { manifestOutputStream.SetLength(0); newManifestStream.Position = 0; newManifestStream.CopyTo(manifestOutputStream); } } } }
public void ExtractTheFilesList() { var packageStream = CreateTestPackageStream(); packageStream.Position = 0; // Act using (var nupkg = new Nupkg(packageStream, leaveOpen: false)) { var files = nupkg.GetFiles(); Assert.DoesNotContain("/_rels/.rels", files); Assert.DoesNotContain("\\_rels\\.rels", files); Assert.DoesNotContain("/[Content_Types].xml", files); Assert.DoesNotContain("\\[Content_Types].xml", files); Assert.DoesNotContain("_rels/.rels", files); Assert.DoesNotContain("_rels\\.rels", files); Assert.DoesNotContain("[Content_Types].xml", files); Assert.Contains("TestPackage.nuspec", files); Assert.Contains("content\\HelloWorld.cs", files); } }
public static void CanRewriteTheNuspecInANupkg() { var packageStream = CreateTestPackageStream(); // Act NupkgRewriter.RewriteNupkgManifest(packageStream, new List <Action <ManifestMetadata> > { (metadata) => { metadata.Authors = "Me and You"; }, (metadata) => { metadata.Tags = "Peas In A Pod"; }, }); // Assert using (var nupkg = new Nupkg(packageStream, leaveOpen: false)) { Assert.Equal("TestPackage", nupkg.Metadata.Id); Assert.Equal(SemanticVersion.Parse("0.0.0.1"), nupkg.Metadata.Version); Assert.Equal("Me and You", string.Join(" ", nupkg.Metadata.Authors)); Assert.Equal("Peas In A Pod", nupkg.Metadata.Tags); } }
public static void CanRewriteTheNuspecInANupkg() { var packageStream = CreateTestPackageStream(); // Act NupkgRewriter.RewriteNupkgManifest(packageStream, new List<Action<ManifestMetadata>> { (metadata) => { metadata.Authors = "Me and You"; }, (metadata) => { metadata.Tags = "Peas In A Pod"; }, }); // Assert using (var nupkg = new Nupkg(packageStream, leaveOpen: false)) { Assert.Equal("TestPackage", nupkg.Metadata.Id); Assert.Equal(SemanticVersion.Parse("0.0.0.1"), nupkg.Metadata.Version); Assert.Equal("Me and You", string.Join(" ", nupkg.Metadata.Authors)); Assert.Equal("Peas In A Pod", nupkg.Metadata.Tags); } }
public void ReturnsFrameworkAssemblyReferenceFrameworksIfNoFileFrameworks() { // Arrange var fakeStream = CreateTestPackageStream(b => { b.FrameworkReferences.Add(new FrameworkAssemblyReference("foo", new[] { VersionUtility.ParseFrameworkName("net45"), VersionUtility.ParseFrameworkName("sl-wp70") })); }); var fakeNupkg = new Nupkg(fakeStream, leaveOpen: false); // Act var fx = fakeNupkg.GetSupportedFrameworks(); // Assert Assert.Equal(new[] { new FrameworkName(".NETFramework, Version=4.5"), new FrameworkName("Silverlight, Version=v0.0, Profile=wp70") }, fx.ToArray()); }
public void ReturnsUnionOfFrameworkReferenceAndFileFrameworks() { // Arrange var fakeStream = CreateTestPackageStream(b => { b.Files.Add(CreateMockPackageFile(@"lib\net40\file.dll")); b.Files.Add(CreateMockPackageFile(@"lib\win\file.dll")); b.FrameworkReferences.Add(new FrameworkAssemblyReference("Windows", new[] { new FrameworkName("Windows, Version=0.0") })); b.FrameworkReferences.Add(new FrameworkAssemblyReference("System.Net.Http", new[] { new FrameworkName(".NETFramework, Version=2.0") })); }); var fakeNupkg = new Nupkg(fakeStream, leaveOpen: false); // Act var fx = fakeNupkg.GetSupportedFrameworks(); // Assert Assert.Equal(new[] { new FrameworkName("Windows, Version=0.0"), new FrameworkName(".NETFramework, Version=2.0"), new FrameworkName(".NETFramework, Version=4.0"), }, fx.ToArray()); }
public void PartsWithTrailingSlashesAreIgnored() { bool valid = Nupkg.IsValidPartName("/content/"); Assert.False(valid); }
public void ConvertsBackSlashesToSlashes() { var canon = Nupkg.CanonicalName(@"Dir1\Dir2\foo.txt"); Assert.Equal("Dir1/Dir2/foo.txt", canon); }
public void RemovesLeadingBackSlashes() { var canon = Nupkg.CanonicalName(@"\foo.txt"); Assert.Equal("foo.txt", canon); }
public void PartsWithDotOnlyISegmentsAreIgnored(string logicalPartName) { bool valid = Nupkg.IsValidPartName(logicalPartName); Assert.False(valid); }
public void LegitPartNamesAreAccepted(string logicalPartName) { bool valid = Nupkg.IsValidPartName(logicalPartName); Assert.True(valid); }
public void EmptyPartNamesAreIgnored() { bool valid = Nupkg.IsValidPartName("/"); Assert.False(valid); }