33// See the LICENSE file in the project root for more information.
44// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone
55
6+ using System . IO . Compression ;
7+
68namespace UnitTest . Services ;
79
810public class ZipArchiveServiceTest : BootstrapBlazorTestBase
@@ -22,10 +24,15 @@ public async Task Archive_Ok()
2224 using var fs = File . OpenWrite ( f ) ;
2325 fs . WriteByte ( 65 ) ;
2426 } ) ;
25- var stream = await archService . ArchiveAsync ( files ) ;
27+ var items = files . Select ( i => new ArchiveEntry ( )
28+ {
29+ SourceFileName = i ,
30+ EntryName = Path . GetFileName ( i )
31+ } ) ;
32+ var stream = await archService . ArchiveAsync ( items ) ;
2633 Assert . NotNull ( stream ) ;
2734
28- stream = await archService . ArchiveAsync ( files , new ArchiveOptions ( )
35+ stream = await archService . ArchiveAsync ( items , new ArchiveOptions ( )
2936 {
3037 CompressionLevel = System . IO . Compression . CompressionLevel . Optimal ,
3138 Encoding = System . Text . Encoding . UTF8 ,
@@ -35,7 +42,7 @@ public async Task Archive_Ok()
3542 Assert . NotNull ( stream ) ;
3643
3744 var archiveFile = Path . Combine ( root , "test.zip" ) ;
38- await archService . ArchiveAsync ( archiveFile , files ) ;
45+ await archService . ArchiveAsync ( archiveFile , items ) ;
3946 Assert . True ( File . Exists ( archiveFile ) ) ;
4047
4148 // GetEntry
@@ -48,7 +55,7 @@ public async Task Archive_Ok()
4855 {
4956 Directory . Delete ( destFolder , true ) ;
5057 }
51- archService . ExtractToDirectory ( archiveFile , destFolder ) ;
58+ await archService . ExtractToDirectoryAsync ( archiveFile , destFolder ) ;
5259 Assert . True ( Directory . Exists ( destFolder ) ) ;
5360
5461 // 删除文件夹
@@ -70,32 +77,83 @@ public async Task Archive_Ok()
7077 {
7178 File . Delete ( destFile ) ;
7279 }
73- await archService . ArchiveDirectory ( destFile , destFolder , includeBaseDirectory : true ) ;
80+ await archService . ArchiveDirectoryAsync ( destFile , destFolder , includeBaseDirectory : true ) ;
7481 Assert . True ( File . Exists ( destFile ) ) ;
7582 File . Delete ( destFile ) ;
7683
77- await Assert . ThrowsAsync < ArgumentNullException > ( ( ) => archService . ArchiveDirectory ( null ! , destFolder , includeBaseDirectory : true ) ) ;
84+ await Assert . ThrowsAsync < ArgumentNullException > ( ( ) => archService . ArchiveDirectoryAsync ( null ! , destFolder , includeBaseDirectory : true ) ) ;
85+ }
7886
79- // 测试压缩多个文件夹
80- var entries = new List < string > ( )
87+ [ Fact ]
88+ public async Task ZipArchive_Ok ( )
89+ {
90+ var fileName = Path . Combine ( AppContext . BaseDirectory , "test" , "3.zip" ) ;
91+ if ( File . Exists ( fileName ) )
8192 {
82- destFolder ,
83- tempFolder ,
84- } ;
85- entries . AddRange ( files ) ;
93+ File . Delete ( fileName ) ;
94+ }
8695
87- destFile = Path . Combine ( root , "folder.zip" ) ;
88- if ( File . Exists ( destFile ) )
96+ using var fs = File . OpenWrite ( fileName ) ;
97+ using var zip = new ZipArchive ( fs , ZipArchiveMode . Create ) ;
98+
99+ var item = Path . Combine ( AppContext . BaseDirectory , "test" , "1.txt" ) ;
100+ zip . CreateEntry ( "text/" ) ;
101+ await zip . CreateEntryFromFileAsync ( item , "text/1.txt" ) ;
102+ }
103+
104+ [ Fact ]
105+ public async Task ArchiveAsync_Ok ( )
106+ {
107+ var fileName = Path . Combine ( AppContext . BaseDirectory , "archive_test" , "test.zip" ) ;
108+ if ( File . Exists ( fileName ) )
89109 {
90- File . Delete ( destFile ) ;
110+ File . Delete ( fileName ) ;
91111 }
92- Assert . False ( File . Exists ( destFile ) ) ;
93- var subFolder = Path . Combine ( tempFolder , "sub" ) ;
94- if ( ! Directory . Exists ( subFolder ) )
112+
113+ var root = AppContext . BaseDirectory ;
114+ var files = new string [ ]
95115 {
96- Directory . CreateDirectory ( subFolder ) ;
97- }
98- await archService . ArchiveDirectory ( destFile , entries ) ;
99- Assert . True ( File . Exists ( destFile ) ) ;
116+ Path . Combine ( root , "archive_test" , "test1" , "1.txt" ) ,
117+ Path . Combine ( root , "archive_test" , "test2" , "2.txt" )
118+ } ;
119+ files . ToList ( ) . ForEach ( f =>
120+ {
121+ var folder = Path . GetDirectoryName ( f ) ;
122+ if ( ! string . IsNullOrEmpty ( folder ) && ! Directory . Exists ( folder ) )
123+ {
124+ Directory . CreateDirectory ( folder ) ;
125+ }
126+ using var fs = File . OpenWrite ( f ) ;
127+ fs . WriteByte ( 65 ) ;
128+ } ) ;
129+
130+ var archService = Context . Services . GetRequiredService < IZipArchiveService > ( ) ;
131+ await archService . ArchiveAsync ( fileName , new List < ArchiveEntry > ( )
132+ {
133+ new ArchiveEntry ( )
134+ {
135+ SourceFileName = files [ 0 ] ,
136+ EntryName = "test1/test.log"
137+ } ,
138+ new ArchiveEntry ( )
139+ {
140+ SourceFileName = files [ 1 ] ,
141+ EntryName = "test2/test.log" ,
142+ CompressionLevel = CompressionLevel . Optimal
143+ } ,
144+ new ArchiveEntry ( )
145+ {
146+ SourceFileName = Path . Combine ( AppContext . BaseDirectory , "archive_test" , "test1" ) ,
147+ EntryName = "test1" ,
148+ } ,
149+ new ArchiveEntry ( )
150+ {
151+ SourceFileName = Path . Combine ( AppContext . BaseDirectory , "archive_test" , "test1" ) ,
152+ EntryName = "test2" ,
153+ CompressionLevel = CompressionLevel . Optimal
154+ }
155+ } ) ;
156+
157+ Assert . True ( File . Exists ( fileName ) ) ;
100158 }
101159}
0 commit comments