@@ -68,6 +68,47 @@ public async Task<string> CreatePackageWithTargetFramework(string packageName, s
6868 return await CreatePackageWithTargetFrameworkInternal ( nuspecFileFullPath , frameworkVersion ) ;
6969 }
7070
71+ /// <summary>
72+ /// Creates a package with the license expression.
73+ /// </summary>
74+ /// <returns></returns>
75+ public async Task < string > CreatePackageWithLicenseExpression ( string packageName , string packageVersion , string licenseUrl , string licenseExpression )
76+ {
77+ var nuspecHelper = new NuspecHelper ( TestOutputHelper ) ;
78+ var nuspecFileFullPath = await nuspecHelper . CreateDefaultNuspecFile ( packageName , packageVersion , licenseUrl : licenseUrl ) ;
79+ var nuspecDir = Path . GetDirectoryName ( nuspecFileFullPath ) ;
80+
81+ var nupkgFileFullPath = await CreatePackageInternal ( nuspecFileFullPath ) ;
82+ var nuspecFileName = packageName + ".nuspec" ;
83+
84+ NuspecHelper . AddLicenseExpression ( nuspecFileFullPath , licenseExpression ) ;
85+ ReplaceNuspecFileInNupkg ( nupkgFileFullPath , nuspecFileFullPath , nuspecFileName ) ;
86+
87+ return nupkgFileFullPath ;
88+ }
89+
90+ /// <summary>
91+ /// Creates a package with the license file.
92+ /// </summary>
93+ /// <returns></returns>
94+ public async Task < string > CreatePackageWithLicenseFile ( string packageName , string packageVersion , string licenseUrl , string licenseFile , string licenseFileName , string licenseFileContents )
95+ {
96+ var nuspecHelper = new NuspecHelper ( TestOutputHelper ) ;
97+ var nuspecFileFullPath = await nuspecHelper . CreateDefaultNuspecFile ( packageName , packageVersion , licenseUrl : licenseUrl ) ;
98+ var nuspecDir = Path . GetDirectoryName ( nuspecFileFullPath ) ;
99+
100+ var licenseFilePath = GetOrCreateFilePath ( nuspecDir , licenseFileName ) ;
101+ AddFile ( licenseFilePath , licenseFileContents ) ;
102+
103+ var nupkgFileFullPath = await CreatePackageInternal ( nuspecFileFullPath ) ;
104+ var nuspecFileName = packageName + ".nuspec" ;
105+
106+ NuspecHelper . AddLicenseFile ( nuspecFileFullPath , licenseFile ) ;
107+ ReplaceNuspecFileInNupkg ( nupkgFileFullPath , nuspecFileFullPath , nuspecFileName ) ;
108+
109+ return nupkgFileFullPath ;
110+ }
111+
71112 /// <summary>
72113 /// Creates a package which will grow up to a huge size when extracted.
73114 /// </summary>
@@ -140,6 +181,56 @@ internal static void AddLib(string nuspecFileDir, string frameworkVersion)
140181 string source = "using System; namespace CodeDom { public class B {public static int k=7;}}" ;
141182 provider . CompileAssemblyFromSource ( parameters , source ) ;
142183 }
184+
185+ /// <summary>
186+ /// Get the file path given base directory and filename.
187+ /// </summary>
188+ /// <param name="baseDir"></param>
189+ /// <param name="filename"></param>
190+ internal static string GetOrCreateFilePath ( string baseDir , string fileName )
191+ {
192+ var filePath = Path . Combine ( baseDir , @fileName ) ;
193+ var fileDir = Path . GetDirectoryName ( filePath ) ;
194+ if ( ! Directory . Exists ( fileDir ) )
195+ {
196+ Directory . CreateDirectory ( fileDir ) ;
197+ }
198+
199+ return filePath ;
200+ }
201+
202+ /// <summary>
203+ /// Adds the file in the filePath location.
204+ /// </summary>
205+ /// <param name="filePath"></param>
206+ /// <param name="fileContents"></param>
207+ internal static void AddFile ( string filePath , string fileContents )
208+ {
209+ using ( var streamWriter = new StreamWriter ( filePath ) )
210+ {
211+ streamWriter . Write ( fileContents ) ;
212+ streamWriter . Close ( ) ;
213+ }
214+ }
215+
216+ /// <summary>
217+ /// Replace the nuspec file in nupkg.
218+ /// </summary>
219+ /// <param name="nupkgFileFullPath"></param>
220+ /// <param name="nuspecFileFullPath"></param>
221+ /// <param name="nuspecFileName"></param>
222+ internal static void ReplaceNuspecFileInNupkg ( string nupkgFileFullPath , string nuspecFileFullPath , string nuspecFileName )
223+ {
224+ using ( var packageArchive = ZipFile . Open ( nupkgFileFullPath , ZipArchiveMode . Update ) )
225+ {
226+ var nuspecEntry = packageArchive . GetEntry ( nuspecFileName ) ;
227+ if ( nuspecEntry != null )
228+ {
229+ nuspecEntry . Delete ( ) ;
230+ }
231+ packageArchive . CreateEntryFromFile ( nuspecFileFullPath , nuspecFileName ) ;
232+ }
233+ }
143234
144235 private async Task < string > CreatePackageInternal ( string nuspecFileFullPath )
145236 {
0 commit comments