mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 19:04:51 +08:00
Updating NuGet integration
Using latest version Namespace change from NuPack to NuGet Adding tests for package creation --HG-- branch : nuget extra : transplant_source : H%D0%91G%21%E4%22x%00%B6eX%8E%98%04%FE%2B%B57%28
This commit is contained in:
@@ -1 +1 @@
|
||||
230ef1360257ef0ac622f6e85a94323ef2e49cae external/nupack
|
||||
349ebd349ca931cb634439e10a7916ab307ab596 external/nupack
|
||||
|
@@ -122,10 +122,12 @@
|
||||
</Reference>
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="CodeGeneration\Commands\CodeGenerationCommandsTests.cs" />
|
||||
<Compile Include="DatabaseEnabledTestsBase.cs" />
|
||||
<Compile Include="Packaging\PackageBuilderTests.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Roles\Controllers\AdminControllerTests.cs" />
|
||||
<Compile Include="Roles\Services\RoleServiceTests.cs" />
|
||||
@@ -158,6 +160,10 @@
|
||||
<Project>{17F86780-9A1F-4AA1-86F1-875EEC2730C7}</Project>
|
||||
<Name>Orchard.Modules</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Orchard.Web\Modules\Orchard.Packaging\Orchard.Packaging.csproj">
|
||||
<Project>{DFD137A2-DDB5-4D22-BE0D-FA9AD4C8B059}</Project>
|
||||
<Name>Orchard.Packaging</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Orchard.Web\Modules\Orchard.Roles\Orchard.Roles.csproj">
|
||||
<Project>{D10AD48F-407D-4DB5-A328-173EC7CB010F}</Project>
|
||||
<Name>Orchard.Roles</Name>
|
||||
@@ -200,7 +206,9 @@
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="Packaging\Hello.World.csproj.txt" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
77
src/Orchard.Tests.Modules/Packaging/PackageBuilderTests.cs
Normal file
77
src/Orchard.Tests.Modules/Packaging/PackageBuilderTests.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.IO.Packaging;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Autofac;
|
||||
using NUnit.Framework;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Environment.Extensions.Models;
|
||||
using Orchard.FileSystems.WebSite;
|
||||
using Orchard.Packaging.Services;
|
||||
using Orchard.Tests.Stubs;
|
||||
|
||||
namespace Orchard.Tests.Modules.Packaging {
|
||||
[TestFixture]
|
||||
public class PackageBuilderTests : ContainerTestBase {
|
||||
protected override void Register(Autofac.ContainerBuilder builder) {
|
||||
builder.RegisterType<PackageBuilder>().As<IPackageBuilder>();
|
||||
builder.RegisterType<InMemoryWebSiteFolder>().As<IWebSiteFolder>()
|
||||
.As<InMemoryWebSiteFolder>().InstancePerLifetimeScope();
|
||||
}
|
||||
|
||||
private Stream BuildHelloWorld(IPackageBuilder packageBuilder) {
|
||||
return packageBuilder.BuildPackage(new ExtensionDescriptor {
|
||||
ExtensionType = "Module",
|
||||
Name = "Hello.World",
|
||||
Version = "1.0",
|
||||
Description = "a",
|
||||
Author = "b"
|
||||
});
|
||||
}
|
||||
[Test]
|
||||
public void PackageForModuleIsOpcPackage() {
|
||||
var packageBuilder = _container.Resolve<IPackageBuilder>();
|
||||
var stream = BuildHelloWorld(packageBuilder);
|
||||
|
||||
var package = Package.Open(stream);
|
||||
Assert.That(package, Is.Not.Null);
|
||||
Assert.That(package.PackageProperties.Identifier, Is.EqualTo("Orchard.Module.Hello.World"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void PropertiesPassThroughAsExpected() {
|
||||
var packageBuilder = _container.Resolve<IPackageBuilder>();
|
||||
var stream = BuildHelloWorld(packageBuilder);
|
||||
|
||||
var package = Package.Open(stream);
|
||||
Assert.That(package.PackageProperties.Description, Is.EqualTo("a"));
|
||||
Assert.That(package.PackageProperties.Creator, Is.EqualTo("b"));
|
||||
Assert.That(package.PackageProperties.Version, Is.EqualTo("1.0"));
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void ProjectFileIsAdded() {
|
||||
var packageBuilder = _container.Resolve<IPackageBuilder>();
|
||||
var folder = _container.Resolve<InMemoryWebSiteFolder>();
|
||||
string content;
|
||||
using (var sourceStream = GetType().Assembly.GetManifestResourceStream(GetType(), "Hello.World.csproj.txt")) {
|
||||
content = new StreamReader(sourceStream).ReadToEnd();
|
||||
}
|
||||
folder.AddFile("~/Modules/Hello.World/Hello.World.csproj", content);
|
||||
|
||||
var stream = BuildHelloWorld(packageBuilder);
|
||||
|
||||
var package = Package.Open(stream);
|
||||
var projectUri = PackUriHelper.CreatePartUri(new Uri("/Content/Modules/Hello.World/Hello.World.csproj", UriKind.Relative));
|
||||
var projectPart = package.GetPart(projectUri);
|
||||
using (var projectStream = projectPart.GetStream()) {
|
||||
var projectContent = new StreamReader(projectStream).ReadToEnd();
|
||||
Assert.That(projectContent, Is.EqualTo(content));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -245,6 +245,7 @@
|
||||
<Compile Include="Mvc\Routes\UrlPrefixTests.cs" />
|
||||
<Compile Include="Records\BigRecord.cs" />
|
||||
<Compile Include="Scripting\ScriptingTests.cs" />
|
||||
<Compile Include="Stubs\InMemoryWebSiteFolder.cs" />
|
||||
<Compile Include="Stubs\StubWorkContextAccessor.cs" />
|
||||
<Compile Include="Stubs\StubExtensionManager.cs" />
|
||||
<Compile Include="Stubs\StubReportsCoordinator.cs" />
|
||||
|
57
src/Orchard.Tests/Stubs/InMemoryWebSiteFolder.cs
Normal file
57
src/Orchard.Tests/Stubs/InMemoryWebSiteFolder.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Orchard.Caching;
|
||||
using Orchard.FileSystems.WebSite;
|
||||
|
||||
namespace Orchard.Tests.Stubs {
|
||||
public class InMemoryWebSiteFolder : IWebSiteFolder {
|
||||
Dictionary<string, string> _contents = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
public void AddFile(string virtualPath, string contents) {
|
||||
_contents[Canonical(virtualPath)] = contents;
|
||||
}
|
||||
|
||||
private string Canonical(string virtualPath) {
|
||||
return virtualPath.Replace("\\", "/");
|
||||
}
|
||||
|
||||
public IEnumerable<string> ListDirectories(string virtualPath) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public IEnumerable<string> ListFiles(string virtualPath, bool recursive) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public bool FileExists(string virtualPath) {
|
||||
return _contents.ContainsKey(virtualPath);
|
||||
}
|
||||
|
||||
public string ReadFile(string virtualPath) {
|
||||
string value;
|
||||
return _contents.TryGetValue(Canonical(virtualPath), out value) ? value : null;
|
||||
}
|
||||
|
||||
public string ReadFile(string virtualPath, bool actualContent) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void CopyFileTo(string virtualPath, Stream destination) {
|
||||
string value;
|
||||
if (_contents.TryGetValue(Canonical(virtualPath), out value)) {
|
||||
var bytes = Encoding.Default.GetBytes(value);
|
||||
destination.Write(bytes, 0, bytes.Length);
|
||||
}
|
||||
}
|
||||
|
||||
public void CopyFileTo(string virtualPath, Stream destination, bool actualContent) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public IVolatileToken WhenPathChanges(string virtualPath) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
@@ -4,21 +4,17 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Mime;
|
||||
using System.Reflection;
|
||||
using System.Web;
|
||||
using System.Web.Hosting;
|
||||
using System.Xml.Linq;
|
||||
using NuPack;
|
||||
using NuGet;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Environment.Extensions.Models;
|
||||
using Orchard.FileSystems.WebSite;
|
||||
|
||||
using NuPack_PackageBuilder = NuPack.PackageBuilder;
|
||||
using NuPack_IPackageBuilder = NuPack.IPackageBuilder;
|
||||
using NuGetPackageBuilder = NuGet.PackageBuilder;
|
||||
|
||||
namespace Orchard.Packaging.Services {
|
||||
[OrchardFeature("PackagingServices")]
|
||||
public class PackageBuilder : IPackageBuilder {
|
||||
private readonly IExtensionManager _extensionManager;
|
||||
private readonly IWebSiteFolder _webSiteFolder;
|
||||
|
||||
private static readonly string[] _ignoredThemeExtensions = new[] {
|
||||
@@ -34,8 +30,7 @@ namespace Orchard.Packaging.Services {
|
||||
_ignoredThemeExtensions.Contains(Path.GetExtension(filePath) ?? "");
|
||||
}
|
||||
|
||||
public PackageBuilder(IExtensionManager extensionManager, IWebSiteFolder webSiteFolder) {
|
||||
_extensionManager = extensionManager;
|
||||
public PackageBuilder(IWebSiteFolder webSiteFolder) {
|
||||
_webSiteFolder = webSiteFolder;
|
||||
}
|
||||
|
||||
@@ -72,7 +67,7 @@ namespace Orchard.Packaging.Services {
|
||||
|
||||
|
||||
private void SetCoreProperties(CreateContext context, ExtensionDescriptor extensionDescriptor) {
|
||||
context.Builder.Id = extensionDescriptor.Name;
|
||||
context.Builder.Id = "Orchard." + extensionDescriptor.ExtensionType + "." + extensionDescriptor.Name;
|
||||
context.Builder.Version = new Version(extensionDescriptor.Version);
|
||||
context.Builder.Title = extensionDescriptor.DisplayName ?? extensionDescriptor.Name;
|
||||
context.Builder.Description = extensionDescriptor.Description;
|
||||
@@ -140,7 +135,8 @@ namespace Orchard.Packaging.Services {
|
||||
|
||||
|
||||
private static void BeginPackage(CreateContext context) {
|
||||
context.Builder = new NuPack_PackageBuilder();
|
||||
context.Stream = new MemoryStream();
|
||||
context.Builder = new NuGetPackageBuilder();
|
||||
}
|
||||
|
||||
private static void EstablishPaths(CreateContext context, IWebSiteFolder webSiteFolder, string locationPath, string moduleName, string moduleType) {
|
||||
@@ -151,7 +147,7 @@ namespace Orchard.Packaging.Services {
|
||||
else {
|
||||
context.SourcePath = "~/Modules/" + moduleName + "/";
|
||||
}
|
||||
context.TargetPath = "\\" + moduleName + "\\";
|
||||
context.TargetPath = "\\Content\\Modules\\" + moduleName + "\\";
|
||||
}
|
||||
|
||||
private static bool LoadProject(CreateContext context, string relativePath) {
|
||||
@@ -164,13 +160,15 @@ namespace Orchard.Packaging.Services {
|
||||
}
|
||||
|
||||
private static void EmbedVirtualFile(CreateContext context, string relativePath, string contentType) {
|
||||
var file = new VirtualPackageFile(context.SourceFolder, context.SourcePath + relativePath);
|
||||
var file = new VirtualPackageFile(
|
||||
context.SourceFolder,
|
||||
context.SourcePath + relativePath,
|
||||
context.TargetPath + relativePath);
|
||||
context.Builder.Files.Add(file);
|
||||
}
|
||||
|
||||
|
||||
private static void EndPackage(CreateContext context) {
|
||||
context.Stream = new MemoryStream();
|
||||
context.Builder.Save(context.Stream);
|
||||
}
|
||||
|
||||
@@ -178,9 +176,7 @@ namespace Orchard.Packaging.Services {
|
||||
|
||||
private class CreateContext {
|
||||
public Stream Stream { get; set; }
|
||||
//public Package Package { get; set; }
|
||||
//public Manifest Manifest { get; set; }
|
||||
public NuPack_PackageBuilder Builder { get; set; }
|
||||
public NuGetPackageBuilder Builder { get; set; }
|
||||
|
||||
public IWebSiteFolder SourceFolder { get; set; }
|
||||
public string SourcePath { get; set; }
|
||||
@@ -195,18 +191,21 @@ namespace Orchard.Packaging.Services {
|
||||
#region Nested type: CreateContext
|
||||
|
||||
private class VirtualPackageFile : IPackageFile {
|
||||
private readonly IWebSiteFolder _sourceFolder;
|
||||
private readonly IWebSiteFolder _webSiteFolder;
|
||||
private readonly string _virtualPath;
|
||||
private readonly string _packagePath;
|
||||
|
||||
public VirtualPackageFile(IWebSiteFolder sourceFolder, string path) {
|
||||
Path = path;
|
||||
_sourceFolder = sourceFolder;
|
||||
public VirtualPackageFile(IWebSiteFolder webSiteFolder, string virtualPath, string packagePath) {
|
||||
_webSiteFolder = webSiteFolder;
|
||||
_virtualPath = virtualPath;
|
||||
_packagePath = packagePath;
|
||||
}
|
||||
|
||||
public string Path { get; private set; }
|
||||
public string Path { get { return _packagePath; } }
|
||||
|
||||
public Stream GetStream() {
|
||||
var stream = new MemoryStream();
|
||||
_sourceFolder.CopyFileTo(Path, stream);
|
||||
_webSiteFolder.CopyFileTo(_virtualPath, stream);
|
||||
stream.Seek(0, SeekOrigin.Begin);
|
||||
return stream;
|
||||
}
|
||||
|
Reference in New Issue
Block a user