@@ -17,6 +17,16 @@ import {
1717 parseCompressionFormat ,
1818} from '../../../src/utils/compression'
1919
20+ const hasLzmaNative = ( ) : boolean => {
21+ try {
22+ require . resolve ( 'lzma-native' )
23+
24+ return true
25+ } catch {
26+ return false
27+ }
28+ }
29+
2030const toBuffer = async ( stream : NodeJS . ReadableStream ) : Promise < Buffer > => {
2131 const chunks : Buffer [ ] = [ ]
2232
@@ -37,6 +47,9 @@ const expectStreamToFail = async (stream: NodeJS.ReadableStream): Promise<void>
3747}
3848
3949describe ( 'compression utils' , ( ) => {
50+ const xzAvailable = hasLzmaNative ( )
51+ const itIfXzAvailable = xzAvailable ? it : it . skip
52+
4053 const tempDirs : string [ ] = [ ]
4154
4255 const createTempFile = ( name : string , data : Buffer ) : string => {
@@ -169,7 +182,7 @@ describe('compression utils', () => {
169182 expect ( decompressed . equals ( input ) ) . to . equal ( true )
170183 } )
171184
172- it ( 'round-trips data with xz streams' , async ( ) => {
185+ itIfXzAvailable ( 'round-trips data with xz streams' , async ( ) => {
173186 const input = Buffer . from ( 'nostream-xz-test\n' . repeat ( 2048 ) , 'utf-8' )
174187
175188 const compressed = await toBuffer (
@@ -244,7 +257,7 @@ describe('compression utils', () => {
244257 )
245258 } )
246259
247- it ( 'fails to decompress invalid xz payloads' , async ( ) => {
260+ itIfXzAvailable ( 'fails to decompress invalid xz payloads' , async ( ) => {
248261 const invalidPayload = Buffer . from ( 'not-an-xz-stream' , 'utf-8' )
249262
250263 await expectStreamToFail (
@@ -254,7 +267,9 @@ describe('compression utils', () => {
254267
255268 it ( 'round-trips binary payloads across boundary sizes' , async ( ) => {
256269 const sizes = [ 0 , 1 , 2 , 31 , 32 , 33 , 1024 , 8192 ]
257- const formats = [ CompressionFormat . GZIP , CompressionFormat . XZ ]
270+ const formats = xzAvailable
271+ ? [ CompressionFormat . GZIP , CompressionFormat . XZ ]
272+ : [ CompressionFormat . GZIP ]
258273
259274 for ( const size of sizes ) {
260275 const input = Buffer . alloc ( size )
0 commit comments