| /* |
| * Copyright (C) 2022 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| import {UnitTestUtils} from 'test/unit/utils'; |
| import {FileUtils} from './file_utils'; |
| |
| describe('FileUtils', () => { |
| it('extracts file extensions', () => { |
| expect(FileUtils.getFileExtension('winscope.zip')).toEqual('zip'); |
| expect(FileUtils.getFileExtension('win.scope.zip')).toEqual('zip'); |
| expect(FileUtils.getFileExtension('winscopezip')).toEqual(undefined); |
| }); |
| |
| it('removes directory from filename', () => { |
| expect(FileUtils.removeDirFromFileName('test/winscope.zip')).toEqual( |
| 'winscope.zip', |
| ); |
| expect(FileUtils.removeDirFromFileName('test/test/winscope.zip')).toEqual( |
| 'winscope.zip', |
| ); |
| }); |
| |
| it('removes extension from filename', () => { |
| expect(FileUtils.removeExtensionFromFilename('winscope.zip')).toEqual( |
| 'winscope', |
| ); |
| expect(FileUtils.removeExtensionFromFilename('win.scope.zip')).toEqual( |
| 'win.scope', |
| ); |
| }); |
| |
| it('creates zip archive', async () => { |
| const zip = await FileUtils.createZipArchive([ |
| new File([], 'test_file.txt'), |
| ]); |
| expect(zip).toBeInstanceOf(Blob); |
| }); |
| |
| it('creates zip archive with progress listener', async () => { |
| const progressSpy = jasmine.createSpy(); |
| const zip = await FileUtils.createZipArchive( |
| [ |
| new File([], 'test_file.txt'), |
| new File([], 'test_file_2.txt'), |
| new File([], 'test_file_3.txt'), |
| new File([], 'test_file_4.txt'), |
| ], |
| progressSpy, |
| ); |
| expect(zip).toBeInstanceOf(Blob); |
| expect(progressSpy).toHaveBeenCalledTimes(4); |
| expect(progressSpy).toHaveBeenCalledWith(0.25); |
| expect(progressSpy).toHaveBeenCalledWith(0.5); |
| expect(progressSpy).toHaveBeenCalledWith(0.75); |
| expect(progressSpy).toHaveBeenCalledWith(1); |
| }); |
| |
| it('unzips archive', async () => { |
| const validZipFile = await UnitTestUtils.getFixtureFile( |
| 'traces/winscope.zip', |
| ); |
| const unzippedFiles = await FileUtils.unzipFile(validZipFile); |
| expect(unzippedFiles.map((f) => f.name)).toEqual([ |
| 'Surface Flinger/SurfaceFlinger.pb', |
| 'Window Manager/WindowManager.pb', |
| ]); |
| }); |
| |
| it('recursively unzips archive', async () => { |
| const validZipFile = await UnitTestUtils.getFixtureFile( |
| 'traces/recursive_winscope.zip', |
| ); |
| const unzippedFiles = await FileUtils.unzipFile(validZipFile); |
| expect(unzippedFiles.map((f) => f.name)).toEqual([ |
| 'Surface Flinger/SurfaceFlinger.pb', |
| 'Window Manager/WindowManager.pb', |
| ]); |
| }); |
| |
| it('decompresses gzipped file', async () => { |
| const gzippedFile = await UnitTestUtils.getFixtureFile( |
| 'traces/WindowManager.pb.gz', |
| ); |
| const unzippedFile = await FileUtils.decompressGZipFile(gzippedFile); |
| expect(unzippedFile.name).toEqual('traces/WindowManager.pb'); |
| expect(unzippedFile.size).toEqual(377137); |
| }); |
| |
| it('decompresses gzipped archive', async () => { |
| const gzippedFile = await UnitTestUtils.getFixtureFile( |
| 'traces/WindowManager.zip.gz', |
| ); |
| const unzippedFile = await FileUtils.decompressGZipFile(gzippedFile); |
| expect(unzippedFile.name).toEqual('traces/WindowManager.zip'); |
| expect(unzippedFile.size).toEqual(10158); |
| }); |
| |
| it('has download filename regex that accepts all expected inputs', () => { |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('Winscope2')).toBeTrue(); |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('win_scope')).toBeTrue(); |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('win-scope')).toBeTrue(); |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('win.scope')).toBeTrue(); |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('win.sc.ope')).toBeTrue(); |
| }); |
| |
| it('has download filename regex that rejects all expected inputs', () => { |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('w?n$cope')).toBeFalse(); |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('winscope.')).toBeFalse(); |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('w..scope')).toBeFalse(); |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('wins--pe')).toBeFalse(); |
| expect(FileUtils.DOWNLOAD_FILENAME_REGEX.test('wi##cope')).toBeFalse(); |
| }); |
| }); |